1/* 2Unobtrusive JavaScript 3https://github.com/rails/rails/blob/main/actionview/app/javascript 4Released under the MIT license 5 */ 6(function(global, factory) { 7 typeof exports === "object" && typeof module !== "undefined" ? module.exports = factory() : typeof define === "function" && define.amd ? define(factory) : (global = typeof globalThis !== "undefined" ? globalThis : global || self, 8 global.Rails = factory()); 9})(this, (function() { 10 "use strict"; 11 const linkClickSelector = "a[data-confirm], a[data-method], a[data-remote]:not([disabled]), a[data-disable-with], a[data-disable]"; 12 const buttonClickSelector = { 13 selector: "button[data-remote]:not([form]), button[data-confirm]:not([form])", 14 exclude: "form button" 15 }; 16 const inputChangeSelector = "select[data-remote], input[data-remote], textarea[data-remote]"; 17 const formSubmitSelector = "form:not([data-turbo=true])"; 18 const formInputClickSelector = "form:not([data-turbo=true]) input[type=submit], form:not([data-turbo=true]) input[type=image], form:not([data-turbo=true]) button[type=submit], form:not([data-turbo=true]) button:not([type]), input[type=submit][form], input[type=image][form], button[type=submit][form], button[form]:not([type])"; 19 const formDisableSelector = "input[data-disable-with]:enabled, button[data-disable-with]:enabled, textarea[data-disable-with]:enabled, input[data-disable]:enabled, button[data-disable]:enabled, textarea[data-disable]:enabled"; 20 const formEnableSelector = "input[data-disable-with]:disabled, button[data-disable-with]:disabled, textarea[data-disable-with]:disabled, input[data-disable]:disabled, button[data-disable]:disabled, textarea[data-disable]:disabled"; 21 const fileInputSelector = "input[name][type=file]:not([disabled])"; 22 const linkDisableSelector = "a[data-disable-with], a[data-disable]"; 23 const buttonDisableSelector = "button[data-remote][data-disable-with], button[data-remote][data-disable]"; 24 let nonce = null; 25 const loadCSPNonce = () => { 26 const metaTag = document.querySelector("meta[name=csp-nonce]"); 27 return nonce = metaTag && metaTag.content; 28 }; 29 const cspNonce = () => nonce || loadCSPNonce(); 30 const m = Element.prototype.matches || Element.prototype.matchesSelector || Element.prototype.mozMatchesSelector || Element.prototype.msMatchesSelector || Element.prototype.oMatchesSelector || Element.prototype.webkitMatchesSelector; 31 const matches = function(element, selector) { 32 if (selector.exclude) { 33 return m.call(element, selector.selector) && !m.call(element, selector.exclude); 34 } else { 35 return m.call(element, selector); 36 } 37 }; 38 const EXPANDO = "_ujsData"; 39 const getData = (element, key) => element[EXPANDO] ? element[EXPANDO][key] : undefined; 40 const setData = function(element, key, value) { 41 if (!element[EXPANDO]) { 42 element[EXPANDO] = {}; 43 } 44 return element[EXPANDO][key] = value; 45 }; 46 const $ = selector => Array.prototype.slice.call(document.querySelectorAll(selector)); 47 const isContentEditable = function(element) { 48 var isEditable = false; 49 do { 50 if (element.isContentEditable) { 51 isEditable = true; 52 break; 53 } 54 element = element.parentElement; 55 } while (element); 56 return isEditable; 57 }; 58 const csrfToken = () => { 59 const meta = document.querySelector("meta[name=csrf-token]"); 60 return meta && meta.content; 61 }; 62 const csrfParam = () => { 63 const meta = document.querySelector("meta[name=csrf-param]"); 64 return meta && meta.content; 65 }; 66 const CSRFProtection = xhr => { 67 const token = csrfToken(); 68 if (token) { 69 return xhr.setRequestHeader("X-CSRF-Token", token); 70 } 71 }; 72 const refreshCSRFTokens = () => { 73 const token = csrfToken(); 74 const param = csrfParam(); 75 if (token && param) { 76 return $('form input[name="' + param + '"]').forEach((input => input.value = token)); 77 } 78 }; 79 const AcceptHeaders = { 80 "*": "*/*", 81 text: "text/plain", 82 html: "text/html", 83 xml: "application/xml, text/xml", 84 json: "application/json, text/javascript", 85 script: "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript" 86 }; 87 const ajax = options => { 88 options = prepareOptions(options); 89 var xhr = createXHR(options, (function() { 90 const response = processResponse(xhr.response != null ? xhr.response : xhr.responseText, xhr.getResponseHeader("Content-Type")); 91 if (Math.floor(xhr.status / 100) === 2) { 92 if (typeof options.success === "function") { 93 options.success(response, xhr.statusText, xhr); 94 } 95 } else { 96 if (typeof options.error === "function") { 97 options.error(response, xhr.statusText, xhr); 98 } 99 } 100 return typeof options.complete === "function" ? options.complete(xhr, xhr.statusText) : undefined; 101 })); 102 if (options.beforeSend && !options.beforeSend(xhr, options)) { 103 return false;
104 } 105 if (xhr.readyState === XMLHttpRequest.OPENED) { 106 return xhr.send(options.data); 107 } 108 }; 109 var prepareOptions = function(options) { 110 options.url = options.url || location.href; 111 options.type = options.type.toUpperCase(); 112 if (options.type === "GET" && options.data) { 113 if (options.url.indexOf("?") < 0) { 114 options.url += "?" + options.data; 115 } else { 116 options.url += "&" + options.data; 117 } 118 } 119 if (!(options.dataType in AcceptHeaders)) { 120 options.dataType = "*"; 121 } 122 options.accept = AcceptHeaders[options.dataType]; 123 if (options.dataType !== "*") { 124 options.accept += ", */*; q=0.01"; 125 } 126 return options; 127 }; 128 var createXHR = function(options, done) { 129 const xhr = new XMLHttpRequest; 130 xhr.open(options.type, options.url, true); 131 xhr.setRequestHeader("Accept", options.accept); 132 if (typeof options.data === "string") { 133 xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8"); 134 } 135 if (!options.crossDomain) { 136 xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest"); 137 CSRFProtection(xhr); 138 } 139 xhr.withCredentials = !!options.withCredentials; 140 xhr.onreadystatechange = function() { 141 if (xhr.readyState === XMLHttpRequest.DONE) { 142 return done(xhr); 143 } 144 }; 145 return xhr; 146 }; 147 var processResponse = function(response, type) { 148 if (typeof response === "string" && typeof type === "string") { 149 if (type.match(/\bjson\b/)) { 150 try { 151 response = JSON.parse(response); 152 } catch (error) {} 153 } else if (type.match(/\b(?:java|ecma)script\b/)) { 154 const script = document.createElement("script"); 155 script.setAttribute("nonce", cspNonce()); 156 script.text = response; 157 document.head.appendChild(script).parentNode.removeChild(script); 158 } else if (type.match(/\b(xml|html|svg)\b/)) { 159 const parser = new DOMParser; 160 type = type.replace(/;.+/, ""); 161 try { 162 response = parser.parseFromString(response, type); 163 } catch (error1) {} 164 } 165 } 166 return response; 167 }; 168 const href = element => element.href; 169 const isCrossDomain = function(url) { 170 const originAnchor = document.createElement("a"); 171 originAnchor.href = location.href; 172 const urlAnchor = document.createElement("a"); 173 try { 174 urlAnchor.href = url; 175 return !((!urlAnchor.protocol || urlAnchor.protocol === ":") && !urlAnchor.host || originAnchor.protocol + "//" + originAnchor.host === urlAnchor.protocol + "//" + urlAnchor.host); 176 } catch (e) { 177 return true; 178 } 179 }; 180 let preventDefault; 181 let {CustomEvent: CustomEvent} = window; 182 if (typeof CustomEvent !== "function") { 183 CustomEvent = function(event, params) { 184 const evt = document.createEvent("CustomEvent"); 185 evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail); 186 return evt; 187 }; 188 CustomEvent.prototype = window.Event.prototype; 189 ({preventDefault: preventDefault} = CustomEvent.prototype); 190 CustomEvent.prototype.preventDefault = function() { 191 const result = preventDefault.call(this); 192 if (this.cancelable && !this.defaultPrevented) { 193 Object.defineProperty(this, "defaultPrevented", { 194 get() { 195 return true; 196 } 197 }); 198 } 199 return result; 200 }; 201 } 202 const fire = (obj, name, data) => { 203 const event = new CustomEvent(name, { 204 bubbles: true, 205 cancelable: true, 206 detail: data 207 }); 208 obj.dispatchEvent(event); 209 return !event.defaultPrevented; 210 }; 211 const stopEverything = e => { 212 fire(e.target, "ujs:everythingStopped"); 213 e.preventDefault(); 214 e.stopPropagation(); 215 e.stopImmediatePropagation(); 216 }; 217 const delegate = (element, selector, eventType, handler) => element.addEventListener(eventType, (function(e) { 218 let {target: target} = e; 219 while (!!(target instanceof Element) && !matches(target, selector)) { 220 target = target.parentNode; 221 } 222 if (target instanceof Element && handler.call(target, e) === false) { 223 e.preventDefault(); 224 e.stopPropagation(); 225 } 226 })); 227 const toArray = e => Array.prototype.slice.call(e); 228 const serializeElement = (element, additionalParam) => { 229 let inputs = [ element ]; 230 if (matches(element, "form")) { 231 inputs = toArray(element.elements); 232 } 233 const params = [];
234 inputs.forEach((function(input) { 235 if (!input.name || input.disabled) { 236 return; 237 } 238 if (matches(input, "fieldset[disabled] *")) { 239 return; 240 } 241 if (matches(input, "select")) { 242 toArray(input.options).forEach((function(option) { 243 if (option.selected) { 244 params.push({ 245 name: input.name, 246 value: option.value 247 }); 248 } 249 })); 250 } else if (input.checked || [ "radio", "checkbox", "submit" ].indexOf(input.type) === -1) { 251 params.push({ 252 name: input.name, 253 value: input.value 254 }); 255 } 256 })); 257 if (additionalParam) { 258 params.push(additionalParam); 259 } 260 return params.map((function(param) { 261 if (param.name) { 262 return `${encodeURIComponent(param.name)}=${encodeURIComponent(param.value)}`; 263 } else { 264 return param; 265 } 266 })).join("&"); 267 }; 268 const formElements = (form, selector) => { 269 if (matches(form, "form")) { 270 return toArray(form.elements).filter((el => matches(el, selector))); 271 } else { 272 return toArray(form.querySelectorAll(selector)); 273 } 274 }; 275 const handleConfirmWithRails = rails => function(e) { 276 if (!allowAction(this, rails)) { 277 stopEverything(e); 278 } 279 }; 280 const confirm = (message, element) => window.confirm(message); 281 var allowAction = function(element, rails) {
282 let callback; 283 const message = element.getAttribute("data-confirm"); 284 if (!message) { 285 return true; 286 } 287 let answer = false; 288 if (fire(element, "confirm")) { 289 try { 290 answer = rails.confirm(message, element); 291 } catch (error) {} 292 callback = fire(element, "confirm:complete", [ answer ]); 293 } 294 return answer && callback; 295 }; 296 const handleDisabledElement = function(e) { 297 const element = this; 298 if (element.disabled) { 299 stopEverything(e); 300 } 301 }; 302 const enableElement = e => { 303 let element; 304 if (e instanceof Event) { 305 if (isXhrRedirect(e)) { 306 return; 307 } 308 element = e.target; 309 } else { 310 element = e; 311 } 312 if (isContentEditable(element)) { 313 return; 314 } 315 if (matches(element, linkDisableSelector)) { 316 return enableLinkElement(element); 317 } else if (matches(element, buttonDisableSelector) || matches(element, formEnableSelector)) { 318 return enableFormElement(element); 319 } else if (matches(element, formSubmitSelector)) { 320 return enableFormElements(element); 321 } 322 }; 323 const disableElement = e => { 324 const element = e instanceof Event ? e.target : e; 325 if (isContentEditable(element)) { 326 return; 327 } 328 if (matches(element, linkDisableSelector)) { 329 return disableLinkElement(element); 330 } else if (matches(element, buttonDisableSelector) || matches(element, formDisableSelector)) { 331 return disableFormElement(element); 332 } else if (matches(element, formSubmitSelector)) { 333 return disableFormElements(element); 334 } 335 }; 336 var disableLinkElement = function(element) { 337 if (getData(element, "ujs:disabled")) { 338 return; 339 } 340 const replacement = element.getAttribute("data-disable-with"); 341 if (replacement != null) { 342 setData(element, "ujs:enable-with", element.innerHTML); 343 element.innerHTML = replacement; 344 } 345 element.addEventListener("click", stopEverything); 346 return setData(element, "ujs:disabled", true); 347 }; 348 var enableLinkElement = function(element) { 349 const originalText = getData(element, "ujs:enable-with"); 350 if (originalText != null) { 351 element.innerHTML = originalText; 352 setData(element, "ujs:enable-with", null); 353 } 354 element.removeEventListener("click", stopEverything); 355 return setData(element, "ujs:disabled", null); 356 }; 357 var disableFormElements = form => formElements(form, formDisableSelector).forEach(disableFormElement); 358 var disableFormElement = function(element) { 359 if (getData(element, "ujs:disabled")) { 360 return; 361 } 362 const replacement = element.getAttribute("data-disable-with"); 363 if (replacement != null) { 364 if (matches(element, "button")) { 365 setData(element, "ujs:enable-with", element.innerHTML); 366 element.innerHTML = replacement; 367 } else { 368 setData(element, "ujs:enable-with", element.value); 369 element.value = replacement; 370 } 371 } 372 element.disabled = true; 373 return setData(element, "ujs:disabled", true); 374 }; 375 var enableFormElements = form => formElements(form, formEnableSelector).forEach((element => enableFormElement(element))); 376 var enableFormElement = function(element) { 377 const originalText = getData(element, "ujs:enable-with"); 378 if (originalText != null) { 379 if (matches(element, "button")) { 380 element.innerHTML = originalText; 381 } else { 382 element.value = originalText; 383 } 384 setData(element, "ujs:enable-with", null); 385 } 386 element.disabled = false; 387 return setData(element, "ujs:disabled", null); 388 }; 389 var isXhrRedirect = function(event) { 390 const xhr = event.detail ? event.detail[0] : undefined; 391 return xhr && xhr.getResponseHeader("X-Xhr-Redirect"); 392 }; 393 const handleMethodWithRails = rails => function(e) { 394 const link = this; 395 const method = link.getAttribute("data-method"); 396 if (!method) { 397 return; 398 } 399 if (isContentEditable(this)) { 400 return; 401 } 402 const href = rails.href(link); 403 const csrfToken$1 = csrfToken(); 404 const csrfParam$1 = csrfParam(); 405 const form = document.createElement("form"); 406 let formContent = `<input name='_method' value='${method}' type='hidden' />`; 407 if (csrfParam$1 && csrfToken$1 && !isCrossDomain(href)) { 408 formContent += `<input name='${csrfParam$1}' value='${csrfToken$1}' type='hidden' />`; 409 } 410 formContent += '<input type="submit" />'; 411 form.method = "post"; 412 form.action = href; 413 form.target = link.target; 414 form.innerHTML = formContent; 415 form.style.display = "none"; 416 document.body.appendChild(form); 417 form.querySelector('[type="submit"]').click(); 418 stopEverything(e); 419 }; 420 const isRemote = function(element) { 421 const value = element.getAttribute("data-remote");
422 return value != null && value !== "false"; 423 }; 424 const handleRemoteWithRails = rails => function(e) { 425 let data, method, url; 426 const element = this; 427 if (!isRemote(element)) { 428 return true; 429 } 430 if (!fire(element, "ajax:before")) { 431 fire(element, "ajax:stopped"); 432 return false; 433 } 434 if (isContentEditable(element)) { 435 fire(element, "ajax:stopped"); 436 return false; 437 } 438 const withCredentials = element.getAttribute("data-with-credentials"); 439 const dataType = element.getAttribute("data-type") || "script"; 440 if (matches(element, formSubmitSelector)) { 441 const button = getData(element, "ujs:submit-button"); 442 method = getData(element, "ujs:submit-button-formmethod") || element.getAttribute("method") || "get"; 443 url = getData(element, "ujs:submit-button-formaction") || element.getAttribute("action") || location.href; 444 if (method.toUpperCase() === "GET") { 445 url = url.replace(/\?.*$/, ""); 446 } 447 if (element.enctype === "multipart/form-data") { 448 data = new FormData(element); 449 if (button != null) { 450 data.append(button.name, button.value); 451 } 452 } else { 453 data = serializeElement(element, button); 454 } 455 setData(element, "ujs:submit-button", null); 456 setData(element, "ujs:submit-button-formmethod", null); 457 setData(element, "ujs:submit-button-formaction", null); 458 } else if (matches(element, buttonClickSelector) || matches(element, inputChangeSelector)) { 459 method = element.getAttribute("data-method"); 460 url = element.getAttribute("data-url"); 461 data = serializeElement(element, element.getAttribute("data-params")); 462 } else { 463 method = element.getAttribute("data-method"); 464 url = rails.href(element); 465 data = element.getAttribute("data-params"); 466 } 467 ajax({ 468 type: method || "GET", 469 url: url, 470 data: data, 471 dataType: dataType, 472 beforeSend(xhr, options) { 473 if (fire(element, "ajax:beforeSend", [ xhr, options ])) { 474 return fire(element, "ajax:send", [ xhr ]); 475 } else { 476 fire(element, "ajax:stopped"); 477 return false; 478 } 479 }, 480 success(...args) { 481 return fire(element, "ajax:success", args); 482 }, 483 error(...args) { 484 return fire(element, "ajax:error", args); 485 }, 486 complete(...args) { 487 return fire(element, "ajax:complete", args); 488 }, 489 crossDomain: isCrossDomain(url), 490 withCredentials: withCredentials != null && withCredentials !== "false" 491 }); 492 stopEverything(e); 493 }; 494 const formSubmitButtonClick = function(e) { 495 const button = this; 496 const {form: form} = button; 497 if (!form) { 498 return; 499 } 500 if (button.name) { 501 setData(form, "ujs:submit-button", { 502 name: button.name, 503 value: button.value 504 }); 505 } 506 setData(form, "ujs:formnovalidate-button", button.formNoValidate); 507 setData(form, "ujs:submit-button-formaction", button.getAttribute("formaction")); 508 return setData(form, "ujs:submit-button-formmethod", button.getAttribute("formmethod")); 509 }; 510 const preventInsignificantClick = function(e) { 511 const link = this; 512 const method = (link.getAttribute("data-method") || "GET").toUpperCase(); 513 const data = link.getAttribute("data-params"); 514 const metaClick = e.metaKey || e.ctrlKey; 515 const insignificantMetaClick = metaClick && method === "GET" && !data; 516 const nonPrimaryMouseClick = e.button != null && e.button !== 0; 517 if (nonPrimaryMouseClick || insignificantMetaClick) { 518 e.stopImmediatePropagation(); 519 } 520 }; 521 const Rails = { 522 $: $, 523 ajax: ajax, 524 buttonClickSelector: buttonClickSelector, 525 buttonDisableSelector: buttonDisableSelector, 526 confirm: confirm, 527 cspNonce: cspNonce, 528 csrfToken: csrfToken, 529 csrfParam: csrfParam, 530 CSRFProtection: CSRFProtection, 531 delegate: delegate, 532 disableElement: disableElement, 533 enableElement: enableElement, 534 fileInputSelector: fileInputSelector, 535 fire: fire, 536 formElements: formElements, 537 formEnableSelector: formEnableSelector, 538 formDisableSelector: formDisableSelector, 539 formInputClickSelector: formInputClickSelector, 540 formSubmitButtonClick: formSubmitButtonClick, 541 formSubmitSelector: formSubmitSelector, 542 getData: getData, 543 handleDisabledElement: handleDisabledElement, 544 href: href, 545 inputChangeSelector: inputChangeSelector, 546 isCrossDomain: isCrossDomain,
547 linkClickSelector: linkClickSelector, 548 linkDisableSelector: linkDisableSelector, 549 loadCSPNonce: loadCSPNonce, 550 matches: matches, 551 preventInsignificantClick: preventInsignificantClick, 552 refreshCSRFTokens: refreshCSRFTokens, 553 serializeElement: serializeElement, 554 setData: setData, 555 stopEverything: stopEverything 556 }; 557 const handleConfirm = handleConfirmWithRails(Rails); 558 Rails.handleConfirm = handleConfirm; 559 const handleMethod = handleMethodWithRails(Rails); 560 Rails.handleMethod = handleMethod; 561 const handleRemote = handleRemoteWithRails(Rails); 562 Rails.handleRemote = handleRemote; 563 const start = function() { 564 if (window._rails_loaded) { 565 throw new Error("rails-ujs has already been loaded!"); 566 } 567 window.addEventListener("pageshow", (function() { 568 $(formEnableSelector).forEach((function(el) { 569 if (getData(el, "ujs:disabled")) { 570 enableElement(el); 571 } 572 })); 573 $(linkDisableSelector).forEach((function(el) { 574 if (getData(el, "ujs:disabled")) { 575 enableElement(el); 576 } 577 })); 578 })); 579 delegate(document, linkDisableSelector, "ajax:complete", enableElement); 580 delegate(document, linkDisableSelector, "ajax:stopped", enableElement); 581 delegate(document, buttonDisableSelector, "ajax:complete", enableElement); 582 delegate(document, buttonDisableSelector, "ajax:stopped", enableElement); 583 delegate(document, linkClickSelector, "click", preventInsignificantClick); 584 delegate(document, linkClickSelector, "click", handleDisabledElement); 585 delegate(document, linkClickSelector, "click", handleConfirm); 586 delegate(document, linkClickSelector, "click", disableElement); 587 delegate(document, linkClickSelector, "click", handleRemote); 588 delegate(document, linkClickSelector, "click", handleMethod); 589 delegate(document, buttonClickSelector, "click", preventInsignificantClick); 590 delegate(document, buttonClickSelector, "click", handleDisabledElement); 591 delegate(document, buttonClickSelector, "click", handleConfirm); 592 delegate(document, buttonClickSelector, "click", disableElement); 593 delegate(document, buttonClickSelector, "click", handleRemote); 594 delegate(document, inputChangeSelector, "change", handleDisabledElement); 595 delegate(document, inputChangeSelector, "change", handleConfirm); 596 delegate(document, inputChangeSelector, "change", handleRemote); 597 delegate(document, formSubmitSelector, "submit", handleDisabledElement); 598 delegate(document, formSubmitSelector, "submit", handleConfirm); 599 delegate(document, formSubmitSelector, "submit", handleRemote); 600 delegate(document, formSubmitSelector, "submit", (e => setTimeout((() => disableElement(e)), 13))); 601 delegate(document, formSubmitSelector, "ajax:send", disableElement); 602 delegate(document, formSubmitSelector, "ajax:complete", enableElement); 603 delegate(document, formInputClickSelector, "click", preventInsignificantClick); 604 delegate(document, formInputClickSelector, "click", handleDisabledElement); 605 delegate(document, formInputClickSelector, "click", handleConfirm); 606 delegate(document, formInputClickSelector, "click", formSubmitButtonClick); 607 document.addEventListener("DOMContentLoaded", refreshCSRFTokens); 608 document.addEventListener("DOMContentLoaded", loadCSPNonce); 609 return window._rails_loaded = true; 610 }; 611 Rails.start = start; 612 if (typeof jQuery !== "undefined" && jQuery && jQuery.ajax) { 613 if (jQuery.rails) { 614 throw new Error("If you load both jquery_ujs and rails-ujs, use rails-ujs only."); 615 } 616 jQuery.rails = Rails; 617 jQuery.ajaxPrefilter((function(options, originalOptions, xhr) { 618 if (!options.crossDomain) { 619 return CSRFProtection(xhr); 620 } 621 })); 622 } 623 if (typeof exports !== "object" && typeof module === "undefined") { 624 window.Rails = Rails; 625 if (fire(document, "rails:attachBindings")) { 626 start(); 627 } 628 } 629 return Rails; 630})); 631/*! 632 * jQuery JavaScript Library v1.12.4 633 * http://jquery.com/ 634 * 635 * Includes Sizzle.js 636 * http://sizzlejs.com/ 637 * 638 * Copyright jQuery Foundation and other contributors 639 * Released under the MIT license 640 * http://jquery.org/license 641 * 642 * Date: 2016-05-20T17:17Z 643 */ 644 645(function( global, factory ) { 646 647 if ( typeof module === "object" && typeof module.exports === "object" ) { 648 // For CommonJS and CommonJS-like environments where a proper `window` 649 // is present, execute the factory and get jQuery. 650 // For environments that do not have a `window` with a `document` 651 // (such as Node.js), expose a factory as module.exports. 652 // This accentuates the need for the creation of a real `window`. 653 // e.g. var jQuery = require("jquery")(window); 654 // See ticket #14549 for more info. 655 module.exports = global.document ? 656 factory( global, true ) : 657 function( w ) { 658 if ( !w.document ) { 659 throw new Error( "jQuery requires a window with a document" ); 660 } 661 return factory( w ); 662 }; 663 } else { 664 factory( global ); 665 } 666 667// Pass this if window is not defined yet 668}(typeof window !== "undefined" ? window : this, function( window, noGlobal ) { 669 670// Support: Firefox 18+ 671// Can't be in strict mode, several libs including ASP.NET trace 672// the stack via arguments.caller.callee and Firefox dies if 673// you try to trace through "use strict" call chains. (#13335) 674//"use strict"; 675var deletedIds = []; 676 677var document = window.document; 678 679var slice = deletedIds.slice; 680 681var concat = deletedIds.concat; 682 683var push = deletedIds.push; 684 685var indexOf = deletedIds.indexOf; 686 687var class2type = {}; 688 689var toString = class2type.toString; 690 691var hasOwn = class2type.hasOwnProperty; 692 693var support = {}; 694 695 696 697var 698 version = "1.12.4", 699 700 // Define a local copy of jQuery 701 jQuery = function( selector, context ) { 702 703 // The jQuery object is actually just the init constructor 'enhanced' 704 // Need init if jQuery is called (just allow error to be thrown if not included) 705 return new jQuery.fn.init( selector, context ); 706 }, 707 708 // Support: Android<4.1, IE<9 709 // Make sure we trim BOM and NBSP 710 rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, 711 712 // Matches dashed string for camelizing 713 rmsPrefix = /^-ms-/, 714 rdashAlpha = /-([\da-z])/gi, 715 716 // Used by jQuery.camelCase as callback to replace() 717 fcamelCase = function( all, letter ) { 718 return letter.toUpperCase(); 719 }; 720 721jQuery.fn = jQuery.prototype = { 722 723 // The current version of jQuery being used 724 jquery: version, 725 726 constructor: jQuery, 727 728 // Start with an empty selector 729 selector: "", 730 731 // The default length of a jQuery object is 0 732 length: 0, 733 734 toArray: function() { 735 return slice.call( this ); 736 }, 737 738 // Get the Nth element in the matched element set OR 739 // Get the whole matched element set as a clean array 740 get: function( num ) { 741 return num != null ? 742 743 // Return just the one element from the set 744 ( num < 0 ? this[ num + this.length ] : this[ num ] ) : 745 746 // Return all the elements in a clean array 747 slice.call( this ); 748 }, 749 750 // Take an array of elements and push it onto the stack 751 // (returning the new matched element set) 752 pushStack: function( elems ) { 753 754 // Build a new jQuery matched element set 755 var ret = jQuery.merge( this.constructor(), elems ); 756 757 // Add the old object onto the stack (as a reference)
758 ret.prevObject = this; 759 ret.context = this.context; 760 761 // Return the newly-formed element set 762 return ret; 763 }, 764 765 // Execute a callback for every element in the matched set. 766 each: function( callback ) { 767 return jQuery.each( this, callback ); 768 }, 769 770 map: function( callback ) { 771 return this.pushStack( jQuery.map( this, function( elem, i ) { 772 return callback.call( elem, i, elem ); 773 } ) ); 774 }, 775 776 slice: function() { 777 return this.pushStack( slice.apply( this, arguments ) ); 778 }, 779 780 first: function() { 781 return this.eq( 0 ); 782 }, 783 784 last: function() { 785 return this.eq( -1 ); 786 }, 787 788 eq: function( i ) { 789 var len = this.length, 790 j = +i + ( i < 0 ? len : 0 ); 791 return this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] ); 792 }, 793 794 end: function() { 795 return this.prevObject || this.constructor(); 796 }, 797 798 // For internal use only. 799 // Behaves like an Array's method, not like a jQuery method. 800 push: push, 801 sort: deletedIds.sort, 802 splice: deletedIds.splice 803}; 804 805jQuery.extend = jQuery.fn.extend = function() { 806 var src, copyIsArray, copy, name, options, clone, 807 target = arguments[ 0 ] || {}, 808 i = 1, 809 length = arguments.length, 810 deep = false; 811 812 // Handle a deep copy situation 813 if ( typeof target === "boolean" ) { 814 deep = target; 815 816 // skip the boolean and the target 817 target = arguments[ i ] || {}; 818 i++; 819 } 820 821 // Handle case when target is a string or something (possible in deep copy) 822 if ( typeof target !== "object" && !jQuery.isFunction( target ) ) { 823 target = {}; 824 } 825 826 // extend jQuery itself if only one argument is passed 827 if ( i === length ) { 828 target = this; 829 i--; 830 } 831 832 for ( ; i < length; i++ ) { 833 834 // Only deal with non-null/undefined values 835 if ( ( options = arguments[ i ] ) != null ) { 836 837 // Extend the base object 838 for ( name in options ) { 839 src = target[ name ]; 840 copy = options[ name ]; 841 842 // Prevent never-ending loop 843 if ( target === copy ) { 844 continue; 845 } 846 847 // Recurse if we're merging plain objects or arrays 848 if ( deep && copy && ( jQuery.isPlainObject( copy ) || 849 ( copyIsArray = jQuery.isArray( copy ) ) ) ) { 850 851 if ( copyIsArray ) { 852 copyIsArray = false; 853 clone = src && jQuery.isArray( src ) ? src : []; 854 855 } else { 856 clone = src && jQuery.isPlainObject( src ) ? src : {}; 857 } 858 859 // Never move original objects, clone them 860 target[ name ] = jQuery.extend( deep, clone, copy ); 861 862 // Don't bring in undefined values 863 } else if ( copy !== undefined ) { 864 target[ name ] = copy; 865 } 866 } 867 } 868 } 869 870 // Return the modified object 871 return target; 872}; 873 874jQuery.extend( { 875 876 // Unique for each copy of jQuery on the page 877 expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ), 878 879 // Assume jQuery is ready without the ready module 880 isReady: true, 881 882 error: function( msg ) { 883 throw new Error( msg ); 884 }, 885 886 noop: function() {}, 887 888 // See test/unit/core.js for details concerning isFunction. 889 // Since version 1.3, DOM methods and functions like alert 890 // aren't supported. They return false on IE (#2968). 891 isFunction: function( obj ) { 892 return jQuery.type( obj ) === "function"; 893 }, 894 895 isArray: Array.isArray || function( obj ) { 896 return jQuery.type( obj ) === "array"; 897 }, 898 899 isWindow: function( obj ) { 900 /* jshint eqeqeq: false */ 901 return obj != null && obj == obj.window; 902 }, 903 904 isNumeric: function( obj ) { 905 906 // parseFloat NaNs numeric-cast false positives (null|true|false|"") 907 // ...but misinterprets leading-number strings, particularly hex literals ("0x...") 908 // subtraction forces infinities to NaN 909 // adding 1 corrects loss of precision from parseFloat (#15100) 910 var realStringObj = obj && obj.toString(); 911 return !jQuery.isArray( obj ) && ( realStringObj - parseFloat( realStringObj ) + 1 ) >= 0; 912 }, 913 914 isEmptyObject: function( obj ) { 915 var name; 916 for ( name in obj ) { 917 return false; 918 } 919 return true; 920 }, 921 922 isPlainObject: function( obj ) { 923 var key; 924 925 // Must be an Object. 926 // Because of IE, we also have to check the presence of the constructor property. 927 // Make sure that DOM nodes and window objects don't pass through, as well 928 if ( !obj || jQuery.type( obj ) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) { 929 return false;
930 } 931 932 try { 933 934 // Not own constructor property must be Object 935 if ( obj.constructor && 936 !hasOwn.call( obj, "constructor" ) && 937 !hasOwn.call( obj.constructor.prototype, "isPrototypeOf" ) ) { 938 return false; 939 } 940 } catch ( e ) { 941 942 // IE8,9 Will throw exceptions on certain host objects #9897 943 return false; 944 } 945 946 // Support: IE<9 947 // Handle iteration over inherited properties before own properties. 948 if ( !support.ownFirst ) { 949 for ( key in obj ) { 950 return hasOwn.call( obj, key ); 951 } 952 } 953 954 // Own properties are enumerated firstly, so to speed up, 955 // if last one is own, then all properties are own. 956 for ( key in obj ) {} 957 958 return key === undefined || hasOwn.call( obj, key ); 959 }, 960 961 type: function( obj ) { 962 if ( obj == null ) { 963 return obj + ""; 964 } 965 return typeof obj === "object" || typeof obj === "function" ? 966 class2type[ toString.call( obj ) ] || "object" : 967 typeof obj; 968 }, 969 970 // Workarounds based on findings by Jim Driscoll 971 // http://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-global-context 972 globalEval: function( data ) { 973 if ( data && jQuery.trim( data ) ) { 974 975 // We use execScript on Internet Explorer 976 // We use an anonymous function so that context is window 977 // rather than jQuery in Firefox 978 ( window.execScript || function( data ) { 979 window[ "eval" ].call( window, data ); // jscs:ignore requireDotNotation 980 } )( data ); 981 } 982 }, 983 984 // Convert dashed to camelCase; used by the css and data modules 985 // Microsoft forgot to hump their vendor prefix (#9572) 986 camelCase: function( string ) { 987 return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); 988 }, 989
990 nodeName: function( elem, name ) { 991 return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); 992 }, 993 994 each: function( obj, callback ) { 995 var length, i = 0; 996 997 if ( isArrayLike( obj ) ) { 998 length = obj.length; 999 for ( ; i < length; i++ ) { 1000 if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { 1001 break; 1002 } 1003 } 1004 } else { 1005 for ( i in obj ) { 1006 if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { 1007 break; 1008 } 1009 } 1010 } 1011 1012 return obj; 1013 }, 1014 1015 // Support: Android<4.1, IE<9 1016 trim: function( text ) { 1017 return text == null ? 1018 "" : 1019 ( text + "" ).replace( rtrim, "" ); 1020 }, 1021 1022 // results is for internal usage only 1023 makeArray: function( arr, results ) { 1024 var ret = results || []; 1025 1026 if ( arr != null ) { 1027 if ( isArrayLike( Object( arr ) ) ) { 1028 jQuery.merge( ret, 1029 typeof arr === "string" ? 1030 [ arr ] : arr 1031 ); 1032 } else { 1033 push.call( ret, arr ); 1034 } 1035 } 1036 1037 return ret; 1038 }, 1039 1040 inArray: function( elem, arr, i ) { 1041 var len; 1042 1043 if ( arr ) { 1044 if ( indexOf ) { 1045 return indexOf.call( arr, elem, i ); 1046 } 1047 1048 len = arr.length; 1049 i = i ? i < 0 ? Math.max( 0, len + i ) : i : 0; 1050 1051 for ( ; i < len; i++ ) { 1052 1053 // Skip accessing in sparse arrays 1054 if ( i in arr && arr[ i ] === elem ) { 1055 return i; 1056 } 1057 } 1058 } 1059 1060 return -1; 1061 }, 1062 1063 merge: function( first, second ) { 1064 var len = +second.length, 1065 j = 0, 1066 i = first.length; 1067 1068 while ( j < len ) { 1069 first[ i++ ] = second[ j++ ]; 1070 } 1071 1072 // Support: IE<9 1073 // Workaround casting of .length to NaN on otherwise arraylike objects (e.g., NodeLists) 1074 if ( len !== len ) { 1075 while ( second[ j ] !== undefined ) { 1076 first[ i++ ] = second[ j++ ]; 1077 } 1078 } 1079 1080 first.length = i; 1081 1082 return first; 1083 }, 1084 1085 grep: function( elems, callback, invert ) { 1086 var callbackInverse, 1087 matches = [], 1088 i = 0, 1089 length = elems.length, 1090 callbackExpect = !invert; 1091 1092 // Go through the array, only saving the items 1093 // that pass the validator function 1094 for ( ; i < length; i++ ) { 1095 callbackInverse = !callback( elems[ i ], i ); 1096 if ( callbackInverse !== callbackExpect ) { 1097 matches.push( elems[ i ] ); 1098 } 1099 } 1100 1101 return matches; 1102 }, 1103 1104 // arg is for internal usage only 1105 map: function( elems, callback, arg ) { 1106 var length, value, 1107 i = 0, 1108 ret = []; 1109 1110 // Go through the array, translating each of the items to their new values 1111 if ( isArrayLike( elems ) ) { 1112 length = elems.length; 1113 for ( ; i < length; i++ ) { 1114 value = callback( elems[ i ], i, arg ); 1115 1116 if ( value != null ) { 1117 ret.push( value ); 1118 } 1119 } 1120 1121 // Go through every key on the object, 1122 } else { 1123 for ( i in elems ) { 1124 value = callback( elems[ i ], i, arg ); 1125 1126 if ( value != null ) { 1127 ret.push( value ); 1128 } 1129 } 1130 } 1131 1132 // Flatten any nested arrays 1133 return concat.apply( [], ret ); 1134 }, 1135 1136 // A global GUID counter for objects 1137 guid: 1, 1138 1139 // Bind a function to a context, optionally partially applying any 1140 // arguments. 1141 proxy: function( fn, context ) { 1142 var args, proxy, tmp; 1143 1144 if ( typeof context === "string" ) { 1145 tmp = fn[ context ]; 1146 context = fn; 1147 fn = tmp; 1148 } 1149 1150 // Quick check to determine if target is callable, in the spec 1151 // this throws a TypeError, but we will just return undefined. 1152 if ( !jQuery.isFunction( fn ) ) { 1153 return undefined; 1154 } 1155 1156 // Simulated bind 1157 args = slice.call( arguments, 2 ); 1158 proxy = function() { 1159 return fn.apply( context || this, args.concat( slice.call( arguments ) ) ); 1160 }; 1161 1162 // Set the guid of unique handler to the same of original handler, so it can be removed 1163 proxy.guid = fn.guid = fn.guid || jQuery.guid++; 1164 1165 return proxy; 1166 }, 1167 1168 now: function() { 1169 return +( new Date() ); 1170 }, 1171 1172 // jQuery.support is not used in Core but other projects attach their 1173 // properties to it so it needs to exist. 1174 support: support 1175} ); 1176 1177// JSHint would error on this code due to the Symbol not being defined in ES5. 1178// Defining this global in .jshintrc would create a danger of using the global 1179// unguarded in another place, it seems safer to just disable JSHint for these 1180// three lines. 1181/* jshint ignore: start */ 1182if ( typeof Symbol === "function" ) { 1183 jQuery.fn[ Symbol.iterator ] = deletedIds[ Symbol.iterator ]; 1184} 1185/* jshint ignore: end */ 1186 1187// Populate the class2type map 1188jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ), 1189function( i, name ) { 1190 class2type[ "[object " + name + "]" ] = name.toLowerCase(); 1191} ); 1192 1193function isArrayLike( obj ) { 1194 1195 // Support: iOS 8.2 (not reproducible in simulator) 1196 // `in` check used to prevent JIT error (gh-2145) 1197 // hasOwn isn't used here due to false negatives 1198 // regarding Nodelist length in IE 1199 var length = !!obj && "length" in obj && obj.length, 1200 type = jQuery.type( obj ); 1201 1202 if ( type === "function" || jQuery.isWindow( obj ) ) { 1203 return false;
vendor: 26,428 bytes, lines 1204-2128
1204 } 1205 1206 return type === "array" || length === 0 || 1207 typeof length === "number" && length > 0 && ( length - 1 ) in obj; 1208} 1209var Sizzle = 1210/*! 1211 * Sizzle CSS Selector Engine v2.2.1 1212 * http://sizzlejs.com/ 1213 * 1214 * Copyright jQuery Foundation and other contributors 1215 * Released under the MIT license 1216 * http://jquery.org/license 1217 * 1218 * Date: 2015-10-17 1219 */ 1220(function( window ) { 1221 1222var i, 1223 support, 1224 Expr, 1225 getText, 1226 isXML, 1227 tokenize, 1228 compile, 1229 select, 1230 outermostContext, 1231 sortInput, 1232 hasDuplicate, 1233 1234 // Local document vars 1235 setDocument, 1236 document, 1237 docElem, 1238 documentIsHTML, 1239 rbuggyQSA, 1240 rbuggyMatches, 1241 matches, 1242 contains, 1243 1244 // Instance-specific data 1245 expando = "sizzle" + 1 * new Date(), 1246 preferredDoc = window.document, 1247 dirruns = 0, 1248 done = 0, 1249 classCache = createCache(), 1250 tokenCache = createCache(), 1251 compilerCache = createCache(), 1252 sortOrder = function( a, b ) { 1253 if ( a === b ) { 1254 hasDuplicate = true; 1255 } 1256 return 0; 1257 }, 1258 1259 // General-purpose constants 1260 MAX_NEGATIVE = 1 << 31, 1261 1262 // Instance methods 1263 hasOwn = ({}).hasOwnProperty, 1264 arr = [], 1265 pop = arr.pop, 1266 push_native = arr.push, 1267 push = arr.push, 1268 slice = arr.slice, 1269 // Use a stripped-down indexOf as it's faster than native 1270 // http://jsperf.com/thor-indexof-vs-for/5 1271 indexOf = function( list, elem ) { 1272 var i = 0, 1273 len = list.length; 1274 for ( ; i < len; i++ ) { 1275 if ( list[i] === elem ) { 1276 return i; 1277 } 1278 } 1279 return -1; 1280 }, 1281 1282 booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped", 1283 1284 // Regular expressions 1285 1286 // http://www.w3.org/TR/css3-selectors/#whitespace 1287 whitespace = "[\\x20\\t\\r\\n\\f]", 1288 1289 // http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier 1290 identifier = "(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+", 1291 1292 // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors 1293 attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace + 1294 // Operator (capture 2) 1295 "*([*^$|!~]?=)" + whitespace + 1296 // "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]" 1297 "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + whitespace + 1298 "*\\]", 1299 1300 pseudos = ":(" + identifier + ")(?:\\((" + 1301 // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments: 1302 // 1. quoted (capture 3; capture 4 or capture 5) 1303 "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" + 1304 // 2. simple (capture 6) 1305 "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" + 1306 // 3. anything else (capture 2) 1307 ".*" + 1308 ")\\)|)", 1309 1310 // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter 1311 rwhitespace = new RegExp( whitespace + "+", "g" ), 1312 rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ), 1313 1314 rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ), 1315 rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*" ), 1316 1317 rattributeQuotes = new RegExp( "=" + whitespace + "*([^\\]'\"]*?)" + whitespace + "*\\]", "g" ), 1318 1319 rpseudo = new RegExp( pseudos ), 1320 ridentifier = new RegExp( "^" + identifier + "$" ), 1321 1322 matchExpr = { 1323 "ID": new RegExp( "^#(" + identifier + ")" ), 1324 "CLASS": new RegExp( "^\\.(" + identifier + ")" ), 1325 "TAG": new RegExp( "^(" + identifier + "|[*])" ), 1326 "ATTR": new RegExp( "^" + attributes ), 1327 "PSEUDO": new RegExp( "^" + pseudos ), 1328 "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace + 1329 "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace + 1330 "*(\\d+)|))" + whitespace + "*\\)|)", "i" ), 1331 "bool": new RegExp( "^(?:" + booleans + ")$", "i" ), 1332 // For use in libraries implementing .is() 1333 // We use this for POS matching in `select` 1334 "needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + 1335 whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" ) 1336 }, 1337 1338 rinputs = /^(?:input|select|textarea|button)$/i, 1339 rheader = /^h\d$/i, 1340 1341 rnative = /^[^{]+\{\s*\[native \w/, 1342 1343 // Easily-parseable/retrievable ID or TAG or CLASS selectors 1344 rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, 1345 1346 rsibling = /[+~]/, 1347 rescape = /'|\\/g, 1348 1349 // CSS escapes http://www.w3.org/TR/CSS21/syndata.html#escaped-characters 1350 runescape = new RegExp( "\\\\([\\da-f]{1,6}" + whitespace + "?|(" + whitespace + ")|.)", "ig" ), 1351 funescape = function( _, escaped, escapedWhitespace ) { 1352 var high = "0x" + escaped - 0x10000; 1353 // NaN means non-codepoint 1354 // Support: Firefox<24 1355 // Workaround erroneous numeric interpretation of +"0x" 1356 return high !== high || escapedWhitespace ? 1357 escaped : 1358 high < 0 ? 1359 // BMP codepoint 1360 String.fromCharCode( high + 0x10000 ) : 1361 // Supplemental Plane codepoint (surrogate pair) 1362 String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 ); 1363 }, 1364 1365 // Used for iframes 1366 // See setDocument() 1367 // Removing the function wrapper causes a "Permission Denied" 1368 // error in IE 1369 unloadHandler = function() { 1370 setDocument(); 1371 }; 1372 1373// Optimize for push.apply( _, NodeList ) 1374try { 1375 push.apply( 1376 (arr = slice.call( preferredDoc.childNodes )), 1377 preferredDoc.childNodes 1378 ); 1379 // Support: Android<4.0 1380 // Detect silently failing push.apply 1381 arr[ preferredDoc.childNodes.length ].nodeType; 1382} catch ( e ) { 1383 push = { apply: arr.length ? 1384 1385 // Leverage slice if possible 1386 function( target, els ) { 1387 push_native.apply( target, slice.call(els) ); 1388 } : 1389 1390 // Support: IE<9 1391 // Otherwise append directly 1392 function( target, els ) { 1393 var j = target.length, 1394 i = 0; 1395 // Can't trust NodeList.length 1396 while ( (target[j++] = els[i++]) ) {} 1397 target.length = j - 1; 1398 } 1399 }; 1400} 1401 1402function Sizzle( selector, context, results, seed ) { 1403 var m, i, elem, nid, nidselect, match, groups, newSelector, 1404 newContext = context && context.ownerDocument, 1405 1406 // nodeType defaults to 9, since context defaults to document 1407 nodeType = context ? context.nodeType : 9; 1408 1409 results = results || []; 1410 1411 // Return early from calls with invalid selector or context 1412 if ( typeof selector !== "string" || !selector || 1413 nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) { 1414 1415 return results; 1416 } 1417 1418 // Try to shortcut find operations (as opposed to filters) in HTML documents 1419 if ( !seed ) { 1420 1421 if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) { 1422 setDocument( context ); 1423 } 1424 context = context || document; 1425 1426 if ( documentIsHTML ) { 1427 1428 // If the selector is sufficiently simple, try using a "get*By*" DOM method 1429 // (excepting DocumentFragment context, where the methods don't exist) 1430 if ( nodeType !== 11 && (match = rquickExpr.exec( selector )) ) { 1431 1432 // ID selector 1433 if ( (m = match[1]) ) { 1434 1435 // Document context 1436 if ( nodeType === 9 ) { 1437 if ( (elem = context.getElementById( m )) ) { 1438 1439 // Support: IE, Opera, Webkit 1440 // TODO: identify versions 1441 // getElementById can match elements by name instead of ID 1442 if ( elem.id === m ) { 1443 results.push( elem ); 1444 return results; 1445 } 1446 } else { 1447 return results; 1448 } 1449 1450 // Element context 1451 } else { 1452 1453 // Support: IE, Opera, Webkit 1454 // TODO: identify versions 1455 // getElementById can match elements by name instead of ID 1456 if ( newContext && (elem = newContext.getElementById( m )) && 1457 contains( context, elem ) && 1458 elem.id === m ) { 1459 1460 results.push( elem ); 1461 return results; 1462 } 1463 } 1464 1465 // Type selector 1466 } else if ( match[2] ) { 1467 push.apply( results, context.getElementsByTagName( selector ) ); 1468 return results; 1469 1470 // Class selector 1471 } else if ( (m = match[3]) && support.getElementsByClassName && 1472 context.getElementsByClassName ) { 1473 1474 push.apply( results, context.getElementsByClassName( m ) ); 1475 return results; 1476 } 1477 } 1478 1479 // Take advantage of querySelectorAll 1480 if ( support.qsa && 1481 !compilerCache[ selector + " " ] && 1482 (!rbuggyQSA || !rbuggyQSA.test( selector )) ) { 1483 1484 if ( nodeType !== 1 ) { 1485 newContext = context; 1486 newSelector = selector; 1487 1488 // qSA looks outside Element context, which is not what we want 1489 // Thanks to Andrew Dupont for this workaround technique 1490 // Support: IE <=8 1491 // Exclude object elements 1492 } else if ( context.nodeName.toLowerCase() !== "object" ) { 1493 1494 // Capture the context ID, setting it first if necessary 1495 if ( (nid = context.getAttribute( "id" )) ) { 1496 nid = nid.replace( rescape, "\\$&" ); 1497 } else { 1498 context.setAttribute( "id", (nid = expando) ); 1499 } 1500 1501 // Prefix every selector in the list 1502 groups = tokenize( selector ); 1503 i = groups.length; 1504 nidselect = ridentifier.test( nid ) ? "#" + nid : "[id='" + nid + "']"; 1505 while ( i-- ) { 1506 groups[i] = nidselect + " " + toSelector( groups[i] ); 1507 } 1508 newSelector = groups.join( "," ); 1509 1510 // Expand context for sibling selectors 1511 newContext = rsibling.test( selector ) && testContext( context.parentNode ) || 1512 context; 1513 } 1514 1515 if ( newSelector ) { 1516 try { 1517 push.apply( results, 1518 newContext.querySelectorAll( newSelector ) 1519 ); 1520 return results; 1521 } catch ( qsaError ) { 1522 } finally { 1523 if ( nid === expando ) { 1524 context.removeAttribute( "id" ); 1525 } 1526 } 1527 } 1528 } 1529 } 1530 } 1531 1532 // All others 1533 return select( selector.replace( rtrim, "$1" ), context, results, seed ); 1534} 1535 1536/** 1537 * Create key-value caches of limited size 1538 * @returns {function(string, object)} Returns the Object data after storing it on itself with 1539 * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength) 1540 * deleting the oldest entry 1541 */ 1542function createCache() { 1543 var keys = []; 1544 1545 function cache( key, value ) { 1546 // Use (key + " ") to avoid collision with native prototype properties (see Issue #157) 1547 if ( keys.push( key + " " ) > Expr.cacheLength ) { 1548 // Only keep the most recent entries 1549 delete cache[ keys.shift() ]; 1550 } 1551 return (cache[ key + " " ] = value); 1552 } 1553 return cache; 1554} 1555 1556/** 1557 * Mark a function for special use by Sizzle 1558 * @param {Function} fn The function to mark 1559 */ 1560function markFunction( fn ) { 1561 fn[ expando ] = true; 1562 return fn; 1563} 1564 1565/** 1566 * Support testing using an element 1567 * @param {Function} fn Passed the created div and expects a boolean result 1568 */ 1569function assert( fn ) { 1570 var div = document.createElement("div"); 1571 1572 try { 1573 return !!fn( div ); 1574 } catch (e) { 1575 return false; 1576 } finally { 1577 // Remove from its parent by default 1578 if ( div.parentNode ) { 1579 div.parentNode.removeChild( div ); 1580 } 1581 // release memory in IE 1582 div = null; 1583 } 1584} 1585 1586/** 1587 * Adds the same handler for all of the specified attrs 1588 * @param {String} attrs Pipe-separated list of attributes 1589 * @param {Function} handler The method that will be applied 1590 */ 1591function addHandle( attrs, handler ) { 1592 var arr = attrs.split("|"), 1593 i = arr.length; 1594 1595 while ( i-- ) { 1596 Expr.attrHandle[ arr[i] ] = handler; 1597 } 1598} 1599 1600/** 1601 * Checks document order of two siblings 1602 * @param {Element} a 1603 * @param {Element} b 1604 * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b 1605 */ 1606function siblingCheck( a, b ) { 1607 var cur = b && a, 1608 diff = cur && a.nodeType === 1 && b.nodeType === 1 && 1609 ( ~b.sourceIndex || MAX_NEGATIVE ) - 1610 ( ~a.sourceIndex || MAX_NEGATIVE ); 1611 1612 // Use IE sourceIndex if available on both nodes 1613 if ( diff ) { 1614 return diff; 1615 } 1616 1617 // Check if b follows a 1618 if ( cur ) { 1619 while ( (cur = cur.nextSibling) ) { 1620 if ( cur === b ) { 1621 return -1; 1622 } 1623 } 1624 } 1625 1626 return a ? 1 : -1; 1627} 1628 1629/** 1630 * Returns a function to use in pseudos for input types 1631 * @param {String} type 1632 */ 1633function createInputPseudo( type ) { 1634 return function( elem ) { 1635 var name = elem.nodeName.toLowerCase(); 1636 return name === "input" && elem.type === type; 1637 }; 1638} 1639 1640/** 1641 * Returns a function to use in pseudos for buttons 1642 * @param {String} type 1643 */ 1644function createButtonPseudo( type ) { 1645 return function( elem ) { 1646 var name = elem.nodeName.toLowerCase(); 1647 return (name === "input" || name === "button") && elem.type === type; 1648 }; 1649} 1650 1651/** 1652 * Returns a function to use in pseudos for positionals 1653 * @param {Function} fn 1654 */ 1655function createPositionalPseudo( fn ) { 1656 return markFunction(function( argument ) { 1657 argument = +argument; 1658 return markFunction(function( seed, matches ) { 1659 var j, 1660 matchIndexes = fn( [], seed.length, argument ), 1661 i = matchIndexes.length; 1662 1663 // Match elements found at the specified indexes 1664 while ( i-- ) { 1665 if ( seed[ (j = matchIndexes[i]) ] ) { 1666 seed[j] = !(matches[j] = seed[j]); 1667 } 1668 } 1669 }); 1670 }); 1671} 1672 1673/** 1674 * Checks a node for validity as a Sizzle context 1675 * @param {Element|Object=} context 1676 * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value 1677 */ 1678function testContext( context ) { 1679 return context && typeof context.getElementsByTagName !== "undefined" && context; 1680} 1681 1682// Expose support vars for convenience 1683support = Sizzle.support = {}; 1684 1685/** 1686 * Detects XML nodes 1687 * @param {Element|Object} elem An element or a document 1688 * @returns {Boolean} True iff elem is a non-HTML XML node 1689 */ 1690isXML = Sizzle.isXML = function( elem ) { 1691 // documentElement is verified for cases where it doesn't yet exist 1692 // (such as loading iframes in IE - #4833) 1693 var documentElement = elem && (elem.ownerDocument || elem).documentElement; 1694 return documentElement ? documentElement.nodeName !== "HTML" : false; 1695}; 1696 1697/** 1698 * Sets document-related variables once based on the current document 1699 * @param {Element|Object} [doc] An element or document object to use to set the document 1700 * @returns {Object} Returns the current document 1701 */ 1702setDocument = Sizzle.setDocument = function( node ) { 1703 var hasCompare, parent, 1704 doc = node ? node.ownerDocument || node : preferredDoc; 1705 1706 // Return early if doc is invalid or already selected 1707 if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) { 1708 return document; 1709 } 1710 1711 // Update global variables 1712 document = doc; 1713 docElem = document.documentElement; 1714 documentIsHTML = !isXML( document ); 1715 1716 // Support: IE 9-11, Edge 1717 // Accessing iframe documents after unload throws "permission denied" errors (jQuery #13936) 1718 if ( (parent = document.defaultView) && parent.top !== parent ) { 1719 // Support: IE 11 1720 if ( parent.addEventListener ) { 1721 parent.addEventListener( "unload", unloadHandler, false ); 1722 1723 // Support: IE 9 - 10 only 1724 } else if ( parent.attachEvent ) { 1725 parent.attachEvent( "onunload", unloadHandler ); 1726 } 1727 } 1728 1729 /* Attributes 1730 ---------------------------------------------------------------------- */ 1731 1732 // Support: IE<8 1733 // Verify that getAttribute really returns attributes and not properties 1734 // (excepting IE8 booleans) 1735 support.attributes = assert(function( div ) { 1736 div.className = "i"; 1737 return !div.getAttribute("className"); 1738 }); 1739 1740 /* getElement(s)By* 1741 ---------------------------------------------------------------------- */ 1742 1743 // Check if getElementsByTagName("*") returns only elements 1744 support.getElementsByTagName = assert(function( div ) { 1745 div.appendChild( document.createComment("") ); 1746 return !div.getElementsByTagName("*").length; 1747 }); 1748 1749 // Support: IE<9 1750 support.getElementsByClassName = rnative.test( document.getElementsByClassName ); 1751 1752 // Support: IE<10 1753 // Check if getElementById returns elements by name 1754 // The broken getElementById methods don't pick up programatically-set names, 1755 // so use a roundabout getElementsByName test 1756 support.getById = assert(function( div ) { 1757 docElem.appendChild( div ).id = expando; 1758 return !document.getElementsByName || !document.getElementsByName( expando ).length; 1759 }); 1760 1761 // ID find and filter 1762 if ( support.getById ) { 1763 Expr.find["ID"] = function( id, context ) { 1764 if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { 1765 var m = context.getElementById( id ); 1766 return m ? [ m ] : []; 1767 } 1768 }; 1769 Expr.filter["ID"] = function( id ) { 1770 var attrId = id.replace( runescape, funescape ); 1771 return function( elem ) { 1772 return elem.getAttribute("id") === attrId; 1773 }; 1774 }; 1775 } else { 1776 // Support: IE6/7 1777 // getElementById is not reliable as a find shortcut 1778 delete Expr.find["ID"]; 1779 1780 Expr.filter["ID"] = function( id ) { 1781 var attrId = id.replace( runescape, funescape ); 1782 return function( elem ) { 1783 var node = typeof elem.getAttributeNode !== "undefined" && 1784 elem.getAttributeNode("id"); 1785 return node && node.value === attrId; 1786 }; 1787 }; 1788 } 1789 1790 // Tag 1791 Expr.find["TAG"] = support.getElementsByTagName ? 1792 function( tag, context ) { 1793 if ( typeof context.getElementsByTagName !== "undefined" ) { 1794 return context.getElementsByTagName( tag ); 1795 1796 // DocumentFragment nodes don't have gEBTN 1797 } else if ( support.qsa ) { 1798 return context.querySelectorAll( tag ); 1799 } 1800 } : 1801 1802 function( tag, context ) { 1803 var elem, 1804 tmp = [], 1805 i = 0, 1806 // By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too 1807 results = context.getElementsByTagName( tag ); 1808 1809 // Filter out possible comments 1810 if ( tag === "*" ) { 1811 while ( (elem = results[i++]) ) { 1812 if ( elem.nodeType === 1 ) { 1813 tmp.push( elem ); 1814 } 1815 } 1816 1817 return tmp; 1818 } 1819 return results; 1820 }; 1821 1822 // Class 1823 Expr.find["CLASS"] = support.getElementsByClassName && function( className, context ) { 1824 if ( typeof context.getElementsByClassName !== "undefined" && documentIsHTML ) { 1825 return context.getElementsByClassName( className ); 1826 } 1827 }; 1828 1829 /* QSA/matchesSelector 1830 ---------------------------------------------------------------------- */ 1831 1832 // QSA and matchesSelector support 1833 1834 // matchesSelector(:active) reports false when true (IE9/Opera 11.5) 1835 rbuggyMatches = []; 1836 1837 // qSa(:focus) reports false when true (Chrome 21) 1838 // We allow this because of a bug in IE8/9 that throws an error 1839 // whenever `document.activeElement` is accessed on an iframe 1840 // So, we allow :focus to pass through QSA all the time to avoid the IE error 1841 // See http://bugs.jquery.com/ticket/13378 1842 rbuggyQSA = []; 1843 1844 if ( (support.qsa = rnative.test( document.querySelectorAll )) ) { 1845 // Build QSA regex 1846 // Regex strategy adopted from Diego Perini 1847 assert(function( div ) { 1848 // Select is set to empty string on purpose 1849 // This is to test IE's treatment of not explicitly 1850 // setting a boolean content attribute, 1851 // since its presence should be enough 1852 // http://bugs.jquery.com/ticket/12359 1853 docElem.appendChild( div ).innerHTML = "<a id='" + expando + "'></a>" + 1854 "<select id='" + expando + "-\r\\' msallowcapture=''>" + 1855 "<option selected=''></option></select>"; 1856 1857 // Support: IE8, Opera 11-12.16 1858 // Nothing should be selected when empty strings follow ^= or $= or *= 1859 // The test attribute must be unknown in Opera but "safe" for WinRT 1860 // http://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section 1861 if ( div.querySelectorAll("[msallowcapture^='']").length ) { 1862 rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" ); 1863 } 1864 1865 // Support: IE8 1866 // Boolean attributes and "value" are not treated correctly 1867 if ( !div.querySelectorAll("[selected]").length ) { 1868 rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" ); 1869 } 1870 1871 // Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+ 1872 if ( !div.querySelectorAll( "[id~=" + expando + "-]" ).length ) { 1873 rbuggyQSA.push("~="); 1874 } 1875 1876 // Webkit/Opera - :checked should return selected option elements 1877 // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked 1878 // IE8 throws error here and will not see later tests 1879 if ( !div.querySelectorAll(":checked").length ) { 1880 rbuggyQSA.push(":checked"); 1881 } 1882 1883 // Support: Safari 8+, iOS 8+ 1884 // https://bugs.webkit.org/show_bug.cgi?id=136851 1885 // In-page `selector#id sibing-combinator selector` fails 1886 if ( !div.querySelectorAll( "a#" + expando + "+*" ).length ) { 1887 rbuggyQSA.push(".#.+[+~]"); 1888 } 1889 }); 1890 1891 assert(function( div ) { 1892 // Support: Windows 8 Native Apps 1893 // The type and name attributes are restricted during .innerHTML assignment 1894 var input = document.createElement("input"); 1895 input.setAttribute( "type", "hidden" ); 1896 div.appendChild( input ).setAttribute( "name", "D" ); 1897 1898 // Support: IE8 1899 // Enforce case-sensitivity of name attribute 1900 if ( div.querySelectorAll("[name=d]").length ) { 1901 rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" ); 1902 } 1903 1904 // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled) 1905 // IE8 throws error here and will not see later tests 1906 if ( !div.querySelectorAll(":enabled").length ) { 1907 rbuggyQSA.push( ":enabled", ":disabled" ); 1908 } 1909 1910 // Opera 10-11 does not throw on post-comma invalid pseudos 1911 div.querySelectorAll("*,:x"); 1912 rbuggyQSA.push(",.*:"); 1913 }); 1914 } 1915 1916 if ( (support.matchesSelector = rnative.test( (matches = docElem.matches || 1917 docElem.webkitMatchesSelector || 1918 docElem.mozMatchesSelector || 1919 docElem.oMatchesSelector || 1920 docElem.msMatchesSelector) )) ) { 1921 1922 assert(function( div ) { 1923 // Check to see if it's possible to do matchesSelector 1924 // on a disconnected node (IE 9) 1925 support.disconnectedMatch = matches.call( div, "div" ); 1926 1927 // This should fail with an exception 1928 // Gecko does not error, returns false instead 1929 matches.call( div, "[s!='']:x" ); 1930 rbuggyMatches.push( "!=", pseudos ); 1931 }); 1932 } 1933 1934 rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join("|") ); 1935 rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join("|") ); 1936 1937 /* Contains 1938 ---------------------------------------------------------------------- */ 1939 hasCompare = rnative.test( docElem.compareDocumentPosition ); 1940 1941 // Element contains another 1942 // Purposefully self-exclusive 1943 // As in, an element does not contain itself 1944 contains = hasCompare || rnative.test( docElem.contains ) ? 1945 function( a, b ) { 1946 var adown = a.nodeType === 9 ? a.documentElement : a, 1947 bup = b && b.parentNode; 1948 return a === bup || !!( bup && bup.nodeType === 1 && ( 1949 adown.contains ? 1950 adown.contains( bup ) : 1951 a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16 1952 )); 1953 } : 1954 function( a, b ) { 1955 if ( b ) { 1956 while ( (b = b.parentNode) ) { 1957 if ( b === a ) { 1958 return true; 1959 } 1960 } 1961 } 1962 return false; 1963 }; 1964 1965 /* Sorting 1966 ---------------------------------------------------------------------- */ 1967 1968 // Document order sorting 1969 sortOrder = hasCompare ? 1970 function( a, b ) { 1971 1972 // Flag for duplicate removal 1973 if ( a === b ) { 1974 hasDuplicate = true; 1975 return 0; 1976 } 1977 1978 // Sort on method existence if only one input has compareDocumentPosition 1979 var compare = !a.compareDocumentPosition - !b.compareDocumentPosition; 1980 if ( compare ) { 1981 return compare; 1982 } 1983 1984 // Calculate position if both inputs belong to the same document 1985 compare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ? 1986 a.compareDocumentPosition( b ) : 1987 1988 // Otherwise we know they are disconnected 1989 1; 1990 1991 // Disconnected nodes 1992 if ( compare & 1 || 1993 (!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) { 1994 1995 // Choose the first element that is related to our preferred document 1996 if ( a === document || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) { 1997 return -1; 1998 } 1999 if ( b === document || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) { 2000 return 1; 2001 } 2002 2003 // Maintain original order 2004 return sortInput ? 2005 ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : 2006 0; 2007 } 2008 2009 return compare & 4 ? -1 : 1; 2010 } : 2011 function( a, b ) { 2012 // Exit early if the nodes are identical 2013 if ( a === b ) { 2014 hasDuplicate = true; 2015 return 0; 2016 } 2017 2018 var cur, 2019 i = 0, 2020 aup = a.parentNode, 2021 bup = b.parentNode, 2022 ap = [ a ], 2023 bp = [ b ]; 2024 2025 // Parentless nodes are either documents or disconnected 2026 if ( !aup || !bup ) { 2027 return a === document ? -1 : 2028 b === document ? 1 : 2029 aup ? -1 : 2030 bup ? 1 : 2031 sortInput ? 2032 ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : 2033 0; 2034 2035 // If the nodes are siblings, we can do a quick check 2036 } else if ( aup === bup ) { 2037 return siblingCheck( a, b ); 2038 } 2039 2040 // Otherwise we need full lists of their ancestors for comparison 2041 cur = a; 2042 while ( (cur = cur.parentNode) ) { 2043 ap.unshift( cur ); 2044 } 2045 cur = b; 2046 while ( (cur = cur.parentNode) ) { 2047 bp.unshift( cur ); 2048 } 2049 2050 // Walk down the tree looking for a discrepancy 2051 while ( ap[i] === bp[i] ) { 2052 i++; 2053 } 2054 2055 return i ? 2056 // Do a sibling check if the nodes have a common ancestor 2057 siblingCheck( ap[i], bp[i] ) : 2058 2059 // Otherwise nodes in our document sort first 2060 ap[i] === preferredDoc ? -1 : 2061 bp[i] === preferredDoc ? 1 : 2062 0; 2063 }; 2064 2065 return document; 2066}; 2067 2068Sizzle.matches = function( expr, elements ) { 2069 return Sizzle( expr, null, null, elements ); 2070}; 2071 2072Sizzle.matchesSelector = function( elem, expr ) { 2073 // Set document vars if needed 2074 if ( ( elem.ownerDocument || elem ) !== document ) { 2075 setDocument( elem ); 2076 } 2077 2078 // Make sure that attribute selectors are quoted 2079 expr = expr.replace( rattributeQuotes, "='$1']" ); 2080 2081 if ( support.matchesSelector && documentIsHTML && 2082 !compilerCache[ expr + " " ] && 2083 ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) && 2084 ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) { 2085 2086 try { 2087 var ret = matches.call( elem, expr ); 2088 2089 // IE 9's matchesSelector returns false on disconnected nodes 2090 if ( ret || support.disconnectedMatch || 2091 // As well, disconnected nodes are said to be in a document 2092 // fragment in IE 9 2093 elem.document && elem.document.nodeType !== 11 ) { 2094 return ret; 2095 } 2096 } catch (e) {} 2097 } 2098 2099 return Sizzle( expr, document, null, [ elem ] ).length > 0; 2100}; 2101 2102Sizzle.contains = function( context, elem ) { 2103 // Set document vars if needed 2104 if ( ( context.ownerDocument || context ) !== document ) { 2105 setDocument( context ); 2106 } 2107 return contains( context, elem ); 2108}; 2109 2110Sizzle.attr = function( elem, name ) { 2111 // Set document vars if needed 2112 if ( ( elem.ownerDocument || elem ) !== document ) { 2113 setDocument( elem ); 2114 } 2115 2116 var fn = Expr.attrHandle[ name.toLowerCase() ], 2117 // Don't get fooled by Object.prototype properties (jQuery #13807) 2118 val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ? 2119 fn( elem, name, !documentIsHTML ) : 2120 undefined; 2121 2122 return val !== undefined ? 2123 val : 2124 support.attributes || !documentIsHTML ? 2125 elem.getAttribute( name ) : 2126 (val = elem.getAttributeNode(name)) && val.specified ? 2127 val.value : 2128 null
vendor: 13,569 bytes, lines 2128-2598
2128; 2129}; 2130 2131Sizzle.error = function( msg ) { 2132 throw new Error( "Syntax error, unrecognized expression: " + msg ); 2133}; 2134 2135/** 2136 * Document sorting and removing duplicates 2137 * @param {ArrayLike} results 2138 */ 2139Sizzle.uniqueSort = function( results ) { 2140 var elem, 2141 duplicates = [], 2142 j = 0, 2143 i = 0; 2144 2145 // Unless we *know* we can detect duplicates, assume their presence 2146 hasDuplicate = !support.detectDuplicates; 2147 sortInput = !support.sortStable && results.slice( 0 ); 2148 results.sort( sortOrder ); 2149 2150 if ( hasDuplicate ) { 2151 while ( (elem = results[i++]) ) { 2152 if ( elem === results[ i ] ) { 2153 j = duplicates.push( i ); 2154 } 2155 } 2156 while ( j-- ) { 2157 results.splice( duplicates[ j ], 1 ); 2158 } 2159 } 2160 2161 // Clear input after sorting to release objects 2162 // See https://github.com/jquery/sizzle/pull/225 2163 sortInput = null; 2164 2165 return results; 2166}; 2167 2168/** 2169 * Utility function for retrieving the text value of an array of DOM nodes 2170 * @param {Array|Element} elem 2171 */ 2172getText = Sizzle.getText = function( elem ) { 2173 var node, 2174 ret = "", 2175 i = 0, 2176 nodeType = elem.nodeType; 2177 2178 if ( !nodeType ) { 2179 // If no nodeType, this is expected to be an array 2180 while ( (node = elem[i++]) ) { 2181 // Do not traverse comment nodes 2182 ret += getText( node ); 2183 } 2184 } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) { 2185 // Use textContent for elements 2186 // innerText usage removed for consistency of new lines (jQuery #11153) 2187 if ( typeof elem.textContent === "string" ) { 2188 return elem.textContent; 2189 } else { 2190 // Traverse its children 2191 for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { 2192 ret += getText( elem ); 2193 } 2194 } 2195 } else if ( nodeType === 3 || nodeType === 4 ) { 2196 return elem.nodeValue; 2197 } 2198 // Do not include comment or processing instruction nodes 2199 2200 return ret; 2201}; 2202 2203Expr = Sizzle.selectors = { 2204 2205 // Can be adjusted by the user 2206 cacheLength: 50, 2207 2208 createPseudo: markFunction, 2209 2210 match: matchExpr, 2211 2212 attrHandle: {}, 2213 2214 find: {}, 2215 2216 relative: { 2217 ">": { dir: "parentNode", first: true }, 2218 " ": { dir: "parentNode" }, 2219 "+": { dir: "previousSibling", first: true }, 2220 "~": { dir: "previousSibling" } 2221 }, 2222 2223 preFilter: { 2224 "ATTR": function( match ) { 2225 match[1] = match[1].replace( runescape, funescape ); 2226 2227 // Move the given value to match[3] whether quoted or unquoted 2228 match[3] = ( match[3] || match[4] || match[5] || "" ).replace( runescape, funescape ); 2229 2230 if ( match[2] === "~=" ) { 2231 match[3] = " " + match[3] + " "; 2232 } 2233 2234 return match.slice( 0, 4 ); 2235 }, 2236 2237 "CHILD": function( match ) { 2238 /* matches from matchExpr["CHILD"] 2239 1 type (only|nth|...) 2240 2 what (child|of-type) 2241 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...) 2242 4 xn-component of xn+y argument ([+-]?\d*n|) 2243 5 sign of xn-component 2244 6 x of xn-component 2245 7 sign of y-component 2246 8 y of y-component 2247 */ 2248 match[1] = match[1].toLowerCase(); 2249 2250 if ( match[1].slice( 0, 3 ) === "nth" ) { 2251 // nth-* requires argument 2252 if ( !match[3] ) { 2253 Sizzle.error( match[0] ); 2254 } 2255 2256 // numeric x and y parameters for Expr.filter.CHILD 2257 // remember that false/true cast respectively to 0/1 2258 match[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === "even" || match[3] === "odd" ) ); 2259 match[5] = +( ( match[7] + match[8] ) || match[3] === "odd" ); 2260 2261 // other types prohibit arguments 2262 } else if ( match[3] ) { 2263 Sizzle.error( match[0] ); 2264 } 2265 2266 return match; 2267 }, 2268 2269 "PSEUDO": function( match ) { 2270 var excess, 2271 unquoted = !match[6] && match[2]; 2272 2273 if ( matchExpr["CHILD"].test( match[0] ) ) { 2274 return null; 2275 } 2276 2277 // Accept quoted arguments as-is 2278 if ( match[3] ) { 2279 match[2] = match[4] || match[5] || ""; 2280 2281 // Strip excess characters from unquoted arguments 2282 } else if ( unquoted && rpseudo.test( unquoted ) && 2283 // Get excess from tokenize (recursively) 2284 (excess = tokenize( unquoted, true )) && 2285 // advance to the next closing parenthesis 2286 (excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) { 2287 2288 // excess is a negative index 2289 match[0] = match[0].slice( 0, excess ); 2290 match[2] = unquoted.slice( 0, excess ); 2291 } 2292 2293 // Return only captures needed by the pseudo filter method (type and argument) 2294 return match.slice( 0, 3 ); 2295 } 2296 }, 2297 2298 filter: { 2299 2300 "TAG": function( nodeNameSelector ) { 2301 var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase(); 2302 return nodeNameSelector === "*" ? 2303 function() { return true; } : 2304 function( elem ) { 2305 return elem.nodeName && elem.nodeName.toLowerCase() === nodeName; 2306 }; 2307 }, 2308 2309 "CLASS": function( className ) { 2310 var pattern = classCache[ className + " " ]; 2311 2312 return pattern || 2313 (pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) && 2314 classCache( className, function( elem ) { 2315 return pattern.test( typeof elem.className === "string" && elem.className || typeof elem.getAttribute !== "undefined" && elem.getAttribute("class") || "" ); 2316 }); 2317 }, 2318 2319 "ATTR": function( name, operator, check ) { 2320 return function( elem ) { 2321 var result = Sizzle.attr( elem, name ); 2322 2323 if ( result == null ) { 2324 return operator === "!="; 2325 } 2326 if ( !operator ) { 2327 return true; 2328 } 2329 2330 result += ""; 2331 2332 return operator === "=" ? result === check : 2333 operator === "!=" ? result !== check : 2334 operator === "^=" ? check && result.indexOf( check ) === 0 : 2335 operator === "*=" ? check && result.indexOf( check ) > -1 : 2336 operator === "$=" ? check && result.slice( -check.length ) === check : 2337 operator === "~=" ? ( " " + result.replace( rwhitespace, " " ) + " " ).indexOf( check ) > -1 : 2338 operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" : 2339 false; 2340 }; 2341 }, 2342 2343 "CHILD": function( type, what, argument, first, last ) { 2344 var simple = type.slice( 0, 3 ) !== "nth", 2345 forward = type.slice( -4 ) !== "last", 2346 ofType = what === "of-type"; 2347 2348 return first === 1 && last === 0 ? 2349 2350 // Shortcut for :nth-*(n) 2351 function( elem ) { 2352 return !!elem.parentNode; 2353 } : 2354 2355 function( elem, context, xml ) { 2356 var cache, uniqueCache, outerCache, node, nodeIndex, start, 2357 dir = simple !== forward ? "nextSibling" : "previousSibling", 2358 parent = elem.parentNode, 2359 name = ofType && elem.nodeName.toLowerCase(), 2360 useCache = !xml && !ofType, 2361 diff = false; 2362 2363 if ( parent ) { 2364 2365 // :(first|last|only)-(child|of-type) 2366 if ( simple ) { 2367 while ( dir ) { 2368 node = elem; 2369 while ( (node = node[ dir ]) ) { 2370 if ( ofType ? 2371 node.nodeName.toLowerCase() === name : 2372 node.nodeType === 1 ) { 2373 2374 return false; 2375 } 2376 } 2377 // Reverse direction for :only-* (if we haven't yet done so) 2378 start = dir = type === "only" && !start && "nextSibling"; 2379 } 2380 return true; 2381 } 2382 2383 start = [ forward ? parent.firstChild : parent.lastChild ]; 2384 2385 // non-xml :nth-child(...) stores cache data on `parent` 2386 if ( forward && useCache ) { 2387 2388 // Seek `elem` from a previously-cached index 2389 2390 // ...in a gzip-friendly way 2391 node = parent; 2392 outerCache = node[ expando ] || (node[ expando ] = {}); 2393 2394 // Support: IE <9 only 2395 // Defend against cloned attroperties (jQuery gh-1709) 2396 uniqueCache = outerCache[ node.uniqueID ] || 2397 (outerCache[ node.uniqueID ] = {}); 2398 2399 cache = uniqueCache[ type ] || []; 2400 nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; 2401 diff = nodeIndex && cache[ 2 ]; 2402 node = nodeIndex && parent.childNodes[ nodeIndex ]; 2403 2404 while ( (node = ++nodeIndex && node && node[ dir ] || 2405 2406 // Fallback to seeking `elem` from the start 2407 (diff = nodeIndex = 0) || start.pop()) ) { 2408 2409 // When found, cache indexes on `parent` and break 2410 if ( node.nodeType === 1 && ++diff && node === elem ) { 2411 uniqueCache[ type ] = [ dirruns, nodeIndex, diff ]; 2412 break; 2413 } 2414 } 2415 2416 } else { 2417 // Use previously-cached element index if available 2418 if ( useCache ) { 2419 // ...in a gzip-friendly way 2420 node = elem; 2421 outerCache = node[ expando ] || (node[ expando ] = {}); 2422 2423 // Support: IE <9 only 2424 // Defend against cloned attroperties (jQuery gh-1709) 2425 uniqueCache = outerCache[ node.uniqueID ] || 2426 (outerCache[ node.uniqueID ] = {}); 2427 2428 cache = uniqueCache[ type ] || []; 2429 nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; 2430 diff = nodeIndex; 2431 } 2432 2433 // xml :nth-child(...) 2434 // or :nth-last-child(...) or :nth(-last)?-of-type(...) 2435 if ( diff === false ) { 2436 // Use the same loop as above to seek `elem` from the start 2437 while ( (node = ++nodeIndex && node && node[ dir ] || 2438 (diff = nodeIndex = 0) || start.pop()) ) { 2439 2440 if ( ( ofType ? 2441 node.nodeName.toLowerCase() === name : 2442 node.nodeType === 1 ) && 2443 ++diff ) { 2444 2445 // Cache the index of each encountered element 2446 if ( useCache ) { 2447 outerCache = node[ expando ] || (node[ expando ] = {}); 2448 2449 // Support: IE <9 only 2450 // Defend against cloned attroperties (jQuery gh-1709) 2451 uniqueCache = outerCache[ node.uniqueID ] || 2452 (outerCache[ node.uniqueID ] = {}); 2453 2454 uniqueCache[ type ] = [ dirruns, diff ]; 2455 } 2456 2457 if ( node === elem ) { 2458 break; 2459 } 2460 } 2461 } 2462 } 2463 } 2464 2465 // Incorporate the offset, then check against cycle size 2466 diff -= last; 2467 return diff === first || ( diff % first === 0 && diff / first >= 0 ); 2468 } 2469 }; 2470 }, 2471 2472 "PSEUDO": function( pseudo, argument ) { 2473 // pseudo-class names are case-insensitive 2474 // http://www.w3.org/TR/selectors/#pseudo-classes 2475 // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters 2476 // Remember that setFilters inherits from pseudos 2477 var args, 2478 fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] || 2479 Sizzle.error( "unsupported pseudo: " + pseudo ); 2480 2481 // The user may use createPseudo to indicate that 2482 // arguments are needed to create the filter function 2483 // just as Sizzle does 2484 if ( fn[ expando ] ) { 2485 return fn( argument ); 2486 } 2487 2488 // But maintain support for old signatures 2489 if ( fn.length > 1 ) { 2490 args = [ pseudo, pseudo, "", argument ]; 2491 return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ? 2492 markFunction(function( seed, matches ) { 2493 var idx, 2494 matched = fn( seed, argument ), 2495 i = matched.length; 2496 while ( i-- ) { 2497 idx = indexOf( seed, matched[i] ); 2498 seed[ idx ] = !( matches[ idx ] = matched[i] ); 2499 } 2500 }) : 2501 function( elem ) { 2502 return fn( elem, 0, args ); 2503 }; 2504 } 2505 2506 return fn; 2507 } 2508 }, 2509 2510 pseudos: { 2511 // Potentially complex pseudos 2512 "not": markFunction(function( selector ) { 2513 // Trim the selector passed to compile 2514 // to avoid treating leading and trailing 2515 // spaces as combinators 2516 var input = [], 2517 results = [], 2518 matcher = compile( selector.replace( rtrim, "$1" ) ); 2519 2520 return matcher[ expando ] ? 2521 markFunction(function( seed, matches, context, xml ) { 2522 var elem, 2523 unmatched = matcher( seed, null, xml, [] ), 2524 i = seed.length; 2525 2526 // Match elements unmatched by `matcher` 2527 while ( i-- ) { 2528 if ( (elem = unmatched[i]) ) { 2529 seed[i] = !(matches[i] = elem); 2530 } 2531 } 2532 }) : 2533 function( elem, context, xml ) { 2534 input[0] = elem; 2535 matcher( input, null, xml, results ); 2536 // Don't keep the element (issue #299) 2537 input[0] = null; 2538 return !results.pop(); 2539 }; 2540 }), 2541 2542 "has": markFunction(function( selector ) { 2543 return function( elem ) { 2544 return Sizzle( selector, elem ).length > 0; 2545 }; 2546 }), 2547 2548 "contains": markFunction(function( text ) { 2549 text = text.replace( runescape, funescape ); 2550 return function( elem ) { 2551 return ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1; 2552 }; 2553 }), 2554 2555 // "Whether an element is represented by a :lang() selector 2556 // is based solely on the element's language value 2557 // being equal to the identifier C, 2558 // or beginning with the identifier C immediately followed by "-". 2559 // The matching of C against the element's language value is performed case-insensitively. 2560 // The identifier C does not have to be a valid language name." 2561 // http://www.w3.org/TR/selectors/#lang-pseudo 2562 "lang": markFunction( function( lang ) { 2563 // lang value must be a valid identifier 2564 if ( !ridentifier.test(lang || "") ) { 2565 Sizzle.error( "unsupported lang: " + lang ); 2566 } 2567 lang = lang.replace( runescape, funescape ).toLowerCase(); 2568 return function( elem ) { 2569 var elemLang; 2570 do { 2571 if ( (elemLang = documentIsHTML ? 2572 elem.lang : 2573 elem.getAttribute("xml:lang") || elem.getAttribute("lang")) ) { 2574 2575 elemLang = elemLang.toLowerCase(); 2576 return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0; 2577 } 2578 } while ( (elem = elem.parentNode) && elem.nodeType === 1 ); 2579 return false; 2580 }; 2581 }), 2582 2583 // Miscellaneous 2584 "target": function( elem ) { 2585 var hash = window.location && window.location.hash; 2586 return hash && hash.slice( 1 ) === elem.id; 2587 }, 2588 2589 "root": function( elem ) { 2590 return elem === docElem; 2591 }, 2592 2593 "focus": function( elem ) { 2594 return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex); 2595 }, 2596 2597 // Boolean properties 2598 "enabled":
vendor: 6,738 bytes, lines 2598-2849
2598function( elem ) { 2599 return elem.disabled === false; 2600 }, 2601 2602 "disabled": function( elem ) { 2603 return elem.disabled === true; 2604 }, 2605 2606 "checked": function( elem ) { 2607 // In CSS3, :checked should return both checked and selected elements 2608 // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked 2609 var nodeName = elem.nodeName.toLowerCase(); 2610 return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected); 2611 }, 2612 2613 "selected": function( elem ) { 2614 // Accessing this property makes selected-by-default 2615 // options in Safari work properly 2616 if ( elem.parentNode ) { 2617 elem.parentNode.selectedIndex; 2618 } 2619 2620 return elem.selected === true; 2621 }, 2622 2623 // Contents 2624 "empty": function( elem ) { 2625 // http://www.w3.org/TR/selectors/#empty-pseudo 2626 // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5), 2627 // but not by others (comment: 8; processing instruction: 7; etc.) 2628 // nodeType < 6 works because attributes (2) do not appear as children 2629 for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { 2630 if ( elem.nodeType < 6 ) { 2631 return false; 2632 } 2633 } 2634 return true; 2635 }, 2636 2637 "parent": function( elem ) { 2638 return !Expr.pseudos["empty"]( elem ); 2639 }, 2640 2641 // Element/input types 2642 "header": function( elem ) { 2643 return rheader.test( elem.nodeName ); 2644 }, 2645 2646 "input": function( elem ) { 2647 return rinputs.test( elem.nodeName ); 2648 }, 2649 2650 "button": function( elem ) { 2651 var name = elem.nodeName.toLowerCase(); 2652 return name === "input" && elem.type === "button" || name === "button"; 2653 }, 2654 2655 "text": function( elem ) { 2656 var attr; 2657 return elem.nodeName.toLowerCase() === "input" && 2658 elem.type === "text" && 2659 2660 // Support: IE<8 2661 // New HTML5 attribute values (e.g., "search") appear with elem.type === "text" 2662 ( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === "text" ); 2663 }, 2664 2665 // Position-in-collection 2666 "first": createPositionalPseudo(function() { 2667 return [ 0 ]; 2668 }), 2669 2670 "last": createPositionalPseudo(function( matchIndexes, length ) { 2671 return [ length - 1 ]; 2672 }), 2673 2674 "eq": createPositionalPseudo(function( matchIndexes, length, argument ) { 2675 return [ argument < 0 ? argument + length : argument ]; 2676 }), 2677 2678 "even": createPositionalPseudo(function( matchIndexes, length ) { 2679 var i = 0; 2680 for ( ; i < length; i += 2 ) { 2681 matchIndexes.push( i ); 2682 } 2683 return matchIndexes; 2684 }), 2685 2686 "odd": createPositionalPseudo(function( matchIndexes, length ) { 2687 var i = 1; 2688 for ( ; i < length; i += 2 ) { 2689 matchIndexes.push( i ); 2690 } 2691 return matchIndexes; 2692 }), 2693 2694 "lt": createPositionalPseudo(function( matchIndexes, length, argument ) { 2695 var i = argument < 0 ? argument + length : argument; 2696 for ( ; --i >= 0; ) { 2697 matchIndexes.push( i ); 2698 } 2699 return matchIndexes; 2700 }), 2701 2702 "gt": createPositionalPseudo(function( matchIndexes, length, argument ) { 2703 var i = argument < 0 ? argument + length : argument; 2704 for ( ; ++i < length; ) { 2705 matchIndexes.push( i ); 2706 } 2707 return matchIndexes; 2708 }) 2709 } 2710}; 2711 2712Expr.pseudos["nth"] = Expr.pseudos["eq"]; 2713 2714// Add button/input type pseudos 2715for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) { 2716 Expr.pseudos[ i ] = createInputPseudo( i ); 2717} 2718for ( i in { submit: true, reset: true } ) { 2719 Expr.pseudos[ i ] = createButtonPseudo( i ); 2720} 2721 2722// Easy API for creating new setFilters 2723function setFilters() {} 2724setFilters.prototype = Expr.filters = Expr.pseudos; 2725Expr.setFilters = new setFilters(); 2726 2727tokenize = Sizzle.tokenize = function( selector, parseOnly ) { 2728 var matched, match, tokens, type, 2729 soFar, groups, preFilters, 2730 cached = tokenCache[ selector + " " ]; 2731 2732 if ( cached ) { 2733 return parseOnly ? 0 : cached.slice( 0 ); 2734 } 2735 2736 soFar = selector; 2737 groups = []; 2738 preFilters = Expr.preFilter; 2739 2740 while ( soFar ) { 2741 2742 // Comma and first run 2743 if ( !matched || (match = rcomma.exec( soFar )) ) { 2744 if ( match ) { 2745 // Don't consume trailing commas as valid 2746 soFar = soFar.slice( match[0].length ) || soFar; 2747 } 2748 groups.push( (tokens = []) ); 2749 } 2750 2751 matched = false; 2752 2753 // Combinators 2754 if ( (match = rcombinators.exec( soFar )) ) { 2755 matched = match.shift(); 2756 tokens.push({ 2757 value: matched, 2758 // Cast descendant combinators to space 2759 type: match[0].replace( rtrim, " " ) 2760 }); 2761 soFar = soFar.slice( matched.length ); 2762 } 2763 2764 // Filters 2765 for ( type in Expr.filter ) { 2766 if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] || 2767 (match = preFilters[ type ]( match ))) ) { 2768 matched = match.shift(); 2769 tokens.push({ 2770 value: matched, 2771 type: type, 2772 matches: match 2773 }); 2774 soFar = soFar.slice( matched.length ); 2775 } 2776 } 2777 2778 if ( !matched ) { 2779 break; 2780 } 2781 } 2782 2783 // Return the length of the invalid excess 2784 // if we're just parsing 2785 // Otherwise, throw an error or return tokens 2786 return parseOnly ? 2787 soFar.length : 2788 soFar ? 2789 Sizzle.error( selector ) : 2790 // Cache the tokens 2791 tokenCache( selector, groups ).slice( 0 ); 2792}; 2793 2794function toSelector( tokens ) { 2795 var i = 0, 2796 len = tokens.length, 2797 selector = ""; 2798 for ( ; i < len; i++ ) { 2799 selector += tokens[i].value; 2800 } 2801 return selector; 2802} 2803 2804function addCombinator( matcher, combinator, base ) { 2805 var dir = combinator.dir, 2806 checkNonElements = base && dir === "parentNode", 2807 doneName = done++; 2808 2809 return combinator.first ? 2810 // Check against closest ancestor/preceding element 2811 function( elem, context, xml ) { 2812 while ( (elem = elem[ dir ]) ) { 2813 if ( elem.nodeType === 1 || checkNonElements ) { 2814 return matcher( elem, context, xml ); 2815 } 2816 } 2817 } : 2818 2819 // Check against all ancestor/preceding elements 2820 function( elem, context, xml ) { 2821 var oldCache, uniqueCache, outerCache, 2822 newCache = [ dirruns, doneName ]; 2823 2824 // We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching 2825 if ( xml ) { 2826 while ( (elem = elem[ dir ]) ) { 2827 if ( elem.nodeType === 1 || checkNonElements ) { 2828 if ( matcher( elem, context, xml ) ) { 2829 return true; 2830 } 2831 } 2832 } 2833 } else { 2834 while ( (elem = elem[ dir ]) ) { 2835 if ( elem.nodeType === 1 || checkNonElements ) { 2836 outerCache = elem[ expando ] || (elem[ expando ] = {}); 2837 2838 // Support: IE <9 only 2839 // Defend against cloned attroperties (jQuery gh-1709) 2840 uniqueCache = outerCache[ elem.uniqueID ] || (outerCache[ elem.uniqueID ] = {}); 2841 2842 if ( (oldCache = uniqueCache[ dir ]) && 2843 oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) { 2844 2845 // Assign to newCache so results back-propagate to previous elements 2846 return (newCache[ 2 ] = oldCache[ 2 ]); 2847 } else { 2848 // Reuse newcache so results back-propagate to previous elements 2849 uniqueCache[ dir
vendor: 12,959 bytes, lines 2849-3292
2849 ] = newCache; 2850 2851 // A match means we're done; a fail means we have to keep checking 2852 if ( (newCache[ 2 ] = matcher( elem, context, xml )) ) { 2853 return true; 2854 } 2855 } 2856 } 2857 } 2858 } 2859 }; 2860} 2861 2862function elementMatcher( matchers ) { 2863 return matchers.length > 1 ? 2864 function( elem, context, xml ) { 2865 var i = matchers.length; 2866 while ( i-- ) { 2867 if ( !matchers[i]( elem, context, xml ) ) { 2868 return false; 2869 } 2870 } 2871 return true; 2872 } : 2873 matchers[0]; 2874} 2875 2876function multipleContexts( selector, contexts, results ) { 2877 var i = 0, 2878 len = contexts.length; 2879 for ( ; i < len; i++ ) { 2880 Sizzle( selector, contexts[i], results ); 2881 } 2882 return results; 2883} 2884 2885function condense( unmatched, map, filter, context, xml ) { 2886 var elem, 2887 newUnmatched = [], 2888 i = 0, 2889 len = unmatched.length, 2890 mapped = map != null; 2891 2892 for ( ; i < len; i++ ) { 2893 if ( (elem = unmatched[i]) ) { 2894 if ( !filter || filter( elem, context, xml ) ) { 2895 newUnmatched.push( elem ); 2896 if ( mapped ) { 2897 map.push( i ); 2898 } 2899 } 2900 } 2901 } 2902 2903 return newUnmatched; 2904} 2905 2906function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) { 2907 if ( postFilter && !postFilter[ expando ] ) { 2908 postFilter = setMatcher( postFilter ); 2909 } 2910 if ( postFinder && !postFinder[ expando ] ) { 2911 postFinder = setMatcher( postFinder, postSelector ); 2912 } 2913 return markFunction(function( seed, results, context, xml ) { 2914 var temp, i, elem, 2915 preMap = [], 2916 postMap = [], 2917 preexisting = results.length, 2918 2919 // Get initial elements from seed or context 2920 elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ), 2921 2922 // Prefilter to get matcher input, preserving a map for seed-results synchronization 2923 matcherIn = preFilter && ( seed || !selector ) ? 2924 condense( elems, preMap, preFilter, context, xml ) : 2925 elems, 2926 2927 matcherOut = matcher ? 2928 // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results, 2929 postFinder || ( seed ? preFilter : preexisting || postFilter ) ? 2930 2931 // ...intermediate processing is necessary 2932 [] : 2933 2934 // ...otherwise use results directly 2935 results : 2936 matcherIn; 2937 2938 // Find primary matches 2939 if ( matcher ) { 2940 matcher( matcherIn, matcherOut, context, xml ); 2941 } 2942 2943 // Apply postFilter 2944 if ( postFilter ) { 2945 temp = condense( matcherOut, postMap ); 2946 postFilter( temp, [], context, xml ); 2947 2948 // Un-match failing elements by moving them back to matcherIn 2949 i = temp.length; 2950 while ( i-- ) { 2951 if ( (elem = temp[i]) ) { 2952 matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem); 2953 } 2954 } 2955 } 2956 2957 if ( seed ) { 2958 if ( postFinder || preFilter ) { 2959 if ( postFinder ) { 2960 // Get the final matcherOut by condensing this intermediate into postFinder contexts 2961 temp = []; 2962 i = matcherOut.length; 2963 while ( i-- ) { 2964 if ( (elem = matcherOut[i]) ) { 2965 // Restore matcherIn since elem is not yet a final match 2966 temp.push( (matcherIn[i] = elem) ); 2967 } 2968 } 2969 postFinder( null, (matcherOut = []), temp, xml ); 2970 } 2971 2972 // Move matched elements from seed to results to keep them synchronized 2973 i = matcherOut.length; 2974 while ( i-- ) { 2975 if ( (elem = matcherOut[i]) && 2976 (temp = postFinder ? indexOf( seed, elem ) : preMap[i]) > -1 ) { 2977 2978 seed[temp] = !(results[temp] = elem); 2979 } 2980 } 2981 } 2982 2983 // Add elements to results, through postFinder if defined 2984 } else { 2985 matcherOut = condense( 2986 matcherOut === results ? 2987 matcherOut.splice( preexisting, matcherOut.length ) : 2988 matcherOut 2989 ); 2990 if ( postFinder ) { 2991 postFinder( null, results, matcherOut, xml ); 2992 } else { 2993 push.apply( results, matcherOut ); 2994 } 2995 } 2996 }); 2997} 2998 2999function matcherFromTokens( tokens ) { 3000 var checkContext, matcher, j, 3001 len = tokens.length, 3002 leadingRelative = Expr.relative[ tokens[0].type ], 3003 implicitRelative = leadingRelative || Expr.relative[" "], 3004 i = leadingRelative ? 1 : 0, 3005 3006 // The foundational matcher ensures that elements are reachable from top-level context(s) 3007 matchContext = addCombinator( function( elem ) { 3008 return elem === checkContext; 3009 }, implicitRelative, true ), 3010 matchAnyContext = addCombinator( function( elem ) { 3011 return indexOf( checkContext, elem ) > -1; 3012 }, implicitRelative, true ), 3013 matchers = [ function( elem, context, xml ) { 3014 var ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || ( 3015 (checkContext = context).nodeType ? 3016 matchContext( elem, context, xml ) : 3017 matchAnyContext( elem, context, xml ) ); 3018 // Avoid hanging onto element (issue #299) 3019 checkContext = null; 3020 return ret; 3021 } ]; 3022 3023 for ( ; i < len; i++ ) { 3024 if ( (matcher = Expr.relative[ tokens[i].type ]) ) { 3025 matchers = [ addCombinator(elementMatcher( matchers ), matcher) ]; 3026 } else { 3027 matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches ); 3028 3029 // Return special upon seeing a positional matcher 3030 if ( matcher[ expando ] ) { 3031 // Find the next relative operator (if any) for proper handling 3032 j = ++i; 3033 for ( ; j < len; j++ ) { 3034 if ( Expr.relative[ tokens[j].type ] ) { 3035 break; 3036 } 3037 } 3038 return setMatcher( 3039 i > 1 && elementMatcher( matchers ), 3040 i > 1 && toSelector( 3041 // If the preceding token was a descendant combinator, insert an implicit any-element `*` 3042 tokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === " " ? "*" : "" }) 3043 ).replace( rtrim, "$1" ), 3044 matcher, 3045 i < j && matcherFromTokens( tokens.slice( i, j ) ), 3046 j < len && matcherFromTokens( (tokens = tokens.slice( j )) ), 3047 j < len && toSelector( tokens ) 3048 ); 3049 } 3050 matchers.push( matcher ); 3051 } 3052 } 3053 3054 return elementMatcher( matchers ); 3055} 3056 3057function matcherFromGroupMatchers( elementMatchers, setMatchers ) { 3058 var bySet = setMatchers.length > 0, 3059 byElement = elementMatchers.length > 0, 3060 superMatcher = function( seed, context, xml, results, outermost ) { 3061 var elem, j, matcher, 3062 matchedCount = 0, 3063 i = "0", 3064 unmatched = seed && [], 3065 setMatched = [], 3066 contextBackup = outermostContext, 3067 // We must always have either seed elements or outermost context 3068 elems = seed || byElement && Expr.find["TAG"]( "*", outermost ), 3069 // Use integer dirruns iff this is the outermost matcher 3070 dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1), 3071 len = elems.length; 3072 3073 if ( outermost ) { 3074 outermostContext = context === document || context || outermost; 3075 } 3076 3077 // Add elements passing elementMatchers directly to results 3078 // Support: IE<9, Safari 3079 // Tolerate NodeList properties (IE: "length"; Safari: <number>) matching elements by id 3080 for ( ; i !== len && (elem = elems[i]) != null; i++ ) { 3081 if ( byElement && elem ) { 3082 j = 0; 3083 if ( !context && elem.ownerDocument !== document ) { 3084 setDocument( elem ); 3085 xml = !documentIsHTML; 3086 } 3087 while ( (matcher = elementMatchers[j++]) ) { 3088 if ( matcher( elem, context || document, xml) ) { 3089 results.push( elem ); 3090 break; 3091 } 3092 } 3093 if ( outermost ) { 3094 dirruns = dirrunsUnique; 3095 } 3096 } 3097 3098 // Track unmatched elements for set filters 3099 if ( bySet ) { 3100 // They will have gone through all possible matchers 3101 if ( (elem = !matcher && elem) ) { 3102 matchedCount--; 3103 } 3104 3105 // Lengthen the array for every element, matched or not 3106 if ( seed ) { 3107 unmatched.push( elem ); 3108 } 3109 } 3110 } 3111 3112 // `i` is now the count of elements visited above, and adding it to `matchedCount` 3113 // makes the latter nonnegative. 3114 matchedCount += i; 3115 3116 // Apply set filters to unmatched elements 3117 // NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount` 3118 // equals `i`), unless we didn't visit _any_ elements in the above loop because we have 3119 // no element matchers and no seed. 3120 // Incrementing an initially-string "0" `i` allows `i` to remain a string only in that 3121 // case, which will result in a "00" `matchedCount` that differs from `i` but is also 3122 // numerically zero. 3123 if ( bySet && i !== matchedCount ) { 3124 j = 0; 3125 while ( (matcher = setMatchers[j++]) ) { 3126 matcher( unmatched, setMatched, context, xml ); 3127 } 3128 3129 if ( seed ) { 3130 // Reintegrate element matches to eliminate the need for sorting 3131 if ( matchedCount > 0 ) { 3132 while ( i-- ) { 3133 if ( !(unmatched[i] || setMatched[i]) ) { 3134 setMatched[i] = pop.call( results ); 3135 } 3136 } 3137 } 3138 3139 // Discard index placeholder values to get only actual matches 3140 setMatched = condense( setMatched ); 3141 } 3142 3143 // Add matches to results 3144 push.apply( results, setMatched ); 3145 3146 // Seedless set matches succeeding multiple successful matchers stipulate sorting 3147 if ( outermost && !seed && setMatched.length > 0 && 3148 ( matchedCount + setMatchers.length ) > 1 ) { 3149 3150 Sizzle.uniqueSort( results ); 3151 } 3152 } 3153 3154 // Override manipulation of globals by nested matchers 3155 if ( outermost ) { 3156 dirruns = dirrunsUnique; 3157 outermostContext = contextBackup; 3158 } 3159 3160 return unmatched; 3161 }; 3162 3163 return bySet ? 3164 markFunction( superMatcher ) : 3165 superMatcher; 3166} 3167 3168compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) { 3169 var i, 3170 setMatchers = [], 3171 elementMatchers = [], 3172 cached = compilerCache[ selector + " " ]; 3173 3174 if ( !cached ) { 3175 // Generate a function of recursive functions that can be used to check each element 3176 if ( !match ) { 3177 match = tokenize( selector ); 3178 } 3179 i = match.length; 3180 while ( i-- ) { 3181 cached = matcherFromTokens( match[i] ); 3182 if ( cached[ expando ] ) { 3183 setMatchers.push( cached ); 3184 } else { 3185 elementMatchers.push( cached ); 3186 } 3187 } 3188 3189 // Cache the compiled function 3190 cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) ); 3191 3192 // Save selector and tokenization 3193 cached.selector = selector; 3194 } 3195 return cached; 3196}; 3197 3198/** 3199 * A low-level selection function that works with Sizzle's compiled 3200 * selector functions 3201 * @param {String|Function} selector A selector or a pre-compiled 3202 * selector function built with Sizzle.compile 3203 * @param {Element} context 3204 * @param {Array} [results] 3205 * @param {Array} [seed] A set of elements to match against 3206 */ 3207select = Sizzle.select = function( selector, context, results, seed ) { 3208 var i, tokens, token, type, find, 3209 compiled = typeof selector === "function" && selector, 3210 match = !seed && tokenize( (selector = compiled.selector || selector) ); 3211 3212 results = results || []; 3213 3214 // Try to minimize operations if there is only one selector in the list and no seed 3215 // (the latter of which guarantees us context) 3216 if ( match.length === 1 ) { 3217 3218 // Reduce context if the leading compound selector is an ID 3219 tokens = match[0] = match[0].slice( 0 ); 3220 if ( tokens.length > 2 && (token = tokens[0]).type === "ID" && 3221 support.getById && context.nodeType === 9 && documentIsHTML && 3222 Expr.relative[ tokens[1].type ] ) { 3223 3224 context = ( Expr.find["ID"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0]; 3225 if ( !context ) { 3226 return results; 3227 3228 // Precompiled matchers will still verify ancestry, so step up a level 3229 } else if ( compiled ) { 3230 context = context.parentNode; 3231 } 3232 3233 selector = selector.slice( tokens.shift().value.length ); 3234 } 3235 3236 // Fetch a seed set for right-to-left matching 3237 i = matchExpr["needsContext"].test( selector ) ? 0 : tokens.length; 3238 while ( i-- ) { 3239 token = tokens[i]; 3240 3241 // Abort if we hit a combinator 3242 if ( Expr.relative[ (type = token.type) ] ) { 3243 break; 3244 } 3245 if ( (find = Expr.find[ type ]) ) { 3246 // Search, expanding context for leading sibling combinators 3247 if ( (seed = find( 3248 token.matches[0].replace( runescape, funescape ), 3249 rsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context 3250 )) ) { 3251 3252 // If seed is empty or no tokens remain, we can return early 3253 tokens.splice( i, 1 ); 3254 selector = seed.length && toSelector( tokens ); 3255 if ( !selector ) { 3256 push.apply( results, seed ); 3257 return results; 3258 } 3259 3260 break; 3261 } 3262 } 3263 } 3264 } 3265 3266 // Compile and execute a filtering function if one is not provided 3267 // Provide `match` to avoid retokenization if we modified the selector above 3268 ( compiled || compile( selector, match ) )( 3269 seed, 3270 context, 3271 !documentIsHTML, 3272 results, 3273 !context || rsibling.test( selector ) && testContext( context.parentNode ) || context 3274 ); 3275 return results; 3276}; 3277 3278// One-time assignments 3279 3280// Sort stability 3281support.sortStable = expando.split("").sort( sortOrder ).join("") === expando; 3282 3283// Support: Chrome 14-35+ 3284// Always assume duplicates if they aren't passed to the comparison function 3285support.detectDuplicates = !!hasDuplicate; 3286 3287// Initialize against the default document 3288setDocument(); 3289 3290// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27) 3291// Detached nodes confoundingly follow *each other* 3292support.sortDetached = assert(function(
vendor: 3,546 bytes, lines 3292-3445
3292div1 ) { 3293 // Should return 1, but returns 4 (following) 3294 return div1.compareDocumentPosition( document.createElement("div") ) & 1; 3295}); 3296 3297// Support: IE<8 3298// Prevent attribute/property "interpolation" 3299// http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx 3300if ( !assert(function( div ) { 3301 div.innerHTML = "<a href='#'></a>"; 3302 return div.firstChild.getAttribute("href") === "#" ; 3303}) ) { 3304 addHandle( "type|href|height|width", function( elem, name, isXML ) { 3305 if ( !isXML ) { 3306 return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 ); 3307 } 3308 }); 3309} 3310 3311// Support: IE<9 3312// Use defaultValue in place of getAttribute("value") 3313if ( !support.attributes || !assert(function( div ) { 3314 div.innerHTML = "<input/>"; 3315 div.firstChild.setAttribute( "value", "" ); 3316 return div.firstChild.getAttribute( "value" ) === ""; 3317}) ) { 3318 addHandle( "value", function( elem, name, isXML ) { 3319 if ( !isXML && elem.nodeName.toLowerCase() === "input" ) { 3320 return elem.defaultValue; 3321 } 3322 }); 3323} 3324 3325// Support: IE<9 3326// Use getAttributeNode to fetch booleans when getAttribute lies 3327if ( !assert(function( div ) { 3328 return div.getAttribute("disabled") == null; 3329}) ) { 3330 addHandle( booleans, function( elem, name, isXML ) { 3331 var val; 3332 if ( !isXML ) { 3333 return elem[ name ] === true ? name.toLowerCase() : 3334 (val = elem.getAttributeNode( name )) && val.specified ? 3335 val.value : 3336 null; 3337 } 3338 }); 3339} 3340 3341return Sizzle; 3342 3343})( window ); 3344 3345 3346 3347jQuery.find = Sizzle; 3348jQuery.expr = Sizzle.selectors; 3349jQuery.expr[ ":" ] = jQuery.expr.pseudos; 3350jQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort; 3351jQuery.text = Sizzle.getText; 3352jQuery.isXMLDoc = Sizzle.isXML; 3353jQuery.contains = Sizzle.contains; 3354 3355 3356 3357var dir = function( elem, dir, until ) { 3358 var matched = [], 3359 truncate = until !== undefined; 3360 3361 while ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) { 3362 if ( elem.nodeType === 1 ) { 3363 if ( truncate && jQuery( elem ).is( until ) ) { 3364 break; 3365 } 3366 matched.push( elem ); 3367 } 3368 } 3369 return matched; 3370}; 3371 3372 3373var siblings = function( n, elem ) { 3374 var matched = []; 3375 3376 for ( ; n; n = n.nextSibling ) { 3377 if ( n.nodeType === 1 && n !== elem ) { 3378 matched.push( n ); 3379 } 3380 } 3381 3382 return matched; 3383}; 3384 3385 3386var rneedsContext = jQuery.expr.match.needsContext; 3387 3388var rsingleTag = ( /^<([\w-]+)\s*\/?>(?:<\/\1>|)$/ ); 3389 3390 3391 3392var risSimple = /^.[^:#\[\.,]*$/; 3393 3394// Implement the identical functionality for filter and not 3395function winnow( elements, qualifier, not ) { 3396 if ( jQuery.isFunction( qualifier ) ) { 3397 return jQuery.grep( elements, function( elem, i ) { 3398 /* jshint -W018 */ 3399 return !!qualifier.call( elem, i, elem ) !== not; 3400 } ); 3401 3402 } 3403 3404 if ( qualifier.nodeType ) { 3405 return jQuery.grep( elements, function( elem ) { 3406 return ( elem === qualifier ) !== not; 3407 } ); 3408 3409 } 3410 3411 if ( typeof qualifier === "string" ) { 3412 if ( risSimple.test( qualifier ) ) { 3413 return jQuery.filter( qualifier, elements, not ); 3414 } 3415 3416 qualifier = jQuery.filter( qualifier, elements ); 3417 } 3418 3419 return jQuery.grep( elements, function( elem ) { 3420 return ( jQuery.inArray( elem, qualifier ) > -1 ) !== not; 3421 } ); 3422} 3423 3424jQuery.filter = function( expr, elems, not ) { 3425 var elem = elems[ 0 ]; 3426 3427 if ( not ) { 3428 expr = ":not(" + expr + ")"; 3429 } 3430 3431 return elems.length === 1 && elem.nodeType === 1 ? 3432 jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [] : 3433 jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) { 3434 return elem.nodeType === 1; 3435 } ) ); 3436}; 3437 3438jQuery.fn.extend( { 3439 find: function( selector ) { 3440 var i, 3441 ret = [], 3442 self = this, 3443 len = self.length; 3444 3445 if ( typeof selector !== "string" ) {
3446 return this.pushStack( jQuery( selector ).filter( function() { 3447 for ( i = 0; i < len; i++ ) { 3448 if ( jQuery.contains( self[ i ], this ) ) { 3449 return true; 3450 } 3451 } 3452 } ) ); 3453 } 3454 3455 for ( i = 0; i < len; i++ ) { 3456 jQuery.find( selector, self[ i ], ret ); 3457 } 3458 3459 // Needed because $( selector, context ) becomes $( context ).find( selector ) 3460 ret = this.pushStack( len > 1 ? jQuery.unique( ret ) : ret ); 3461 ret.selector = this.selector ? this.selector + " " + selector : selector; 3462 return ret; 3463 }, 3464 filter: function( selector ) { 3465 return this.pushStack( winnow( this, selector || [], false ) ); 3466 }, 3467 not: function( selector ) { 3468 return this.pushStack( winnow( this, selector || [], true ) ); 3469 }, 3470 is: function( selector ) { 3471 return !!winnow( 3472 this, 3473 3474 // If this is a positional/relative selector, check membership in the returned set 3475 // so $("p:first").is("p:last") won't return true for a doc with two "p". 3476 typeof selector === "string" && rneedsContext.test( selector ) ? 3477 jQuery( selector ) : 3478 selector || [], 3479 false 3480 ).length; 3481 } 3482} ); 3483 3484 3485// Initialize a jQuery object 3486 3487 3488// A central reference to the root jQuery(document) 3489var rootjQuery, 3490 3491 // A simple way to check for HTML strings 3492 // Prioritize #id over <tag> to avoid XSS via location.hash (#9521) 3493 // Strict HTML recognition (#11290: must start with <) 3494 rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/, 3495 3496 init = jQuery.fn.init = function( selector, context, root ) { 3497 var match, elem; 3498 3499 // HANDLE: $(""), $(null), $(undefined), $(false) 3500 if ( !selector ) { 3501 return this; 3502 } 3503 3504 // init accepts an alternate rootjQuery 3505 // so migrate can support jQuery.sub (gh-2101) 3506 root = root || rootjQuery; 3507 3508 // Handle HTML strings 3509 if ( typeof selector === "string" ) { 3510 if ( selector.charAt( 0 ) === "<" && 3511 selector.charAt( selector.length - 1 ) === ">" && 3512 selector.length >= 3 ) { 3513 3514 // Assume that strings that start and end with <> are HTML and skip the regex check 3515 match = [ null, selector, null ]; 3516 3517 } else { 3518 match = rquickExpr.exec( selector ); 3519 } 3520 3521 // Match html or make sure no context is specified for #id 3522 if ( match && ( match[ 1 ] || !context ) ) { 3523 3524 // HANDLE: $(html) -> $(array) 3525 if ( match[ 1 ] ) { 3526 context = context instanceof jQuery ? context[ 0 ] : context; 3527 3528 // scripts is true for back-compat 3529 // Intentionally let the error be thrown if parseHTML is not present 3530 jQuery.merge( this, jQuery.parseHTML( 3531 match[ 1 ], 3532 context && context.nodeType ? context.ownerDocument || context : document, 3533 true 3534 ) ); 3535 3536 // HANDLE: $(html, props) 3537 if ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) { 3538 for ( match in context ) { 3539 3540 // Properties of context are called as methods if possible 3541 if ( jQuery.isFunction( this[ match ] ) ) { 3542 this[ match ]( context[ match ] ); 3543 3544 // ...and otherwise set as attributes 3545 } else { 3546 this.attr( match, context[ match ] ); 3547 } 3548 } 3549 } 3550 3551 return this; 3552 3553 // HANDLE: $(#id) 3554 } else { 3555 elem = document.getElementById( match[ 2 ] ); 3556 3557 // Check parentNode to catch when Blackberry 4.6 returns 3558 // nodes that are no longer in the document #6963 3559 if ( elem && elem.parentNode ) { 3560 3561 // Handle the case where IE and Opera return items 3562 // by name instead of ID 3563 if ( elem.id !== match[ 2 ] ) { 3564 return rootjQuery.find( selector ); 3565 } 3566 3567 // Otherwise, we inject the element directly into the jQuery object 3568 this.length = 1; 3569 this[ 0 ] = elem; 3570 } 3571 3572 this.context = document; 3573 this.selector = selector; 3574 return this; 3575 } 3576 3577 // HANDLE: $(expr, $(...)) 3578 } else if ( !context || context.jquery ) { 3579 return ( context || root ).find( selector ); 3580 3581 // HANDLE: $(expr, context) 3582 // (which is just equivalent to: $(context).find(expr) 3583 } else { 3584 return this.constructor( context ).find( selector ); 3585 } 3586 3587 // HANDLE: $(DOMElement) 3588 } else if ( selector.nodeType ) { 3589 this.context = this[ 0 ] = selector; 3590 this.length = 1; 3591 return this; 3592 3593 // HANDLE: $(function) 3594 // Shortcut for document ready 3595 } else if ( jQuery.isFunction( selector ) ) { 3596 return typeof root.ready !== "undefined" ? 3597 root.ready( selector ) : 3598 3599 // Execute immediately if ready is not present 3600 selector( jQuery ); 3601 } 3602 3603 if ( selector.selector !== undefined ) { 3604 this.selector = selector.selector; 3605 this.context = selector.context; 3606 } 3607 3608 return jQuery.makeArray( selector, this ); 3609 }; 3610 3611// Give the init function the jQuery prototype for later instantiation 3612init.prototype = jQuery.fn; 3613 3614// Initialize central reference 3615rootjQuery = jQuery( document ); 3616 3617 3618var rparentsprev = /^(?:parents|prev(?:Until|All))/, 3619 3620 // methods guaranteed to produce a unique set when starting from a unique set 3621 guaranteedUnique = { 3622 children: true, 3623 contents: true, 3624 next: true, 3625 prev: true 3626 }; 3627 3628jQuery.fn.extend( { 3629 has: function( target ) { 3630 var i, 3631 targets = jQuery( target, this ), 3632 len = targets.length; 3633 3634 return this.filter( function() { 3635 for ( i = 0; i < len; i++ ) { 3636 if ( jQuery.contains( this, targets[ i ] ) ) { 3637 return true; 3638 } 3639 } 3640 } ); 3641 }, 3642 3643 closest: function( selectors, context ) { 3644 var cur, 3645 i = 0, 3646 l = this.length, 3647 matched = [], 3648 pos = rneedsContext.test( selectors ) || typeof selectors !== "string" ?
vendor: 5,562 bytes, lines 3649-3867
3649 jQuery( selectors, context || this.context ) : 3650 0; 3651 3652 for ( ; i < l; i++ ) { 3653 for ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) { 3654 3655 // Always skip document fragments 3656 if ( cur.nodeType < 11 && ( pos ? 3657 pos.index( cur ) > -1 : 3658 3659 // Don't pass non-elements to Sizzle 3660 cur.nodeType === 1 && 3661 jQuery.find.matchesSelector( cur, selectors ) ) ) { 3662 3663 matched.push( cur ); 3664 break; 3665 } 3666 } 3667 } 3668 3669 return this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched ); 3670 }, 3671 3672 // Determine the position of an element within 3673 // the matched set of elements 3674 index: function( elem ) { 3675 3676 // No argument, return index in parent 3677 if ( !elem ) { 3678 return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1; 3679 } 3680 3681 // index in selector 3682 if ( typeof elem === "string" ) { 3683 return jQuery.inArray( this[ 0 ], jQuery( elem ) ); 3684 } 3685 3686 // Locate the position of the desired element 3687 return jQuery.inArray( 3688 3689 // If it receives a jQuery object, the first element is used 3690 elem.jquery ? elem[ 0 ] : elem, this ); 3691 }, 3692 3693 add: function( selector, context ) { 3694 return this.pushStack( 3695 jQuery.uniqueSort( 3696 jQuery.merge( this.get(), jQuery( selector, context ) ) 3697 ) 3698 ); 3699 }, 3700 3701 addBack: function( selector ) { 3702 return this.add( selector == null ? 3703 this.prevObject : this.prevObject.filter( selector ) 3704 ); 3705 } 3706} ); 3707 3708function sibling( cur, dir ) { 3709 do { 3710 cur = cur[ dir ]; 3711 } while ( cur && cur.nodeType !== 1 ); 3712 3713 return cur; 3714} 3715 3716jQuery.each( { 3717 parent: function( elem ) { 3718 var parent = elem.parentNode; 3719 return parent && parent.nodeType !== 11 ? parent : null; 3720 }, 3721 parents: function( elem ) { 3722 return dir( elem, "parentNode" ); 3723 }, 3724 parentsUntil: function( elem, i, until ) { 3725 return dir( elem, "parentNode", until ); 3726 }, 3727 next: function( elem ) { 3728 return sibling( elem, "nextSibling" ); 3729 }, 3730 prev: function( elem ) { 3731 return sibling( elem, "previousSibling" ); 3732 }, 3733 nextAll: function( elem ) { 3734 return dir( elem, "nextSibling" ); 3735 }, 3736 prevAll: function( elem ) { 3737 return dir( elem, "previousSibling" ); 3738 }, 3739 nextUntil: function( elem, i, until ) { 3740 return dir( elem, "nextSibling", until ); 3741 }, 3742 prevUntil: function( elem, i, until ) { 3743 return dir( elem, "previousSibling", until ); 3744 }, 3745 siblings: function( elem ) { 3746 return siblings( ( elem.parentNode || {} ).firstChild, elem ); 3747 }, 3748 children: function( elem ) { 3749 return siblings( elem.firstChild ); 3750 }, 3751 contents: function( elem ) { 3752 return jQuery.nodeName( elem, "iframe" ) ? 3753 elem.contentDocument || elem.contentWindow.document : 3754 jQuery.merge( [], elem.childNodes ); 3755 } 3756}, function( name, fn ) { 3757 jQuery.fn[ name ] = function( until, selector ) { 3758 var ret = jQuery.map( this, fn, until ); 3759 3760 if ( name.slice( -5 ) !== "Until" ) { 3761 selector = until; 3762 } 3763 3764 if ( selector && typeof selector === "string" ) { 3765 ret = jQuery.filter( selector, ret ); 3766 } 3767 3768 if ( this.length > 1 ) { 3769 3770 // Remove duplicates 3771 if ( !guaranteedUnique[ name ] ) { 3772 ret = jQuery.uniqueSort( ret ); 3773 } 3774 3775 // Reverse order for parents* and prev-derivatives 3776 if ( rparentsprev.test( name ) ) { 3777 ret = ret.reverse(); 3778 } 3779 } 3780 3781 return this.pushStack( ret ); 3782 }; 3783} ); 3784var rnotwhite = ( /\S+/g ); 3785 3786 3787 3788// Convert String-formatted options into Object-formatted ones 3789function createOptions( options ) { 3790 var object = {}; 3791 jQuery.each( options.match( rnotwhite ) || [], function( _, flag ) { 3792 object[ flag ] = true; 3793 } ); 3794 return object; 3795} 3796 3797/* 3798 * Create a callback list using the following parameters: 3799 * 3800 * options: an optional list of space-separated options that will change how 3801 * the callback list behaves or a more traditional option object 3802 * 3803 * By default a callback list will act like an event callback list and can be 3804 * "fired" multiple times. 3805 * 3806 * Possible options: 3807 * 3808 * once: will ensure the callback list can only be fired once (like a Deferred) 3809 * 3810 * memory: will keep track of previous values and will call any callback added 3811 * after the list has been fired right away with the latest "memorized" 3812 * values (like a Deferred) 3813 * 3814 * unique: will ensure a callback can only be added once (no duplicate in the list) 3815 * 3816 * stopOnFalse: interrupt callings when a callback returns false 3817 * 3818 */ 3819jQuery.Callbacks = function( options ) { 3820 3821 // Convert options from String-formatted to Object-formatted if needed 3822 // (we check in cache first) 3823 options = typeof options === "string" ? 3824 createOptions( options ) : 3825 jQuery.extend( {}, options ); 3826 3827 var // Flag to know if list is currently firing 3828 firing, 3829 3830 // Last fire value for non-forgettable lists 3831 memory, 3832 3833 // Flag to know if list was already fired 3834 fired, 3835 3836 // Flag to prevent firing 3837 locked, 3838 3839 // Actual callback list 3840 list = [], 3841 3842 // Queue of execution data for repeatable lists 3843 queue = [], 3844 3845 // Index of currently firing callback (modified by add/remove as needed) 3846 firingIndex = -1, 3847 3848 // Fire callbacks 3849 fire = function() { 3850 3851 // Enforce single-firing 3852 locked = options.once; 3853 3854 // Execute callbacks for all pending executions, 3855 // respecting firingIndex overrides and runtime changes 3856 fired = firing = true; 3857 for ( ; queue.length; firingIndex = -1 ) { 3858 memory = queue.shift(); 3859 while ( ++firingIndex < list.length ) { 3860 3861 // Run callback and check for early termination 3862 if ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false && 3863 options.stopOnFalse ) { 3864 3865 // Jump to end and forget the data so .add doesn't re-fire 3866 firingIndex = list.length; 3867 memory = false;
3868 } 3869 } 3870 } 3871 3872 // Forget the data if we're done with it 3873 if ( !options.memory ) { 3874 memory = false; 3875 } 3876 3877 firing = false; 3878 3879 // Clean up if we're done firing for good 3880 if ( locked ) { 3881 3882 // Keep an empty list if we have data for future add calls 3883 if ( memory ) { 3884 list = []; 3885 3886 // Otherwise, this object is spent 3887 } else { 3888 list = ""; 3889 } 3890 } 3891 }, 3892 3893 // Actual Callbacks object 3894 self = { 3895 3896 // Add a callback or a collection of callbacks to the list 3897 add: function() { 3898 if ( list ) { 3899 3900 // If we have memory from a past run, we should fire after adding 3901 if ( memory && !firing ) { 3902 firingIndex = list.length - 1; 3903 queue.push( memory ); 3904 } 3905 3906 ( function add( args ) { 3907 jQuery.each( args, function( _, arg ) { 3908 if ( jQuery.isFunction( arg ) ) { 3909 if ( !options.unique || !self.has( arg ) ) { 3910 list.push( arg ); 3911 } 3912 } else if ( arg && arg.length && jQuery.type( arg ) !== "string" ) { 3913 3914 // Inspect recursively 3915 add( arg ); 3916 } 3917 } ); 3918 } )( arguments ); 3919 3920 if ( memory && !firing ) { 3921 fire(); 3922 } 3923 } 3924 return this; 3925 }, 3926 3927 // Remove a callback from the list 3928 remove: function() { 3929 jQuery.each( arguments, function( _, arg ) { 3930 var index; 3931 while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) { 3932 list.splice( index, 1 ); 3933 3934 // Handle firing indexes 3935 if ( index <= firingIndex ) { 3936 firingIndex--; 3937 } 3938 } 3939 } ); 3940 return this; 3941 }, 3942 3943 // Check if a given callback is in the list. 3944 // If no argument is given, return whether or not list has callbacks attached. 3945 has: function( fn ) { 3946 return fn ? 3947 jQuery.inArray( fn, list ) > -1 : 3948 list.length > 0; 3949 }, 3950 3951 // Remove all callbacks from the list 3952 empty: function() { 3953 if ( list ) { 3954 list = []; 3955 } 3956 return this; 3957 }, 3958 3959 // Disable .fire and .add 3960 // Abort any current/pending executions 3961 // Clear all callbacks and values 3962 disable: function() { 3963 locked = queue = []; 3964 list = memory = ""; 3965 return this; 3966 }, 3967 disabled: function() { 3968 return !list; 3969 }, 3970 3971 // Disable .fire 3972 // Also disable .add unless we have memory (since it would have no effect) 3973 // Abort any pending executions 3974 lock: function() { 3975 locked = true; 3976 if ( !memory ) { 3977 self.disable(); 3978 } 3979 return this; 3980 }, 3981 locked: function() { 3982 return !!locked; 3983 }, 3984 3985 // Call all callbacks with the given context and arguments 3986 fireWith: function( context, args ) { 3987 if ( !locked ) { 3988 args = args || []; 3989 args = [ context, args.slice ? args.slice() : args ]; 3990 queue.push( args ); 3991 if ( !firing ) { 3992 fire(); 3993 } 3994 } 3995 return this; 3996 }, 3997 3998 // Call all the callbacks with the given arguments 3999 fire: function() { 4000 self.fireWith( this, arguments ); 4001 return this; 4002 }, 4003 4004 // To know if the callbacks have already been called at least once 4005 fired: function() { 4006 return !!fired; 4007 } 4008 }; 4009 4010 return self; 4011}; 4012 4013 4014jQuery.extend( { 4015 4016 Deferred: function( func ) { 4017 var tuples = [ 4018 4019 // action, add listener, listener list, final state 4020 [ "resolve", "done", jQuery.Callbacks( "once memory" ), "resolved" ], 4021 [ "reject", "fail", jQuery.Callbacks( "once memory" ), "rejected" ], 4022 [ "notify", "progress", jQuery.Callbacks( "memory" ) ] 4023 ], 4024 state = "pending", 4025 promise = { 4026 state: function() { 4027 return state; 4028 }, 4029 always: function() { 4030 deferred.done( arguments ).fail( arguments ); 4031 return this; 4032 }, 4033 then: function( /* fnDone, fnFail, fnProgress */ ) { 4034 var fns = arguments; 4035 return jQuery.Deferred( function( newDefer ) { 4036 jQuery.each( tuples, function( i, tuple ) { 4037 var fn = jQuery.isFunction( fns[ i ] ) && fns[ i ]; 4038 4039 // deferred[ done | fail | progress ] for forwarding actions to newDefer 4040 deferred[ tuple[ 1 ] ]( function() { 4041 var returned = fn && fn.apply( this, arguments ); 4042 if ( returned && jQuery.isFunction( returned.promise ) ) { 4043 returned.promise() 4044 .progress( newDefer.notify ) 4045 .done( newDefer.resolve ) 4046 .fail( newDefer.reject ); 4047 } else { 4048 newDefer[ tuple[ 0 ] + "With" ]( 4049 this === promise ? newDefer.promise() : this, 4050 fn ? [ returned ] : arguments 4051 ); 4052 } 4053 } ); 4054 } ); 4055 fns = null; 4056 } ).promise(); 4057 }, 4058 4059 // Get a promise for this deferred 4060 // If obj is provided, the promise aspect is added to the object 4061 promise: function( obj ) { 4062 return obj != null ? jQuery.extend( obj, promise ) : promise; 4063 } 4064 }, 4065 deferred = {}; 4066 4067 // Keep pipe for back-compat 4068 promise.pipe = promise.then; 4069 4070 // Add list-specific methods 4071 jQuery.each( tuples, function( i, tuple ) { 4072 var list = tuple[ 2 ], 4073 stateString = tuple[ 3 ]; 4074 4075 // promise[ done | fail | progress ] = list.add 4076 promise[ tuple[ 1 ] ] = list.add; 4077 4078 // Handle state 4079 if ( stateString ) { 4080 list.add( function() { 4081 4082 // state = [ resolved | rejected ] 4083 state = stateString; 4084 4085 // [ reject_list | resolve_list ].disable; progress_list.lock 4086 }, tuples[ i ^ 1 ][ 2 ].disable, tuples[ 2 ][ 2 ].lock ); 4087 } 4088 4089 // deferred[ resolve | reject | notify ] 4090 deferred[ tuple[ 0 ] ] = function() { 4091 deferred[ tuple[ 0 ] + "With" ]( this === deferred ? promise : this, arguments ); 4092 return this; 4093 }; 4094 deferred[ tuple[ 0 ] + "With" ] = list.fireWith; 4095 } ); 4096 4097 // Make the deferred a promise 4098 promise.promise( deferred ); 4099 4100 // Call given func if any 4101 if ( func ) { 4102 func.call( deferred, deferred ); 4103 } 4104 4105 // All done! 4106 return deferred; 4107 }, 4108 4109 // Deferred helper 4110 when: function( subordinate /* , ..., subordinateN */ ) { 4111 var i = 0, 4112 resolveValues = slice.call( arguments ), 4113 length = resolveValues.length, 4114 4115 // the count of uncompleted subordinates 4116 remaining = length !== 1 || 4117 ( subordinate && jQuery.isFunction( subordinate.promise ) ) ? length : 0, 4118 4119 // the master Deferred. 4120 // If resolveValues consist of only a single Deferred, just use that. 4121 deferred = remaining === 1 ? subordinate : jQuery.Deferred(), 4122 4123 // Update function for both resolve and progress values 4124 updateFunc = function( i, contexts, values ) { 4125 return function( value ) { 4126 contexts[ i ] = this; 4127 values[ i ] = arguments.length > 1 ? slice.call( arguments ) : value; 4128 if ( values === progressValues ) { 4129 deferred.notifyWith( contexts, values ); 4130 4131 } else if ( !( --remaining ) ) { 4132 deferred.resolveWith( contexts, values ); 4133 } 4134 }; 4135 }, 4136 4137 progressValues, progressContexts, resolveContexts; 4138 4139 // add listeners to Deferred subordinates; treat others as resolved 4140 if ( length > 1 ) { 4141 progressValues = new Array( length ); 4142 progressContexts = new Array( length ); 4143 resolveContexts = new Array( length ); 4144 for ( ; i < length; i++ ) { 4145 if ( resolveValues[ i ] && jQuery.isFunction( resolveValues[ i ].promise ) ) { 4146 resolveValues[ i ].promise() 4147 .progress( updateFunc( i, progressContexts, progressValues ) ) 4148 .done( updateFunc( i, resolveContexts, resolveValues ) ) 4149 .fail( deferred.reject ); 4150 } else { 4151 --remaining; 4152 } 4153 } 4154 } 4155 4156 // if we're not waiting on anything, resolve the master 4157 if ( !remaining ) {
4158 deferred.resolveWith( resolveContexts, resolveValues ); 4159 } 4160 4161 return deferred.promise(); 4162 } 4163} ); 4164 4165 4166// The deferred used on DOM ready 4167var readyList; 4168 4169jQuery.fn.ready = function( fn ) { 4170 4171 // Add the callback 4172 jQuery.ready.promise().done( fn ); 4173 4174 return this; 4175}; 4176 4177jQuery.extend( { 4178 4179 // Is the DOM ready to be used? Set to true once it occurs. 4180 isReady: false, 4181 4182 // A counter to track how many items to wait for before 4183 // the ready event fires. See #6781 4184 readyWait: 1, 4185 4186 // Hold (or release) the ready event 4187 holdReady: function( hold ) { 4188 if ( hold ) { 4189 jQuery.readyWait++; 4190 } else { 4191 jQuery.ready( true ); 4192 } 4193 }, 4194 4195 // Handle when the DOM is ready 4196 ready: function( wait ) { 4197 4198 // Abort if there are pending holds or we're already ready 4199 if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) { 4200 return; 4201 } 4202 4203 // Remember that the DOM is ready 4204 jQuery.isReady = true; 4205 4206 // If a normal DOM Ready event fired, decrement, and wait if need be 4207 if ( wait !== true && --jQuery.readyWait > 0 ) { 4208 return; 4209 } 4210 4211 // If there are functions bound, to execute 4212 readyList.resolveWith( document, [ jQuery ] ); 4213 4214 // Trigger any bound ready events 4215 if ( jQuery.fn.triggerHandler ) { 4216 jQuery( document ).triggerHandler( "ready" ); 4217 jQuery( document ).off( "ready" ); 4218 } 4219 } 4220} ); 4221 4222/** 4223 * Clean-up method for dom ready events 4224 */ 4225function detach() { 4226 if ( document.addEventListener ) { 4227 document.removeEventListener( "DOMContentLoaded", completed ); 4228 window.removeEventListener( "load", completed ); 4229 4230 } else { 4231 document.detachEvent( "onreadystatechange", completed ); 4232 window.detachEvent( "onload", completed ); 4233 } 4234} 4235 4236/** 4237 * The ready event handler and self cleanup method 4238 */ 4239function completed() { 4240 4241 // readyState === "complete" is good enough for us to call the dom ready in oldIE 4242 if ( document.addEventListener || 4243 window.event.type === "load" || 4244 document.readyState === "complete" ) { 4245 4246 detach(); 4247 jQuery.ready(); 4248 } 4249} 4250 4251jQuery.ready.promise = function( obj ) { 4252 if ( !readyList ) { 4253 4254 readyList = jQuery.Deferred(); 4255 4256 // Catch cases where $(document).ready() is called 4257 // after the browser event has already occurred.
4258 // Support: IE6-10 4259 // Older IE sometimes signals "interactive" too soon 4260 if ( document.readyState === "complete" || 4261 ( document.readyState !== "loading" && !document.documentElement.doScroll ) ) { 4262 4263 // Handle it asynchronously to allow scripts the opportunity to delay ready 4264 window.setTimeout( jQuery.ready ); 4265 4266 // Standards-based browsers support DOMContentLoaded 4267 } else if ( document.addEventListener ) { 4268 4269 // Use the handy event callback 4270 document.addEventListener( "DOMContentLoaded", completed ); 4271 4272 // A fallback to window.onload, that will always work 4273 window.addEventListener( "load", completed ); 4274 4275 // If IE event model is used 4276 } else { 4277 4278 // Ensure firing before onload, maybe late but safe also for iframes 4279 document.attachEvent( "onreadystatechange", completed ); 4280 4281 // A fallback to window.onload, that will always work 4282 window.attachEvent( "onload", completed ); 4283 4284 // If IE and not a frame 4285 // continually check to see if the document is ready 4286 var top = false; 4287 4288 try { 4289 top = window.frameElement == null && document.documentElement; 4290 } catch ( e ) {} 4291 4292 if ( top && top.doScroll ) { 4293 ( function doScrollCheck() { 4294 if ( !jQuery.isReady ) { 4295 4296 try { 4297 4298 // Use the trick by Diego Perini 4299 // http://javascript.nwbox.com/IEContentLoaded/ 4300 top.doScroll( "left" ); 4301 } catch ( e ) { 4302 return window.setTimeout( doScrollCheck, 50 ); 4303 } 4304 4305 // detach all dom ready events 4306 detach(); 4307 4308 // and execute any waiting functions 4309 jQuery.ready(); 4310 } 4311 } )(); 4312 } 4313 } 4314 } 4315 return readyList.promise( obj ); 4316}; 4317 4318// Kick off the DOM ready check even if the user does not 4319jQuery.ready.promise(); 4320 4321 4322 4323 4324// Support: IE<9 4325// Iteration over object's inherited properties before its own 4326var i; 4327for ( i in jQuery( support ) ) { 4328 break; 4329} 4330support.ownFirst = i === "0"; 4331 4332// Note: most support tests are defined in their respective modules. 4333// false until the test is run 4334support.inlineBlockNeedsLayout = false; 4335 4336// Execute ASAP in case we need to set body.style.zoom 4337jQuery( function() { 4338 4339 // Minified: var a,b,c,d 4340 var val, div, body, container; 4341 4342 body = document.getElementsByTagName( "body" )[ 0 ]; 4343 if ( !body || !body.style ) { 4344 4345 // Return for frameset docs that don't have a body 4346 return; 4347 } 4348 4349 // Setup 4350 div = document.createElement( "div" ); 4351 container = document.createElement( "div" ); 4352 container.style.cssText = "position:absolute;border:0;width:0;height:0;top:0;left:-9999px"; 4353 body.appendChild( container ).appendChild( div ); 4354 4355 if ( typeof div.style.zoom !== "undefined" ) { 4356 4357 // Support: IE<8 4358 // Check if natively block-level elements act like inline-block 4359 // elements when setting their display to 'inline' and giving 4360 // them layout 4361 div.style.cssText = "display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1"; 4362 4363 support.inlineBlockNeedsLayout = val = div.offsetWidth === 3; 4364 if ( val ) { 4365 4366 // Prevent IE 6 from affecting layout for positioned elements #11048 4367 // Prevent IE from shrinking the body in IE 7 mode #12869 4368 // Support: IE<8 4369 body.style.zoom = 1; 4370 } 4371 } 4372 4373 body.removeChild( container ); 4374} ); 4375 4376 4377( function() { 4378 var div = document.createElement( "div" ); 4379 4380 // Support: IE<9 4381 support.deleteExpando = true; 4382 try { 4383 delete div.test; 4384 } catch ( e ) { 4385 support.deleteExpando = false; 4386 } 4387 4388 // Null elements to avoid leaks in IE. 4389 div = null; 4390} )(); 4391var acceptData = function( elem ) { 4392 var noData = jQuery.noData[ ( elem.nodeName + " " ).toLowerCase() ], 4393 nodeType = +elem.nodeType || 1; 4394 4395 // Do not set data on non-element DOM nodes because it will not be cleared (#8335). 4396 return nodeType !== 1 && nodeType !== 9 ? 4397 false : 4398 4399 // Nodes accept data unless otherwise specified; rejection can be conditional 4400 !noData || noData !== true && elem.getAttribute( "classid" ) === noData; 4401}; 4402 4403 4404 4405 4406var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/, 4407 rmultiDash = /([A-Z])/g; 4408 4409function dataAttr( elem, key, data ) { 4410 4411 // If nothing was found internally, try to fetch any 4412 // data from the HTML5 data-* attribute 4413 if ( data === undefined && elem.nodeType === 1 ) { 4414 4415 var name = "data-" + key.replace( rmultiDash, "-$1" ).toLowerCase(); 4416 4417 data = elem.getAttribute( name ); 4418 4419 if ( typeof data === "string" ) { 4420 try { 4421 data = data === "true" ? true :
4422 data === "false" ? false : 4423 data === "null" ? null : 4424 4425 // Only convert to a number if it doesn't change the string 4426 +data + "" === data ? +data : 4427 rbrace.test( data ) ? jQuery.parseJSON( data ) : 4428 data; 4429 } catch ( e ) {} 4430 4431 // Make sure we set the data so it isn't changed later 4432 jQuery.data( elem, key, data ); 4433 4434 } else { 4435 data = undefined; 4436 } 4437 } 4438 4439 return data; 4440} 4441 4442// checks a cache object for emptiness 4443function isEmptyDataObject( obj ) { 4444 var name; 4445 for ( name in obj ) { 4446 4447 // if the public data object is empty, the private is still empty 4448 if ( name === "data" && jQuery.isEmptyObject( obj[ name ] ) ) { 4449 continue; 4450 } 4451 if ( name !== "toJSON" ) { 4452 return false; 4453 } 4454 } 4455 4456 return true; 4457} 4458 4459function internalData( elem, name, data, pvt /* Internal Use Only */ ) { 4460 if ( !acceptData( elem ) ) { 4461 return; 4462 } 4463 4464 var ret, thisCache, 4465 internalKey = jQuery.expando, 4466 4467 // We have to handle DOM nodes and JS objects differently because IE6-7 4468 // can't GC object references properly across the DOM-JS boundary 4469 isNode = elem.nodeType, 4470 4471 // Only DOM nodes need the global jQuery cache; JS object data is 4472 // attached directly to the object so GC can occur automatically 4473 cache = isNode ? jQuery.cache : elem, 4474 4475 // Only defining an ID for JS objects if its cache already exists allows 4476 // the code to shortcut on the same path as a DOM node with no cache 4477 id = isNode ? elem[ internalKey ] : elem[ internalKey ] && internalKey; 4478 4479 // Avoid doing any more work than we need to when trying to get data on an 4480 // object that has no data at all 4481 if ( ( !id || !cache[ id ] || ( !pvt && !cache[ id ].data ) ) && 4482 data === undefined && typeof name === "string" ) { 4483 return; 4484 } 4485 4486 if ( !id ) { 4487 4488 // Only DOM nodes need a new unique ID for each element since their data 4489 // ends up in the global cache 4490 if ( isNode ) { 4491 id = elem[ internalKey ] = deletedIds.pop() || jQuery.guid++; 4492 } else { 4493 id = internalKey; 4494 } 4495 } 4496 4497 if ( !cache[ id ] ) { 4498 4499 // Avoid exposing jQuery metadata on plain JS objects when the object 4500 // is serialized using JSON.stringify 4501 cache[ id ] = isNode ? {} : { toJSON: jQuery.noop }; 4502 } 4503 4504 // An object can be passed to jQuery.data instead of a key/value pair; this gets 4505 // shallow copied over onto the existing cache 4506 if ( typeof name === "object" || typeof name === "function" ) { 4507 if ( pvt ) { 4508 cache[ id ] = jQuery.extend( cache[ id ], name ); 4509 } else { 4510 cache[ id ].data = jQuery.extend( cache[ id ].data, name ); 4511 } 4512 } 4513 4514 thisCache = cache[ id ]; 4515 4516 // jQuery data() is stored in a separate object inside the object's internal data 4517 // cache in order to avoid key collisions between internal data and user-defined 4518 // data. 4519 if ( !pvt ) { 4520 if ( !thisCache.data ) { 4521 thisCache.data = {}; 4522 } 4523 4524 thisCache = thisCache.data; 4525 } 4526 4527 if ( data !== undefined ) { 4528 thisCache[ jQuery.camelCase( name ) ] = data; 4529 } 4530 4531 // Check for both converted-to-camel and non-converted data property names 4532 // If a data property was specified 4533 if ( typeof name === "string" ) { 4534 4535 // First Try to find as-is property data 4536 ret = thisCache[ name ]; 4537 4538 // Test for null|undefined property data 4539 if ( ret == null ) { 4540 4541 // Try to find the camelCased property 4542 ret = thisCache[ jQuery.camelCase( name ) ]; 4543 } 4544 } else { 4545 ret = thisCache; 4546 } 4547 4548 return ret; 4549} 4550 4551function internalRemoveData( elem, name, pvt ) { 4552 if ( !acceptData( elem ) ) { 4553 return; 4554 } 4555 4556 var thisCache, i, 4557 isNode = elem.nodeType, 4558 4559 // See jQuery.data for more information 4560 cache = isNode ? jQuery.cache : elem, 4561 id = isNode ? elem[ jQuery.expando ] : jQuery.expando; 4562 4563 // If there is already no cache entry for this object, there is no 4564 // purpose in continuing 4565 if ( !cache[ id ] ) { 4566 return; 4567 } 4568 4569 if ( name ) { 4570 4571 thisCache = pvt ? cache[ id ] : cache[ id ].data; 4572 4573 if ( thisCache ) { 4574 4575 // Support array or space separated string names for data keys 4576 if ( !jQuery.isArray( name ) ) { 4577 4578 // try the string as a key before any manipulation 4579 if ( name in thisCache ) { 4580 name = [ name ]; 4581 } else { 4582 4583 // split the camel cased version by spaces unless a key with the spaces exists 4584 name = jQuery.camelCase( name );
4585 if ( name in thisCache ) { 4586 name = [ name ]; 4587 } else { 4588 name = name.split( " " ); 4589 } 4590 } 4591 } else { 4592 4593 // If "name" is an array of keys... 4594 // When data is initially created, via ("key", "val") signature, 4595 // keys will be converted to camelCase. 4596 // Since there is no way to tell _how_ a key was added, remove 4597 // both plain key and camelCase key. #12786 4598 // This will only penalize the array argument path. 4599 name = name.concat( jQuery.map( name, jQuery.camelCase ) ); 4600 } 4601 4602 i = name.length; 4603 while ( i-- ) { 4604 delete thisCache[ name[ i ] ]; 4605 } 4606 4607 // If there is no data left in the cache, we want to continue 4608 // and let the cache object itself get destroyed 4609 if ( pvt ? !isEmptyDataObject( thisCache ) : !jQuery.isEmptyObject( thisCache ) ) { 4610 return; 4611 } 4612 } 4613 } 4614 4615 // See jQuery.data for more information 4616 if ( !pvt ) { 4617 delete cache[ id ].data; 4618 4619 // Don't destroy the parent cache unless the internal data object 4620 // had been the only thing left in it 4621 if ( !isEmptyDataObject( cache[ id ] ) ) { 4622 return; 4623 } 4624 } 4625 4626 // Destroy the cache 4627 if ( isNode ) { 4628 jQuery.cleanData( [ elem ], true ); 4629 4630 // Use delete when supported for expandos or `cache` is not a window per isWindow (#10080) 4631 /* jshint eqeqeq: false */ 4632 } else if ( support.deleteExpando || cache != cache.window ) { 4633 /* jshint eqeqeq: true */ 4634 delete cache[ id ]; 4635 4636 // When all else fails, undefined 4637 } else { 4638 cache[ id ] = undefined; 4639 } 4640} 4641 4642jQuery.extend( { 4643 cache: {}, 4644 4645 // The following elements (space-suffixed to avoid Object.prototype collisions) 4646 // throw uncatchable exceptions if you attempt to set expando properties 4647 noData: { 4648 "applet ": true, 4649 "embed ": true, 4650 4651 // ...but Flash objects (which have this classid) *can* handle expandos 4652 "object ": "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" 4653 }, 4654 4655 hasData: function( elem ) { 4656 elem = elem.nodeType ? jQuery.cache[ elem[ jQuery.expando ] ] : elem[ jQuery.expando ]; 4657 return !!elem && !isEmptyDataObject( elem ); 4658 }, 4659 4660 data: function( elem, name, data ) { 4661 return internalData( elem, name, data ); 4662 }, 4663 4664 removeData: function( elem, name ) { 4665 return internalRemoveData( elem, name ); 4666 }, 4667 4668 // For internal use only. 4669 _data: function( elem, name, data ) { 4670 return internalData( elem, name, data, true ); 4671 }, 4672 4673 _removeData: function( elem, name ) { 4674 return internalRemoveData( elem, name, true ); 4675 } 4676} ); 4677 4678jQuery.fn.extend( { 4679 data: function( key, value ) { 4680 var i, name, data, 4681 elem = this[ 0 ], 4682 attrs = elem && elem.attributes; 4683 4684 // Special expections of .data basically thwart jQuery.access, 4685 // so implement the relevant behavior ourselves 4686 4687 // Gets all values 4688 if ( key === undefined ) { 4689 if ( this.length ) { 4690 data = jQuery.data( elem ); 4691 4692 if ( elem.nodeType === 1 && !jQuery._data( elem, "parsedAttrs" ) ) { 4693 i = attrs.length; 4694 while ( i-- ) { 4695 4696 // Support: IE11+ 4697 // The attrs elements can be null (#14894) 4698 if ( attrs[ i ] ) { 4699 name = attrs[ i ].name; 4700 if ( name.indexOf( "data-" ) === 0 ) { 4701 name = jQuery.camelCase( name.slice( 5 ) ); 4702 dataAttr( elem, name, data[ name ] ); 4703 } 4704 } 4705 } 4706 jQuery._data( elem, "parsedAttrs", true ); 4707 } 4708 } 4709 4710 return data; 4711 } 4712 4713 // Sets multiple values 4714 if ( typeof key === "object" ) { 4715 return this.each( function() { 4716 jQuery.data( this, key ); 4717 } ); 4718 } 4719 4720 return arguments.length > 1 ? 4721 4722 // Sets one value 4723 this.each( function() { 4724 jQuery.data( this, key, value ); 4725 } ) : 4726 4727 // Gets one value 4728 // Try to fetch any internally stored data first 4729 elem ? dataAttr( elem, key, jQuery.data( elem, key ) ) : undefined; 4730 }, 4731 4732 removeData: function( key ) { 4733 return this.each( function() { 4734 jQuery.removeData( this, key ); 4735 } ); 4736 } 4737} ); 4738 4739 4740jQuery.extend( { 4741 queue: function( elem, type, data ) { 4742 var queue; 4743 4744 if ( elem ) { 4745 type = ( type || "fx" ) + "queue"; 4746 queue = jQuery._data( elem, type ); 4747 4748 // Speed up dequeue by getting out quickly if this is just a lookup 4749 if ( data ) { 4750 if ( !queue || jQuery.isArray( data ) ) { 4751 queue = jQuery._data( elem, type, jQuery.makeArray( data ) ); 4752 } else { 4753 queue.push( data ); 4754 } 4755 } 4756 return queue || []; 4757 } 4758 }, 4759 4760 dequeue: function( elem, type ) {
vendor: 2,750 bytes, lines 4761-4886
4761 type = type || "fx"; 4762 4763 var queue = jQuery.queue( elem, type ), 4764 startLength = queue.length, 4765 fn = queue.shift(), 4766 hooks = jQuery._queueHooks( elem, type ), 4767 next = function() { 4768 jQuery.dequeue( elem, type ); 4769 }; 4770 4771 // If the fx queue is dequeued, always remove the progress sentinel 4772 if ( fn === "inprogress" ) { 4773 fn = queue.shift(); 4774 startLength--; 4775 } 4776 4777 if ( fn ) { 4778 4779 // Add a progress sentinel to prevent the fx queue from being 4780 // automatically dequeued 4781 if ( type === "fx" ) { 4782 queue.unshift( "inprogress" ); 4783 } 4784 4785 // clear up the last queue stop function 4786 delete hooks.stop; 4787 fn.call( elem, next, hooks ); 4788 } 4789 4790 if ( !startLength && hooks ) { 4791 hooks.empty.fire(); 4792 } 4793 }, 4794 4795 // not intended for public consumption - generates a queueHooks object, 4796 // or returns the current one 4797 _queueHooks: function( elem, type ) { 4798 var key = type + "queueHooks"; 4799 return jQuery._data( elem, key ) || jQuery._data( elem, key, { 4800 empty: jQuery.Callbacks( "once memory" ).add( function() { 4801 jQuery._removeData( elem, type + "queue" ); 4802 jQuery._removeData( elem, key ); 4803 } ) 4804 } ); 4805 } 4806} ); 4807 4808jQuery.fn.extend( { 4809 queue: function( type, data ) { 4810 var setter = 2; 4811 4812 if ( typeof type !== "string" ) { 4813 data = type; 4814 type = "fx"; 4815 setter--; 4816 } 4817 4818 if ( arguments.length < setter ) { 4819 return jQuery.queue( this[ 0 ], type ); 4820 } 4821 4822 return data === undefined ? 4823 this : 4824 this.each( function() { 4825 var queue = jQuery.queue( this, type, data ); 4826 4827 // ensure a hooks for this queue 4828 jQuery._queueHooks( this, type ); 4829 4830 if ( type === "fx" && queue[ 0 ] !== "inprogress" ) { 4831 jQuery.dequeue( this, type ); 4832 } 4833 } ); 4834 }, 4835 dequeue: function( type ) { 4836 return this.each( function() { 4837 jQuery.dequeue( this, type ); 4838 } ); 4839 }, 4840 clearQueue: function( type ) { 4841 return this.queue( type || "fx", [] ); 4842 }, 4843 4844 // Get a promise resolved when queues of a certain type 4845 // are emptied (fx is the type by default) 4846 promise: function( type, obj ) { 4847 var tmp, 4848 count = 1, 4849 defer = jQuery.Deferred(), 4850 elements = this, 4851 i = this.length, 4852 resolve = function() { 4853 if ( !( --count ) ) { 4854 defer.resolveWith( elements, [ elements ] ); 4855 } 4856 }; 4857 4858 if ( typeof type !== "string" ) { 4859 obj = type; 4860 type = undefined; 4861 } 4862 type = type || "fx"; 4863 4864 while ( i-- ) { 4865 tmp = jQuery._data( elements[ i ], type + "queueHooks" ); 4866 if ( tmp && tmp.empty ) { 4867 count++; 4868 tmp.empty.add( resolve ); 4869 } 4870 } 4871 resolve(); 4872 return defer.promise( obj ); 4873 } 4874} ); 4875 4876 4877( function() { 4878 var shrinkWrapBlocksVal; 4879 4880 support.shrinkWrapBlocks = function() { 4881 if ( shrinkWrapBlocksVal != null ) { 4882 return shrinkWrapBlocksVal; 4883 } 4884 4885 // Will be changed later if needed. 4886 shrinkWrapBlocksVal = false;
4887 4888 // Minified: var b,c,d 4889 var div, body, container; 4890 4891 body = document.getElementsByTagName( "body" )[ 0 ]; 4892 if ( !body || !body.style ) { 4893 4894 // Test fired too early or in an unsupported environment, exit. 4895 return; 4896 } 4897 4898 // Setup 4899 div = document.createElement( "div" ); 4900 container = document.createElement( "div" ); 4901 container.style.cssText = "position:absolute;border:0;width:0;height:0;top:0;left:-9999px"; 4902 body.appendChild( container ).appendChild( div ); 4903 4904 // Support: IE6 4905 // Check if elements with layout shrink-wrap their children 4906 if ( typeof div.style.zoom !== "undefined" ) { 4907 4908 // Reset CSS: box-sizing; display; margin; border 4909 div.style.cssText = 4910 4911 // Support: Firefox<29, Android 2.3 4912 // Vendor-prefix box-sizing 4913 "-webkit-box-sizing:content-box;-moz-box-sizing:content-box;" + 4914 "box-sizing:content-box;display:block;margin:0;border:0;" + 4915 "padding:1px;width:1px;zoom:1"; 4916 div.appendChild( document.createElement( "div" ) ).style.width = "5px"; 4917 shrinkWrapBlocksVal = div.offsetWidth !== 3; 4918 } 4919 4920 body.removeChild( container ); 4921 4922 return shrinkWrapBlocksVal; 4923 }; 4924 4925} )(); 4926var pnum = ( /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/ ).source; 4927 4928var rcssNum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" ); 4929 4930 4931var cssExpand = [ "Top", "Right", "Bottom", "Left" ]; 4932 4933var isHidden = function( elem, el ) { 4934 4935 // isHidden might be called from jQuery#filter function; 4936 // in that case, element will be second argument 4937 elem = el || elem; 4938 return jQuery.css( elem, "display" ) === "none" || 4939 !jQuery.contains( elem.ownerDocument, elem ); 4940 }; 4941 4942 4943 4944function adjustCSS( elem, prop, valueParts, tween ) { 4945 var adjusted, 4946 scale = 1, 4947 maxIterations = 20, 4948 currentValue = tween ? 4949 function() { return tween.cur(); } : 4950 function() { return jQuery.css( elem, prop, "" ); }, 4951 initial = currentValue(), 4952 unit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ), 4953 4954 // Starting value computation is required for potential unit mismatches 4955 initialInUnit = ( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) && 4956 rcssNum.exec( jQuery.css( elem, prop ) ); 4957 4958 if ( initialInUnit && initialInUnit[ 3 ] !== unit ) { 4959 4960 // Trust units reported by jQuery.css 4961 unit = unit || initialInUnit[ 3 ]; 4962 4963 // Make sure we update the tween properties later on 4964 valueParts = valueParts || []; 4965 4966 // Iteratively approximate from a nonzero starting point 4967 initialInUnit = +initial || 1; 4968 4969 do { 4970 4971 // If previous iteration zeroed out, double until we get *something*. 4972 // Use string for doubling so we don't accidentally see scale as unchanged below 4973 scale = scale || ".5"; 4974 4975 // Adjust and apply 4976 initialInUnit = initialInUnit / scale; 4977 jQuery.style( elem, prop, initialInUnit + unit ); 4978 4979 // Update scale, tolerating zero or NaN from tween.cur() 4980 // Break the loop if scale is unchanged or perfect, or if we've just had enough. 4981 } while ( 4982 scale !== ( scale = currentValue() / initial ) && scale !== 1 && --maxIterations 4983 ); 4984 } 4985 4986 if ( valueParts ) { 4987 initialInUnit = +initialInUnit || +initial || 0; 4988 4989 // Apply relative offset (+=/-=) if specified 4990 adjusted = valueParts[ 1 ] ? 4991 initialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] : 4992 +valueParts[ 2 ]; 4993 if ( tween ) { 4994 tween.unit = unit; 4995 tween.start = initialInUnit; 4996 tween.end = adjusted; 4997 } 4998 } 4999 return adjusted; 5000} 5001 5002 5003// Multifunctional method to get and set values of a collection 5004// The value/s can optionally be executed if it's a function 5005var access = function( elems, fn, key, value, chainable, emptyGet, raw ) { 5006 var i = 0, 5007 length = elems.length, 5008 bulk = key == null; 5009 5010 // Sets many values 5011 if ( jQuery.type( key ) === "object" ) { 5012 chainable = true; 5013 for ( i in key ) { 5014 access( elems, fn, i, key[ i ], true, emptyGet, raw ); 5015 } 5016 5017 // Sets one value 5018 } else if ( value !== undefined ) { 5019 chainable = true; 5020 5021 if ( !jQuery.isFunction( value ) ) { 5022 raw = true; 5023 } 5024 5025 if ( bulk ) { 5026 5027 // Bulk operations run against the entire set 5028 if ( raw ) { 5029 fn.call( elems, value ); 5030 fn = null; 5031 5032 // ...except when executing function values 5033 } else { 5034 bulk = fn; 5035 fn = function( elem, key, value ) {
5036 return bulk.call( jQuery( elem ), value ); 5037 }; 5038 } 5039 } 5040 5041 if ( fn ) { 5042 for ( ; i < length; i++ ) { 5043 fn( 5044 elems[ i ], 5045 key, 5046 raw ? value : value.call( elems[ i ], i, fn( elems[ i ], key ) ) 5047 ); 5048 } 5049 } 5050 } 5051 5052 return chainable ? 5053 elems : 5054 5055 // Gets 5056 bulk ? 5057 fn.call( elems ) : 5058 length ? fn( elems[ 0 ], key ) : emptyGet; 5059}; 5060var rcheckableType = ( /^(?:checkbox|radio)$/i ); 5061 5062var rtagName = ( /<([\w:-]+)/ ); 5063 5064var rscriptType = ( /^$|\/(?:java|ecma)script/i ); 5065 5066var rleadingWhitespace = ( /^\s+/ ); 5067 5068var nodeNames = "abbr|article|aside|audio|bdi|canvas|data|datalist|" + 5069 "details|dialog|figcaption|figure|footer|header|hgroup|main|" + 5070 "mark|meter|nav|output|picture|progress|section|summary|template|time|video"; 5071 5072 5073 5074function createSafeFragment( document ) { 5075 var list = nodeNames.split( "|" ), 5076 safeFrag = document.createDocumentFragment(); 5077 5078 if ( safeFrag.createElement ) { 5079 while ( list.length ) { 5080 safeFrag.createElement( 5081 list.pop() 5082 ); 5083 } 5084 } 5085 return safeFrag; 5086} 5087 5088 5089( function() { 5090 var div = document.createElement( "div" ), 5091 fragment = document.createDocumentFragment(), 5092 input = document.createElement( "input" ); 5093 5094 // Setup 5095 div.innerHTML = " <link/><table></table><a href='/a'>a</a><input type='checkbox'/>"; 5096 5097 // IE strips leading whitespace when .innerHTML is used 5098 support.leadingWhitespace = div.firstChild.nodeType === 3; 5099 5100 // Make sure that tbody elements aren't automatically inserted 5101 // IE will insert them into empty tables 5102 support.tbody = !div.getElementsByTagName( "tbody" ).length; 5103 5104 // Make sure that link elements get serialized correctly by innerHTML 5105 // This requires a wrapper element in IE 5106 support.htmlSerialize = !!div.getElementsByTagName( "link" ).length; 5107 5108 // Makes sure cloning an html5 element does not cause problems 5109 // Where outerHTML is undefined, this still works 5110 support.html5Clone = 5111 document.createElement( "nav" ).cloneNode( true ).outerHTML !== "<:nav></:nav>"; 5112 5113 // Check if a disconnected checkbox will retain its checked 5114 // value of true after appended to the DOM (IE6/7) 5115 input.type = "checkbox"; 5116 input.checked = true; 5117 fragment.appendChild( input ); 5118 support.appendChecked = input.checked; 5119 5120 // Make sure textarea (and checkbox) defaultValue is properly cloned 5121 // Support: IE6-IE11+ 5122 div.innerHTML = "<textarea>x</textarea>"; 5123 support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue; 5124 5125 // #11217 - WebKit loses check when the name is after the checked attribute 5126 fragment.appendChild( div ); 5127 5128 // Support: Windows Web Apps (WWA) 5129 // `name` and `type` must use .setAttribute for WWA (#14901) 5130 input = document.createElement( "input" ); 5131 input.setAttribute( "type", "radio" ); 5132 input.setAttribute( "checked", "checked" ); 5133 input.setAttribute( "name", "t" ); 5134 5135 div.appendChild( input ); 5136 5137 // Support: Safari 5.1, iOS 5.1, Android 4.x, Android 2.3 5138 // old WebKit doesn't clone checked state correctly in fragments 5139 support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked; 5140 5141 // Support: IE<9 5142 // Cloned elements keep attachEvent handlers, we use addEventListener on IE9+ 5143 support.noCloneEvent = !!div.addEventListener; 5144 5145 // Support: IE<9 5146 // Since attributes and properties are the same in IE, 5147 // cleanData must set properties to undefined rather than use removeAttribute 5148 div[ jQuery.expando ] = 1; 5149 support.attributes = !div.getAttribute( jQuery.expando ); 5150} )(); 5151 5152 5153// We have to close these tags to support XHTML (#13200) 5154var wrapMap = { 5155 option: [ 1, "<select multiple='multiple'>", "</select>" ], 5156 legend: [ 1, "<fieldset>", "</fieldset>" ], 5157 area: [ 1, "<map>", "</map>" ], 5158 5159 // Support: IE8 5160 param: [ 1, "<object>", "</object>" ], 5161 thead: [ 1, "<table>", "</table>" ], 5162 tr: [ 2, "<table><tbody>", "</tbody></table>" ], 5163 col: [ 2, "<table><tbody></tbody><colgroup>", "</colgroup></table>" ], 5164 td: [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ], 5165 5166 // IE6-8 can't serialize link, script, style, or any html5 (NoScope) tags, 5167 // unless wrapped in a div with non-breaking characters in front of it. 5168 _default: support.htmlSerialize ? [ 0, "", "" ] : [ 1, "X<div>", "</div>" ] 5169}; 5170 5171// Support: IE8-IE9 5172wrapMap.optgroup = wrapMap.option; 5173 5174wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; 5175wrapMap.th = wrapMap.td; 5176 5177 5178function getAll( context, tag ) { 5179 var elems, elem, 5180 i = 0, 5181 found = typeof context.getElementsByTagName !== "undefined" ? 5182 context.getElementsByTagName( tag || "*" ) : 5183 typeof context.querySelectorAll !== "undefined" ? 5184 context.querySelectorAll( tag || "*" ) : 5185 undefined; 5186 5187 if ( !found ) { 5188 for ( found = [], elems = context.childNodes || context; 5189 ( elem = elems[ i ] ) != null; 5190 i++ 5191 ) { 5192 if ( !tag || jQuery.nodeName( elem, tag ) ) { 5193 found.push( elem ); 5194 } else { 5195 jQuery.merge( found, getAll( elem, tag ) ); 5196 } 5197 } 5198 } 5199 5200 return tag === undefined || tag && jQuery.nodeName( context, tag ) ? 5201 jQuery.merge( [ context ], found ) : 5202 found; 5203} 5204 5205 5206// Mark scripts as having already been evaluated 5207function setGlobalEval( elems, refElements ) { 5208 var elem, 5209 i = 0; 5210 for ( ; ( elem = elems[ i ] ) != null; i++ ) { 5211 jQuery._data( 5212 elem, 5213 "globalEval", 5214 !refElements || jQuery._data( refElements[ i ], "globalEval" ) 5215 ); 5216 } 5217} 5218 5219
5220var rhtml = /<|&#?\w+;/, 5221 rtbody = /<tbody/i; 5222 5223function fixDefaultChecked( elem ) { 5224 if ( rcheckableType.test( elem.type ) ) { 5225 elem.defaultChecked = elem.checked; 5226 } 5227} 5228 5229function buildFragment( elems, context, scripts, selection, ignored ) { 5230 var j, elem, contains, 5231 tmp, tag, tbody, wrap, 5232 l = elems.length, 5233 5234 // Ensure a safe fragment 5235 safe = createSafeFragment( context ), 5236 5237 nodes = [], 5238 i = 0; 5239 5240 for ( ; i < l; i++ ) { 5241 elem = elems[ i ]; 5242 5243 if ( elem || elem === 0 ) { 5244 5245 // Add nodes directly 5246 if ( jQuery.type( elem ) === "object" ) { 5247 jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem ); 5248 5249 // Convert non-html into a text node 5250 } else if ( !rhtml.test( elem ) ) { 5251 nodes.push( context.createTextNode( elem ) ); 5252 5253 // Convert html into DOM nodes 5254 } else { 5255 tmp = tmp || safe.appendChild( context.createElement( "div" ) ); 5256 5257 // Deserialize a standard representation 5258 tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase(); 5259 wrap = wrapMap[ tag ] || wrapMap._default; 5260 5261 tmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ]; 5262 5263 // Descend through wrappers to the right content 5264 j = wrap[ 0 ]; 5265 while ( j-- ) { 5266 tmp = tmp.lastChild; 5267 } 5268 5269 // Manually add leading whitespace removed by IE 5270 if ( !support.leadingWhitespace && rleadingWhitespace.test( elem ) ) { 5271 nodes.push( context.createTextNode( rleadingWhitespace.exec( elem )[ 0 ] ) ); 5272 } 5273 5274 // Remove IE's autoinserted <tbody> from table fragments 5275 if ( !support.tbody ) { 5276 5277 // String was a <table>, *may* have spurious <tbody> 5278 elem = tag === "table" && !rtbody.test( elem ) ? 5279 tmp.firstChild : 5280 5281 // String was a bare <thead> or <tfoot> 5282 wrap[ 1 ] === "<table>" && !rtbody.test( elem ) ? 5283 tmp : 5284 0; 5285 5286 j = elem && elem.childNodes.length; 5287 while ( j-- ) { 5288 if ( jQuery.nodeName( ( tbody = elem.childNodes[ j ] ), "tbody" ) && 5289 !tbody.childNodes.length ) { 5290 5291 elem.removeChild( tbody ); 5292 } 5293 } 5294 } 5295 5296 jQuery.merge( nodes, tmp.childNodes ); 5297 5298 // Fix #12392 for WebKit and IE > 9 5299 tmp.textContent = ""; 5300 5301 // Fix #12392 for oldIE 5302 while ( tmp.firstChild ) { 5303 tmp.removeChild( tmp.firstChild ); 5304 } 5305 5306 // Remember the top-level container for proper cleanup 5307 tmp = safe.lastChild; 5308 } 5309 } 5310 } 5311 5312 // Fix #11356: Clear elements from fragment 5313 if ( tmp ) { 5314 safe.removeChild( tmp ); 5315 } 5316 5317 // Reset defaultChecked for any radios and checkboxes 5318 // about to be appended to the DOM in IE 6/7 (#8060) 5319 if ( !support.appendChecked ) { 5320 jQuery.grep( getAll( nodes, "input" ), fixDefaultChecked ); 5321 } 5322 5323 i = 0; 5324 while ( ( elem = nodes[ i++ ] ) ) { 5325 5326 // Skip elements already in the context collection (trac-4087) 5327 if ( selection && jQuery.inArray( elem, selection ) > -1 ) { 5328 if ( ignored ) { 5329 ignored.push( elem ); 5330 } 5331 5332 continue; 5333 } 5334 5335 contains = jQuery.contains( elem.ownerDocument, elem ); 5336 5337 // Append to fragment 5338 tmp = getAll( safe.appendChild( elem ), "script" ); 5339 5340 // Preserve script evaluation history 5341 if ( contains ) { 5342 setGlobalEval( tmp ); 5343 } 5344 5345 // Capture executables 5346 if ( scripts ) { 5347 j = 0; 5348 while ( ( elem = tmp[ j++ ] ) ) { 5349 if ( rscriptType.test( elem.type || "" ) ) { 5350 scripts.push( elem ); 5351 } 5352 } 5353 } 5354 } 5355 5356 tmp = null; 5357 5358 return safe; 5359} 5360 5361 5362( function() { 5363 var i, eventName, 5364 div = document.createElement( "div" ); 5365 5366 // Support: IE<9 (lack submit/change bubble), Firefox (lack focus(in | out) events) 5367 for ( i in { submit: true, change: true, focusin: true } ) { 5368 eventName = "on" + i; 5369
vendor: 13,833 bytes, lines 5370-5849
5370 if ( !( support[ i ] = eventName in window ) ) { 5371 5372 // Beware of CSP restrictions (https://developer.mozilla.org/en/Security/CSP) 5373 div.setAttribute( eventName, "t" ); 5374 support[ i ] = div.attributes[ eventName ].expando === false; 5375 } 5376 } 5377 5378 // Null elements to avoid leaks in IE. 5379 div = null; 5380} )(); 5381 5382 5383var rformElems = /^(?:input|select|textarea)$/i, 5384 rkeyEvent = /^key/, 5385 rmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/, 5386 rfocusMorph = /^(?:focusinfocus|focusoutblur)$/, 5387 rtypenamespace = /^([^.]*)(?:\.(.+)|)/; 5388 5389function returnTrue() { 5390 return true; 5391} 5392 5393function returnFalse() { 5394 return false; 5395} 5396 5397// Support: IE9 5398// See #13393 for more info 5399function safeActiveElement() { 5400 try { 5401 return document.activeElement; 5402 } catch ( err ) { } 5403} 5404 5405function on( elem, types, selector, data, fn, one ) { 5406 var origFn, type; 5407 5408 // Types can be a map of types/handlers 5409 if ( typeof types === "object" ) { 5410 5411 // ( types-Object, selector, data ) 5412 if ( typeof selector !== "string" ) { 5413 5414 // ( types-Object, data ) 5415 data = data || selector; 5416 selector = undefined; 5417 } 5418 for ( type in types ) { 5419 on( elem, type, selector, data, types[ type ], one ); 5420 } 5421 return elem; 5422 } 5423 5424 if ( data == null && fn == null ) { 5425 5426 // ( types, fn ) 5427 fn = selector; 5428 data = selector = undefined; 5429 } else if ( fn == null ) { 5430 if ( typeof selector === "string" ) { 5431 5432 // ( types, selector, fn ) 5433 fn = data; 5434 data = undefined; 5435 } else { 5436 5437 // ( types, data, fn ) 5438 fn = data; 5439 data = selector; 5440 selector = undefined; 5441 } 5442 } 5443 if ( fn === false ) { 5444 fn = returnFalse; 5445 } else if ( !fn ) { 5446 return elem; 5447 } 5448 5449 if ( one === 1 ) { 5450 origFn = fn; 5451 fn = function( event ) { 5452 5453 // Can use an empty set, since event contains the info 5454 jQuery().off( event ); 5455 return origFn.apply( this, arguments ); 5456 }; 5457 5458 // Use same guid so caller can remove using origFn 5459 fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ ); 5460 } 5461 return elem.each( function() { 5462 jQuery.event.add( this, types, fn, data, selector ); 5463 } ); 5464} 5465 5466/* 5467 * Helper functions for managing events -- not part of the public interface. 5468 * Props to Dean Edwards' addEvent library for many of the ideas. 5469 */ 5470jQuery.event = { 5471 5472 global: {}, 5473 5474 add: function( elem, types, handler, data, selector ) { 5475 var tmp, events, t, handleObjIn, 5476 special, eventHandle, handleObj, 5477 handlers, type, namespaces, origType, 5478 elemData = jQuery._data( elem ); 5479 5480 // Don't attach events to noData or text/comment nodes (but allow plain objects) 5481 if ( !elemData ) { 5482 return; 5483 } 5484 5485 // Caller can pass in an object of custom data in lieu of the handler 5486 if ( handler.handler ) { 5487 handleObjIn = handler; 5488 handler = handleObjIn.handler; 5489 selector = handleObjIn.selector; 5490 } 5491 5492 // Make sure that the handler has a unique ID, used to find/remove it later 5493 if ( !handler.guid ) { 5494 handler.guid = jQuery.guid++; 5495 } 5496 5497 // Init the element's event structure and main handler, if this is the first 5498 if ( !( events = elemData.events ) ) { 5499 events = elemData.events = {}; 5500 } 5501 if ( !( eventHandle = elemData.handle ) ) { 5502 eventHandle = elemData.handle = function( e ) { 5503 5504 // Discard the second event of a jQuery.event.trigger() and 5505 // when an event is called after a page has unloaded 5506 return typeof jQuery !== "undefined" && 5507 ( !e || jQuery.event.triggered !== e.type ) ? 5508 jQuery.event.dispatch.apply( eventHandle.elem, arguments ) : 5509 undefined; 5510 }; 5511 5512 // Add elem as a property of the handle fn to prevent a memory leak 5513 // with IE non-native events 5514 eventHandle.elem = elem; 5515 } 5516 5517 // Handle multiple events separated by a space 5518 types = ( types || "" ).match( rnotwhite ) || [ "" ]; 5519 t = types.length; 5520 while ( t-- ) { 5521 tmp = rtypenamespace.exec( types[ t ] ) || []; 5522 type = origType = tmp[ 1 ]; 5523 namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); 5524 5525 // There *must* be a type, no attaching namespace-only handlers 5526 if ( !type ) { 5527 continue; 5528 } 5529 5530 // If event changes its type, use the special event handlers for the changed type 5531 special = jQuery.event.special[ type ] || {}; 5532 5533 // If selector defined, determine special event api type, otherwise given type 5534 type = ( selector ? special.delegateType : special.bindType ) || type; 5535 5536 // Update special based on newly reset type 5537 special = jQuery.event.special[ type ] || {}; 5538 5539 // handleObj is passed to all event handlers 5540 handleObj = jQuery.extend( { 5541 type: type, 5542 origType: origType, 5543 data: data, 5544 handler: handler, 5545 guid: handler.guid, 5546 selector: selector, 5547 needsContext: selector && jQuery.expr.match.needsContext.test( selector ), 5548 namespace: namespaces.join( "." ) 5549 }, handleObjIn ); 5550 5551 // Init the event handler queue if we're the first 5552 if ( !( handlers = events[ type ] ) ) { 5553 handlers = events[ type ] = []; 5554 handlers.delegateCount = 0; 5555 5556 // Only use addEventListener/attachEvent if the special events handler returns false 5557 if ( !special.setup || 5558 special.setup.call( elem, data, namespaces, eventHandle ) === false ) { 5559 5560 // Bind the global event handler to the element 5561 if ( elem.addEventListener ) { 5562 elem.addEventListener( type, eventHandle, false ); 5563 5564 } else if ( elem.attachEvent ) { 5565 elem.attachEvent( "on" + type, eventHandle ); 5566 } 5567 } 5568 } 5569 5570 if ( special.add ) { 5571 special.add.call( elem, handleObj ); 5572 5573 if ( !handleObj.handler.guid ) { 5574 handleObj.handler.guid = handler.guid; 5575 } 5576 } 5577 5578 // Add to the element's handler list, delegates in front 5579 if ( selector ) { 5580 handlers.splice( handlers.delegateCount++, 0, handleObj ); 5581 } else { 5582 handlers.push( handleObj ); 5583 } 5584 5585 // Keep track of which events have ever been used, for event optimization 5586 jQuery.event.global[ type ] = true; 5587 } 5588 5589 // Nullify elem to prevent memory leaks in IE 5590 elem = null; 5591 }, 5592 5593 // Detach an event or set of events from an element 5594 remove: function( elem, types, handler, selector, mappedTypes ) { 5595 var j, handleObj, tmp, 5596 origCount, t, events, 5597 special, handlers, type, 5598 namespaces, origType, 5599 elemData = jQuery.hasData( elem ) && jQuery._data( elem ); 5600 5601 if ( !elemData || !( events = elemData.events ) ) { 5602 return; 5603 } 5604 5605 // Once for each type.namespace in types; type may be omitted 5606 types = ( types || "" ).match( rnotwhite ) || [ "" ]; 5607 t = types.length; 5608 while ( t-- ) { 5609 tmp = rtypenamespace.exec( types[ t ] ) || []; 5610 type = origType = tmp[ 1 ]; 5611 namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); 5612 5613 // Unbind all events (on this namespace, if provided) for the element 5614 if ( !type ) { 5615 for ( type in events ) { 5616 jQuery.event.remove( elem, type + types[ t ], handler, selector, true ); 5617 } 5618 continue; 5619 } 5620 5621 special = jQuery.event.special[ type ] || {}; 5622 type = ( selector ? special.delegateType : special.bindType ) || type; 5623 handlers = events[ type ] || []; 5624 tmp = tmp[ 2 ] && 5625 new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ); 5626 5627 // Remove matching events 5628 origCount = j = handlers.length; 5629 while ( j-- ) { 5630 handleObj = handlers[ j ]; 5631 5632 if ( ( mappedTypes || origType === handleObj.origType ) && 5633 ( !handler || handler.guid === handleObj.guid ) && 5634 ( !tmp || tmp.test( handleObj.namespace ) ) && 5635 ( !selector || selector === handleObj.selector || 5636 selector === "**" && handleObj.selector ) ) { 5637 handlers.splice( j, 1 ); 5638 5639 if ( handleObj.selector ) { 5640 handlers.delegateCount--; 5641 } 5642 if ( special.remove ) { 5643 special.remove.call( elem, handleObj ); 5644 } 5645 } 5646 } 5647 5648 // Remove generic event handler if we removed something and no more handlers exist 5649 // (avoids potential for endless recursion during removal of special event handlers) 5650 if ( origCount && !handlers.length ) { 5651 if ( !special.teardown || 5652 special.teardown.call( elem, namespaces, elemData.handle ) === false ) { 5653 5654 jQuery.removeEvent( elem, type, elemData.handle ); 5655 } 5656 5657 delete events[ type ]; 5658 } 5659 } 5660 5661 // Remove the expando if it's no longer used 5662 if ( jQuery.isEmptyObject( events ) ) { 5663 delete elemData.handle; 5664 5665 // removeData also checks for emptiness and clears the expando if empty 5666 // so use it instead of delete 5667 jQuery._removeData( elem, "events" ); 5668 } 5669 }, 5670 5671 trigger: function( event, data, elem, onlyHandlers ) { 5672 var handle, ontype, cur, 5673 bubbleType, special, tmp, i, 5674 eventPath = [ elem || document ], 5675 type = hasOwn.call( event, "type" ) ? event.type : event, 5676 namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split( "." ) : []; 5677 5678 cur = tmp = elem = elem || document; 5679 5680 // Don't do events on text and comment nodes 5681 if ( elem.nodeType === 3 || elem.nodeType === 8 ) { 5682 return; 5683 } 5684 5685 // focus/blur morphs to focusin/out; ensure we're not firing them right now 5686 if ( rfocusMorph.test( type + jQuery.event.triggered ) ) { 5687 return; 5688 } 5689 5690 if ( type.indexOf( "." ) > -1 ) { 5691 5692 // Namespaced trigger; create a regexp to match event type in handle() 5693 namespaces = type.split( "." ); 5694 type = namespaces.shift(); 5695 namespaces.sort(); 5696 } 5697 ontype = type.indexOf( ":" ) < 0 && "on" + type; 5698 5699 // Caller can pass in a jQuery.Event object, Object, or just an event type string 5700 event = event[ jQuery.expando ] ? 5701 event : 5702 new jQuery.Event( type, typeof event === "object" && event ); 5703 5704 // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true) 5705 event.isTrigger = onlyHandlers ? 2 : 3; 5706 event.namespace = namespaces.join( "." ); 5707 event.rnamespace = event.namespace ? 5708 new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) : 5709 null; 5710 5711 // Clean up the event in case it is being reused 5712 event.result = undefined; 5713 if ( !event.target ) { 5714 event.target = elem; 5715 } 5716 5717 // Clone any incoming data and prepend the event, creating the handler arg list 5718 data = data == null ? 5719 [ event ] : 5720 jQuery.makeArray( data, [ event ] ); 5721 5722 // Allow special events to draw outside the lines 5723 special = jQuery.event.special[ type ] || {}; 5724 if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) { 5725 return; 5726 } 5727 5728 // Determine event propagation path in advance, per W3C events spec (#9951) 5729 // Bubble up to document, then to window; watch for a global ownerDocument var (#9724) 5730 if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) { 5731 5732 bubbleType = special.delegateType || type; 5733 if ( !rfocusMorph.test( bubbleType + type ) ) { 5734 cur = cur.parentNode; 5735 } 5736 for ( ; cur; cur = cur.parentNode ) { 5737 eventPath.push( cur ); 5738 tmp = cur; 5739 } 5740 5741 // Only add window if we got to document (e.g., not plain obj or detached DOM) 5742 if ( tmp === ( elem.ownerDocument || document ) ) { 5743 eventPath.push( tmp.defaultView || tmp.parentWindow || window ); 5744 } 5745 } 5746 5747 // Fire handlers on the event path 5748 i = 0; 5749 while ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) { 5750 5751 event.type = i > 1 ? 5752 bubbleType : 5753 special.bindType || type; 5754 5755 // jQuery handler 5756 handle = ( jQuery._data( cur, "events" ) || {} )[ event.type ] && 5757 jQuery._data( cur, "handle" ); 5758 5759 if ( handle ) { 5760 handle.apply( cur, data ); 5761 } 5762 5763 // Native handler 5764 handle = ontype && cur[ ontype ]; 5765 if ( handle && handle.apply && acceptData( cur ) ) { 5766 event.result = handle.apply( cur, data ); 5767 if ( event.result === false ) { 5768 event.preventDefault(); 5769 } 5770 } 5771 } 5772 event.type = type; 5773 5774 // If nobody prevented the default action, do it now 5775 if ( !onlyHandlers && !event.isDefaultPrevented() ) { 5776 5777 if ( 5778 ( !special._default || 5779 special._default.apply( eventPath.pop(), data ) === false 5780 ) && acceptData( elem ) 5781 ) { 5782 5783 // Call a native DOM method on the target with the same name name as the event. 5784 // Can't use an .isFunction() check here because IE6/7 fails that test. 5785 // Don't do default actions on window, that's where global variables be (#6170) 5786 if ( ontype && elem[ type ] && !jQuery.isWindow( elem ) ) { 5787 5788 // Don't re-trigger an onFOO event when we call its FOO() method 5789 tmp = elem[ ontype ]; 5790 5791 if ( tmp ) { 5792 elem[ ontype ] = null; 5793 } 5794 5795 // Prevent re-triggering of the same event, since we already bubbled it above 5796 jQuery.event.triggered = type; 5797 try { 5798 elem[ type ](); 5799 } catch ( e ) { 5800 5801 // IE<9 dies on focus/blur to hidden element (#1486,#12518) 5802 // only reproducible on winXP IE8 native, not IE9 in IE8 mode 5803 } 5804 jQuery.event.triggered = undefined; 5805 5806 if ( tmp ) { 5807 elem[ ontype ] = tmp; 5808 } 5809 } 5810 } 5811 } 5812 5813 return event.result; 5814 }, 5815 5816 dispatch: function( event ) { 5817 5818 // Make a writable jQuery.Event from the native event object 5819 event = jQuery.event.fix( event ); 5820 5821 var i, j, ret, matched, handleObj, 5822 handlerQueue = [], 5823 args = slice.call( arguments ), 5824 handlers = ( jQuery._data( this, "events" ) || {} )[ event.type ] || [], 5825 special = jQuery.event.special[ event.type ] || {}; 5826 5827 // Use the fix-ed jQuery.Event rather than the (read-only) native event 5828 args[ 0 ] = event; 5829 event.delegateTarget = this; 5830 5831 // Call the preDispatch hook for the mapped type, and let it bail if desired 5832 if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) { 5833 return; 5834 } 5835 5836 // Determine handlers 5837 handlerQueue = jQuery.event.handlers.call( this, event, handlers ); 5838 5839 // Run delegates first; they may want to stop propagation beneath us 5840 i = 0; 5841 while ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) { 5842 event.currentTarget = matched.elem; 5843 5844 j = 0; 5845 while ( ( handleObj = matched.handlers[ j++ ] ) && 5846 !event.isImmediatePropagationStopped() ) { 5847 5848 // Triggered event must either 1) have no namespace, or 2) have namespace(s) 5849 // a subset or equal to those in the bound event (both can have no namespace).
5850 if ( !event.rnamespace || event.rnamespace.test( handleObj.namespace ) ) { 5851 5852 event.handleObj = handleObj; 5853 event.data = handleObj.data; 5854 5855 ret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle || 5856 handleObj.handler ).apply( matched.elem, args ); 5857 5858 if ( ret !== undefined ) { 5859 if ( ( event.result = ret ) === false ) { 5860 event.preventDefault(); 5861 event.stopPropagation(); 5862 } 5863 } 5864 } 5865 } 5866 } 5867 5868 // Call the postDispatch hook for the mapped type 5869 if ( special.postDispatch ) { 5870 special.postDispatch.call( this, event ); 5871 } 5872 5873 return event.result; 5874 }, 5875 5876 handlers: function( event, handlers ) { 5877 var i, matches, sel, handleObj, 5878 handlerQueue = [], 5879 delegateCount = handlers.delegateCount, 5880 cur = event.target; 5881 5882 // Support (at least): Chrome, IE9 5883 // Find delegate handlers 5884 // Black-hole SVG <use> instance trees (#13180) 5885 // 5886 // Support: Firefox<=42+ 5887 // Avoid non-left-click in FF but don't block IE radio events (#3861, gh-2343) 5888 if ( delegateCount && cur.nodeType && 5889 ( event.type !== "click" || isNaN( event.button ) || event.button < 1 ) ) { 5890 5891 /* jshint eqeqeq: false */ 5892 for ( ; cur != this; cur = cur.parentNode || this ) { 5893 /* jshint eqeqeq: true */ 5894 5895 // Don't check non-elements (#13208) 5896 // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764) 5897 if ( cur.nodeType === 1 && ( cur.disabled !== true || event.type !== "click" ) ) { 5898 matches = []; 5899 for ( i = 0; i < delegateCount; i++ ) { 5900 handleObj = handlers[ i ]; 5901 5902 // Don't conflict with Object.prototype properties (#13203) 5903 sel = handleObj.selector + " "; 5904 5905 if ( matches[ sel ] === undefined ) { 5906 matches[ sel ] = handleObj.needsContext ? 5907 jQuery( sel, this ).index( cur ) > -1 : 5908 jQuery.find( sel, this, null, [ cur ] ).length; 5909 } 5910 if ( matches[ sel ] ) { 5911 matches.push( handleObj ); 5912 } 5913 } 5914 if ( matches.length ) { 5915 handlerQueue.push( { elem: cur, handlers: matches } ); 5916 } 5917 } 5918 } 5919 } 5920 5921 // Add the remaining (directly-bound) handlers 5922 if ( delegateCount < handlers.length ) { 5923 handlerQueue.push( { elem: this, handlers: handlers.slice( delegateCount ) } ); 5924 } 5925 5926 return handlerQueue; 5927 }, 5928 5929 fix: function( event ) { 5930 if ( event[ jQuery.expando ] ) { 5931 return event; 5932 } 5933 5934 // Create a writable copy of the event object and normalize some properties 5935 var i, prop, copy, 5936 type = event.type, 5937 originalEvent = event, 5938 fixHook = this.fixHooks[ type ]; 5939 5940 if ( !fixHook ) { 5941 this.fixHooks[ type ] = fixHook = 5942 rmouseEvent.test( type ) ? this.mouseHooks : 5943 rkeyEvent.test( type ) ? this.keyHooks : 5944 {}; 5945 } 5946 copy = fixHook.props ? this.props.concat( fixHook.props ) : this.props; 5947 5948 event = new jQuery.Event( originalEvent ); 5949 5950 i = copy.length; 5951 while ( i-- ) { 5952 prop = copy[ i ]; 5953 event[ prop ] = originalEvent[ prop ]; 5954 } 5955 5956 // Support: IE<9 5957 // Fix target property (#1925) 5958 if ( !event.target ) { 5959 event.target = originalEvent.srcElement || document; 5960 } 5961 5962 // Support: Safari 6-8+ 5963 // Target should not be a text node (#504, #13143) 5964 if ( event.target.nodeType === 3 ) { 5965 event.target = event.target.parentNode; 5966 } 5967 5968 // Support: IE<9 5969 // For mouse/key events, metaKey==false if it's undefined (#3368, #11328) 5970 event.metaKey = !!event.metaKey; 5971 5972 return fixHook.filter ? fixHook.filter( event, originalEvent ) : event; 5973 }, 5974 5975 // Includes some event props shared by KeyEvent and MouseEvent 5976 props: ( "altKey bubbles cancelable ctrlKey currentTarget detail eventPhase " + 5977 "metaKey relatedTarget shiftKey target timeStamp view which" ).split( " " ), 5978 5979 fixHooks: {}, 5980 5981 keyHooks: { 5982 props: "char charCode key keyCode".split( " " ), 5983 filter: function( event, original ) { 5984 5985 // Add which for key events 5986 if ( event.which == null ) { 5987 event.which = original.charCode != null ? original.charCode : original.keyCode; 5988 } 5989 5990 return event; 5991 } 5992 }, 5993 5994 mouseHooks: { 5995 props: ( "button buttons clientX clientY fromElement offsetX offsetY " + 5996 "pageX pageY screenX screenY toElement" ).split( " " ), 5997 filter: function( event, original ) { 5998 var body, eventDoc, doc, 5999 button = original.button, 6000 fromElement = original.fromElement; 6001 6002 // Calculate pageX/Y if missing and clientX/Y available 6003 if ( event.pageX == null && original.clientX != null ) { 6004 eventDoc = event.target.ownerDocument || document; 6005 doc = eventDoc.documentElement; 6006 body = eventDoc.body; 6007 6008 event.pageX = original.clientX + 6009 ( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) - 6010 ( doc && doc.clientLeft || body && body.clientLeft || 0 ); 6011 event.pageY = original.clientY + 6012 ( doc && doc.scrollTop || body && body.scrollTop || 0 ) - 6013 ( doc && doc.clientTop || body && body.clientTop || 0 ); 6014 } 6015 6016 // Add relatedTarget, if necessary 6017 if ( !event.relatedTarget && fromElement ) { 6018 event.relatedTarget = fromElement === event.target ? 6019 original.toElement : 6020 fromElement; 6021 } 6022 6023 // Add which for click: 1 === left; 2 === middle; 3 === right 6024 // Note: button is not normalized, so don't use it 6025 if ( !event.which && button !== undefined ) { 6026 event.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) ); 6027 } 6028 6029 return event; 6030 } 6031 }, 6032 6033 special: { 6034 load: { 6035 6036 // Prevent triggered image.load events from bubbling to window.load 6037 noBubble: true 6038 }, 6039 focus: { 6040 6041 // Fire native event if possible so blur/focus sequence is correct 6042 trigger: function() { 6043 if ( this !== safeActiveElement() && this.focus ) { 6044 try { 6045 this.focus(); 6046 return false;
6047 } catch ( e ) { 6048 6049 // Support: IE<9 6050 // If we error on focus to hidden element (#1486, #12518), 6051 // let .trigger() run the handlers 6052 } 6053 } 6054 }, 6055 delegateType: "focusin" 6056 }, 6057 blur: { 6058 trigger: function() { 6059 if ( this === safeActiveElement() && this.blur ) { 6060 this.blur(); 6061 return false; 6062 } 6063 }, 6064 delegateType: "focusout" 6065 }, 6066 click: { 6067 6068 // For checkbox, fire native event so checked state will be right 6069 trigger: function() { 6070 if ( jQuery.nodeName( this, "input" ) && this.type === "checkbox" && this.click ) { 6071 this.click(); 6072 return false; 6073 } 6074 }, 6075 6076 // For cross-browser consistency, don't fire native .click() on links 6077 _default: function( event ) { 6078 return jQuery.nodeName( event.target, "a" ); 6079 } 6080 }, 6081 6082 beforeunload: { 6083 postDispatch: function( event ) { 6084 6085 // Support: Firefox 20+ 6086 // Firefox doesn't alert if the returnValue field is not set. 6087 if ( event.result !== undefined && event.originalEvent ) { 6088 event.originalEvent.returnValue = event.result; 6089 } 6090 } 6091 } 6092 }, 6093 6094 // Piggyback on a donor event to simulate a different one 6095 simulate: function( type, elem, event ) { 6096 var e = jQuery.extend( 6097 new jQuery.Event(), 6098 event, 6099 { 6100 type: type, 6101 isSimulated: true 6102 6103 // Previously, `originalEvent: {}` was set here, so stopPropagation call 6104 // would not be triggered on donor event, since in our own 6105 // jQuery.event.stopPropagation function we had a check for existence of 6106 // originalEvent.stopPropagation method, so, consequently it would be a noop. 6107 // 6108 // Guard for simulated events was moved to jQuery.event.stopPropagation function 6109 // since `originalEvent` should point to the original event for the 6110 // constancy with other events and for more focused logic 6111 } 6112 ); 6113 6114 jQuery.event.trigger( e, null, elem ); 6115 6116 if ( e.isDefaultPrevented() ) { 6117 event.preventDefault(); 6118 } 6119 } 6120}; 6121 6122jQuery.removeEvent = document.removeEventListener ? 6123 function( elem, type, handle ) { 6124 6125 // This "if" is needed for plain objects 6126 if ( elem.removeEventListener ) { 6127 elem.removeEventListener( type, handle ); 6128 } 6129 } : 6130 function( elem, type, handle ) { 6131 var name = "on" + type; 6132 6133 if ( elem.detachEvent ) { 6134 6135 // #8545, #7054, preventing memory leaks for custom events in IE6-8 6136 // detachEvent needed property on element, by name of that event, 6137 // to properly expose it to GC 6138 if ( typeof elem[ name ] === "undefined" ) { 6139 elem[ name ] = null; 6140 } 6141 6142 elem.detachEvent( name, handle ); 6143 } 6144 }; 6145 6146jQuery.Event = function( src, props ) { 6147 6148 // Allow instantiation without the 'new' keyword 6149 if ( !( this instanceof jQuery.Event ) ) { 6150 return new jQuery.Event( src, props ); 6151 } 6152 6153 // Event object 6154 if ( src && src.type ) { 6155 this.originalEvent = src; 6156 this.type = src.type; 6157 6158 // Events bubbling up the document may have been marked as prevented 6159 // by a handler lower down the tree; reflect the correct value. 6160 this.isDefaultPrevented = src.defaultPrevented || 6161 src.defaultPrevented === undefined && 6162 6163 // Support: IE < 9, Android < 4.0 6164 src.returnValue === false ? 6165 returnTrue : 6166 returnFalse; 6167 6168 // Event type 6169 } else { 6170 this.type = src; 6171 } 6172 6173 // Put explicitly provided properties onto the event object 6174 if ( props ) { 6175 jQuery.extend( this, props ); 6176 } 6177 6178 // Create a timestamp if incoming event doesn't have one 6179 this.timeStamp = src && src.timeStamp || jQuery.now(); 6180 6181 // Mark it as fixed 6182 this[ jQuery.expando ] = true; 6183}; 6184 6185// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding 6186// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html 6187jQuery.Event.prototype = { 6188 constructor: jQuery.Event, 6189 isDefaultPrevented: returnFalse, 6190 isPropagationStopped: returnFalse, 6191 isImmediatePropagationStopped: returnFalse, 6192 6193 preventDefault: function() { 6194 var e = this.originalEvent; 6195 6196 this.isDefaultPrevented = returnTrue; 6197 if ( !e ) { 6198 return; 6199 } 6200 6201 // If preventDefault exists, run it on the original event 6202 if ( e.preventDefault ) { 6203 e.preventDefault(); 6204 6205 // Support: IE 6206 // Otherwise set the returnValue property of the original event to false 6207 } else { 6208 e.returnValue = false;
6209 } 6210 }, 6211 stopPropagation: function() { 6212 var e = this.originalEvent; 6213 6214 this.isPropagationStopped = returnTrue; 6215 6216 if ( !e || this.isSimulated ) { 6217 return; 6218 } 6219 6220 // If stopPropagation exists, run it on the original event 6221 if ( e.stopPropagation ) { 6222 e.stopPropagation(); 6223 } 6224 6225 // Support: IE 6226 // Set the cancelBubble property of the original event to true 6227 e.cancelBubble = true; 6228 }, 6229 stopImmediatePropagation: function() { 6230 var e = this.originalEvent; 6231 6232 this.isImmediatePropagationStopped = returnTrue; 6233 6234 if ( e && e.stopImmediatePropagation ) { 6235 e.stopImmediatePropagation(); 6236 } 6237 6238 this.stopPropagation(); 6239 } 6240}; 6241 6242// Create mouseenter/leave events using mouseover/out and event-time checks 6243// so that event delegation works in jQuery. 6244// Do the same for pointerenter/pointerleave and pointerover/pointerout 6245// 6246// Support: Safari 7 only 6247// Safari sends mouseenter too often; see: 6248// https://code.google.com/p/chromium/issues/detail?id=470258 6249// for the description of the bug (it existed in older Chrome versions as well). 6250jQuery.each( { 6251 mouseenter: "mouseover", 6252 mouseleave: "mouseout", 6253 pointerenter: "pointerover", 6254 pointerleave: "pointerout" 6255}, function( orig, fix ) { 6256 jQuery.event.special[ orig ] = { 6257 delegateType: fix, 6258 bindType: fix, 6259 6260 handle: function( event ) { 6261 var ret, 6262 target = this, 6263 related = event.relatedTarget, 6264 handleObj = event.handleObj; 6265 6266 // For mouseenter/leave call the handler if related is outside the target. 6267 // NB: No relatedTarget if the mouse left/entered the browser window 6268 if ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) { 6269 event.type = handleObj.origType; 6270 ret = handleObj.handler.apply( this, arguments ); 6271 event.type = fix; 6272 } 6273 return ret; 6274 } 6275 }; 6276} ); 6277 6278// IE submit delegation 6279if ( !support.submit ) { 6280 6281 jQuery.event.special.submit = { 6282 setup: function() { 6283 6284 // Only need this for delegated form submit events 6285 if ( jQuery.nodeName( this, "form" ) ) { 6286 return false; 6287 } 6288 6289 // Lazy-add a submit handler when a descendant form may potentially be submitted 6290 jQuery.event.add( this, "click._submit keypress._submit", function( e ) { 6291 6292 // Node name check avoids a VML-related crash in IE (#9807) 6293 var elem = e.target, 6294 form = jQuery.nodeName( elem, "input" ) || jQuery.nodeName( elem, "button" ) ? 6295 6296 // Support: IE <=8 6297 // We use jQuery.prop instead of elem.form 6298 // to allow fixing the IE8 delegated submit issue (gh-2332) 6299 // by 3rd party polyfills/workarounds. 6300 jQuery.prop( elem, "form" ) : 6301 undefined; 6302 6303 if ( form && !jQuery._data( form, "submit" ) ) { 6304 jQuery.event.add( form, "submit._submit", function( event ) { 6305 event._submitBubble = true; 6306 } ); 6307 jQuery._data( form, "submit", true ); 6308 } 6309 } ); 6310 6311 // return undefined since we don't need an event listener 6312 }, 6313 6314 postDispatch: function( event ) { 6315 6316 // If form was submitted by the user, bubble the event up the tree 6317 if ( event._submitBubble ) { 6318 delete event._submitBubble; 6319 if ( this.parentNode && !event.isTrigger ) { 6320 jQuery.event.simulate( "submit", this.parentNode, event ); 6321 } 6322 } 6323 }, 6324 6325 teardown: function() { 6326 6327 // Only need this for delegated form submit events 6328 if ( jQuery.nodeName( this, "form" ) ) { 6329 return false; 6330 } 6331 6332 // Remove delegated handlers; cleanData eventually reaps submit handlers attached above 6333 jQuery.event.remove( this, "._submit" ); 6334 } 6335 }; 6336} 6337 6338// IE change delegation and checkbox/radio fix 6339if ( !support.change ) { 6340 6341 jQuery.event.special.change = { 6342 6343 setup: function() { 6344 6345 if ( rformElems.test( this.nodeName ) ) { 6346 6347 // IE doesn't fire change on a check/radio until blur; trigger it on click 6348 // after a propertychange. Eat the blur-change in special.change.handle. 6349 // This still fires onchange a second time for check/radio after blur. 6350 if ( this.type === "checkbox" || this.type === "radio" ) { 6351 jQuery.event.add( this, "propertychange._change", function( event ) { 6352 if ( event.originalEvent.propertyName === "checked" ) { 6353 this._justChanged = true; 6354 } 6355 } ); 6356 jQuery.event.add( this, "click._change", function( event ) { 6357 if ( this._justChanged && !event.isTrigger ) { 6358 this._justChanged = false;
6359 } 6360 6361 // Allow triggered, simulated change events (#11500) 6362 jQuery.event.simulate( "change", this, event ); 6363 } ); 6364 } 6365 return false; 6366 } 6367 6368 // Delegated event; lazy-add a change handler on descendant inputs 6369 jQuery.event.add( this, "beforeactivate._change", function( e ) { 6370 var elem = e.target; 6371 6372 if ( rformElems.test( elem.nodeName ) && !jQuery._data( elem, "change" ) ) { 6373 jQuery.event.add( elem, "change._change", function( event ) { 6374 if ( this.parentNode && !event.isSimulated && !event.isTrigger ) { 6375 jQuery.event.simulate( "change", this.parentNode, event ); 6376 } 6377 } ); 6378 jQuery._data( elem, "change", true ); 6379 } 6380 } ); 6381 }, 6382 6383 handle: function( event ) { 6384 var elem = event.target; 6385 6386 // Swallow native change events from checkbox/radio, we already triggered them above 6387 if ( this !== elem || event.isSimulated || event.isTrigger || 6388 ( elem.type !== "radio" && elem.type !== "checkbox" ) ) { 6389 6390 return event.handleObj.handler.apply( this, arguments ); 6391 } 6392 }, 6393 6394 teardown: function() { 6395 jQuery.event.remove( this, "._change" ); 6396 6397 return !rformElems.test( this.nodeName ); 6398 } 6399 }; 6400} 6401 6402// Support: Firefox 6403// Firefox doesn't have focus(in | out) events 6404// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787 6405// 6406// Support: Chrome, Safari 6407// focus(in | out) events fire after focus & blur events, 6408// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order 6409// Related ticket - https://code.google.com/p/chromium/issues/detail?id=449857 6410if ( !support.focusin ) { 6411 jQuery.each( { focus: "focusin", blur: "focusout" }, function( orig, fix ) { 6412 6413 // Attach a single capturing handler on the document while someone wants focusin/focusout 6414 var handler = function( event ) { 6415 jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) ); 6416 }; 6417 6418 jQuery.event.special[ fix ] = { 6419 setup: function() { 6420 var doc = this.ownerDocument || this, 6421 attaches = jQuery._data( doc, fix ); 6422 6423 if ( !attaches ) { 6424 doc.addEventListener( orig, handler, true ); 6425 } 6426 jQuery._data( doc, fix, ( attaches || 0 ) + 1 ); 6427 }, 6428 teardown: function() { 6429 var doc = this.ownerDocument || this, 6430 attaches = jQuery._data( doc, fix ) - 1; 6431 6432 if ( !attaches ) { 6433 doc.removeEventListener( orig, handler, true ); 6434 jQuery._removeData( doc, fix ); 6435 } else { 6436 jQuery._data( doc, fix, attaches ); 6437 } 6438 } 6439 }; 6440 } ); 6441} 6442 6443jQuery.fn.extend( { 6444 6445 on: function( types, selector, data, fn ) { 6446 return on( this, types, selector, data, fn ); 6447 }, 6448 one: function( types, selector, data, fn ) { 6449 return on( this, types, selector, data, fn, 1 ); 6450 }, 6451 off: function( types, selector, fn ) { 6452 var handleObj, type; 6453 if ( types && types.preventDefault && types.handleObj ) { 6454 6455 // ( event ) dispatched jQuery.Event 6456 handleObj = types.handleObj; 6457 jQuery( types.delegateTarget ).off( 6458 handleObj.namespace ? 6459 handleObj.origType + "." + handleObj.namespace : 6460 handleObj.origType, 6461 handleObj.selector, 6462 handleObj.handler 6463 ); 6464 return this; 6465 } 6466 if ( typeof types === "object" ) { 6467 6468 // ( types-object [, selector] ) 6469 for ( type in types ) { 6470 this.off( type, selector, types[ type ] ); 6471 } 6472 return this; 6473 } 6474 if ( selector === false || typeof selector === "function" ) { 6475 6476 // ( types [, fn] ) 6477 fn = selector; 6478 selector = undefined; 6479 } 6480 if ( fn === false ) { 6481 fn = returnFalse; 6482 } 6483 return this.each( function() { 6484 jQuery.event.remove( this, types, fn, selector ); 6485 } ); 6486 }, 6487 6488 trigger: function( type, data ) { 6489 return this.each( function() { 6490 jQuery.event.trigger( type, data, this ); 6491 } ); 6492 }, 6493 triggerHandler: function( type, data ) { 6494 var elem = this[ 0 ]; 6495 if ( elem ) { 6496 return jQuery.event.trigger( type, data, elem, true ); 6497 } 6498 } 6499} ); 6500 6501 6502var rinlinejQuery = / jQuery\d+="(?:null|\d+)"/g, 6503 rnoshimcache = new RegExp( "<(?:" + nodeNames + ")[\\s/>]", "i" ), 6504 rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:-]+)[^>]*)\/>/gi, 6505 6506 // Support: IE 10-11, Edge 10240+ 6507 // In IE/Edge using regex groups here causes severe slowdowns. 6508 // See https://connect.microsoft.com/IE/feedback/details/1736512/ 6509 rnoInnerhtml = /<script|<style|<link/i, 6510 6511 // checked="checked" or checked 6512 rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i, 6513 rscriptTypeMasked = /^true\/(.*)/, 6514 rcleanScript = /^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g, 6515 safeFragment = createSafeFragment( document ), 6516 fragmentDiv = safeFragment.appendChild( document.createElement( "div" ) ); 6517 6518// Support: IE<8 6519// Manipulating tables requires a tbody 6520function manipulationTarget( elem, content ) { 6521 return jQuery.nodeName( elem, "table" ) && 6522 jQuery.nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ? 6523 6524 elem.getElementsByTagName( "tbody" )[ 0 ] || 6525 elem.appendChild( elem.ownerDocument.createElement( "tbody" ) ) : 6526 elem; 6527} 6528 6529// Replace/restore the type attribute of script elements for safe DOM manipulation 6530function disableScript( elem ) { 6531 elem.type = ( jQuery.find.attr( elem, "type" ) !== null ) + "/" + elem.type; 6532 return elem; 6533} 6534function restoreScript( elem ) { 6535 var match = rscriptTypeMasked.exec( elem.type ); 6536 if ( match ) { 6537 elem.type = match[ 1 ]; 6538 } else { 6539 elem.removeAttribute( "type" ); 6540 } 6541 return elem; 6542} 6543 6544function cloneCopyEvent( src, dest ) {
6545 if ( dest.nodeType !== 1 || !jQuery.hasData( src ) ) { 6546 return; 6547 } 6548 6549 var type, i, l, 6550 oldData = jQuery._data( src ), 6551 curData = jQuery._data( dest, oldData ), 6552 events = oldData.events; 6553 6554 if ( events ) { 6555 delete curData.handle; 6556 curData.events = {}; 6557 6558 for ( type in events ) { 6559 for ( i = 0, l = events[ type ].length; i < l; i++ ) { 6560 jQuery.event.add( dest, type, events[ type ][ i ] ); 6561 } 6562 } 6563 } 6564 6565 // make the cloned public data object a copy from the original 6566 if ( curData.data ) { 6567 curData.data = jQuery.extend( {}, curData.data ); 6568 } 6569} 6570 6571function fixCloneNodeIssues( src, dest ) { 6572 var nodeName, e, data; 6573 6574 // We do not need to do anything for non-Elements 6575 if ( dest.nodeType !== 1 ) { 6576 return; 6577 } 6578 6579 nodeName = dest.nodeName.toLowerCase(); 6580 6581 // IE6-8 copies events bound via attachEvent when using cloneNode. 6582 if ( !support.noCloneEvent && dest[ jQuery.expando ] ) { 6583 data = jQuery._data( dest ); 6584 6585 for ( e in data.events ) { 6586 jQuery.removeEvent( dest, e, data.handle ); 6587 } 6588 6589 // Event data gets referenced instead of copied if the expando gets copied too 6590 dest.removeAttribute( jQuery.expando ); 6591 } 6592 6593 // IE blanks contents when cloning scripts, and tries to evaluate newly-set text 6594 if ( nodeName === "script" && dest.text !== src.text ) { 6595 disableScript( dest ).text = src.text; 6596 restoreScript( dest ); 6597 6598 // IE6-10 improperly clones children of object elements using classid. 6599 // IE10 throws NoModificationAllowedError if parent is null, #12132. 6600 } else if ( nodeName === "object" ) { 6601 if ( dest.parentNode ) { 6602 dest.outerHTML = src.outerHTML; 6603 } 6604 6605 // This path appears unavoidable for IE9. When cloning an object 6606 // element in IE9, the outerHTML strategy above is not sufficient. 6607 // If the src has innerHTML and the destination does not, 6608 // copy the src.innerHTML into the dest.innerHTML. #10324 6609 if ( support.html5Clone && ( src.innerHTML && !jQuery.trim( dest.innerHTML ) ) ) { 6610 dest.innerHTML = src.innerHTML; 6611 } 6612 6613 } else if ( nodeName === "input" && rcheckableType.test( src.type ) ) { 6614 6615 // IE6-8 fails to persist the checked state of a cloned checkbox 6616 // or radio button. Worse, IE6-7 fail to give the cloned element 6617 // a checked appearance if the defaultChecked value isn't also set 6618 6619 dest.defaultChecked = dest.checked = src.checked; 6620 6621 // IE6-7 get confused and end up setting the value of a cloned 6622 // checkbox/radio button to an empty string instead of "on" 6623 if ( dest.value !== src.value ) { 6624 dest.value = src.value; 6625 } 6626 6627 // IE6-8 fails to return the selected option to the default selected 6628 // state when cloning options 6629 } else if ( nodeName === "option" ) { 6630 dest.defaultSelected = dest.selected = src.defaultSelected; 6631 6632 // IE6-8 fails to set the defaultValue to the correct value when 6633 // cloning other types of input fields 6634 } else if ( nodeName === "input" || nodeName === "textarea" ) { 6635 dest.defaultValue = src.defaultValue; 6636 } 6637} 6638 6639function domManip( collection, args, callback, ignored ) { 6640 6641 // Flatten any nested arrays 6642 args = concat.apply( [], args ); 6643 6644 var first, node, hasScripts, 6645 scripts, doc, fragment, 6646 i = 0, 6647 l = collection.length, 6648 iNoClone = l - 1, 6649 value = args[ 0 ], 6650 isFunction = jQuery.isFunction( value ); 6651 6652 // We can't cloneNode fragments that contain checked, in WebKit 6653 if ( isFunction || 6654 ( l > 1 && typeof value === "string" && 6655 !support.checkClone && rchecked.test( value ) ) ) { 6656 return collection.each( function( index ) { 6657 var self = collection.eq( index ); 6658 if ( isFunction ) { 6659 args[ 0 ] = value.call( this, index, self.html() ); 6660 } 6661 domManip( self, args, callback, ignored ); 6662 } ); 6663 } 6664 6665 if ( l ) { 6666 fragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored ); 6667 first = fragment.firstChild; 6668 6669 if ( fragment.childNodes.length === 1 ) { 6670 fragment = first; 6671 } 6672 6673 // Require either new content or an interest in ignored elements to invoke the callback 6674 if ( first || ignored ) { 6675 scripts = jQuery.map( getAll( fragment, "script" ), disableScript ); 6676 hasScripts = scripts.length; 6677 6678 // Use the original fragment for the last item 6679 // instead of the first because it can end up 6680 // being emptied incorrectly in certain situations (#8070). 6681 for ( ; i < l; i++ ) { 6682 node = fragment; 6683 6684 if ( i !== iNoClone ) { 6685 node = jQuery.clone( node, true, true ); 6686 6687 // Keep references to cloned scripts for later restoration 6688 if ( hasScripts ) { 6689
6690 // Support: Android<4.1, PhantomJS<2 6691 // push.apply(_, arraylike) throws on ancient WebKit 6692 jQuery.merge( scripts, getAll( node, "script" ) ); 6693 } 6694 } 6695 6696 callback.call( collection[ i ], node, i ); 6697 } 6698 6699 if ( hasScripts ) { 6700 doc = scripts[ scripts.length - 1 ].ownerDocument; 6701 6702 // Reenable scripts 6703 jQuery.map( scripts, restoreScript ); 6704 6705 // Evaluate executable scripts on first document insertion 6706 for ( i = 0; i < hasScripts; i++ ) { 6707 node = scripts[ i ]; 6708 if ( rscriptType.test( node.type || "" ) && 6709 !jQuery._data( node, "globalEval" ) && 6710 jQuery.contains( doc, node ) ) { 6711 6712 if ( node.src ) { 6713 6714 // Optional AJAX dependency, but won't run scripts if not present 6715 if ( jQuery._evalUrl ) { 6716 jQuery._evalUrl( node.src ); 6717 } 6718 } else { 6719 jQuery.globalEval( 6720 ( node.text || node.textContent || node.innerHTML || "" ) 6721 .replace( rcleanScript, "" ) 6722 ); 6723 } 6724 } 6725 } 6726 } 6727 6728 // Fix #11809: Avoid leaking memory 6729 fragment = first = null; 6730 } 6731 } 6732 6733 return collection; 6734} 6735 6736function remove( elem, selector, keepData ) { 6737 var node, 6738 elems = selector ? jQuery.filter( selector, elem ) : elem, 6739 i = 0; 6740 6741 for ( ; ( node = elems[ i ] ) != null; i++ ) { 6742 6743 if ( !keepData && node.nodeType === 1 ) { 6744 jQuery.cleanData( getAll( node ) ); 6745 } 6746 6747 if ( node.parentNode ) { 6748 if ( keepData && jQuery.contains( node.ownerDocument, node ) ) { 6749 setGlobalEval( getAll( node, "script" ) ); 6750 } 6751 node.parentNode.removeChild( node ); 6752 } 6753 } 6754 6755 return elem; 6756} 6757 6758jQuery.extend( { 6759 htmlPrefilter: function( html ) { 6760 return html.replace( rxhtmlTag, "<$1></$2>" ); 6761 }, 6762 6763 clone: function( elem, dataAndEvents, deepDataAndEvents ) { 6764 var destElements, node, clone, i, srcElements, 6765 inPage = jQuery.contains( elem.ownerDocument, elem ); 6766 6767 if ( support.html5Clone || jQuery.isXMLDoc( elem ) || 6768 !rnoshimcache.test( "<" + elem.nodeName + ">" ) ) { 6769 6770 clone = elem.cloneNode( true ); 6771 6772 // IE<=8 does not properly clone detached, unknown element nodes 6773 } else { 6774 fragmentDiv.innerHTML = elem.outerHTML; 6775 fragmentDiv.removeChild( clone = fragmentDiv.firstChild ); 6776 } 6777 6778 if ( ( !support.noCloneEvent || !support.noCloneChecked ) && 6779 ( elem.nodeType === 1 || elem.nodeType === 11 ) && !jQuery.isXMLDoc( elem ) ) { 6780 6781 // We eschew Sizzle here for performance reasons: http://jsperf.com/getall-vs-sizzle/2 6782 destElements = getAll( clone ); 6783 srcElements = getAll( elem ); 6784 6785 // Fix all IE cloning issues 6786 for ( i = 0; ( node = srcElements[ i ] ) != null; ++i ) { 6787 6788 // Ensure that the destination node is not null; Fixes #9587 6789 if ( destElements[ i ] ) { 6790 fixCloneNodeIssues( node, destElements[ i ] ); 6791 } 6792 } 6793 } 6794 6795 // Copy the events from the original to the clone 6796 if ( dataAndEvents ) { 6797 if ( deepDataAndEvents ) { 6798 srcElements = srcElements || getAll( elem ); 6799 destElements = destElements || getAll( clone ); 6800 6801 for ( i = 0; ( node = srcElements[ i ] ) != null; i++ ) { 6802 cloneCopyEvent( node, destElements[ i ] ); 6803 } 6804 } else { 6805 cloneCopyEvent( elem, clone ); 6806 } 6807 } 6808 6809 // Preserve script evaluation history 6810 destElements = getAll( clone, "script" ); 6811 if ( destElements.length > 0 ) { 6812 setGlobalEval( destElements, !inPage && getAll( elem, "script" ) ); 6813 } 6814 6815 destElements = srcElements = node = null; 6816 6817 // Return the cloned set 6818 return clone; 6819 }, 6820 6821 cleanData: function( elems, /* internal */ forceAcceptData ) { 6822 var elem, type, id, data, 6823 i = 0, 6824 internalKey = jQuery.expando, 6825 cache = jQuery.cache, 6826 attributes = support.attributes, 6827 special = jQuery.event.special; 6828 6829 for ( ; ( elem = elems[ i ] ) != null; i++ ) { 6830 if ( forceAcceptData || acceptData( elem ) ) { 6831 6832 id = elem[ internalKey ]; 6833 data = id && cache[ id ]; 6834 6835 if ( data ) { 6836 if ( data.events ) { 6837 for ( type in data.events ) { 6838 if ( special[ type ] ) { 6839 jQuery.event.remove( elem, type ); 6840 6841 // This is a shortcut to avoid jQuery.event.remove's overhead 6842 } else { 6843 jQuery.removeEvent( elem, type, data.handle ); 6844 } 6845 } 6846 } 6847 6848 // Remove cache only if it was not already removed by jQuery.event.remove 6849 if ( cache[ id ] ) { 6850 6851 delete cache[ id ]; 6852
6853 // Support: IE<9 6854 // IE does not allow us to delete expando properties from nodes 6855 // IE creates expando attributes along with the property 6856 // IE does not have a removeAttribute function on Document nodes 6857 if ( !attributes && typeof elem.removeAttribute !== "undefined" ) { 6858 elem.removeAttribute( internalKey ); 6859 6860 // Webkit & Blink performance suffers when deleting properties 6861 // from DOM nodes, so set to undefined instead 6862 // https://code.google.com/p/chromium/issues/detail?id=378607 6863 } else { 6864 elem[ internalKey ] = undefined; 6865 } 6866 6867 deletedIds.push( id ); 6868 } 6869 } 6870 } 6871 } 6872 } 6873} ); 6874 6875jQuery.fn.extend( { 6876 6877 // Keep domManip exposed until 3.0 (gh-2225) 6878 domManip: domManip, 6879 6880 detach: function( selector ) { 6881 return remove( this, selector, true ); 6882 }, 6883 6884 remove: function( selector ) { 6885 return remove( this, selector ); 6886 }, 6887 6888 text: function( value ) { 6889 return access( this, function( value ) { 6890 return value === undefined ? 6891 jQuery.text( this ) : 6892 this.empty().append( 6893 ( this[ 0 ] && this[ 0 ].ownerDocument || document ).createTextNode( value ) 6894 ); 6895 }, null, value, arguments.length ); 6896 }, 6897 6898 append: function() { 6899 return domManip( this, arguments, function( elem ) { 6900 if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { 6901 var target = manipulationTarget( this, elem ); 6902 target.appendChild( elem ); 6903 } 6904 } ); 6905 }, 6906
6907 prepend: function() { 6908 return domManip( this, arguments, function( elem ) { 6909 if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { 6910 var target = manipulationTarget( this, elem ); 6911 target.insertBefore( elem, target.firstChild ); 6912 } 6913 } ); 6914 }, 6915 6916 before: function() { 6917 return domManip( this, arguments, function( elem ) { 6918 if ( this.parentNode ) { 6919 this.parentNode.insertBefore( elem, this ); 6920 } 6921 } ); 6922 }, 6923 6924 after: function() { 6925 return domManip( this, arguments, function( elem ) { 6926 if ( this.parentNode ) { 6927 this.parentNode.insertBefore( elem, this.nextSibling ); 6928 } 6929 } ); 6930 }, 6931 6932 empty: function() { 6933 var elem, 6934 i = 0; 6935 6936 for ( ; ( elem = this[ i ] ) != null; i++ ) { 6937 6938 // Remove element nodes and prevent memory leaks 6939 if ( elem.nodeType === 1 ) { 6940 jQuery.cleanData( getAll( elem, false ) ); 6941 } 6942 6943 // Remove any remaining nodes 6944 while ( elem.firstChild ) { 6945 elem.removeChild( elem.firstChild ); 6946 } 6947 6948 // If this is a select, ensure that it displays empty (#12336) 6949 // Support: IE<9 6950 if ( elem.options && jQuery.nodeName( elem, "select" ) ) { 6951 elem.options.length = 0; 6952 } 6953 } 6954 6955 return this; 6956 }, 6957 6958 clone: function( dataAndEvents, deepDataAndEvents ) { 6959 dataAndEvents = dataAndEvents == null ? false : dataAndEvents; 6960 deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents; 6961 6962 return this.map( function() { 6963 return jQuery.clone( this, dataAndEvents, deepDataAndEvents ); 6964 } ); 6965 }, 6966 6967 html: function( value ) { 6968 return access( this, function( value ) { 6969 var elem = this[ 0 ] || {}, 6970 i = 0, 6971 l = this.length; 6972 6973 if ( value === undefined ) { 6974 return elem.nodeType === 1 ? 6975 elem.innerHTML.replace( rinlinejQuery, "" ) : 6976 undefined; 6977 } 6978 6979 // See if we can take a shortcut and just use innerHTML 6980 if ( typeof value === "string" && !rnoInnerhtml.test( value ) && 6981 ( support.htmlSerialize || !rnoshimcache.test( value ) ) && 6982 ( support.leadingWhitespace || !rleadingWhitespace.test( value ) ) && 6983 !wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) { 6984 6985 value = jQuery.htmlPrefilter( value ); 6986 6987 try { 6988 for ( ; i < l; i++ ) { 6989 6990 // Remove element nodes and prevent memory leaks 6991 elem = this[ i ] || {}; 6992 if ( elem.nodeType === 1 ) { 6993 jQuery.cleanData( getAll( elem, false ) ); 6994 elem.innerHTML = value; 6995 } 6996 } 6997 6998 elem = 0; 6999 7000 // If using innerHTML throws an exception, use the fallback method 7001 } catch ( e ) {} 7002 } 7003 7004 if ( elem ) { 7005 this.empty().append( value ); 7006 } 7007 }, null, value, arguments.length ); 7008 }, 7009 7010 replaceWith: function() { 7011 var ignored = []; 7012 7013 // Make the changes, replacing each non-ignored context element with the new content 7014 return domManip( this, arguments, function( elem ) { 7015 var parent = this.parentNode; 7016 7017 if ( jQuery.inArray( this, ignored ) < 0 ) { 7018 jQuery.cleanData( getAll( this ) ); 7019 if ( parent ) { 7020 parent.replaceChild( elem, this ); 7021 } 7022 } 7023 7024 // Force callback invocation 7025 }, ignored ); 7026 } 7027} ); 7028 7029jQuery.each( { 7030 appendTo: "append", 7031 prependTo: "prepend", 7032 insertBefore: "before", 7033 insertAfter: "after", 7034 replaceAll: "replaceWith" 7035}, function( name, original ) { 7036 jQuery.fn[ name ] = function( selector ) { 7037 var elems, 7038 i = 0, 7039 ret = [], 7040 insert = jQuery( selector ), 7041 last = insert.length - 1; 7042 7043 for ( ; i <= last; i++ ) { 7044 elems = i === last ? this : this.clone( true ); 7045 jQuery( insert[ i ] )[ original ]( elems ); 7046 7047 // Modern browsers can apply jQuery collections as arrays, but oldIE needs a .get() 7048 push.apply( ret, elems.get() ); 7049 } 7050 7051 return this.pushStack( ret ); 7052 }; 7053} ); 7054 7055 7056var iframe, 7057 elemdisplay = { 7058 7059 // Support: Firefox 7060 // We have to pre-define these values for FF (#10227) 7061 HTML: "block", 7062 BODY: "block" 7063 }; 7064 7065/** 7066 * Retrieve the actual display of a element 7067 * @param {String} name nodeName of the element 7068 * @param {Object} doc Document object 7069 */ 7070 7071// Called only from within defaultDisplay 7072function actualDisplay( name, doc ) { 7073 var elem = jQuery( doc.createElement( name ) ).appendTo( doc.body ), 7074 7075 display = jQuery.css( elem[ 0 ], "display" ); 7076 7077 // We don't have any data stored on the element, 7078 // so use "detach" method as fast way to get rid of the element 7079 elem.detach(); 7080
7081 return display; 7082} 7083 7084/** 7085 * Try to determine the default display value of an element 7086 * @param {String} nodeName 7087 */ 7088function defaultDisplay( nodeName ) { 7089 var doc = document, 7090 display = elemdisplay[ nodeName ]; 7091 7092 if ( !display ) { 7093 display = actualDisplay( nodeName, doc ); 7094 7095 // If the simple way fails, read from inside an iframe 7096 if ( display === "none" || !display ) { 7097 7098 // Use the already-created iframe if possible 7099 iframe = ( iframe || jQuery( "<iframe frameborder='0' width='0' height='0'/>" ) ) 7100 .appendTo( doc.documentElement ); 7101 7102 // Always write a new HTML skeleton so Webkit and Firefox don't choke on reuse 7103 doc = ( iframe[ 0 ].contentWindow || iframe[ 0 ].contentDocument ).document; 7104 7105 // Support: IE 7106 doc.write(); 7107 doc.close(); 7108 7109 display = actualDisplay( nodeName, doc ); 7110 iframe.detach(); 7111 } 7112 7113 // Store the correct default display 7114 elemdisplay[ nodeName ] = display; 7115 } 7116 7117 return display; 7118} 7119var rmargin = ( /^margin/ ); 7120 7121var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" ); 7122 7123var swap = function( elem, options, callback, args ) { 7124 var ret, name, 7125 old = {}; 7126 7127 // Remember the old values, and insert the new ones 7128 for ( name in options ) { 7129 old[ name ] = elem.style[ name ]; 7130 elem.style[ name ] = options[ name ]; 7131 } 7132 7133 ret = callback.apply( elem, args || [] ); 7134 7135 // Revert the old values 7136 for ( name in options ) { 7137 elem.style[ name ] = old[ name ]; 7138 } 7139 7140 return ret; 7141}; 7142 7143 7144var documentElement = document.documentElement; 7145 7146 7147 7148( function() { 7149 var pixelPositionVal, pixelMarginRightVal, boxSizingReliableVal, 7150 reliableHiddenOffsetsVal, reliableMarginRightVal, reliableMarginLeftVal, 7151 container = document.createElement( "div" ), 7152 div = document.createElement( "div" ); 7153 7154 // Finish early in limited (non-browser) environments 7155 if ( !div.style ) { 7156 return; 7157 } 7158 7159 div.style.cssText = "float:left;opacity:.5"; 7160 7161 // Support: IE<9 7162 // Make sure that element opacity exists (as opposed to filter) 7163 support.opacity = div.style.opacity === "0.5"; 7164 7165 // Verify style float existence 7166 // (IE uses styleFloat instead of cssFloat) 7167 support.cssFloat = !!div.style.cssFloat; 7168 7169 div.style.backgroundClip = "content-box"; 7170 div.cloneNode( true ).style.backgroundClip = ""; 7171 support.clearCloneStyle = div.style.backgroundClip === "content-box"; 7172 7173 container = document.createElement( "div" ); 7174 container.style.cssText = "border:0;width:8px;height:0;top:0;left:-9999px;" + 7175 "padding:0;margin-top:1px;position:absolute"; 7176 div.innerHTML = ""; 7177 container.appendChild( div ); 7178 7179 // Support: Firefox<29, Android 2.3 7180 // Vendor-prefix box-sizing 7181 support.boxSizing = div.style.boxSizing === "" || div.style.MozBoxSizing === "" || 7182 div.style.WebkitBoxSizing === ""; 7183 7184 jQuery.extend( support, { 7185 reliableHiddenOffsets: function() { 7186 if ( pixelPositionVal == null ) { 7187 computeStyleTests(); 7188 } 7189 return reliableHiddenOffsetsVal; 7190 }, 7191 7192 boxSizingReliable: function() { 7193 7194 // We're checking for pixelPositionVal here instead of boxSizingReliableVal 7195 // since that compresses better and they're computed together anyway. 7196 if ( pixelPositionVal == null ) { 7197 computeStyleTests(); 7198 } 7199 return boxSizingReliableVal; 7200 }, 7201 7202 pixelMarginRight: function() { 7203 7204 // Support: Android 4.0-4.3 7205 if ( pixelPositionVal == null ) { 7206 computeStyleTests(); 7207 } 7208 return pixelMarginRightVal; 7209 }, 7210 7211 pixelPosition: function() { 7212 if ( pixelPositionVal == null ) { 7213 computeStyleTests(); 7214 } 7215 return pixelPositionVal; 7216 }, 7217 7218 reliableMarginRight: function() { 7219 7220 // Support: Android 2.3 7221 if ( pixelPositionVal == null ) { 7222 computeStyleTests(); 7223 } 7224 return reliableMarginRightVal; 7225 }, 7226 7227 reliableMarginLeft: function() { 7228 7229 // Support: IE <=8 only, Android 4.0 - 4.3 only, Firefox <=3 - 37 7230 if ( pixelPositionVal == null ) { 7231 computeStyleTests(); 7232 } 7233 return reliableMarginLeftVal; 7234 } 7235 } ); 7236 7237 function computeStyleTests() { 7238 var contents, divStyle, 7239 documentElement = document.documentElement; 7240 7241 // Setup 7242 documentElement.appendChild( container ); 7243 7244 div.style.cssText = 7245 7246 // Support: Android 2.3 7247 // Vendor-prefix box-sizing 7248 "-webkit-box-sizing:border-box;box-sizing:border-box;" + 7249 "position:relative;display:block;" + 7250 "margin:auto;border:1px;padding:1px;" + 7251 "top:1%;width:50%"; 7252
7253 // Support: IE<9 7254 // Assume reasonable values in the absence of getComputedStyle 7255 pixelPositionVal = boxSizingReliableVal = reliableMarginLeftVal = false; 7256 pixelMarginRightVal = reliableMarginRightVal = true; 7257 7258 // Check for getComputedStyle so that this code is not run in IE<9. 7259 if ( window.getComputedStyle ) { 7260 divStyle = window.getComputedStyle( div ); 7261 pixelPositionVal = ( divStyle || {} ).top !== "1%"; 7262 reliableMarginLeftVal = ( divStyle || {} ).marginLeft === "2px"; 7263 boxSizingReliableVal = ( divStyle || { width: "4px" } ).width === "4px"; 7264 7265 // Support: Android 4.0 - 4.3 only 7266 // Some styles come back with percentage values, even though they shouldn't 7267 div.style.marginRight = "50%"; 7268 pixelMarginRightVal = ( divStyle || { marginRight: "4px" } ).marginRight === "4px"; 7269 7270 // Support: Android 2.3 only 7271 // Div with explicit width and no margin-right incorrectly 7272 // gets computed margin-right based on width of container (#3333) 7273 // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right 7274 contents = div.appendChild( document.createElement( "div" ) ); 7275 7276 // Reset CSS: box-sizing; display; margin; border; padding 7277 contents.style.cssText = div.style.cssText = 7278 7279 // Support: Android 2.3 7280 // Vendor-prefix box-sizing 7281 "-webkit-box-sizing:content-box;-moz-box-sizing:content-box;" + 7282 "box-sizing:content-box;display:block;margin:0;border:0;padding:0"; 7283 contents.style.marginRight = contents.style.width = "0"; 7284 div.style.width = "1px"; 7285 7286 reliableMarginRightVal = 7287 !parseFloat( ( window.getComputedStyle( contents ) || {} ).marginRight ); 7288 7289 div.removeChild( contents ); 7290 } 7291 7292 // Support: IE6-8 7293 // First check that getClientRects works as expected 7294 // Check if table cells still have offsetWidth/Height when they are set 7295 // to display:none and there are still other visible table cells in a 7296 // table row; if so, offsetWidth/Height are not reliable for use when 7297 // determining if an element has been hidden directly using 7298 // display:none (it is still safe to use offsets if a parent element is 7299 // hidden; don safety goggles and see bug #4512 for more information). 7300 div.style.display = "none"; 7301 reliableHiddenOffsetsVal = div.getClientRects().length === 0; 7302 if ( reliableHiddenOffsetsVal ) { 7303 div.style.display = ""; 7304 div.innerHTML = "<table><tr><td></td><td>t</td></tr></table>"; 7305 div.childNodes[ 0 ].style.borderCollapse = "separate"; 7306 contents = div.getElementsByTagName( "td" ); 7307 contents[ 0 ].style.cssText = "margin:0;border:0;padding:0;display:none"; 7308 reliableHiddenOffsetsVal = contents[ 0 ].offsetHeight === 0; 7309 if ( reliableHiddenOffsetsVal ) { 7310 contents[ 0 ].style.display = ""; 7311 contents[ 1 ].style.display = "none"; 7312 reliableHiddenOffsetsVal = contents[ 0 ].offsetHeight === 0; 7313 } 7314 } 7315 7316 // Teardown 7317 documentElement.removeChild( container ); 7318 } 7319 7320} )(); 7321 7322 7323var getStyles, curCSS, 7324 rposition = /^(top|right|bottom|left)$/; 7325 7326if ( window.getComputedStyle ) { 7327 getStyles = function( elem ) { 7328 7329 // Support: IE<=11+, Firefox<=30+ (#15098, #14150) 7330 // IE throws on elements created in popups 7331 // FF meanwhile throws on frame elements through "defaultView.getComputedStyle" 7332 var view = elem.ownerDocument.defaultView; 7333 7334 if ( !view || !view.opener ) { 7335 view = window; 7336 } 7337 7338 return view.getComputedStyle( elem ); 7339 }; 7340 7341 curCSS = function( elem, name, computed ) { 7342 var width, minWidth, maxWidth, ret, 7343 style = elem.style; 7344 7345 computed = computed || getStyles( elem ); 7346 7347 // getPropertyValue is only needed for .css('filter') in IE9, see #12537 7348 ret = computed ? computed.getPropertyValue( name ) || computed[ name ] : undefined; 7349 7350 // Support: Opera 12.1x only 7351 // Fall back to style even without computed 7352 // computed is undefined for elems on document fragments 7353 if ( ( ret === "" || ret === undefined ) && !jQuery.contains( elem.ownerDocument, elem ) ) { 7354 ret = jQuery.style( elem, name ); 7355 } 7356 7357 if ( computed ) { 7358 7359 // A tribute to the "awesome hack by Dean Edwards" 7360 // Chrome < 17 and Safari 5.0 uses "computed value" 7361 // instead of "used value" for margin-right 7362 // Safari 5.1.7 (at least) returns percentage for a larger set of values, 7363 // but width seems to be reliably pixels 7364 // this is against the CSSOM draft spec: 7365 // http://dev.w3.org/csswg/cssom/#resolved-values 7366 if ( !support.pixelMarginRight() && rnumnonpx.test( ret ) && rmargin.test( name ) ) { 7367 7368 // Remember the original values 7369 width = style.width; 7370 minWidth = style.minWidth; 7371 maxWidth = style.maxWidth; 7372 7373 // Put in the new values to get a computed value out 7374 style.minWidth = style.maxWidth = style.width = ret; 7375 ret = computed.width; 7376 7377 // Revert the changed values 7378 style.width = width; 7379 style.minWidth = minWidth; 7380 style.maxWidth = maxWidth; 7381 } 7382 } 7383
7384 // Support: IE 7385 // IE returns zIndex value as an integer. 7386 return ret === undefined ? 7387 ret : 7388 ret + ""; 7389 }; 7390} else if ( documentElement.currentStyle ) { 7391 getStyles = function( elem ) { 7392 return elem.currentStyle; 7393 }; 7394 7395 curCSS = function( elem, name, computed ) { 7396 var left, rs, rsLeft, ret, 7397 style = elem.style; 7398 7399 computed = computed || getStyles( elem ); 7400 ret = computed ? computed[ name ] : undefined; 7401 7402 // Avoid setting ret to empty string here 7403 // so we don't default to auto 7404 if ( ret == null && style && style[ name ] ) { 7405 ret = style[ name ]; 7406 } 7407 7408 // From the awesome hack by Dean Edwards 7409 // http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291 7410 7411 // If we're not dealing with a regular pixel number 7412 // but a number that has a weird ending, we need to convert it to pixels 7413 // but not position css attributes, as those are 7414 // proportional to the parent element instead 7415 // and we can't measure the parent instead because it 7416 // might trigger a "stacking dolls" problem 7417 if ( rnumnonpx.test( ret ) && !rposition.test( name ) ) { 7418 7419 // Remember the original values 7420 left = style.left; 7421 rs = elem.runtimeStyle; 7422 rsLeft = rs && rs.left; 7423 7424 // Put in the new values to get a computed value out 7425 if ( rsLeft ) { 7426 rs.left = elem.currentStyle.left; 7427 } 7428 style.left = name === "fontSize" ? "1em" : ret; 7429 ret = style.pixelLeft + "px"; 7430 7431 // Revert the changed values 7432 style.left = left; 7433 if ( rsLeft ) { 7434 rs.left = rsLeft; 7435 } 7436 } 7437 7438 // Support: IE 7439 // IE returns zIndex value as an integer. 7440 return ret === undefined ? 7441 ret : 7442 ret + "" || "auto"; 7443 }; 7444} 7445 7446 7447 7448 7449function addGetHookIf( conditionFn, hookFn ) { 7450 7451 // Define the hook, we'll check on the first run if it's really needed. 7452 return { 7453 get: function() { 7454 if ( conditionFn() ) { 7455 7456 // Hook not needed (or it's not possible to use it due 7457 // to missing dependency), remove it. 7458 delete this.get; 7459 return; 7460 } 7461 7462 // Hook needed; redefine it so that the support test is not executed again. 7463 return ( this.get = hookFn ).apply( this, arguments ); 7464 } 7465 }; 7466} 7467 7468 7469var 7470 7471 ralpha = /alpha\([^)]*\)/i, 7472 ropacity = /opacity\s*=\s*([^)]*)/i, 7473 7474 // swappable if display is none or starts with table except 7475 // "table", "table-cell", or "table-caption" 7476 // see here for display values: 7477 // https://developer.mozilla.org/en-US/docs/CSS/display 7478 rdisplayswap = /^(none|table(?!-c[ea]).+)/, 7479 rnumsplit = new RegExp( "^(" + pnum + ")(.*)$", "i" ), 7480 7481 cssShow = { position: "absolute", visibility: "hidden", display: "block" }, 7482 cssNormalTransform = { 7483 letterSpacing: "0", 7484 fontWeight: "400" 7485 }, 7486 7487 cssPrefixes = [ "Webkit", "O", "Moz", "ms" ], 7488 emptyStyle = document.createElement( "div" ).style; 7489 7490 7491// return a css property mapped to a potentially vendor prefixed property 7492function vendorPropName( name ) { 7493 7494 // shortcut for names that are not vendor prefixed 7495 if ( name in emptyStyle ) { 7496 return name; 7497 } 7498 7499 // check for vendor prefixed names 7500 var capName = name.charAt( 0 ).toUpperCase() + name.slice( 1 ), 7501 i = cssPrefixes.length; 7502 7503 while ( i-- ) { 7504 name = cssPrefixes[ i ] + capName; 7505 if ( name in emptyStyle ) { 7506 return name; 7507 } 7508 } 7509} 7510 7511function showHide( elements, show ) { 7512 var display, elem, hidden, 7513 values = [], 7514 index = 0, 7515 length = elements.length; 7516 7517 for ( ; index < length; index++ ) { 7518 elem = elements[ index ]; 7519 if ( !elem.style ) { 7520 continue; 7521 } 7522 7523 values[ index ] = jQuery._data( elem, "olddisplay" ); 7524 display = elem.style.display; 7525 if ( show ) { 7526 7527 // Reset the inline display of this element to learn if it is 7528 // being hidden by cascaded rules or not 7529 if ( !values[ index ] && display === "none" ) { 7530 elem.style.display = ""; 7531 } 7532 7533 // Set elements which have been overridden with display: none 7534 // in a stylesheet to whatever the default browser style is 7535 // for such an element 7536 if ( elem.style.display === "" && isHidden( elem ) ) { 7537 values[ index ] = 7538 jQuery._data( elem, "olddisplay", defaultDisplay( elem.nodeName ) ); 7539 } 7540 } else { 7541 hidden = isHidden( elem ); 7542 7543 if ( display && display !== "none" || !hidden ) { 7544 jQuery._data( 7545 elem, 7546 "olddisplay",
vendor: 6,043 bytes, lines 7547-7758
7547 hidden ? display : jQuery.css( elem, "display" ) 7548 ); 7549 } 7550 } 7551 } 7552 7553 // Set the display of most of the elements in a second loop 7554 // to avoid the constant reflow 7555 for ( index = 0; index < length; index++ ) { 7556 elem = elements[ index ]; 7557 if ( !elem.style ) { 7558 continue; 7559 } 7560 if ( !show || elem.style.display === "none" || elem.style.display === "" ) { 7561 elem.style.display = show ? values[ index ] || "" : "none"; 7562 } 7563 } 7564 7565 return elements; 7566} 7567 7568function setPositiveNumber( elem, value, subtract ) { 7569 var matches = rnumsplit.exec( value ); 7570 return matches ? 7571 7572 // Guard against undefined "subtract", e.g., when used as in cssHooks 7573 Math.max( 0, matches[ 1 ] - ( subtract || 0 ) ) + ( matches[ 2 ] || "px" ) : 7574 value; 7575} 7576 7577function augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) { 7578 var i = extra === ( isBorderBox ? "border" : "content" ) ? 7579 7580 // If we already have the right measurement, avoid augmentation 7581 4 : 7582 7583 // Otherwise initialize for horizontal or vertical properties 7584 name === "width" ? 1 : 0, 7585 7586 val = 0; 7587 7588 for ( ; i < 4; i += 2 ) { 7589 7590 // both box models exclude margin, so add it if we want it 7591 if ( extra === "margin" ) { 7592 val += jQuery.css( elem, extra + cssExpand[ i ], true, styles ); 7593 } 7594 7595 if ( isBorderBox ) { 7596 7597 // border-box includes padding, so remove it if we want content 7598 if ( extra === "content" ) { 7599 val -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); 7600 } 7601 7602 // at this point, extra isn't border nor margin, so remove border 7603 if ( extra !== "margin" ) { 7604 val -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); 7605 } 7606 } else { 7607 7608 // at this point, extra isn't content, so add padding 7609 val += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); 7610 7611 // at this point, extra isn't content nor padding, so add border 7612 if ( extra !== "padding" ) { 7613 val += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); 7614 } 7615 } 7616 } 7617 7618 return val; 7619} 7620 7621function getWidthOrHeight( elem, name, extra ) { 7622 7623 // Start with offset property, which is equivalent to the border-box value 7624 var valueIsBorderBox = true, 7625 val = name === "width" ? elem.offsetWidth : elem.offsetHeight, 7626 styles = getStyles( elem ), 7627 isBorderBox = support.boxSizing && 7628 jQuery.css( elem, "boxSizing", false, styles ) === "border-box"; 7629 7630 // some non-html elements return undefined for offsetWidth, so check for null/undefined 7631 // svg - https://bugzilla.mozilla.org/show_bug.cgi?id=649285 7632 // MathML - https://bugzilla.mozilla.org/show_bug.cgi?id=491668 7633 if ( val <= 0 || val == null ) { 7634 7635 // Fall back to computed then uncomputed css if necessary 7636 val = curCSS( elem, name, styles ); 7637 if ( val < 0 || val == null ) { 7638 val = elem.style[ name ]; 7639 } 7640 7641 // Computed unit is not pixels. Stop here and return. 7642 if ( rnumnonpx.test( val ) ) { 7643 return val; 7644 } 7645 7646 // we need the check for style in case a browser which returns unreliable values 7647 // for getComputedStyle silently falls back to the reliable elem.style 7648 valueIsBorderBox = isBorderBox && 7649 ( support.boxSizingReliable() || val === elem.style[ name ] ); 7650 7651 // Normalize "", auto, and prepare for extra 7652 val = parseFloat( val ) || 0; 7653 } 7654 7655 // use the active box-sizing model to add/subtract irrelevant styles 7656 return ( val + 7657 augmentWidthOrHeight( 7658 elem, 7659 name, 7660 extra || ( isBorderBox ? "border" : "content" ), 7661 valueIsBorderBox, 7662 styles 7663 ) 7664 ) + "px"; 7665} 7666 7667jQuery.extend( { 7668 7669 // Add in style property hooks for overriding the default 7670 // behavior of getting and setting a style property 7671 cssHooks: { 7672 opacity: { 7673 get: function( elem, computed ) { 7674 if ( computed ) { 7675 7676 // We should always get a number back from opacity 7677 var ret = curCSS( elem, "opacity" ); 7678 return ret === "" ? "1" : ret; 7679 } 7680 } 7681 } 7682 }, 7683 7684 // Don't automatically add "px" to these possibly-unitless properties 7685 cssNumber: { 7686 "animationIterationCount": true, 7687 "columnCount": true, 7688 "fillOpacity": true, 7689 "flexGrow": true, 7690 "flexShrink": true, 7691 "fontWeight": true, 7692 "lineHeight": true, 7693 "opacity": true, 7694 "order": true, 7695 "orphans": true, 7696 "widows": true, 7697 "zIndex": true, 7698 "zoom": true 7699 }, 7700 7701 // Add in properties whose names you wish to fix before 7702 // setting or getting the value 7703 cssProps: { 7704 7705 // normalize float css property 7706 "float": support.cssFloat ? "cssFloat" : "styleFloat" 7707 }, 7708 7709 // Get and set the style property on a DOM Node 7710 style: function( elem, name, value, extra ) { 7711 7712 // Don't set styles on text and comment nodes 7713 if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) { 7714 return; 7715 } 7716 7717 // Make sure that we're working with the right name 7718 var ret, type, hooks, 7719 origName = jQuery.camelCase( name ), 7720 style = elem.style; 7721 7722 name = jQuery.cssProps[ origName ] || 7723 ( jQuery.cssProps[ origName ] = vendorPropName( origName ) || origName ); 7724 7725 // gets hook for the prefixed version 7726 // followed by the unprefixed version 7727 hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; 7728 7729 // Check if we're setting a value 7730 if ( value !== undefined ) { 7731 type = typeof value; 7732 7733 // Convert "+=" or "-=" to relative numbers (#7345) 7734 if ( type === "string" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) { 7735 value = adjustCSS( elem, name, ret ); 7736 7737 // Fixes bug #9237 7738 type = "number"; 7739 } 7740 7741 // Make sure that null and NaN values aren't set. See: #7116 7742 if ( value == null || value !== value ) { 7743 return; 7744 } 7745 7746 // If a number was passed in, add the unit (except for certain CSS properties) 7747 if ( type === "number" ) { 7748 value += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? "" : "px" ); 7749 } 7750 7751 // Fixes #8908, it can be done more correctly by specifing setters in cssHooks, 7752 // but it would mean to define eight 7753 // (for every problematic property) identical functions 7754 if ( !support.clearCloneStyle && value === "" && name.indexOf( "background" ) === 0 ) { 7755 style[ name ] = "inherit"; 7756 } 7757 7758 // If a hook was provided, use that value, otherwise just set the specified value
7759 if ( !hooks || !( "set" in hooks ) || 7760 ( value = hooks.set( elem, value, extra ) ) !== undefined ) { 7761 7762 // Support: IE 7763 // Swallow errors from 'invalid' CSS values (#5509) 7764 try { 7765 style[ name ] = value; 7766 } catch ( e ) {} 7767 } 7768 7769 } else { 7770 7771 // If a hook was provided get the non-computed value from there 7772 if ( hooks && "get" in hooks && 7773 ( ret = hooks.get( elem, false, extra ) ) !== undefined ) { 7774 7775 return ret; 7776 } 7777 7778 // Otherwise just get the value from the style object 7779 return style[ name ]; 7780 } 7781 }, 7782 7783 css: function( elem, name, extra, styles ) { 7784 var num, val, hooks, 7785 origName = jQuery.camelCase( name ); 7786 7787 // Make sure that we're working with the right name 7788 name = jQuery.cssProps[ origName ] || 7789 ( jQuery.cssProps[ origName ] = vendorPropName( origName ) || origName ); 7790 7791 // gets hook for the prefixed version 7792 // followed by the unprefixed version 7793 hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; 7794 7795 // If a hook was provided get the computed value from there 7796 if ( hooks && "get" in hooks ) { 7797 val = hooks.get( elem, true, extra ); 7798 } 7799 7800 // Otherwise, if a way to get the computed value exists, use that 7801 if ( val === undefined ) { 7802 val = curCSS( elem, name, styles ); 7803 } 7804 7805 //convert "normal" to computed value 7806 if ( val === "normal" && name in cssNormalTransform ) { 7807 val = cssNormalTransform[ name ]; 7808 } 7809 7810 // Return, converting to number if forced or a qualifier was provided and val looks numeric 7811 if ( extra === "" || extra ) { 7812 num = parseFloat( val ); 7813 return extra === true || isFinite( num ) ? num || 0 : val; 7814 } 7815 return val; 7816 } 7817} ); 7818 7819jQuery.each( [ "height", "width" ], function( i, name ) { 7820 jQuery.cssHooks[ name ] = { 7821 get: function( elem, computed, extra ) { 7822 if ( computed ) { 7823 7824 // certain elements can have dimension info if we invisibly show them 7825 // however, it must have a current display style that would benefit from this 7826 return rdisplayswap.test( jQuery.css( elem, "display" ) ) && 7827 elem.offsetWidth === 0 ? 7828 swap( elem, cssShow, function() { 7829 return getWidthOrHeight( elem, name, extra ); 7830 } ) : 7831 getWidthOrHeight( elem, name, extra ); 7832 } 7833 }, 7834 7835 set: function( elem, value, extra ) { 7836 var styles = extra && getStyles( elem ); 7837 return setPositiveNumber( elem, value, extra ? 7838 augmentWidthOrHeight( 7839 elem, 7840 name, 7841 extra, 7842 support.boxSizing && 7843 jQuery.css( elem, "boxSizing", false, styles ) === "border-box", 7844 styles 7845 ) : 0 7846 ); 7847 } 7848 }; 7849} ); 7850 7851if ( !support.opacity ) { 7852 jQuery.cssHooks.opacity = { 7853 get: function( elem, computed ) { 7854 7855 // IE uses filters for opacity 7856 return ropacity.test( ( computed && elem.currentStyle ? 7857 elem.currentStyle.filter : 7858 elem.style.filter ) || "" ) ? 7859 ( 0.01 * parseFloat( RegExp.$1 ) ) + "" : 7860 computed ? "1" : ""; 7861 }, 7862 7863 set: function( elem, value ) { 7864 var style = elem.style, 7865 currentStyle = elem.currentStyle, 7866 opacity = jQuery.isNumeric( value ) ? "alpha(opacity=" + value * 100 + ")" : "", 7867 filter = currentStyle && currentStyle.filter || style.filter || ""; 7868 7869 // IE has trouble with opacity if it does not have layout 7870 // Force it by setting the zoom level 7871 style.zoom = 1; 7872 7873 // if setting opacity to 1, and no other filters exist - 7874 // attempt to remove filter attribute #6652 7875 // if value === "", then remove inline opacity #12685 7876 if ( ( value >= 1 || value === "" ) && 7877 jQuery.trim( filter.replace( ralpha, "" ) ) === "" && 7878 style.removeAttribute ) { 7879 7880 // Setting style.filter to null, "" & " " still leave "filter:" in the cssText 7881 // if "filter:" is present at all, clearType is disabled, we want to avoid this 7882 // style.removeAttribute is IE Only, but so apparently is this code path... 7883 style.removeAttribute( "filter" ); 7884 7885 // if there is no filter style applied in a css rule 7886 // or unset inline opacity, we are done 7887 if ( value === "" || currentStyle && !currentStyle.filter ) { 7888 return; 7889 } 7890 } 7891 7892 // otherwise, set new filter values 7893 style.filter = ralpha.test( filter ) ? 7894 filter.replace( ralpha, opacity ) : 7895 filter + " " + opacity; 7896 } 7897 }; 7898} 7899 7900jQuery.cssHooks.marginRight = addGetHookIf( support.reliableMarginRight, 7901 function( elem, computed ) { 7902 if ( computed ) { 7903 return swap( elem, { "display": "inline-block" }, 7904 curCSS, [ elem, "marginRight" ] ); 7905 } 7906 } 7907); 7908 7909jQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft, 7910 function( elem, computed ) { 7911 if ( computed ) { 7912 return ( 7913 parseFloat( curCSS( elem, "marginLeft" ) ) || 7914
vendor: 4,625 bytes, lines 7915-8093
7915 // Support: IE<=11+ 7916 // Running getBoundingClientRect on a disconnected node in IE throws an error 7917 // Support: IE8 only 7918 // getClientRects() errors on disconnected elems 7919 ( jQuery.contains( elem.ownerDocument, elem ) ? 7920 elem.getBoundingClientRect().left - 7921 swap( elem, { marginLeft: 0 }, function() { 7922 return elem.getBoundingClientRect().left; 7923 } ) : 7924 0 7925 ) 7926 ) + "px"; 7927 } 7928 } 7929); 7930 7931// These hooks are used by animate to expand properties 7932jQuery.each( { 7933 margin: "", 7934 padding: "", 7935 border: "Width" 7936}, function( prefix, suffix ) { 7937 jQuery.cssHooks[ prefix + suffix ] = { 7938 expand: function( value ) { 7939 var i = 0, 7940 expanded = {}, 7941 7942 // assumes a single number if not a string 7943 parts = typeof value === "string" ? value.split( " " ) : [ value ]; 7944 7945 for ( ; i < 4; i++ ) { 7946 expanded[ prefix + cssExpand[ i ] + suffix ] = 7947 parts[ i ] || parts[ i - 2 ] || parts[ 0 ]; 7948 } 7949 7950 return expanded; 7951 } 7952 }; 7953 7954 if ( !rmargin.test( prefix ) ) { 7955 jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber; 7956 } 7957} ); 7958 7959jQuery.fn.extend( { 7960 css: function( name, value ) { 7961 return access( this, function( elem, name, value ) { 7962 var styles, len, 7963 map = {}, 7964 i = 0; 7965 7966 if ( jQuery.isArray( name ) ) { 7967 styles = getStyles( elem ); 7968 len = name.length; 7969 7970 for ( ; i < len; i++ ) { 7971 map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles ); 7972 } 7973 7974 return map; 7975 } 7976 7977 return value !== undefined ? 7978 jQuery.style( elem, name, value ) : 7979 jQuery.css( elem, name ); 7980 }, name, value, arguments.length > 1 ); 7981 }, 7982 show: function() { 7983 return showHide( this, true ); 7984 }, 7985 hide: function() { 7986 return showHide( this ); 7987 }, 7988 toggle: function( state ) { 7989 if ( typeof state === "boolean" ) { 7990 return state ? this.show() : this.hide(); 7991 } 7992 7993 return this.each( function() { 7994 if ( isHidden( this ) ) { 7995 jQuery( this ).show(); 7996 } else { 7997 jQuery( this ).hide(); 7998 } 7999 } ); 8000 } 8001} ); 8002 8003 8004function Tween( elem, options, prop, end, easing ) { 8005 return new Tween.prototype.init( elem, options, prop, end, easing ); 8006} 8007jQuery.Tween = Tween; 8008 8009Tween.prototype = { 8010 constructor: Tween, 8011 init: function( elem, options, prop, end, easing, unit ) { 8012 this.elem = elem; 8013 this.prop = prop; 8014 this.easing = easing || jQuery.easing._default; 8015 this.options = options; 8016 this.start = this.now = this.cur(); 8017 this.end = end; 8018 this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" ); 8019 }, 8020 cur: function() { 8021 var hooks = Tween.propHooks[ this.prop ]; 8022 8023 return hooks && hooks.get ? 8024 hooks.get( this ) : 8025 Tween.propHooks._default.get( this ); 8026 }, 8027 run: function( percent ) { 8028 var eased, 8029 hooks = Tween.propHooks[ this.prop ]; 8030 8031 if ( this.options.duration ) { 8032 this.pos = eased = jQuery.easing[ this.easing ]( 8033 percent, this.options.duration * percent, 0, 1, this.options.duration 8034 ); 8035 } else { 8036 this.pos = eased = percent; 8037 } 8038 this.now = ( this.end - this.start ) * eased + this.start; 8039 8040 if ( this.options.step ) { 8041 this.options.step.call( this.elem, this.now, this ); 8042 } 8043 8044 if ( hooks && hooks.set ) { 8045 hooks.set( this ); 8046 } else { 8047 Tween.propHooks._default.set( this ); 8048 } 8049 return this; 8050 } 8051}; 8052 8053Tween.prototype.init.prototype = Tween.prototype; 8054 8055Tween.propHooks = { 8056 _default: { 8057 get: function( tween ) { 8058 var result; 8059 8060 // Use a property on the element directly when it is not a DOM element, 8061 // or when there is no matching style property that exists. 8062 if ( tween.elem.nodeType !== 1 || 8063 tween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) { 8064 return tween.elem[ tween.prop ]; 8065 } 8066 8067 // passing an empty string as a 3rd parameter to .css will automatically 8068 // attempt a parseFloat and fallback to a string if the parse fails 8069 // so, simple values such as "10px" are parsed to Float. 8070 // complex values such as "rotate(1rad)" are returned as is. 8071 result = jQuery.css( tween.elem, tween.prop, "" ); 8072 8073 // Empty strings, null, undefined and "auto" are converted to 0. 8074 return !result || result === "auto" ? 0 : result; 8075 }, 8076 set: function( tween ) { 8077 8078 // use step hook for back compat - use cssHook if its there - use .style if its 8079 // available and use plain properties where available 8080 if ( jQuery.fx.step[ tween.prop ] ) { 8081 jQuery.fx.step[ tween.prop ]( tween ); 8082 } else if ( tween.elem.nodeType === 1 && 8083 ( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null || 8084 jQuery.cssHooks[ tween.prop ] ) ) { 8085 jQuery.style( tween.elem, tween.prop, tween.now + tween.unit ); 8086 } else { 8087 tween.elem[ tween.prop ] = tween.now; 8088 } 8089 } 8090 } 8091}; 8092 8093// Support: IE <=9
8094// Panic based approach to setting things on disconnected nodes 8095 8096Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = { 8097 set: function( tween ) { 8098 if ( tween.elem.nodeType && tween.elem.parentNode ) { 8099 tween.elem[ tween.prop ] = tween.now; 8100 } 8101 } 8102}; 8103 8104jQuery.easing = { 8105 linear: function( p ) { 8106 return p; 8107 }, 8108 swing: function( p ) { 8109 return 0.5 - Math.cos( p * Math.PI ) / 2; 8110 }, 8111 _default: "swing" 8112}; 8113 8114jQuery.fx = Tween.prototype.init; 8115 8116// Back Compat <1.8 extension point 8117jQuery.fx.step = {}; 8118 8119 8120 8121 8122var 8123 fxNow, timerId, 8124 rfxtypes = /^(?:toggle|show|hide)$/, 8125 rrun = /queueHooks$/; 8126 8127// Animations created synchronously will run synchronously 8128function createFxNow() { 8129 window.setTimeout( function() { 8130 fxNow = undefined; 8131 } ); 8132 return ( fxNow = jQuery.now() ); 8133} 8134 8135// Generate parameters to create a standard animation 8136function genFx( type, includeWidth ) { 8137 var which, 8138 attrs = { height: type }, 8139 i = 0; 8140 8141 // if we include width, step value is 1 to do all cssExpand values, 8142 // if we don't include width, step value is 2 to skip over Left and Right 8143 includeWidth = includeWidth ? 1 : 0; 8144 for ( ; i < 4 ; i += 2 - includeWidth ) { 8145 which = cssExpand[ i ]; 8146 attrs[ "margin" + which ] = attrs[ "padding" + which ] = type; 8147 } 8148 8149 if ( includeWidth ) { 8150 attrs.opacity = attrs.width = type; 8151 } 8152 8153 return attrs; 8154} 8155 8156function createTween( value, prop, animation ) { 8157 var tween, 8158 collection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ "*" ] ), 8159 index = 0, 8160 length = collection.length; 8161 for ( ; index < length; index++ ) { 8162 if ( ( tween = collection[ index ].call( animation, prop, value ) ) ) { 8163 8164 // we're done with this property 8165 return tween; 8166 } 8167 } 8168} 8169 8170function defaultPrefilter( elem, props, opts ) { 8171 /* jshint validthis: true */ 8172 var prop, value, toggle, tween, hooks, oldfire, display, checkDisplay, 8173 anim = this, 8174 orig = {}, 8175 style = elem.style, 8176 hidden = elem.nodeType && isHidden( elem ), 8177 dataShow = jQuery._data( elem, "fxshow" ); 8178 8179 // handle queue: false promises 8180 if ( !opts.queue ) { 8181 hooks = jQuery._queueHooks( elem, "fx" ); 8182 if ( hooks.unqueued == null ) { 8183 hooks.unqueued = 0; 8184 oldfire = hooks.empty.fire; 8185 hooks.empty.fire = function() { 8186 if ( !hooks.unqueued ) { 8187 oldfire(); 8188 } 8189 }; 8190 } 8191 hooks.unqueued++; 8192 8193 anim.always( function() { 8194 8195 // doing this makes sure that the complete handler will be called 8196 // before this completes 8197 anim.always( function() { 8198 hooks.unqueued--; 8199 if ( !jQuery.queue( elem, "fx" ).length ) { 8200 hooks.empty.fire(); 8201 } 8202 } ); 8203 } ); 8204 } 8205 8206 // height/width overflow pass 8207 if ( elem.nodeType === 1 && ( "height" in props || "width" in props ) ) { 8208 8209 // Make sure that nothing sneaks out 8210 // Record all 3 overflow attributes because IE does not 8211 // change the overflow attribute when overflowX and 8212 // overflowY are set to the same value 8213 opts.overflow = [ style.overflow, style.overflowX, style.overflowY ]; 8214 8215 // Set display property to inline-block for height/width 8216 // animations on inline elements that are having width/height animated 8217 display = jQuery.css( elem, "display" ); 8218 8219 // Test default display if display is currently "none" 8220 checkDisplay = display === "none" ? 8221 jQuery._data( elem, "olddisplay" ) || defaultDisplay( elem.nodeName ) : display; 8222 8223 if ( checkDisplay === "inline" && jQuery.css( elem, "float" ) === "none" ) { 8224 8225 // inline-level elements accept inline-block; 8226 // block-level elements need to be inline with layout 8227 if ( !support.inlineBlockNeedsLayout || defaultDisplay( elem.nodeName ) === "inline" ) { 8228 style.display = "inline-block"; 8229 } else { 8230 style.zoom = 1; 8231 } 8232 } 8233 } 8234 8235 if ( opts.overflow ) { 8236 style.overflow = "hidden"; 8237 if ( !support.shrinkWrapBlocks() ) { 8238 anim.always( function() { 8239 style.overflow = opts.overflow[ 0 ]; 8240 style.overflowX = opts.overflow[ 1 ]; 8241 style.overflowY = opts.overflow[ 2 ]; 8242 } ); 8243 } 8244 } 8245 8246 // show/hide pass 8247 for ( prop in props ) { 8248 value = props[ prop ]; 8249 if ( rfxtypes.exec( value ) ) { 8250 delete props[ prop ]; 8251 toggle = toggle || value === "toggle"; 8252 if ( value === ( hidden ? "hide" : "show" ) ) { 8253 8254 // If there is dataShow left over from a stopped hide or show 8255 // and we are going to proceed with show, we should pretend to be hidden 8256 if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) { 8257 hidden = true; 8258 } else { 8259 continue; 8260 } 8261 } 8262 orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop ); 8263 8264 // Any non-fx value stops us from restoring the original display value 8265 } else { 8266 display = undefined; 8267 } 8268 } 8269 8270 if ( !jQuery.isEmptyObject( orig ) ) { 8271 if ( dataShow ) { 8272 if ( "hidden" in dataShow ) { 8273 hidden = dataShow.hidden; 8274 } 8275 } else { 8276 dataShow = jQuery._data( elem, "fxshow", {} ); 8277 } 8278 8279 // store state if its toggle - enables .stop().toggle() to "reverse" 8280 if ( toggle ) { 8281 dataShow.hidden = !hidden; 8282 } 8283 if ( hidden ) { 8284 jQuery( elem ).show(); 8285 } else { 8286 anim.done( function() { 8287 jQuery( elem ).hide(); 8288 } ); 8289 } 8290 anim.done( function() { 8291 var prop; 8292 jQuery._removeData( elem, "fxshow" ); 8293 for ( prop in orig ) { 8294 jQuery.style( elem, prop, orig[ prop ] ); 8295 } 8296 } ); 8297 for ( prop in orig ) { 8298 tween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim ); 8299 8300 if ( !( prop in dataShow ) ) { 8301 dataShow[ prop ] = tween.start; 8302 if ( hidden ) { 8303 tween.end = tween.start; 8304 tween.start = prop === "width" || prop === "height" ? 1 : 0; 8305 } 8306 } 8307 } 8308 8309 // If this is a noop like .hide().hide(), restore an overwritten display value 8310 } else if ( ( display === "none" ? defaultDisplay( elem.nodeName ) : dis
vendor: 10,851 bytes, lines 8310-8742
8310play ) === "inline" ) { 8311 style.display = display; 8312 } 8313} 8314 8315function propFilter( props, specialEasing ) { 8316 var index, name, easing, value, hooks; 8317 8318 // camelCase, specialEasing and expand cssHook pass 8319 for ( index in props ) { 8320 name = jQuery.camelCase( index ); 8321 easing = specialEasing[ name ]; 8322 value = props[ index ]; 8323 if ( jQuery.isArray( value ) ) { 8324 easing = value[ 1 ]; 8325 value = props[ index ] = value[ 0 ]; 8326 } 8327 8328 if ( index !== name ) { 8329 props[ name ] = value; 8330 delete props[ index ]; 8331 } 8332 8333 hooks = jQuery.cssHooks[ name ]; 8334 if ( hooks && "expand" in hooks ) { 8335 value = hooks.expand( value ); 8336 delete props[ name ]; 8337 8338 // not quite $.extend, this wont overwrite keys already present. 8339 // also - reusing 'index' from above because we have the correct "name" 8340 for ( index in value ) { 8341 if ( !( index in props ) ) { 8342 props[ index ] = value[ index ]; 8343 specialEasing[ index ] = easing; 8344 } 8345 } 8346 } else { 8347 specialEasing[ name ] = easing; 8348 } 8349 } 8350} 8351 8352function Animation( elem, properties, options ) { 8353 var result, 8354 stopped, 8355 index = 0, 8356 length = Animation.prefilters.length, 8357 deferred = jQuery.Deferred().always( function() { 8358 8359 // don't match elem in the :animated selector 8360 delete tick.elem; 8361 } ), 8362 tick = function() { 8363 if ( stopped ) { 8364 return false; 8365 } 8366 var currentTime = fxNow || createFxNow(), 8367 remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ), 8368 8369 // Support: Android 2.3 8370 // Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497) 8371 temp = remaining / animation.duration || 0, 8372 percent = 1 - temp, 8373 index = 0, 8374 length = animation.tweens.length; 8375 8376 for ( ; index < length ; index++ ) { 8377 animation.tweens[ index ].run( percent ); 8378 } 8379 8380 deferred.notifyWith( elem, [ animation, percent, remaining ] ); 8381 8382 if ( percent < 1 && length ) { 8383 return remaining; 8384 } else { 8385 deferred.resolveWith( elem, [ animation ] ); 8386 return false; 8387 } 8388 }, 8389 animation = deferred.promise( { 8390 elem: elem, 8391 props: jQuery.extend( {}, properties ), 8392 opts: jQuery.extend( true, { 8393 specialEasing: {}, 8394 easing: jQuery.easing._default 8395 }, options ), 8396 originalProperties: properties, 8397 originalOptions: options, 8398 startTime: fxNow || createFxNow(), 8399 duration: options.duration, 8400 tweens: [], 8401 createTween: function( prop, end ) { 8402 var tween = jQuery.Tween( elem, animation.opts, prop, end, 8403 animation.opts.specialEasing[ prop ] || animation.opts.easing ); 8404 animation.tweens.push( tween ); 8405 return tween; 8406 }, 8407 stop: function( gotoEnd ) { 8408 var index = 0, 8409 8410 // if we are going to the end, we want to run all the tweens 8411 // otherwise we skip this part 8412 length = gotoEnd ? animation.tweens.length : 0; 8413 if ( stopped ) { 8414 return this; 8415 } 8416 stopped = true; 8417 for ( ; index < length ; index++ ) { 8418 animation.tweens[ index ].run( 1 ); 8419 } 8420 8421 // resolve when we played the last frame 8422 // otherwise, reject 8423 if ( gotoEnd ) { 8424 deferred.notifyWith( elem, [ animation, 1, 0 ] ); 8425 deferred.resolveWith( elem, [ animation, gotoEnd ] ); 8426 } else { 8427 deferred.rejectWith( elem, [ animation, gotoEnd ] ); 8428 } 8429 return this; 8430 } 8431 } ), 8432 props = animation.props; 8433 8434 propFilter( props, animation.opts.specialEasing ); 8435 8436 for ( ; index < length ; index++ ) { 8437 result = Animation.prefilters[ index ].call( animation, elem, props, animation.opts ); 8438 if ( result ) { 8439 if ( jQuery.isFunction( result.stop ) ) { 8440 jQuery._queueHooks( animation.elem, animation.opts.queue ).stop = 8441 jQuery.proxy( result.stop, result ); 8442 } 8443 return result; 8444 } 8445 } 8446 8447 jQuery.map( props, createTween, animation ); 8448 8449 if ( jQuery.isFunction( animation.opts.start ) ) { 8450 animation.opts.start.call( elem, animation ); 8451 } 8452 8453 jQuery.fx.timer( 8454 jQuery.extend( tick, { 8455 elem: elem, 8456 anim: animation, 8457 queue: animation.opts.queue 8458 } ) 8459 ); 8460 8461 // attach callbacks from options 8462 return animation.progress( animation.opts.progress ) 8463 .done( animation.opts.done, animation.opts.complete ) 8464 .fail( animation.opts.fail ) 8465 .always( animation.opts.always ); 8466} 8467 8468jQuery.Animation = jQuery.extend( Animation, { 8469 8470 tweeners: { 8471 "*": [ function( prop, value ) { 8472 var tween = this.createTween( prop, value ); 8473 adjustCSS( tween.elem, prop, rcssNum.exec( value ), tween ); 8474 return tween; 8475 } ] 8476 }, 8477 8478 tweener: function( props, callback ) { 8479 if ( jQuery.isFunction( props ) ) { 8480 callback = props; 8481 props = [ "*" ]; 8482 } else { 8483 props = props.match( rnotwhite ); 8484 } 8485 8486 var prop, 8487 index = 0, 8488 length = props.length; 8489 8490 for ( ; index < length ; index++ ) { 8491 prop = props[ index ]; 8492 Animation.tweeners[ prop ] = Animation.tweeners[ prop ] || []; 8493 Animation.tweeners[ prop ].unshift( callback ); 8494 } 8495 }, 8496 8497 prefilters: [ defaultPrefilter ], 8498 8499 prefilter: function( callback, prepend ) { 8500 if ( prepend ) { 8501 Animation.prefilters.unshift( callback ); 8502 } else { 8503 Animation.prefilters.push( callback ); 8504 } 8505 } 8506} ); 8507 8508jQuery.speed = function( speed, easing, fn ) { 8509 var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : { 8510 complete: fn || !fn && easing || 8511 jQuery.isFunction( speed ) && speed, 8512 duration: speed, 8513 easing: fn && easing || easing && !jQuery.isFunction( easing ) && easing 8514 }; 8515 8516 opt.duration = jQuery.fx.off ? 0 : typeof opt.duration === "number" ? opt.duration : 8517 opt.duration in jQuery.fx.speeds ? 8518 jQuery.fx.speeds[ opt.duration ] : jQuery.fx.speeds._default; 8519 8520 // normalize opt.queue - true/undefined/null -> "fx" 8521 if ( opt.queue == null || opt.queue === true ) { 8522 opt.queue = "fx"; 8523 } 8524 8525 // Queueing 8526 opt.old = opt.complete; 8527 8528 opt.complete = function() { 8529 if ( jQuery.isFunction( opt.old ) ) { 8530 opt.old.call( this ); 8531 } 8532 8533 if ( opt.queue ) { 8534 jQuery.dequeue( this, opt.queue ); 8535 } 8536 }; 8537 8538 return opt; 8539}; 8540 8541jQuery.fn.extend( { 8542 fadeTo: function( speed, to, easing, callback ) { 8543 8544 // show any hidden elements after setting opacity to 0 8545 return this.filter( isHidden ).css( "opacity", 0 ).show() 8546 8547 // animate to the value specified 8548 .end().animate( { opacity: to }, speed, easing, callback ); 8549 }, 8550 animate: function( prop, speed, easing, callback ) { 8551 var empty = jQuery.isEmptyObject( prop ), 8552 optall = jQuery.speed( speed, easing, callback ), 8553 doAnimation = function() { 8554 8555 // Operate on a copy of prop so per-property easing won't be lost 8556 var anim = Animation( this, jQuery.extend( {}, prop ), optall ); 8557 8558 // Empty animations, or finishing resolves immediately 8559 if ( empty || jQuery._data( this, "finish" ) ) { 8560 anim.stop( true ); 8561 } 8562 }; 8563 doAnimation.finish = doAnimation; 8564 8565 return empty || optall.queue === false ? 8566 this.each( doAnimation ) : 8567 this.queue( optall.queue, doAnimation ); 8568 }, 8569 stop: function( type, clearQueue, gotoEnd ) { 8570 var stopQueue = function( hooks ) { 8571 var stop = hooks.stop; 8572 delete hooks.stop; 8573 stop( gotoEnd ); 8574 }; 8575 8576 if ( typeof type !== "string" ) { 8577 gotoEnd = clearQueue; 8578 clearQueue = type; 8579 type = undefined; 8580 } 8581 if ( clearQueue && type !== false ) { 8582 this.queue( type || "fx", [] ); 8583 } 8584 8585 return this.each( function() { 8586 var dequeue = true, 8587 index = type != null && type + "queueHooks", 8588 timers = jQuery.timers, 8589 data = jQuery._data( this ); 8590 8591 if ( index ) { 8592 if ( data[ index ] && data[ index ].stop ) { 8593 stopQueue( data[ index ] ); 8594 } 8595 } else { 8596 for ( index in data ) { 8597 if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) { 8598 stopQueue( data[ index ] ); 8599 } 8600 } 8601 } 8602 8603 for ( index = timers.length; index--; ) { 8604 if ( timers[ index ].elem === this && 8605 ( type == null || timers[ index ].queue === type ) ) { 8606 8607 timers[ index ].anim.stop( gotoEnd ); 8608 dequeue = false; 8609 timers.splice( index, 1 ); 8610 } 8611 } 8612 8613 // start the next in the queue if the last step wasn't forced 8614 // timers currently will call their complete callbacks, which will dequeue 8615 // but only if they were gotoEnd 8616 if ( dequeue || !gotoEnd ) { 8617 jQuery.dequeue( this, type ); 8618 } 8619 } ); 8620 }, 8621 finish: function( type ) { 8622 if ( type !== false ) { 8623 type = type || "fx"; 8624 } 8625 return this.each( function() { 8626 var index, 8627 data = jQuery._data( this ), 8628 queue = data[ type + "queue" ], 8629 hooks = data[ type + "queueHooks" ], 8630 timers = jQuery.timers, 8631 length = queue ? queue.length : 0; 8632 8633 // enable finishing flag on private data 8634 data.finish = true; 8635 8636 // empty the queue first 8637 jQuery.queue( this, type, [] ); 8638 8639 if ( hooks && hooks.stop ) { 8640 hooks.stop.call( this, true ); 8641 } 8642 8643 // look for any active animations, and finish them 8644 for ( index = timers.length; index--; ) { 8645 if ( timers[ index ].elem === this && timers[ index ].queue === type ) { 8646 timers[ index ].anim.stop( true ); 8647 timers.splice( index, 1 ); 8648 } 8649 } 8650 8651 // look for any animations in the old queue and finish them 8652 for ( index = 0; index < length; index++ ) { 8653 if ( queue[ index ] && queue[ index ].finish ) { 8654 queue[ index ].finish.call( this ); 8655 } 8656 } 8657 8658 // turn off finishing flag 8659 delete data.finish; 8660 } ); 8661 } 8662} ); 8663 8664jQuery.each( [ "toggle", "show", "hide" ], function( i, name ) { 8665 var cssFn = jQuery.fn[ name ]; 8666 jQuery.fn[ name ] = function( speed, easing, callback ) { 8667 return speed == null || typeof speed === "boolean" ? 8668 cssFn.apply( this, arguments ) : 8669 this.animate( genFx( name, true ), speed, easing, callback ); 8670 }; 8671} ); 8672 8673// Generate shortcuts for custom animations 8674jQuery.each( { 8675 slideDown: genFx( "show" ), 8676 slideUp: genFx( "hide" ), 8677 slideToggle: genFx( "toggle" ), 8678 fadeIn: { opacity: "show" }, 8679 fadeOut: { opacity: "hide" }, 8680 fadeToggle: { opacity: "toggle" } 8681}, function( name, props ) { 8682 jQuery.fn[ name ] = function( speed, easing, callback ) { 8683 return this.animate( props, speed, easing, callback ); 8684 }; 8685} ); 8686 8687jQuery.timers = []; 8688jQuery.fx.tick = function() { 8689 var timer, 8690 timers = jQuery.timers, 8691 i = 0; 8692 8693 fxNow = jQuery.now(); 8694 8695 for ( ; i < timers.length; i++ ) { 8696 timer = timers[ i ]; 8697 8698 // Checks the timer has not already been removed 8699 if ( !timer() && timers[ i ] === timer ) { 8700 timers.splice( i--, 1 ); 8701 } 8702 } 8703 8704 if ( !timers.length ) { 8705 jQuery.fx.stop(); 8706 } 8707 fxNow = undefined; 8708}; 8709 8710jQuery.fx.timer = function( timer ) { 8711 jQuery.timers.push( timer ); 8712 if ( timer() ) { 8713 jQuery.fx.start(); 8714 } else { 8715 jQuery.timers.pop(); 8716 } 8717}; 8718 8719jQuery.fx.interval = 13; 8720 8721jQuery.fx.start = function() { 8722 if ( !timerId ) { 8723 timerId = window.setInterval( jQuery.fx.tick, jQuery.fx.interval ); 8724 } 8725}; 8726 8727jQuery.fx.stop = function() { 8728 window.clearInterval( timerId ); 8729 timerId = null; 8730}; 8731 8732jQuery.fx.speeds = { 8733 slow: 600, 8734 fast: 200, 8735 8736 // Default speed 8737 _default: 400 8738}; 8739 8740 8741// Based off of the plugin by Clint Helfers, with permission. 8742// http://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/
8743jQuery.fn.delay = function( time, type ) { 8744 time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time; 8745 type = type || "fx"; 8746 8747 return this.queue( type, function( next, hooks ) { 8748 var timeout = window.setTimeout( next, time ); 8749 hooks.stop = function() { 8750 window.clearTimeout( timeout ); 8751 }; 8752 } ); 8753}; 8754 8755 8756( function() { 8757 var a, 8758 input = document.createElement( "input" ), 8759 div = document.createElement( "div" ), 8760 select = document.createElement( "select" ), 8761 opt = select.appendChild( document.createElement( "option" ) ); 8762 8763 // Setup 8764 div = document.createElement( "div" ); 8765 div.setAttribute( "className", "t" ); 8766 div.innerHTML = " <link/><table></table><a href='/a'>a</a><input type='checkbox'/>"; 8767 a = div.getElementsByTagName( "a" )[ 0 ]; 8768 8769 // Support: Windows Web Apps (WWA) 8770 // `type` must use .setAttribute for WWA (#14901) 8771 input.setAttribute( "type", "checkbox" ); 8772 div.appendChild( input ); 8773 8774 a = div.getElementsByTagName( "a" )[ 0 ]; 8775 8776 // First batch of tests. 8777 a.style.cssText = "top:1px"; 8778 8779 // Test setAttribute on camelCase class. 8780 // If it works, we need attrFixes when doing get/setAttribute (ie6/7)
8781 support.getSetAttribute = div.className !== "t"; 8782 8783 // Get the style information from getAttribute 8784 // (IE uses .cssText instead) 8785 support.style = /top/.test( a.getAttribute( "style" ) ); 8786 8787 // Make sure that URLs aren't manipulated 8788 // (IE normalizes it by default) 8789 support.hrefNormalized = a.getAttribute( "href" ) === "/a"; 8790 8791 // Check the default checkbox/radio value ("" on WebKit; "on" elsewhere) 8792 support.checkOn = !!input.value; 8793 8794 // Make sure that a selected-by-default option has a working selected property. 8795 // (WebKit defaults to false instead of true, IE too, if it's in an optgroup) 8796 support.optSelected = opt.selected; 8797 8798 // Tests for enctype support on a form (#6743) 8799 support.enctype = !!document.createElement( "form" ).enctype; 8800 8801 // Make sure that the options inside disabled selects aren't marked as disabled 8802 // (WebKit marks them as disabled) 8803 select.disabled = true; 8804 support.optDisabled = !opt.disabled; 8805 8806 // Support: IE8 only 8807 // Check if we can trust getAttribute("value") 8808 input = document.createElement( "input" ); 8809 input.setAttribute( "value", "" ); 8810 support.input = input.getAttribute( "value" ) === ""; 8811 8812 // Check if an input maintains its value after becoming a radio 8813 input.value = "t"; 8814 input.setAttribute( "type", "radio" ); 8815 support.radioValue = input.value === "t"; 8816} )(); 8817 8818 8819var rreturn = /\r/g, 8820 rspaces = /[\x20\t\r\n\f]+/g; 8821 8822jQuery.fn.extend( { 8823 val: function( value ) { 8824 var hooks, ret, isFunction, 8825 elem = this[ 0 ]; 8826 8827 if ( !arguments.length ) { 8828 if ( elem ) { 8829 hooks = jQuery.valHooks[ elem.type ] || 8830 jQuery.valHooks[ elem.nodeName.toLowerCase() ]; 8831 8832 if ( 8833 hooks && 8834 "get" in hooks && 8835 ( ret = hooks.get( elem, "value" ) ) !== undefined 8836 ) { 8837 return ret; 8838 } 8839 8840 ret = elem.value; 8841 8842 return typeof ret === "string" ? 8843 8844 // handle most common string cases 8845 ret.replace( rreturn, "" ) : 8846 8847 // handle cases where value is null/undef or number 8848 ret == null ? "" : ret; 8849 } 8850 8851 return; 8852 } 8853 8854 isFunction = jQuery.isFunction( value ); 8855 8856 return this.each( function( i ) { 8857 var val; 8858 8859 if ( this.nodeType !== 1 ) { 8860 return; 8861 } 8862 8863 if ( isFunction ) { 8864 val = value.call( this, i, jQuery( this ).val() ); 8865 } else { 8866 val = value; 8867 } 8868 8869 // Treat null/undefined as ""; convert numbers to string 8870 if ( val == null ) { 8871 val = ""; 8872 } else if ( typeof val === "number" ) { 8873 val += ""; 8874 } else if ( jQuery.isArray( val ) ) { 8875 val = jQuery.map( val, function( value ) { 8876 return value == null ? "" : value + ""; 8877 } ); 8878 } 8879 8880 hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ]; 8881 8882 // If set returns undefined, fall back to normal setting
8883 if ( !hooks || !( "set" in hooks ) || hooks.set( this, val, "value" ) === undefined ) { 8884 this.value = val; 8885 } 8886 } ); 8887 } 8888} ); 8889 8890jQuery.extend( { 8891 valHooks: { 8892 option: { 8893 get: function( elem ) { 8894 var val = jQuery.find.attr( elem, "value" ); 8895 return val != null ? 8896 val : 8897 8898 // Support: IE10-11+ 8899 // option.text throws exceptions (#14686, #14858) 8900 // Strip and collapse whitespace 8901 // https://html.spec.whatwg.org/#strip-and-collapse-whitespace 8902 jQuery.trim( jQuery.text( elem ) ).replace( rspaces, " " ); 8903 } 8904 }, 8905 select: { 8906 get: function( elem ) { 8907 var value, option, 8908 options = elem.options, 8909 index = elem.selectedIndex, 8910 one = elem.type === "select-one" || index < 0, 8911 values = one ? null : [], 8912 max = one ? index + 1 : options.length, 8913 i = index < 0 ? 8914 max : 8915 one ? index : 0; 8916 8917 // Loop through all the selected options 8918 for ( ; i < max; i++ ) { 8919 option = options[ i ]; 8920 8921 // oldIE doesn't update selected after form reset (#2551) 8922 if ( ( option.selected || i === index ) && 8923 8924 // Don't return options that are disabled or in a disabled optgroup 8925 ( support.optDisabled ? 8926 !option.disabled : 8927 option.getAttribute( "disabled" ) === null ) && 8928 ( !option.parentNode.disabled || 8929 !jQuery.nodeName( option.parentNode, "optgroup" ) ) ) { 8930 8931 // Get the specific value for the option 8932 value = jQuery( option ).val(); 8933 8934 // We don't need an array for one selects 8935 if ( one ) { 8936 return value; 8937 } 8938 8939 // Multi-Selects return an array 8940 values.push( value ); 8941 } 8942 } 8943 8944 return values; 8945 }, 8946 8947 set: function( elem, value ) { 8948 var optionSet, option, 8949 options = elem.options, 8950 values = jQuery.makeArray( value ), 8951 i = options.length; 8952 8953 while ( i-- ) { 8954 option = options[ i ]; 8955 8956 if ( jQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1 ) { 8957 8958 // Support: IE6 8959 // When new option element is added to select box we need to 8960 // force reflow of newly added node in order to workaround delay 8961 // of initialization properties 8962 try { 8963 option.selected = optionSet = true; 8964 8965 } catch ( _ ) { 8966 8967 // Will be executed only in IE6 8968 option.scrollHeight; 8969 } 8970 8971 } else { 8972 option.selected = false; 8973 } 8974 } 8975 8976 // Force browsers to behave consistently when non-matching value is set 8977 if ( !optionSet ) { 8978 elem.selectedIndex = -1; 8979 } 8980 8981 return options; 8982 } 8983 } 8984 } 8985} ); 8986 8987// Radios and checkboxes getter/setter 8988jQuery.each( [ "radio", "checkbox" ], function() { 8989 jQuery.valHooks[ this ] = { 8990 set: function( elem, value ) { 8991 if ( jQuery.isArray( value ) ) { 8992 return ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 ); 8993 } 8994 } 8995 }; 8996 if ( !support.checkOn ) { 8997 jQuery.valHooks[ this ].get = function( elem ) { 8998 return elem.getAttribute( "value" ) === null ? "on" : elem.value; 8999 }; 9000 } 9001} ); 9002 9003 9004 9005 9006var nodeHook, boolHook, 9007 attrHandle = jQuery.expr.attrHandle, 9008 ruseDefault = /^(?:checked|selected)$/i, 9009 getSetAttribute = support.getSetAttribute, 9010 getSetInput = support.input; 9011 9012jQuery.fn.extend( { 9013 attr: function( name, value ) { 9014 return access( this, jQuery.attr, name, value, arguments.length > 1 ); 9015 }, 9016 9017 removeAttr: function( name ) { 9018 return this.each( function() { 9019 jQuery.removeAttr( this, name ); 9020 } ); 9021 } 9022} ); 9023 9024jQuery.extend( { 9025 attr: function( elem, name, value ) { 9026 var ret, hooks, 9027 nType = elem.nodeType; 9028 9029 // Don't get/set attributes on text, comment and attribute nodes 9030 if ( nType === 3 || nType === 8 || nType === 2 ) { 9031 return; 9032 } 9033 9034 // Fallback to prop when attributes are not supported 9035 if ( typeof elem.getAttribute === "undefined" ) { 9036 return jQuery.prop( elem, name, value ); 9037 } 9038 9039 // All attributes are lowercase 9040 // Grab necessary hook if one is defined 9041 if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { 9042 name = name.toLowerCase(); 9043 hooks = jQuery.attrHooks[ name ] || 9044 ( jQuery.expr.match.bool.test( name ) ? boolHook : nodeHook ); 9045 } 9046 9047 if ( value !== undefined ) { 9048 if ( value === null ) { 9049 jQuery.removeAttr( elem, name ); 9050 return; 9051 } 9052 9053 if ( hooks && "set" in hooks && 9054 ( ret = hooks.set( elem, value, name ) ) !== undefined ) { 9055 return ret; 9056 } 9057 9058 elem.setAttribute( name, value + "" ); 9059 return value; 9060 } 9061 9062 if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { 9063 return ret; 9064 } 9065 9066 ret = jQuery.find.attr( elem, name ); 9067 9068 // Non-existent attributes return null, we normalize to undefined 9069 return ret == null ? undefined : ret; 9070 }, 9071 9072 attrHooks: { 9073 type: {
9074 set: function( elem, value ) { 9075 if ( !support.radioValue && value === "radio" && 9076 jQuery.nodeName( elem, "input" ) ) { 9077 9078 // Setting the type on a radio button after the value resets the value in IE8-9 9079 // Reset value to default in case type is set after value during creation 9080 var val = elem.value; 9081 elem.setAttribute( "type", value ); 9082 if ( val ) { 9083 elem.value = val; 9084 } 9085 return value; 9086 } 9087 } 9088 } 9089 }, 9090 9091 removeAttr: function( elem, value ) { 9092 var name, propName, 9093 i = 0, 9094 attrNames = value && value.match( rnotwhite ); 9095 9096 if ( attrNames && elem.nodeType === 1 ) { 9097 while ( ( name = attrNames[ i++ ] ) ) { 9098 propName = jQuery.propFix[ name ] || name; 9099 9100 // Boolean attributes get special treatment (#10870) 9101 if ( jQuery.expr.match.bool.test( name ) ) { 9102 9103 // Set corresponding property to false 9104 if ( getSetInput && getSetAttribute || !ruseDefault.test( name ) ) { 9105 elem[ propName ] = false; 9106 9107 // Support: IE<9 9108 // Also clear defaultChecked/defaultSelected (if appropriate) 9109 } else { 9110 elem[ jQuery.camelCase( "default-" + name ) ] = 9111 elem[ propName ] = false; 9112 } 9113 9114 // See #9699 for explanation of this approach (setting first, then removal) 9115 } else { 9116 jQuery.attr( elem, name, "" ); 9117 } 9118 9119 elem.removeAttribute( getSetAttribute ? name : propName ); 9120 } 9121 } 9122 } 9123} ); 9124 9125// Hooks for boolean attributes 9126boolHook = { 9127 set: function( elem, value, name ) { 9128 if ( value === false ) { 9129 9130 // Remove boolean attributes when set to false 9131 jQuery.removeAttr( elem, name ); 9132 } else if ( getSetInput && getSetAttribute || !ruseDefault.test( name ) ) { 9133 9134 // IE<8 needs the *property* name 9135 elem.setAttribute( !getSetAttribute && jQuery.propFix[ name ] || name, name ); 9136 9137 } else { 9138 9139 // Support: IE<9 9140 // Use defaultChecked and defaultSelected for oldIE 9141 elem[ jQuery.camelCase( "default-" + name ) ] = elem[ name ] = true; 9142 } 9143 return name; 9144 } 9145}; 9146 9147jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( i, name ) { 9148 var getter = attrHandle[ name ] || jQuery.find.attr; 9149 9150 if ( getSetInput && getSetAttribute || !ruseDefault.test( name ) ) { 9151 attrHandle[ name ] = function( elem, name, isXML ) { 9152 var ret, handle; 9153 if ( !isXML ) { 9154 9155 // Avoid an infinite loop by temporarily removing this function from the getter 9156 handle = attrHandle[ name ]; 9157 attrHandle[ name ] = ret; 9158 ret = getter( elem, name, isXML ) != null ? 9159 name.toLowerCase() : 9160 null; 9161 attrHandle[ name ] = handle; 9162 } 9163 return ret; 9164 }; 9165 } else { 9166 attrHandle[ name ] = function( elem, name, isXML ) { 9167 if ( !isXML ) { 9168 return elem[ jQuery.camelCase( "default-" + name ) ] ? 9169 name.toLowerCase() : 9170 null; 9171 } 9172 }; 9173 } 9174} ); 9175 9176// fix oldIE attroperties 9177if ( !getSetInput || !getSetAttribute ) { 9178 jQuery.attrHooks.value = { 9179 set: function( elem, value, name ) { 9180 if ( jQuery.nodeName( elem, "input" ) ) { 9181 9182 // Does not return so that setAttribute is also used 9183 elem.defaultValue = value; 9184 } else { 9185 9186 // Use nodeHook if defined (#1954); otherwise setAttribute is fine 9187 return nodeHook && nodeHook.set( elem, value, name ); 9188 } 9189 } 9190 }; 9191} 9192 9193// IE6/7 do not support getting/setting some attributes with get/setAttribute 9194if ( !getSetAttribute ) { 9195 9196 // Use this for any attribute in IE6/7 9197 // This fixes almost every IE6/7 issue 9198 nodeHook = { 9199 set: function( elem, value, name ) { 9200 9201 // Set the existing or create a new attribute node 9202 var ret = elem.getAttributeNode( name ); 9203 if ( !ret ) { 9204 elem.setAttributeNode( 9205 ( ret = elem.ownerDocument.createAttribute( name ) ) 9206 ); 9207 } 9208 9209 ret.value = value += ""; 9210 9211 // Break association with cloned elements by also using setAttribute (#9646) 9212 if ( name === "value" || value === elem.getAttribute( name ) ) { 9213 return value; 9214 } 9215 } 9216 }; 9217 9218 // Some attributes are constructed with empty-string values when not defined 9219 attrHandle.id = attrHandle.name = attrHandle.coords = 9220 function( elem, name, isXML ) { 9221 var ret; 9222 if ( !isXML ) { 9223 return ( ret = elem.getAttributeNode( name ) ) && ret.value !== "" ? 9224 ret.value : 9225 null; 9226 } 9227 }; 9228 9229 // Fixing value retrieval on a button requires this module 9230 jQuery.valHooks.button = { 9231 get: function( elem, name ) { 9232 var ret = elem.getAttributeNode( name ); 9233 if ( ret && ret.specified ) { 9234 return ret.value; 9235 } 9236 }, 9237 set: nodeHook.set 9238 }; 9239 9240 // Set contenteditable to false on removals(#10429)
9241 // Setting to empty string throws an error as an invalid value 9242 jQuery.attrHooks.contenteditable = { 9243 set: function( elem, value, name ) { 9244 nodeHook.set( elem, value === "" ? false : value, name ); 9245 } 9246 }; 9247 9248 // Set width and height to auto instead of 0 on empty string( Bug #8150 ) 9249 // This is for removals 9250 jQuery.each( [ "width", "height" ], function( i, name ) { 9251 jQuery.attrHooks[ name ] = { 9252 set: function( elem, value ) { 9253 if ( value === "" ) { 9254 elem.setAttribute( name, "auto" ); 9255 return value; 9256 } 9257 } 9258 }; 9259 } ); 9260} 9261 9262if ( !support.style ) { 9263 jQuery.attrHooks.style = { 9264 get: function( elem ) { 9265 9266 // Return undefined in the case of empty string 9267 // Note: IE uppercases css property names, but if we were to .toLowerCase() 9268 // .cssText, that would destroy case sensitivity in URL's, like in "background" 9269 return elem.style.cssText || undefined; 9270 }, 9271 set: function( elem, value ) { 9272 return ( elem.style.cssText = value + "" ); 9273 } 9274 }; 9275} 9276 9277 9278 9279 9280var rfocusable = /^(?:input|select|textarea|button|object)$/i, 9281 rclickable = /^(?:a|area)$/i; 9282 9283jQuery.fn.extend( { 9284 prop: function( name, value ) { 9285 return access( this, jQuery.prop, name, value, arguments.length > 1 ); 9286 }, 9287 9288 removeProp: function( name ) { 9289 name = jQuery.propFix[ name ] || name; 9290 return this.each( function() { 9291 9292 // try/catch handles cases where IE balks (such as removing a property on window) 9293 try { 9294 this[ name ] = undefined; 9295 delete this[ name ]; 9296 } catch ( e ) {} 9297 } ); 9298 } 9299} ); 9300 9301jQuery.extend( { 9302 prop: function( elem, name, value ) { 9303 var ret, hooks, 9304 nType = elem.nodeType; 9305 9306 // Don't get/set properties on text, comment and attribute nodes 9307 if ( nType === 3 || nType === 8 || nType === 2 ) { 9308 return; 9309 } 9310 9311 if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { 9312 9313 // Fix name and attach hooks 9314 name = jQuery.propFix[ name ] || name; 9315 hooks = jQuery.propHooks[ name ]; 9316 } 9317 9318 if ( value !== undefined ) { 9319 if ( hooks && "set" in hooks && 9320 ( ret = hooks.set( elem, value, name ) ) !== undefined ) { 9321 return ret; 9322 } 9323 9324 return ( elem[ name ] = value ); 9325 } 9326 9327 if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { 9328 return ret; 9329 } 9330 9331 return elem[ name ]; 9332 }, 9333 9334 propHooks: { 9335 tabIndex: { 9336 get: function( elem ) { 9337 9338 // elem.tabIndex doesn't always return the 9339 // correct value when it hasn't been explicitly set 9340 // http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/ 9341 // Use proper attribute retrieval(#12072) 9342 var tabindex = jQuery.find.attr( elem, "tabindex" ); 9343 9344 return tabindex ? 9345 parseInt( tabindex, 10 ) : 9346 rfocusable.test( elem.nodeName ) || 9347 rclickable.test( elem.nodeName ) && elem.href ? 9348 0 : 9349 -1; 9350 } 9351 } 9352 }, 9353 9354 propFix: { 9355 "for": "htmlFor", 9356 "class": "className" 9357 } 9358} ); 9359 9360// Some attributes require a special call on IE 9361// http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx 9362if ( !support.hrefNormalized ) { 9363 9364 // href/src property should get the full normalized URL (#10299/#12915) 9365 jQuery.each( [ "href", "src" ], function( i, name ) { 9366 jQuery.propHooks[ name ] = { 9367 get: function( elem ) { 9368 return elem.getAttribute( name, 4 ); 9369 } 9370 }; 9371 } ); 9372} 9373 9374// Support: Safari, IE9+ 9375// Accessing the selectedIndex property 9376// forces the browser to respect setting selected 9377// on the option 9378// The getter ensures a default option is selected 9379// when in an optgroup 9380if ( !support.optSelected ) { 9381 jQuery.propHooks.selected = { 9382 get: function( elem ) { 9383 var parent = elem.parentNode; 9384 9385 if ( parent ) { 9386 parent.selectedIndex; 9387 9388 // Make sure that it also works with optgroups, see #5701 9389 if ( parent.parentNode ) { 9390 parent.parentNode.selectedIndex; 9391 } 9392 } 9393 return null; 9394 }, 9395 set: function( elem ) { 9396 var parent = elem.parentNode; 9397 if ( parent ) { 9398 parent.selectedIndex; 9399 9400 if ( parent.parentNode ) { 9401 parent.parentNode.selectedIndex; 9402 } 9403 } 9404 } 9405 }; 9406} 9407 9408jQuery.each( [ 9409 "tabIndex", 9410 "readOnly", 9411 "maxLength", 9412 "cellSpacing", 9413 "cellPadding", 9414 "rowSpan", 9415 "colSpan", 9416 "useMap", 9417 "frameBorder", 9418 "contentEditable" 9419], function() { 9420 jQuery.propFix[ this.toLowerCase() ] = this; 9421} ); 9422 9423// IE6/7 call enctype encoding 9424if ( !support.enctype ) { 9425 jQuery.propFix.enctype = "encoding"; 9426} 9427 9428 9429 9430 9431var rclass = /[\t\r\n\f]/g; 9432 9433function getClass( elem ) { 9434 return jQuery.attr( elem, "class" ) || ""; 9435} 9436 9437jQuery.fn.extend( { 9438 addClass: function( value ) { 9439 var classes, elem, cur, curValue, clazz, j, finalValue, 9440 i = 0; 9441 9442 if ( jQuery.isFunction( value ) ) { 9443 return this.each( function( j ) { 9444 jQuery( this ).addClass( value.call( this, j, getClass( this ) ) ); 9445 } ); 9446 } 9447 9448 if ( typeof value === "string" && value ) { 9449 classes = value.match( rnotwhite ) || []; 9450 9451 while ( ( elem = this[ i++ ] ) ) { 9452 curValue = getClass( elem ); 9453 cur = elem.nodeType === 1 && 9454 ( " " + curValue + " " ).replace( rclass, " " ); 9455 9456 if ( cur ) { 9457 j = 0; 9458 while ( ( clazz = classes[ j++ ] ) ) { 9459 if ( cur.indexOf( " " + clazz + " " ) < 0 ) { 9460 cur += clazz + " "; 9461 } 9462 } 9463 9464 // only assign if different to avoid unneeded rendering. 9465 finalValue = jQuery.trim( cur ); 9466 if ( curValue !== finalValue ) { 9467 jQuery.attr( elem, "class", finalValue ); 9468 } 9469 } 9470 } 9471 } 9472 9473 return this; 9474 }, 9475 9476 removeClass: function( value ) { 9477 var classes, elem, cur, curValue, clazz, j, finalValue, 9478 i = 0; 9479 9480 if ( jQuery.isFunction( value ) ) { 9481 return this.each( function( j ) { 9482 jQuery( this ).removeClass( value.call( this, j, getClass( this ) ) ); 9483 } ); 9484 } 9485 9486 if ( !arguments.length ) { 9487 return this.attr( "class", "" ); 9488 } 9489 9490 if ( typeof value === "string" && value ) { 9491 classes = value.match( rnotwhite ) || []; 9492 9493 while ( ( elem = this[ i++ ] ) ) { 9494 curValue = getClass( elem ); 9495 9496 // This expression is here for better compressibility (see addClass) 9497 cur = elem.nodeType === 1 && 9498 ( " " + curValue + " " ).replace( rclass, " " ); 9499 9500 if ( cur ) { 9501 j = 0; 9502 while ( ( clazz = classes[ j++ ] ) ) { 9503
9504 // Remove *all* instances 9505 while ( cur.indexOf( " " + clazz + " " ) > -1 ) { 9506 cur = cur.replace( " " + clazz + " ", " " ); 9507 } 9508 } 9509 9510 // Only assign if different to avoid unneeded rendering. 9511 finalValue = jQuery.trim( cur ); 9512 if ( curValue !== finalValue ) { 9513 jQuery.attr( elem, "class", finalValue ); 9514 } 9515 } 9516 } 9517 } 9518 9519 return this; 9520 }, 9521 9522 toggleClass: function( value, stateVal ) { 9523 var type = typeof value; 9524 9525 if ( typeof stateVal === "boolean" && type === "string" ) { 9526 return stateVal ? this.addClass( value ) : this.removeClass( value ); 9527 } 9528 9529 if ( jQuery.isFunction( value ) ) { 9530 return this.each( function( i ) { 9531 jQuery( this ).toggleClass( 9532 value.call( this, i, getClass( this ), stateVal ), 9533 stateVal 9534 ); 9535 } ); 9536 } 9537 9538 return this.each( function() { 9539 var className, i, self, classNames; 9540 9541 if ( type === "string" ) { 9542 9543 // Toggle individual class names 9544 i = 0; 9545 self = jQuery( this ); 9546 classNames = value.match( rnotwhite ) || []; 9547 9548 while ( ( className = classNames[ i++ ] ) ) { 9549 9550 // Check each className given, space separated list 9551 if ( self.hasClass( className ) ) { 9552 self.removeClass( className ); 9553 } else { 9554 self.addClass( className ); 9555 } 9556 } 9557 9558 // Toggle whole class name 9559 } else if ( value === undefined || type === "boolean" ) { 9560 className = getClass( this ); 9561 if ( className ) { 9562 9563 // store className if set 9564 jQuery._data( this, "__className__", className ); 9565 } 9566 9567 // If the element has a class name or if we're passed "false", 9568 // then remove the whole classname (if there was one, the above saved it). 9569 // Otherwise bring back whatever was previously saved (if anything), 9570 // falling back to the empty string if nothing was stored. 9571 jQuery.attr( this, "class", 9572 className || value === false ? 9573 "" : 9574 jQuery._data( this, "__className__" ) || "" 9575 ); 9576 } 9577 } ); 9578 }, 9579 9580 hasClass: function( selector ) { 9581 var className, elem, 9582 i = 0; 9583 9584 className = " " + selector + " "; 9585 while ( ( elem = this[ i++ ] ) ) { 9586 if ( elem.nodeType === 1 && 9587 ( " " + getClass( elem ) + " " ).replace( rclass, " " ) 9588 .indexOf( className ) > -1 9589 ) { 9590 return true; 9591 } 9592 } 9593 9594 return false; 9595 } 9596} ); 9597 9598 9599 9600 9601// Return jQuery for attributes-only inclusion 9602 9603 9604jQuery.each( ( "blur focus focusin focusout load resize scroll unload click dblclick " + 9605 "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " + 9606 "change select submit keydown keypress keyup error contextmenu" ).split( " " ), 9607 function( i, name ) { 9608 9609 // Handle event binding 9610 jQuery.fn[ name ] = function( data, fn ) { 9611 return arguments.length > 0 ? 9612 this.on( name, null, data, fn ) : 9613 this.trigger( name ); 9614 }; 9615} ); 9616 9617jQuery.fn.extend( { 9618 hover: function( fnOver, fnOut ) { 9619 return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver ); 9620 } 9621} ); 9622 9623 9624var location = window.location; 9625 9626var nonce = jQuery.now(); 9627 9628var rquery = ( /\?/ ); 9629 9630 9631 9632var rvalidtokens = /(,)|(\[|{)|(}|])|"(?:[^"\\\r\n]|\\["\\\/bfnrt]|\\u[\da-fA-F]{4})*"\s*:?|true|false|null|-?(?!0\d)\d+(?:\.\d+|)(?:[eE][+-]?\d+|)/g; 9633 9634jQuery.parseJSON = function( data ) { 9635 9636 // Attempt to parse using the native JSON parser first 9637 if ( window.JSON && window.JSON.parse ) { 9638 9639 // Support: Android 2.3 9640 // Workaround failure to string-cast null input 9641 return window.JSON.parse( data + "" ); 9642 } 9643 9644 var requireNonComma, 9645 depth = null, 9646 str = jQuery.trim( data + "" ); 9647 9648 // Guard against invalid (and possibly dangerous) input by ensuring that nothing remains 9649 // after removing valid tokens 9650 return str && !jQuery.trim( str.replace( rvalidtokens, function( token, comma, open, close ) { 9651 9652 // Force termination if we see a misplaced comma 9653 if ( requireNonComma && comma ) { 9654 depth = 0; 9655 } 9656 9657 // Perform no more replacements after returning to outermost depth 9658 if ( depth === 0 ) { 9659 return token; 9660 } 9661 9662 // Commas must not follow "[", "{", or "," 9663 requireNonComma = open || comma; 9664 9665 // Determine new depth 9666 // array/object open ("[" or "{"): depth += true - false (increment) 9667 // array/object close ("]" or "}"): depth += false - true (decrement) 9668 // other cases ("," or primitive): depth += true - true (numeric cast) 9669 depth += !close - !open; 9670 9671 // Remove this token 9672 return ""; 9673 } ) ) ? 9674 ( Function( "return " + str ) )() : 9675 jQuery.error( "Invalid JSON: " + data ); 9676}; 9677 9678 9679// Cross-browser xml parsing
9680jQuery.parseXML = function( data ) { 9681 var xml, tmp; 9682 if ( !data || typeof data !== "string" ) { 9683 return null; 9684 } 9685 try { 9686 if ( window.DOMParser ) { // Standard 9687 tmp = new window.DOMParser(); 9688 xml = tmp.parseFromString( data, "text/xml" ); 9689 } else { // IE 9690 xml = new window.ActiveXObject( "Microsoft.XMLDOM" ); 9691 xml.async = "false"; 9692 xml.loadXML( data ); 9693 } 9694 } catch ( e ) { 9695 xml = undefined; 9696 } 9697 if ( !xml || !xml.documentElement || xml.getElementsByTagName( "parsererror" ).length ) { 9698 jQuery.error( "Invalid XML: " + data ); 9699 } 9700 return xml; 9701}; 9702 9703 9704var 9705 rhash = /#.*$/, 9706 rts = /([?&])_=[^&]*/, 9707 9708 // IE leaves an \r character at EOL 9709 rheaders = /^(.*?):[ \t]*([^\r\n]*)\r?$/mg, 9710 9711 // #7653, #8125, #8152: local protocol detection 9712 rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/, 9713 rnoContent = /^(?:GET|HEAD)$/, 9714 rprotocol = /^\/\//, 9715 rurl = /^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/, 9716 9717 /* Prefilters 9718 * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example) 9719 * 2) These are called: 9720 * - BEFORE asking for a transport 9721 * - AFTER param serialization (s.data is a string if s.processData is true) 9722 * 3) key is the dataType 9723 * 4) the catchall symbol "*" can be used 9724 * 5) execution will start with transport dataType and THEN continue down to "*" if needed 9725 */ 9726 prefilters = {}, 9727 9728 /* Transports bindings 9729 * 1) key is the dataType 9730 * 2) the catchall symbol "*" can be used 9731 * 3) selection will start with transport dataType and THEN go to "*" if needed 9732 */ 9733 transports = {}, 9734 9735 // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression 9736 allTypes = "*/".concat( "*" ), 9737 9738 // Document location 9739 ajaxLocation = location.href, 9740 9741 // Segment location into parts 9742 ajaxLocParts = rurl.exec( ajaxLocation.toLowerCase() ) || []; 9743 9744// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport 9745function addToPrefiltersOrTransports( structure ) { 9746 9747 // dataTypeExpression is optional and defaults to "*" 9748 return function( dataTypeExpression, func ) { 9749 9750 if ( typeof dataTypeExpression !== "string" ) { 9751 func = dataTypeExpression; 9752 dataTypeExpression = "*"; 9753 } 9754 9755 var dataType, 9756 i = 0, 9757 dataTypes = dataTypeExpression.toLowerCase().match( rnotwhite ) || []; 9758 9759 if ( jQuery.isFunction( func ) ) { 9760 9761 // For each dataType in the dataTypeExpression 9762 while ( ( dataType = dataTypes[ i++ ] ) ) { 9763 9764 // Prepend if requested 9765 if ( dataType.charAt( 0 ) === "+" ) { 9766 dataType = dataType.slice( 1 ) || "*"; 9767 ( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func ); 9768 9769 // Otherwise append 9770 } else { 9771 ( structure[ dataType ] = structure[ dataType ] || [] ).push( func ); 9772 } 9773 } 9774 } 9775 }; 9776} 9777 9778// Base inspection function for prefilters and transports 9779function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) { 9780 9781 var inspected = {}, 9782 seekingTransport = ( structure === transports ); 9783 9784 function inspect( dataType ) { 9785 var selected; 9786 inspected[ dataType ] = true; 9787 jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) { 9788 var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR ); 9789 if ( typeof dataTypeOrTransport === "string" && 9790 !seekingTransport && !inspected[ dataTypeOrTransport ] ) { 9791 9792 options.dataTypes.unshift( dataTypeOrTransport ); 9793 inspect( dataTypeOrTransport ); 9794 return false; 9795 } else if ( seekingTransport ) { 9796 return !( selected = dataTypeOrTransport ); 9797 } 9798 } ); 9799 return selected; 9800 } 9801 9802 return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" ); 9803} 9804 9805// A special extend for ajax options 9806// that takes "flat" options (not to be deep extended) 9807// Fixes #9887 9808function ajaxExtend( target, src ) { 9809 var deep, key, 9810 flatOptions = jQuery.ajaxSettings.flatOptions || {}; 9811 9812 for ( key in src ) { 9813 if ( src[ key ] !== undefined ) { 9814 ( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ]; 9815 } 9816 } 9817 if ( deep ) { 9818 jQuery.extend( true, target, deep ); 9819 } 9820 9821 return target; 9822} 9823 9824/* Handles responses to an ajax request: 9825 * - finds the right dataType (mediates between content-type and expected dataType) 9826 * - returns the corresponding response 9827 */ 9828function ajaxHandleResponses( s, jqXHR, responses ) { 9829 var firstDataType, ct, finalDataType, type, 9830 contents = s.contents, 9831 dataTypes = s.dataTypes; 9832 9833 // Remove auto dataType and get content-type in the process 9834 while ( dataTypes[ 0 ] === "*" ) { 9835 dataTypes.shift(); 9836 if ( ct === undefined ) { 9837 ct = s.mimeType || jqXHR.getResponseHeader( "Content-Type" ); 9838 } 9839 } 9840 9841 // Check if we're dealing with a known content-type 9842 if ( ct ) { 9843 for ( type in contents ) { 9844 if ( contents[ type ] && contents[ type ].test( ct ) ) { 9845 dataTypes.unshift( type ); 9846 break; 9847 } 9848 } 9849 } 9850 9851 // Check to see if we have a response for the expected dataType 9852 if ( dataTypes[ 0 ] in responses ) { 9853 finalDataType = dataTypes[ 0 ]; 9854 } else { 9855
vendor: 5,407 bytes, lines 9856-10085
9856 // Try convertible dataTypes 9857 for ( type in responses ) { 9858 if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[ 0 ] ] ) { 9859 finalDataType = type; 9860 break; 9861 } 9862 if ( !firstDataType ) { 9863 firstDataType = type; 9864 } 9865 } 9866 9867 // Or just use first one 9868 finalDataType = finalDataType || firstDataType; 9869 } 9870 9871 // If we found a dataType 9872 // We add the dataType to the list if needed 9873 // and return the corresponding response 9874 if ( finalDataType ) { 9875 if ( finalDataType !== dataTypes[ 0 ] ) { 9876 dataTypes.unshift( finalDataType ); 9877 } 9878 return responses[ finalDataType ]; 9879 } 9880} 9881 9882/* Chain conversions given the request and the original response 9883 * Also sets the responseXXX fields on the jqXHR instance 9884 */ 9885function ajaxConvert( s, response, jqXHR, isSuccess ) { 9886 var conv2, current, conv, tmp, prev, 9887 converters = {}, 9888 9889 // Work with a copy of dataTypes in case we need to modify it for conversion 9890 dataTypes = s.dataTypes.slice(); 9891 9892 // Create converters map with lowercased keys 9893 if ( dataTypes[ 1 ] ) { 9894 for ( conv in s.converters ) { 9895 converters[ conv.toLowerCase() ] = s.converters[ conv ]; 9896 } 9897 } 9898 9899 current = dataTypes.shift(); 9900 9901 // Convert to each sequential dataType 9902 while ( current ) { 9903 9904 if ( s.responseFields[ current ] ) { 9905 jqXHR[ s.responseFields[ current ] ] = response; 9906 } 9907 9908 // Apply the dataFilter if provided 9909 if ( !prev && isSuccess && s.dataFilter ) { 9910 response = s.dataFilter( response, s.dataType ); 9911 } 9912 9913 prev = current; 9914 current = dataTypes.shift(); 9915 9916 if ( current ) { 9917 9918 // There's only work to do if current dataType is non-auto 9919 if ( current === "*" ) { 9920 9921 current = prev; 9922 9923 // Convert response if prev dataType is non-auto and differs from current 9924 } else if ( prev !== "*" && prev !== current ) { 9925 9926 // Seek a direct converter 9927 conv = converters[ prev + " " + current ] || converters[ "* " + current ]; 9928 9929 // If none found, seek a pair 9930 if ( !conv ) { 9931 for ( conv2 in converters ) { 9932 9933 // If conv2 outputs current 9934 tmp = conv2.split( " " ); 9935 if ( tmp[ 1 ] === current ) { 9936 9937 // If prev can be converted to accepted input 9938 conv = converters[ prev + " " + tmp[ 0 ] ] || 9939 converters[ "* " + tmp[ 0 ] ]; 9940 if ( conv ) { 9941 9942 // Condense equivalence converters 9943 if ( conv === true ) { 9944 conv = converters[ conv2 ]; 9945 9946 // Otherwise, insert the intermediate dataType 9947 } else if ( converters[ conv2 ] !== true ) { 9948 current = tmp[ 0 ]; 9949 dataTypes.unshift( tmp[ 1 ] ); 9950 } 9951 break; 9952 } 9953 } 9954 } 9955 } 9956 9957 // Apply converter (if not an equivalence) 9958 if ( conv !== true ) { 9959 9960 // Unless errors are allowed to bubble, catch and return them 9961 if ( conv && s[ "throws" ] ) { // jscs:ignore requireDotNotation 9962 response = conv( response ); 9963 } else { 9964 try { 9965 response = conv( response ); 9966 } catch ( e ) { 9967 return { 9968 state: "parsererror", 9969 error: conv ? e : "No conversion from " + prev + " to " + current 9970 }; 9971 } 9972 } 9973 } 9974 } 9975 } 9976 } 9977 9978 return { state: "success", data: response }; 9979} 9980 9981jQuery.extend( { 9982 9983 // Counter for holding the number of active queries 9984 active: 0, 9985 9986 // Last-Modified header cache for next request 9987 lastModified: {}, 9988 etag: {}, 9989 9990 ajaxSettings: { 9991 url: ajaxLocation, 9992 type: "GET", 9993 isLocal: rlocalProtocol.test( ajaxLocParts[ 1 ] ), 9994 global: true, 9995 processData: true, 9996 async: true, 9997 contentType: "application/x-www-form-urlencoded; charset=UTF-8", 9998 /* 9999 timeout: 0, 10000 data: null, 10001 dataType: null, 10002 username: null, 10003 password: null, 10004 cache: null, 10005 throws: false, 10006 traditional: false, 10007 headers: {}, 10008 */ 10009 10010 accepts: { 10011 "*": allTypes, 10012 text: "text/plain", 10013 html: "text/html", 10014 xml: "application/xml, text/xml", 10015 json: "application/json, text/javascript" 10016 }, 10017 10018 contents: { 10019 xml: /\bxml\b/, 10020 html: /\bhtml/, 10021 json: /\bjson\b/ 10022 }, 10023 10024 responseFields: { 10025 xml: "responseXML", 10026 text: "responseText", 10027 json: "responseJSON" 10028 }, 10029 10030 // Data converters 10031 // Keys separate source (or catchall "*") and destination types with a single space 10032 converters: { 10033 10034 // Convert anything to text 10035 "* text": String, 10036 10037 // Text to html (true = no transformation) 10038 "text html": true, 10039 10040 // Evaluate text as a json expression 10041 "text json": jQuery.parseJSON, 10042 10043 // Parse text as xml 10044 "text xml": jQuery.parseXML 10045 }, 10046 10047 // For options that shouldn't be deep extended: 10048 // you can add your own custom options here if 10049 // and when you create one that shouldn't be 10050 // deep extended (see ajaxExtend) 10051 flatOptions: { 10052 url: true, 10053 context: true 10054 } 10055 }, 10056 10057 // Creates a full fledged settings object into target 10058 // with both ajaxSettings and settings fields. 10059 // If target is omitted, writes into ajaxSettings. 10060 ajaxSetup: function( target, settings ) { 10061 return settings ? 10062 10063 // Building a settings object 10064 ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) : 10065 10066 // Extending ajaxSettings 10067 ajaxExtend( jQuery.ajaxSettings, target ); 10068 }, 10069 10070 ajaxPrefilter: addToPrefiltersOrTransports( prefilters ), 10071 ajaxTransport: addToPrefiltersOrTransports( transports ), 10072 10073 // Main method 10074 ajax: function( url, options ) { 10075 10076 // If url is an object, simulate pre-1.5 signature 10077 if ( typeof url === "object" ) { 10078 options = url; 10079 url = undefined; 10080 } 10081 10082 // Force options to be an object 10083 options = options || {}; 10084 10085 var
10086 10087 // Cross-domain detection vars 10088 parts, 10089 10090 // Loop variable 10091 i, 10092 10093 // URL without anti-cache param 10094 cacheURL, 10095 10096 // Response headers as string 10097 responseHeadersString, 10098 10099 // timeout handle 10100 timeoutTimer, 10101 10102 // To know if global events are to be dispatched 10103 fireGlobals, 10104 10105 transport, 10106 10107 // Response headers 10108 responseHeaders, 10109 10110 // Create the final options object 10111 s = jQuery.ajaxSetup( {}, options ), 10112 10113 // Callbacks context 10114 callbackContext = s.context || s, 10115 10116 // Context for global events is callbackContext if it is a DOM node or jQuery collection 10117 globalEventContext = s.context && 10118 ( callbackContext.nodeType || callbackContext.jquery ) ? 10119 jQuery( callbackContext ) : 10120 jQuery.event, 10121 10122 // Deferreds 10123 deferred = jQuery.Deferred(), 10124 completeDeferred = jQuery.Callbacks( "once memory" ), 10125 10126 // Status-dependent callbacks 10127 statusCode = s.statusCode || {}, 10128 10129 // Headers (they are sent all at once) 10130 requestHeaders = {}, 10131 requestHeadersNames = {}, 10132 10133 // The jqXHR state 10134 state = 0, 10135 10136 // Default abort message 10137 strAbort = "canceled", 10138 10139 // Fake xhr 10140 jqXHR = { 10141 readyState: 0, 10142 10143 // Builds headers hashtable if needed 10144 getResponseHeader: function( key ) { 10145 var match; 10146 if ( state === 2 ) { 10147 if ( !responseHeaders ) { 10148 responseHeaders = {}; 10149 while ( ( match = rheaders.exec( responseHeadersString ) ) ) { 10150 responseHeaders[ match[ 1 ].toLowerCase() ] = match[ 2 ]; 10151 } 10152 } 10153 match = responseHeaders[ key.toLowerCase() ]; 10154 } 10155 return match == null ? null : match; 10156 }, 10157 10158 // Raw string 10159 getAllResponseHeaders: function() { 10160 return state === 2 ? responseHeadersString : null; 10161 }, 10162 10163 // Caches the header 10164 setRequestHeader: function( name, value ) { 10165 var lname = name.toLowerCase(); 10166 if ( !state ) { 10167 name = requestHeadersNames[ lname ] = requestHeadersNames[ lname ] || name; 10168 requestHeaders[ name ] = value; 10169 } 10170 return this; 10171 }, 10172 10173 // Overrides response content-type header 10174 overrideMimeType: function( type ) { 10175 if ( !state ) { 10176 s.mimeType = type; 10177 } 10178 return this; 10179 }, 10180 10181 // Status-dependent callbacks 10182 statusCode: function( map ) { 10183 var code; 10184 if ( map ) { 10185 if ( state < 2 ) { 10186 for ( code in map ) { 10187 10188 // Lazy-add the new callback in a way that preserves old ones 10189 statusCode[ code ] = [ statusCode[ code ], map[ code ] ]; 10190 } 10191 } else { 10192 10193 // Execute the appropriate callbacks 10194 jqXHR.always( map[ jqXHR.status ] ); 10195 } 10196 } 10197 return this; 10198 }, 10199 10200 // Cancel the request 10201 abort: function( statusText ) { 10202 var finalText = statusText || strAbort; 10203 if ( transport ) { 10204 transport.abort( finalText ); 10205 } 10206 done( 0, finalText ); 10207 return this; 10208 } 10209 }; 10210 10211 // Attach deferreds 10212 deferred.promise( jqXHR ).complete = completeDeferred.add; 10213 jqXHR.success = jqXHR.done; 10214 jqXHR.error = jqXHR.fail; 10215 10216 // Remove hash character (#7531: and string promotion) 10217 // Add protocol if not provided (#5866: IE7 issue with protocol-less urls) 10218 // Handle falsy url in the settings object (#10093: consistency with old signature) 10219 // We also use the url parameter if available 10220 s.url = ( ( url || s.url || ajaxLocation ) + "" ) 10221 .replace( rhash, "" ) 10222 .replace( rprotocol, ajaxLocParts[ 1 ] + "//" ); 10223 10224 // Alias method option to type as per ticket #12004 10225 s.type = options.method || options.type || s.method || s.type; 10226 10227 // Extract dataTypes list 10228 s.dataTypes = jQuery.trim( s.dataType || "*" ).toLowerCase().match( rnotwhite ) || [ "" ]; 10229 10230 // A cross-domain request is in order when we have a protocol:host:port mismatch 10231 if ( s.crossDomain == null ) { 10232 parts = rurl.exec( s.url.toLowerCase() ); 10233 s.crossDomain = !!( parts && 10234 ( parts[ 1 ] !== ajaxLocParts[ 1 ] || parts[ 2 ] !== ajaxLocParts[ 2 ] || 10235 ( parts[ 3 ] || ( parts[ 1 ] === "http:" ? "80" : "443" ) ) !== 10236 ( ajaxLocParts[ 3 ] || ( ajaxLocParts[ 1 ] === "http:" ? "80" : "443" ) ) ) 10237 ); 10238 } 10239 10240 // Convert data if not already a string 10241 if ( s.data && s.processData && typeof s.data !== "string" ) { 10242 s.data = jQuery.param( s.data, s.traditional ); 10243 } 10244 10245 // Apply prefilters 10246 inspectPrefiltersOrTransports( prefilters, s, options, jqXHR ); 10247 10248 // If request was aborted inside a prefilter, stop there 10249 if ( state === 2 ) { 10250 return jqXHR; 10251 } 10252 10253 // We can fire global events as of now if asked to 10254 // Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118) 10255 fireGlobals = jQuery.event && s.global; 10256 10257 // Watch for a new set of requests 10258 if ( fireGlobals && jQuery.active++ === 0 ) { 10259 jQuery.event.trigger( "ajaxStart" ); 10260 } 10261 10262 // Uppercase the type 10263 s.type = s.type.toUpperCase(); 10264 10265 // Determine if request has content 10266 s.hasContent = !rnoContent.test( s.type ); 10267 10268 // Save the URL in case we're toying with the If-Modified-Since 10269 // and/or If-None-Match header later on 10270 cacheURL = s.url; 10271 10272 // More options handling for requests with no content 10273 if ( !s.hasContent ) { 10274 10275 // If data is available, append data to url 10276 if ( s.data ) {
10277 cacheURL = ( s.url += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data ); 10278 10279 // #9682: remove data so that it's not used in an eventual retry 10280 delete s.data; 10281 } 10282 10283 // Add anti-cache in url if needed 10284 if ( s.cache === false ) { 10285 s.url = rts.test( cacheURL ) ? 10286 10287 // If there is already a '_' parameter, set its value 10288 cacheURL.replace( rts, "$1_=" + nonce++ ) : 10289 10290 // Otherwise add one to the end 10291 cacheURL + ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + nonce++; 10292 } 10293 } 10294 10295 // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. 10296 if ( s.ifModified ) { 10297 if ( jQuery.lastModified[ cacheURL ] ) { 10298 jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] ); 10299 } 10300 if ( jQuery.etag[ cacheURL ] ) { 10301 jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] ); 10302 } 10303 } 10304 10305 // Set the correct header, if data is being sent 10306 if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) { 10307 jqXHR.setRequestHeader( "Content-Type", s.contentType ); 10308 } 10309 10310 // Set the Accepts header for the server, depending on the dataType 10311 jqXHR.setRequestHeader( 10312 "Accept", 10313 s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ? 10314 s.accepts[ s.dataTypes[ 0 ] ] + 10315 ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) : 10316 s.accepts[ "*" ] 10317 ); 10318 10319 // Check for headers option 10320 for ( i in s.headers ) { 10321 jqXHR.setRequestHeader( i, s.headers[ i ] ); 10322 } 10323 10324 // Allow custom headers/mimetypes and early abort 10325 if ( s.beforeSend && 10326 ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || state === 2 ) ) { 10327 10328 // Abort if not done already and return 10329 return jqXHR.abort(); 10330 } 10331 10332 // aborting is no longer a cancellation 10333 strAbort = "abort"; 10334 10335 // Install callbacks on deferreds 10336 for ( i in { success: 1, error: 1, complete: 1 } ) { 10337 jqXHR[ i ]( s[ i ] ); 10338 } 10339 10340 // Get transport 10341 transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR ); 10342 10343 // If no transport, we auto-abort 10344 if ( !transport ) { 10345 done( -1, "No Transport" ); 10346 } else { 10347 jqXHR.readyState = 1; 10348 10349 // Send global event 10350 if ( fireGlobals ) { 10351 globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] ); 10352 } 10353 10354 // If request was aborted inside ajaxSend, stop there 10355 if ( state === 2 ) { 10356 return jqXHR; 10357 } 10358 10359 // Timeout 10360 if ( s.async && s.timeout > 0 ) { 10361 timeoutTimer = window.setTimeout( function() { 10362 jqXHR.abort( "timeout" ); 10363 }, s.timeout ); 10364 } 10365 10366 try { 10367 state = 1; 10368 transport.send( requestHeaders, done ); 10369 } catch ( e ) { 10370 10371 // Propagate exception as error if not done 10372 if ( state < 2 ) { 10373 done( -1, e ); 10374 10375 // Simply rethrow otherwise 10376 } else { 10377 throw e; 10378 } 10379 } 10380 } 10381 10382 // Callback for when everything is done 10383 function done( status, nativeStatusText, responses, headers ) { 10384 var isSuccess, success, error, response, modified, 10385 statusText = nativeStatusText; 10386 10387 // Called once 10388 if ( state === 2 ) { 10389 return; 10390 } 10391 10392 // State is "done" now 10393 state = 2; 10394 10395 // Clear timeout if it exists 10396 if ( timeoutTimer ) { 10397 window.clearTimeout( timeoutTimer ); 10398 } 10399 10400 // Dereference transport for early garbage collection 10401 // (no matter how long the jqXHR object will be used) 10402 transport = undefined; 10403 10404 // Cache response headers 10405 responseHeadersString = headers || ""; 10406 10407 // Set readyState 10408 jqXHR.readyState = status > 0 ? 4 : 0; 10409 10410 // Determine if successful 10411 isSuccess = status >= 200 && status < 300 || status === 304; 10412 10413 // Get response data 10414 if ( responses ) { 10415 response = ajaxHandleResponses( s, jqXHR, responses ); 10416 } 10417 10418 // Convert no matter what (that way responseXXX fields are always set) 10419 response = ajaxConvert( s, response, jqXHR, isSuccess ); 10420 10421 // If successful, handle type chaining 10422 if ( isSuccess ) { 10423 10424 // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. 10425 if ( s.ifModified ) { 10426 modified = jqXHR.getResponseHeader( "Last-Modified" ); 10427 if ( modified ) { 10428 jQuery.lastModified[ cacheURL ] = modified; 10429 } 10430 modified = jqXHR.getResponseHeader( "etag" ); 10431 if ( modified ) { 10432 jQuery.etag[ cacheURL ] = modified; 10433 } 10434 } 10435 10436 // if no content 10437 if ( status === 204 || s.type === "HEAD" ) { 10438 statusText = "nocontent"; 10439 10440 // if not modified 10441 } else if ( status === 304 ) { 10442 statusText = "notmodified"; 10443 10444 // If we have data, let's convert it 10445 } else { 10446 statusText = response.state; 10447 success = response.data; 10448 error = response.error; 10449 isSuccess = !error; 10450 } 10451 } else { 10452 10453 // We extract error from statusText 10454 // then normalize statusText and status for non-aborts 10455 error = statusText; 10456 if ( status || !statusText ) { 10457 statusText = "error"; 10458 if ( status < 0 ) { 10459 status = 0; 10460 } 10461 } 10462 } 10463 10464 // Set data for the fake xhr object 10465 jqXHR.status = status; 10466 jqXHR.statusText = ( nativeStatusText || statusText ) + ""; 10467 10468 // Success/Error 10469 if ( isSuccess ) { 10470 deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] ); 10471 } else { 10472 deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] ); 10473 } 10474 10475 // Status-dependent callbacks 10476 jqXHR.statusCode( statusCode ); 10477 statusCode = undefined; 10478 10479 if ( fireGlobals ) { 10480 globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError", 10481 [ jqXHR, s, isSuccess ? success : error ] ); 10482 } 10483 10484 // Complete 10485 completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] ); 10486 10487 if ( fireGlobals ) { 10488 globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] ); 10489 10490 // Handle the global AJAX counter 10491 if ( !( --jQuery.active ) ) { 10492 jQuery.event.trigger( "ajaxStop" ); 10493 } 10494 } 10495 } 10496 10497 return jqXHR; 10498 }, 10499 10500 getJSON: function( url, data, callback ) { 10501 return jQuery.get( url, data, callback, "json" ); 10502 }, 10503 10504 getScript: function( url, callback ) { 10505 return jQuery.get( url, undefined, callback, "script" ); 10506 } 10507} ); 10508 10509jQuery.each( [ "get", "post" ], function( i, method ) { 10510 jQuery[ method ] = function( url, data, callback, type ) { 10511 10512 // shift arguments if data argument was omitted 10513 if ( jQuery.isFunction( data ) ) { 10514 type = type || callback; 10515 callback = data; 10516 data = undefined; 10517 } 10518 10519 // The url can be an options object (which then must have .url) 10520 return jQuery.ajax( jQuery.extend( { 10521 url: url, 10522 type: method, 10523 dataType: type, 10524 data: data, 10525 success: callback 10526 }, jQuery.isPlainObject( url ) && url ) ); 10527 }; 10528} ); 10529 10530 10531jQuery._evalUrl = function( url ) { 10532 return jQuery.ajax( { 10533 url: url, 10534 10535 // Make this explicit, since user can override this through ajaxSetup (#11264) 10536 type: "GET", 10537 dataType: "script", 10538 cache: true, 10539 async: false, 10540 global: false, 10541 "throws": true 10542 } ); 10543}; 10544 10545 10546jQuery.fn.extend( { 10547 wrapAll: function( html ) { 10548 if ( jQuery.isFunction( html ) ) { 10549 return this.each( function( i ) { 10550 jQuery( this ).wrapAll( html.call( this, i ) ); 10551 } ); 10552 } 10553 10554 if ( this[ 0 ] ) { 10555 10556 // The elements to wrap the target around 10557 var wrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true ); 10558 10559 if ( this[ 0 ].parentNode ) { 10560 wrap.insertBefore( this[ 0 ] ); 10561 } 10562 10563 wrap.map( function() { 10564 var elem = this; 10565 10566 while ( elem.firstChild && elem.firstChild.nodeType === 1 ) { 10567 elem = elem.firstChild; 10568 } 10569 10570 return elem; 10571 } ).append( this ); 10572 } 10573 10574 return this; 10575 }, 10576 10577 wrapInner: function( html ) { 10578 if ( jQuery.isFunction( html ) ) { 10579 return this.each( function( i ) { 10580 jQuery( this ).wrapInner( html.call( this, i ) ); 10581 } ); 10582 } 10583 10584 return this.each( function() { 10585 var self = jQuery( this ), 10586 contents = self.contents(); 10587 10588 if ( contents.length ) { 10589 contents.wrapAll( html ); 10590 10591 } else { 10592 self.append( html ); 10593 } 10594 } ); 10595 }, 10596 10597 wrap: function( html ) { 10598 var isFunction = jQuery.isFunction( html ); 10599 10600 return this.each( function( i ) { 10601 jQuery( this ).wrapAll( isFunction ? html.call( this, i ) : html ); 10602 } ); 10603 }, 10604 10605 unwrap: function() { 10606 return this.parent().each( function() { 10607 if ( !jQuery.nodeName( this, "body" ) ) { 10608 jQuery( this ).replaceWith( this.childNodes ); 10609 } 10610 } ).end(); 10611 } 10612} ); 10613 10614 10615function getDisplay( elem ) { 10616 return elem.style && elem.style.display || jQuery.css( elem, "dis
10616play" ); 10617} 10618 10619function filterHidden( elem ) { 10620 10621 // Disconnected elements are considered hidden 10622 if ( !jQuery.contains( elem.ownerDocument || document, elem ) ) { 10623 return true; 10624 } 10625 while ( elem && elem.nodeType === 1 ) { 10626 if ( getDisplay( elem ) === "none" || elem.type === "hidden" ) { 10627 return true; 10628 } 10629 elem = elem.parentNode; 10630 } 10631 return false; 10632} 10633 10634jQuery.expr.filters.hidden = function( elem ) { 10635 10636 // Support: Opera <= 12.12 10637 // Opera reports offsetWidths and offsetHeights less than zero on some elements 10638 return support.reliableHiddenOffsets() ? 10639 ( elem.offsetWidth <= 0 && elem.offsetHeight <= 0 && 10640 !elem.getClientRects().length ) : 10641 filterHidden( elem ); 10642}; 10643 10644jQuery.expr.filters.visible = function( elem ) { 10645 return !jQuery.expr.filters.hidden( elem ); 10646}; 10647 10648 10649 10650 10651var r20 = /%20/g, 10652 rbracket = /\[\]$/, 10653 rCRLF = /\r?\n/g, 10654 rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i, 10655 rsubmittable = /^(?:input|select|textarea|keygen)/i; 10656 10657function buildParams( prefix, obj, traditional, add ) { 10658 var name; 10659 10660 if ( jQuery.isArray( obj ) ) { 10661 10662 // Serialize array item. 10663 jQuery.each( obj, function( i, v ) { 10664 if ( traditional || rbracket.test( prefix ) ) { 10665 10666 // Treat each array item as a scalar. 10667 add( prefix, v ); 10668 10669 } else { 10670 10671 // Item is non-scalar (array or object), encode its numeric index. 10672 buildParams( 10673 prefix + "[" + ( typeof v === "object" && v != null ? i : "" ) + "]", 10674 v, 10675 traditional, 10676 add 10677 ); 10678 } 10679 } ); 10680 10681 } else if ( !traditional && jQuery.type( obj ) === "object" ) { 10682 10683 // Serialize object item. 10684 for ( name in obj ) { 10685 buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add ); 10686 } 10687 10688 } else { 10689 10690 // Serialize scalar item. 10691 add( prefix, obj ); 10692 } 10693} 10694 10695// Serialize an array of form elements or a set of 10696// key/values into a query string 10697jQuery.param = function( a, traditional ) { 10698 var prefix, 10699 s = [], 10700 add = function( key, value ) { 10701 10702 // If value is a function, invoke it and return its value 10703 value = jQuery.isFunction( value ) ? value() : ( value == null ? "" : value ); 10704 s[ s.length ] = encodeURIComponent( key ) + "=" + encodeURIComponent( value ); 10705 }; 10706 10707 // Set traditional to true for jQuery <= 1.3.2 behavior. 10708 if ( traditional === undefined ) { 10709 traditional = jQuery.ajaxSettings && jQuery.ajaxSettings.traditional; 10710 } 10711 10712 // If an array was passed in, assume that it is an array of form elements. 10713 if ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) { 10714 10715 // Serialize the form elements 10716 jQuery.each( a, function() { 10717 add( this.name, this.value ); 10718 } ); 10719 10720 } else { 10721 10722 // If traditional, encode the "old" way (the way 1.3.2 or older 10723 // did it), otherwise encode params recursively. 10724 for ( prefix in a ) { 10725 buildParams( prefix, a[ prefix ], traditional, add ); 10726 } 10727 } 10728 10729 // Return the resulting serialization 10730 return s.join( "&" ).replace( r20, "+" ); 10731}; 10732 10733jQuery.fn.extend( { 10734 serialize: function() { 10735 return jQuery.param( this.serializeArray() ); 10736 }, 10737 serializeArray: function() { 10738 return this.map( function() { 10739 10740 // Can add propHook for "elements" to filter or add form elements 10741 var elements = jQuery.prop( this, "elements" ); 10742 return elements ? jQuery.makeArray( elements ) : this; 10743 } ) 10744 .filter( function() { 10745 var type = this.type; 10746 10747 // Use .is(":disabled") so that fieldset[disabled] works 10748 return this.name && !jQuery( this ).is( ":disabled" ) && 10749 rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) && 10750 ( this.checked || !rcheckableType.test( type ) ); 10751 } ) 10752 .map( function( i, elem ) { 10753 var val = jQuery( this ).val(); 10754 10755 return val == null ? 10756 null : 10757 jQuery.isArray( val ) ? 10758 jQuery.map( val, function( val ) { 10759 return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; 10760 } ) : 10761 { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; 10762 } ).get(); 10763 } 10764} ); 10765 10766 10767// Create the request object 10768// (This is still attached to ajaxSettings for backward compatibility) 10769jQuery.ajaxSettings.xhr = window.ActiveXObject !== undefined ? 10770 10771 // Support: IE6-IE8 10772 function() { 10773 10774 // XHR cannot access local files, always use ActiveX for that case 10775 if ( this.isLocal ) { 10776 return createActiveXHR(); 10777 } 10778
10779 // Support: IE 9-11 10780 // IE seems to error on cross-domain PATCH requests when ActiveX XHR 10781 // is used. In IE 9+ always use the native XHR. 10782 // Note: this condition won't catch Edge as it doesn't define 10783 // document.documentMode but it also doesn't support ActiveX so it won't 10784 // reach this code. 10785 if ( document.documentMode > 8 ) { 10786 return createStandardXHR(); 10787 } 10788 10789 // Support: IE<9 10790 // oldIE XHR does not support non-RFC2616 methods (#13240) 10791 // See http://msdn.microsoft.com/en-us/library/ie/ms536648(v=vs.85).aspx 10792 // and http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html#sec9 10793 // Although this check for six methods instead of eight 10794 // since IE also does not support "trace" and "connect" 10795 return /^(get|post|head|put|delete|options)$/i.test( this.type ) && 10796 createStandardXHR() || createActiveXHR(); 10797 } : 10798 10799 // For all other browsers, use the standard XMLHttpRequest object 10800 createStandardXHR; 10801 10802var xhrId = 0, 10803 xhrCallbacks = {}, 10804 xhrSupported = jQuery.ajaxSettings.xhr(); 10805 10806// Support: IE<10 10807// Open requests must be manually aborted on unload (#5280) 10808// See https://support.microsoft.com/kb/2856746 for more info 10809if ( window.attachEvent ) { 10810 window.attachEvent( "onunload", function() { 10811 for ( var key in xhrCallbacks ) { 10812 xhrCallbacks[ key ]( undefined, true ); 10813 } 10814 } ); 10815} 10816 10817// Determine support properties 10818support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported ); 10819xhrSupported = support.ajax = !!xhrSupported; 10820 10821// Create transport if the browser can provide an xhr 10822if ( xhrSupported ) { 10823 10824 jQuery.ajaxTransport( function( options ) { 10825 10826 // Cross domain only allowed if supported through XMLHttpRequest 10827 if ( !options.crossDomain || support.cors ) { 10828 10829 var callback; 10830 10831 return { 10832 send: function( headers, complete ) { 10833 var i, 10834 xhr = options.xhr(), 10835 id = ++xhrId; 10836 10837 // Open the socket 10838 xhr.open( 10839 options.type, 10840 options.url, 10841 options.async, 10842 options.username, 10843 options.password 10844 ); 10845 10846 // Apply custom fields if provided 10847 if ( options.xhrFields ) { 10848 for ( i in options.xhrFields ) { 10849 xhr[ i ] = options.xhrFields[ i ]; 10850 } 10851 } 10852 10853 // Override mime type if needed 10854 if ( options.mimeType && xhr.overrideMimeType ) { 10855 xhr.overrideMimeType( options.mimeType ); 10856 } 10857 10858 // X-Requested-With header 10859 // For cross-domain requests, seeing as conditions for a preflight are 10860 // akin to a jigsaw puzzle, we simply never set it to be sure. 10861 // (it can always be set on a per-request basis or even using ajaxSetup)
10862 // For same-domain requests, won't change header if already provided. 10863 if ( !options.crossDomain && !headers[ "X-Requested-With" ] ) { 10864 headers[ "X-Requested-With" ] = "XMLHttpRequest"; 10865 } 10866 10867 // Set headers 10868 for ( i in headers ) { 10869 10870 // Support: IE<9 10871 // IE's ActiveXObject throws a 'Type Mismatch' exception when setting 10872 // request header to a null-value. 10873 // 10874 // To keep consistent with other XHR implementations, cast the value 10875 // to string and ignore `undefined`. 10876 if ( headers[ i ] !== undefined ) { 10877 xhr.setRequestHeader( i, headers[ i ] + "" ); 10878 } 10879 } 10880 10881 // Do send the request 10882 // This may raise an exception which is actually 10883 // handled in jQuery.ajax (so no try/catch here) 10884 xhr.send( ( options.hasContent && options.data ) || null ); 10885 10886 // Listener 10887 callback = function( _, isAbort ) { 10888 var status, statusText, responses; 10889 10890 // Was never called and is aborted or complete 10891 if ( callback && ( isAbort || xhr.readyState === 4 ) ) { 10892 10893 // Clean up 10894 delete xhrCallbacks[ id ]; 10895 callback = undefined; 10896 xhr.onreadystatechange = jQuery.noop; 10897 10898 // Abort manually if needed 10899 if ( isAbort ) { 10900 if ( xhr.readyState !== 4 ) { 10901 xhr.abort(); 10902 } 10903 } else { 10904 responses = {}; 10905 status = xhr.status; 10906 10907 // Support: IE<10 10908 // Accessing binary-data responseText throws an exception 10909 // (#11426) 10910 if ( typeof xhr.responseText === "string" ) { 10911 responses.text = xhr.responseText; 10912 } 10913 10914 // Firefox throws an exception when accessing 10915 // statusText for faulty cross-domain requests 10916 try { 10917 statusText = xhr.statusText; 10918 } catch ( e ) { 10919 10920 // We normalize with Webkit giving an empty statusText 10921 statusText = ""; 10922 } 10923 10924 // Filter status for non standard behaviors 10925 10926 // If the request is local and we have data: assume a success 10927 // (success with no data won't get notified, that's the best we 10928 // can do given current implementations) 10929 if ( !status && options.isLocal && !options.crossDomain ) { 10930 status = responses.text ? 200 : 404; 10931 10932 // IE - #1450: sometimes returns 1223 when it should be 204 10933 } else if ( status === 1223 ) { 10934 status = 204; 10935 } 10936 } 10937 } 10938 10939 // Call complete if needed 10940 if ( responses ) { 10941 complete( status, statusText, responses, xhr.getAllResponseHeaders() ); 10942 } 10943 }; 10944 10945 // Do send the request 10946 // `xhr.send` may raise an exception, but it will be 10947 // handled in jQuery.ajax (so no try/catch here) 10948 if ( !options.async ) { 10949 10950 // If we're in sync mode we fire the callback 10951 callback(); 10952 } else if ( xhr.readyState === 4 ) { 10953 10954 // (IE6 & IE7) if it's in cache and has been 10955 // retrieved directly we need to fire the callback 10956 window.setTimeout( callback ); 10957 } else { 10958 10959 // Register the callback, but delay it in case `xhr.send` throws 10960 // Add to the list of active xhr callbacks 10961 xhr.onreadystatechange = xhrCallbacks[ id ] = callback; 10962 } 10963 }, 10964 10965 abort: function() { 10966 if ( callback ) { 10967 callback( undefined, true ); 10968 } 10969 } 10970 }; 10971 } 10972 } ); 10973} 10974 10975// Functions to create xhrs 10976function createStandardXHR() { 10977 try { 10978 return new window.XMLHttpRequest(); 10979 } catch ( e ) {} 10980} 10981 10982function createActiveXHR() { 10983 try { 10984 return new window.ActiveXObject( "Microsoft.XMLHTTP" ); 10985 } catch ( e ) {} 10986} 10987 10988 10989 10990 10991// Install script dataType 10992jQuery.ajaxSetup( { 10993 accepts: { 10994 script: "text/javascript, application/javascript, " + 10995 "application/ecmascript, application/x-ecmascript" 10996 }, 10997 contents: { 10998 script: /\b(?:java|ecma)script\b/ 10999 }, 11000 converters: { 11001 "text script": function( text ) { 11002 jQuery.globalEval( text ); 11003 return text; 11004 } 11005 } 11006} ); 11007 11008// Handle cache's special case and global 11009jQuery.ajaxPrefilter( "script", function( s ) { 11010 if ( s.cache === undefined ) { 11011 s.cache = false; 11012 } 11013 if ( s.crossDomain ) { 11014 s.type = "GET"; 11015 s.global = false;
11016 } 11017} ); 11018 11019// Bind script tag hack transport 11020jQuery.ajaxTransport( "script", function( s ) { 11021 11022 // This transport only deals with cross domain requests 11023 if ( s.crossDomain ) { 11024 11025 var script, 11026 head = document.head || jQuery( "head" )[ 0 ] || document.documentElement; 11027 11028 return { 11029 11030 send: function( _, callback ) { 11031 11032 script = document.createElement( "script" ); 11033 11034 script.async = true; 11035 11036 if ( s.scriptCharset ) { 11037 script.charset = s.scriptCharset; 11038 } 11039 11040 script.src = s.url; 11041 11042 // Attach handlers for all browsers 11043 script.onload = script.onreadystatechange = function( _, isAbort ) { 11044 11045 if ( isAbort || !script.readyState || /loaded|complete/.test( script.readyState ) ) { 11046 11047 // Handle memory leak in IE 11048 script.onload = script.onreadystatechange = null; 11049 11050 // Remove the script 11051 if ( script.parentNode ) { 11052 script.parentNode.removeChild( script ); 11053 } 11054 11055 // Dereference the script 11056 script = null; 11057 11058 // Callback if not abort 11059 if ( !isAbort ) { 11060 callback( 200, "success" ); 11061 } 11062 } 11063 }; 11064 11065 // Circumvent IE6 bugs with base elements (#2709 and #4378) by prepending 11066 // Use native DOM manipulation to avoid our domManip AJAX trickery 11067 head.insertBefore( script, head.firstChild ); 11068 }, 11069 11070 abort: function() { 11071 if ( script ) { 11072 script.onload( undefined, true ); 11073 } 11074 } 11075 }; 11076 } 11077} ); 11078 11079 11080 11081 11082var oldCallbacks = [], 11083 rjsonp = /(=)\?(?=&|$)|\?\?/; 11084 11085// Default jsonp settings 11086jQuery.ajaxSetup( { 11087 jsonp: "callback", 11088 jsonpCallback: function() { 11089 var callback = oldCallbacks.pop() || ( jQuery.expando + "_" + ( nonce++ ) ); 11090 this[ callback ] = true; 11091 return callback; 11092 } 11093} ); 11094 11095// Detect, normalize options and install callbacks for jsonp requests 11096jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) { 11097 11098 var callbackName, overwritten, responseContainer, 11099 jsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ? 11100 "url" : 11101 typeof s.data === "string" && 11102 ( s.contentType || "" ) 11103 .indexOf( "application/x-www-form-urlencoded" ) === 0 && 11104 rjsonp.test( s.data ) && "data" 11105 ); 11106 11107 // Handle iff the expected data type is "jsonp" or we have a parameter to set 11108 if ( jsonProp || s.dataTypes[ 0 ] === "jsonp" ) { 11109 11110 // Get callback name, remembering preexisting value associated with it 11111 callbackName = s.jsonpCallback = jQuery.isFunction( s.jsonpCallback ) ? 11112 s.jsonpCallback() : 11113 s.jsonpCallback; 11114 11115 // Insert callback into url or form data 11116 if ( jsonProp ) { 11117 s[ jsonProp ] = s[ jsonProp ].replace( rjsonp, "$1" + callbackName ); 11118 } else if ( s.jsonp !== false ) { 11119 s.url += ( rquery.test( s.url ) ? "&" : "?" ) + s.jsonp + "=" + callbackName; 11120 } 11121 11122 // Use data converter to retrieve json after script execution 11123 s.converters[ "script json" ] = function() { 11124 if ( !responseContainer ) { 11125 jQuery.error( callbackName + " was not called" ); 11126 } 11127 return responseContainer[ 0 ]; 11128 }; 11129 11130 // force json dataType 11131 s.dataTypes[ 0 ] = "json"; 11132 11133 // Install callback 11134 overwritten = window[ callbackName ]; 11135 window[ callbackName ] = function() { 11136 responseContainer = arguments; 11137 }; 11138 11139 // Clean-up function (fires after converters) 11140 jqXHR.always( function() { 11141 11142 // If previous value didn't exist - remove it 11143 if ( overwritten === undefined ) { 11144 jQuery( window ).removeProp( callbackName ); 11145 11146 // Otherwise restore preexisting value 11147 } else { 11148 window[ callbackName ] = overwritten; 11149 } 11150 11151 // Save back as free 11152 if ( s[ callbackName ] ) { 11153 11154 // make sure that re-using the options doesn't screw things around 11155 s.jsonpCallback = originalSettings.jsonpCallback; 11156 11157 // save the callback name for future use 11158 oldCallbacks.push( callbackName ); 11159 } 11160 11161 // Call if it was a function and we have a response 11162 if ( responseContainer && jQuery.isFunction( overwritten ) ) { 11163 overwritten( responseContainer[ 0 ] ); 11164 } 11165 11166 responseContainer = overwritten = undefined; 11167 } ); 11168 11169 // Delegate to script 11170 return "script"; 11171 } 11172} ); 11173 11174 11175 11176 11177// data: string of html 11178// context (optional): If specified, the fragment will be created in this context, 11179// defaults to document 11180// keepScripts (optional): If true, will include scripts passed in the html string 11181jQuery.parseHTML = function( data, context, keepScripts ) { 11182 if ( !data || typeof data !== "string" ) { 11183 return null; 11184 } 11185 if ( typeof context === "boolean" ) { 11186 keepScripts = context; 11187 context = false;
11188 } 11189 context = context || document; 11190 11191 var parsed = rsingleTag.exec( data ), 11192 scripts = !keepScripts && []; 11193 11194 // Single tag 11195 if ( parsed ) { 11196 return [ context.createElement( parsed[ 1 ] ) ]; 11197 } 11198 11199 parsed = buildFragment( [ data ], context, scripts ); 11200 11201 if ( scripts && scripts.length ) { 11202 jQuery( scripts ).remove(); 11203 } 11204 11205 return jQuery.merge( [], parsed.childNodes ); 11206}; 11207 11208 11209// Keep a copy of the old load method 11210var _load = jQuery.fn.load; 11211 11212/** 11213 * Load a url into a page 11214 */ 11215jQuery.fn.load = function( url, params, callback ) { 11216 if ( typeof url !== "string" && _load ) { 11217 return _load.apply( this, arguments ); 11218 } 11219 11220 var selector, type, response, 11221 self = this, 11222 off = url.indexOf( " " ); 11223 11224 if ( off > -1 ) { 11225 selector = jQuery.trim( url.slice( off, url.length ) ); 11226 url = url.slice( 0, off ); 11227 } 11228 11229 // If it's a function 11230 if ( jQuery.isFunction( params ) ) { 11231 11232 // We assume that it's the callback 11233 callback = params; 11234 params = undefined; 11235 11236 // Otherwise, build a param string 11237 } else if ( params && typeof params === "object" ) { 11238 type = "POST"; 11239 } 11240 11241 // If we have elements to modify, make the request 11242 if ( self.length > 0 ) { 11243 jQuery.ajax( { 11244 url: url, 11245 11246 // If "type" variable is undefined, then "GET" method will be used. 11247 // Make value of this field explicit since 11248 // user can override it through ajaxSetup method 11249 type: type || "GET", 11250 dataType: "html", 11251 data: params 11252 } ).done( function( responseText ) { 11253 11254 // Save response for use in complete callback 11255 response = arguments; 11256 11257 self.html( selector ? 11258 11259 // If a selector was specified, locate the right elements in a dummy div 11260 // Exclude scripts to avoid IE 'Permission Denied' errors 11261 jQuery( "<div>" ).append( jQuery.parseHTML( responseText ) ).find( selector ) : 11262 11263 // Otherwise use the full result 11264 responseText ); 11265 11266 // If the request succeeds, this function gets "data", "status", "jqXHR" 11267 // but they are ignored because response was set above. 11268 // If it fails, this function gets "jqXHR", "status", "error" 11269 } ).always( callback && function( jqXHR, status ) { 11270 self.each( function() { 11271 callback.apply( this, response || [ jqXHR.responseText, status, jqXHR ] ); 11272 } ); 11273 } ); 11274 } 11275 11276 return this; 11277}; 11278 11279 11280 11281 11282// Attach a bunch of functions for handling common AJAX events 11283jQuery.each( [ 11284 "ajaxStart", 11285 "ajaxStop", 11286 "ajaxComplete", 11287 "ajaxError", 11288 "ajaxSuccess", 11289 "ajaxSend" 11290], function( i, type ) { 11291 jQuery.fn[ type ] = function( fn ) { 11292 return this.on( type, fn ); 11293 }; 11294} ); 11295 11296 11297 11298 11299jQuery.expr.filters.animated = function( elem ) { 11300 return jQuery.grep( jQuery.timers, function( fn ) { 11301 return elem === fn.elem; 11302 } ).length; 11303}; 11304 11305 11306 11307 11308 11309/** 11310 * Gets a window from an element 11311 */ 11312function getWindow( elem ) { 11313 return jQuery.isWindow( elem ) ? 11314 elem : 11315 elem.nodeType === 9 ? 11316 elem.defaultView || elem.parentWindow : 11317 false; 11318} 11319 11320jQuery.offset = { 11321 setOffset: function( elem, options, i ) { 11322 var curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition, 11323 position = jQuery.css( elem, "position" ), 11324 curElem = jQuery( elem ), 11325 props = {}; 11326 11327 // set position first, in-case top/left are set even on static elem 11328 if ( position === "static" ) { 11329 elem.style.position = "relative"; 11330 } 11331 11332 curOffset = curElem.offset(); 11333 curCSSTop = jQuery.css( elem, "top" ); 11334 curCSSLeft = jQuery.css( elem, "left" ); 11335 calculatePosition = ( position === "absolute" || position === "fixed" ) && 11336 jQuery.inArray( "auto", [ curCSSTop, curCSSLeft ] ) > -1; 11337 11338 // need to be able to calculate position if either top or left 11339 // is auto and position is either absolute or fixed 11340 if ( calculatePosition ) { 11341 curPosition = curElem.position(); 11342 curTop = curPosition.top; 11343 curLeft = curPosition.left; 11344 } else { 11345 curTop = parseFloat( curCSSTop ) || 0; 11346 curLeft = parseFloat( curCSSLeft ) || 0; 11347 } 11348 11349 if ( jQuery.isFunction( options ) ) { 11350 11351 // Use jQuery.extend here to allow modification of coordinates argument (gh-1848) 11352 options = options.call( elem, i, jQuery.extend( {}, curOffset ) ); 11353 } 11354 11355 if ( options.top != null ) { 11356 props.top = ( options.top - curOffset.top ) + curTop; 11357 } 11358 if ( options.left != null ) { 11359 props.left = ( options.left - curOffset.left ) + curLeft; 11360 } 11361 11362 if ( "using" in options ) { 11363 options.using.call( elem, props ); 11364 } else { 11365 curElem.css( props ); 11366 } 11367 } 11368}; 11369 11370jQuery.fn.extend( { 11371 offset: function( options ) { 11372 if ( arguments.length ) { 11373 return options === undefined ? 11374 this : 11375 this.each( function( i ) { 11376 jQuery.offset.setOffset( this, options, i ); 11377 } ); 11378 } 11379 11380 var docElem, win, 11381 box = { top: 0, left: 0 }, 11382 elem = this[ 0 ], 11383 doc = elem && elem.ownerDocument; 11384 11385 if ( !doc ) { 11386 return; 11387 } 11388 11389 docElem = doc.documentElement; 11390 11391 // Make sure it's not a disconnected DOM node 11392 if ( !jQuery.contains( docElem, elem ) ) { 11393 return box; 11394 } 11395 11396 // If we don't have gBCR, just use 0,0 rather than error 11397 // BlackBerry 5, iOS 3 (original iPhone) 11398 if ( typeof elem.getBoundingClientRect !== "undefined" ) { 11399 box = elem.getBoundingClientRect(); 11400 } 11401 win = getWindow( doc ); 11402 return { 11403 top: box.top + ( win.pageYOffset || docElem.scrollTop ) - ( docElem.clientTop || 0 ), 11404 left: box.left + ( win.pageXOffset || docElem.scrollLeft ) - ( docElem.clientLeft || 0 ) 11405 }; 11406 }, 11407 11408 position: function() { 11409 if ( !this[ 0 ] ) { 11410 return; 11411 } 11412 11413 var offsetParent, offset, 11414 parentOffset = { top: 0, left: 0 }, 11415 elem = this[ 0 ]; 11416 11417 // Fixed elements are offset from window (parentOffset = {top:0, left
11417: 0}, 11418 // because it is its only offset parent 11419 if ( jQuery.css( elem, "position" ) === "fixed" ) { 11420 11421 // we assume that getBoundingClientRect is available when computed position is fixed 11422 offset = elem.getBoundingClientRect(); 11423 } else { 11424 11425 // Get *real* offsetParent 11426 offsetParent = this.offsetParent(); 11427 11428 // Get correct offsets 11429 offset = this.offset(); 11430 if ( !jQuery.nodeName( offsetParent[ 0 ], "html" ) ) { 11431 parentOffset = offsetParent.offset(); 11432 } 11433 11434 // Add offsetParent borders 11435 parentOffset.top += jQuery.css( offsetParent[ 0 ], "borderTopWidth", true ); 11436 parentOffset.left += jQuery.css( offsetParent[ 0 ], "borderLeftWidth", true ); 11437 } 11438 11439 // Subtract parent offsets and element margins 11440 // note: when an element has margin: auto the offsetLeft and marginLeft 11441 // are the same in Safari causing offset.left to incorrectly be 0 11442 return { 11443 top: offset.top - parentOffset.top - jQuery.css( elem, "marginTop", true ), 11444 left: offset.left - parentOffset.left - jQuery.css( elem, "marginLeft", true ) 11445 }; 11446 }, 11447 11448 offsetParent: function() { 11449 return this.map( function() { 11450 var offsetParent = this.offsetParent; 11451 11452 while ( offsetParent && ( !jQuery.nodeName( offsetParent, "html" ) && 11453 jQuery.css( offsetParent, "position" ) === "static" ) ) { 11454 offsetParent = offsetParent.offsetParent; 11455 } 11456 return offsetParent || documentElement; 11457 } ); 11458 } 11459} ); 11460 11461// Create scrollLeft and scrollTop methods 11462jQuery.each( { scrollLeft: "pageXOffset", scrollTop: "pageYOffset" }, function( method, prop ) { 11463 var top = /Y/.test( prop ); 11464 11465 jQuery.fn[ method ] = function( val ) { 11466 return access( this, function( elem, method, val ) { 11467 var win = getWindow( elem ); 11468 11469 if ( val === undefined ) { 11470 return win ? ( prop in win ) ? win[ prop ] : 11471 win.document.documentElement[ method ] : 11472 elem[ method ]; 11473 } 11474 11475 if ( win ) { 11476 win.scrollTo( 11477 !top ? val : jQuery( win ).scrollLeft(), 11478 top ? val : jQuery( win ).scrollTop() 11479 ); 11480 11481 } else { 11482 elem[ method ] = val; 11483 } 11484 }, method, val, arguments.length, null ); 11485 }; 11486} ); 11487 11488// Support: Safari<7-8+, Chrome<37-44+ 11489// Add the top/left cssHooks using jQuery.fn.position 11490// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084 11491// getComputedStyle returns percent when specified for top/left/bottom/right 11492// rather than make the css module depend on the offset module, we just check for it here 11493jQuery.each( [ "top", "left" ], function( i, prop ) { 11494 jQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition, 11495 function( elem, computed ) { 11496 if ( computed ) { 11497 computed = curCSS( elem, prop ); 11498 11499 // if curCSS returns percentage, fallback to offset 11500 return rnumnonpx.test( computed ) ? 11501 jQuery( elem ).position()[ prop ] + "px" : 11502 computed; 11503 } 11504 } 11505 ); 11506} ); 11507 11508 11509// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods 11510jQuery.each( { Height: "height", Width: "width" }, function( name, type ) { 11511 jQuery.each( { padding: "inner" + name, content: type, "": "outer" + name }, 11512 function( defaultExtra, funcName ) { 11513 11514 // margin is only for outerHeight, outerWidth 11515 jQuery.fn[ funcName ] = function( margin, value ) { 11516 var chainable = arguments.length && ( defaultExtra || typeof margin !== "boolean" ), 11517 extra = defaultExtra || ( margin === true || value === true ? "margin" : "border" ); 11518 11519 return access( this, function( elem, type, value ) { 11520 var doc; 11521 11522 if ( jQuery.isWindow( elem ) ) { 11523 11524 // As of 5/8/2012 this will yield incorrect results for Mobile Safari, but there 11525 // isn't a whole lot we can do. See pull request at this URL for discussion: 11526 // https://github.com/jquery/jquery/pull/764 11527 return elem.document.documentElement[ "client" + name ]; 11528 } 11529 11530 // Get document width or height 11531 if ( elem.nodeType === 9 ) { 11532 doc = elem.documentElement; 11533 11534 // Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height], 11535 // whichever is greatest 11536 // unfortunately, this causes bug #3838 in IE6/8 only, 11537 // but there is currently no good, small way to fix it. 11538 return Math.max( 11539 elem.body[ "scroll" + name ], doc[ "scroll" + name ], 11540 elem.body[ "offset" + name ], doc[ "offset" + name ], 11541 doc[ "client" + name ] 11542 ); 11543 } 11544 11545 return value === undefined ? 11546 11547 // Get width or height on the element, requesting but not forcing parseFloat 11548 jQuery.css( elem, type, extra ) : 11549 11550 // Set width or height on the element 11551 jQuery.style( elem, type, value, extra ); 11552 }, type, chainable ? margin : undefined, chainable, null ); 11553 }; 11554 } ); 11555} ); 11556 11557 11558jQuery.fn.extend( { 11559 11560 bind: function( types, data, fn ) { 11561 return this.on( types, null, data, fn ); 11562 }, 11563 unbind: function( types, fn ) { 11564 return this.off( types, null, fn ); 11565 }, 11566 11567 delegate: function( selector, types, data, fn ) { 11568 return this.on( types, selector, data, fn ); 11569 }, 11570 undelegate: function( selector, types, fn ) { 11571 11572 // ( namespace ) or ( selector, types [, fn] ) 11573 return arguments.length === 1 ? 11574 this.off( selector, "**" ) : 11575 this.off( types, selector || "**", fn ); 11576 } 11577} ); 11578 11579// The number of elements contained in the matched element set 11580jQuery.fn.size = function() { 11581 return this.length; 11582}; 11583 11584jQuery.fn.andSelf = jQuery.fn.addBack; 11585 11586 11587 11588 11589// Register as a named AMD module, since jQuery can be concatenated with other 11590// files that may use define, but not via a proper concatenation script that 11591// understands anonymous AMD modules. A named AMD is safest and most robust 11592// way to register. Lowercase jquery is used because AMD module names are 11593// derived from file names, and jQuery is normally delivered in a lowercase 11594// file name. Do this after creating the global so that if an AMD module wants 11595// to call noConflict to hide this version of jQuery, it will work. 11596 11597// Note that for maximum portability, libraries that are not jQuery should 11598// declare themselves as anonymous modules, and avoid setting a global if an 11599// AMD loader is present. jQuery is a special case. For more information, see
11600// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon 11601 11602if ( typeof define === "function" && define.amd ) { 11603 define( "jquery", [], function() { 11604 return jQuery; 11605 } ); 11606} 11607 11608 11609 11610var 11611 11612 // Map over jQuery in case of overwrite 11613 _jQuery = window.jQuery, 11614 11615 // Map over the $ in case of overwrite 11616 _$ = window.$; 11617 11618jQuery.noConflict = function( deep ) { 11619 if ( window.$ === jQuery ) { 11620 window.$ = _$; 11621 } 11622 11623 if ( deep && window.jQuery === jQuery ) { 11624 window.jQuery = _jQuery; 11625 } 11626 11627 return jQuery; 11628}; 11629 11630// Expose jQuery and $ identifiers, even in 11631// AMD (#7102#comment:10, https://github.com/jquery/jquery/pull/557) 11632// and CommonJS for browser emulators (#13566) 11633if ( !noGlobal ) { 11634 window.jQuery = window.$ = jQuery; 11635} 11636 11637return jQuery; 11638})); 11639(function(global, factory) { 11640 typeof exports === "object" && typeof module !== "undefined" ? factory(exports) : typeof define === "function" && define.amd ? define([ "exports" ], factory) : (global = typeof globalThis !== "undefined" ? globalThis : global || self, 11641 factory(global.ActiveStorage = {})); 11642})(this, (function(exports) { 11643 "use strict"; 11644 var sparkMd5 = { 11645 exports: {} 11646 }; 11647 (function(module, exports) { 11648 (function(factory) { 11649 { 11650 module.exports = factory(); 11651 } 11652 })((function(undefined$1) { 11653 var hex_chr = [ "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f" ]; 11654 function md5cycle(x, k) { 11655 var a = x[0], b = x[1], c = x[2], d = x[3]; 11656 a += (b & c | ~b & d) + k[0] - 680876936 | 0; 11657 a = (a << 7 | a >>> 25) + b | 0; 11658 d += (a & b | ~a & c) + k[1] - 389564586 | 0; 11659 d = (d << 12 | d >>> 20) + a | 0; 11660 c += (d & a | ~d & b) + k[2] + 606105819 | 0; 11661 c = (c << 17 | c >>> 15) + d | 0; 11662 b += (c & d | ~c & a) + k[3] - 1044525330 | 0; 11663 b = (b << 22 | b >>> 10) + c | 0; 11664 a += (b & c | ~b & d) + k[4] - 176418897 | 0; 11665 a = (a << 7 | a >>> 25) + b | 0; 11666 d += (a & b | ~a & c) + k[5] + 1200080426 | 0; 11667 d = (d << 12 | d >>> 20) + a | 0; 11668 c += (d & a | ~d & b) + k[6] - 1473231341 | 0; 11669 c = (c << 17 | c >>> 15) + d | 0; 11670 b += (c & d | ~c & a) + k[7] - 45705983 | 0; 11671 b = (b << 22 | b >>> 10) + c | 0; 11672 a += (b & c | ~b & d) + k[8] + 1770035416 | 0; 11673 a = (a << 7 | a >>> 25) + b | 0; 11674 d += (a & b | ~a & c) + k[9] - 1958414417 | 0; 11675 d = (d << 12 | d >>> 20) + a | 0; 11676 c += (d & a | ~d & b) + k[10] - 42063 | 0; 11677 c = (c << 17 | c >>> 15) + d | 0; 11678 b += (c & d | ~c & a) + k[11] - 1990404162 | 0; 11679 b = (b << 22 | b >>> 10) + c | 0; 11680 a += (b & c | ~b & d) + k[12] + 1804603682 | 0; 11681 a = (a << 7 | a >>> 25) + b | 0; 11682 d += (a & b | ~a & c) + k[13] - 40341101 | 0; 11683 d = (d << 12 | d >>> 20) + a | 0; 11684 c += (d & a | ~d & b) + k[14] - 1502002290 | 0; 11685 c = (c << 17 | c >>> 15) + d | 0; 11686 b += (c & d | ~c & a) + k[15] + 1236535329 | 0; 11687 b = (b << 22 | b >>> 10) + c | 0; 11688 a += (b & d | c & ~d) + k[1] - 165796510 | 0; 11689 a = (a << 5 | a >>> 27) + b | 0; 11690 d += (a & c | b & ~c) + k[6] - 1069501632 | 0; 11691 d = (d << 9 | d >>> 23) + a | 0; 11692 c += (d & b | a & ~b) + k[11] + 643717713 | 0; 11693 c = (c << 14 | c >>> 18) + d | 0; 11694 b += (c & a | d & ~a) + k[0] - 373897302 | 0; 11695 b = (b << 20 | b >>> 12) + c | 0; 11696 a += (b & d | c & ~d) + k[5] - 701558691 | 0; 11697 a = (a << 5 | a >>> 27) + b | 0; 11698 d += (a & c | b & ~c) + k[10] + 38016083 | 0; 11699 d = (d << 9 | d >>> 23) + a | 0; 11700 c += (d & b | a & ~b) + k[15] - 660478335 | 0; 11701 c = (c << 14 | c >>> 18) + d | 0; 11702 b += (c & a | d & ~a) + k[4] - 405537848 | 0; 11703 b = (b << 20 | b >>> 12) + c | 0; 11704 a += (b & d | c & ~d) + k[9] + 568446438 | 0; 11705 a = (a << 5 | a >>> 27) + b | 0; 11706 d += (a & c | b & ~c) + k[14] - 1019803690 | 0; 11707 d = (d << 9 | d >>> 23) + a | 0; 11708 c += (d & b | a & ~b) + k[3] - 187363961 | 0; 11709 c = (c << 14 | c >>> 18) + d | 0; 11710 b += (c & a | d & ~a) + k[8] + 1163531501 | 0; 11711 b = (b << 20 | b >>> 12) + c | 0; 11712 a += (b & d | c & ~d) + k[13] - 1444681467 | 0; 11713 a = (a << 5 | a >>> 27) + b | 0; 11714 d += (a & c | b & ~c) + k[2] - 51403784 | 0; 11715 d = (d << 9 | d >>> 23) + a | 0; 11716 c += (d & b | a & ~b) + k[7] + 1735328473 | 0; 11717 c = (c << 14 | c >>> 18) + d | 0; 11718 b += (c & a | d & ~a) + k[12] - 1926607734 | 0; 11719 b = (b << 20 | b >>> 12) + c | 0; 11720 a += (b ^ c ^ d) + k[5] - 378558 | 0; 11721 a = (a << 4 | a >>> 28) + b | 0; 11722 d += (a ^ b ^ c) + k[8] - 2022574463 | 0; 11723 d = (d << 11 | d >>> 21) + a | 0; 11724 c += (d ^ a ^ b) + k[11] + 1839030562 | 0; 11725 c = (c << 16 | c >>> 16) + d | 0; 11726 b += (c ^ d ^ a) + k[14] - 35309556 | 0; 11727 b = (b << 23 | b >>> 9) + c | 0; 11728 a += (b ^ c ^ d) + k[1] - 1530992060 | 0; 11729 a = (a << 4 | a >>> 28) + b | 0; 11730 d += (a ^ b ^ c) + k[4] + 1272893353 | 0; 11731 d = (d << 11 | d >>> 21) + a | 0; 11732 c += (d ^ a ^ b) + k[7] - 155497632 | 0; 11733 c = (c << 16 | c >>> 16) + d | 0; 11734 b += (c ^ d ^ a) + k[10] - 1094730640 | 0; 11735 b = (b << 23 | b >>> 9) + c | 0; 11736 a += (b ^ c ^ d) + k[13] + 681279174 | 0; 11737 a = (a << 4 | a >>> 28) + b | 0; 11738 d += (a ^ b ^ c) + k[0] - 358537222 | 0; 11739 d = (d << 11 | d >>> 21) + a | 0; 11740 c += (d ^ a ^ b) + k[3] - 722521979 | 0; 11741 c = (c << 16 | c >>> 16) + d | 0; 11742 b += (c ^ d ^ a) + k[6] + 76029189 | 0; 11743 b = (b << 23 | b >>> 9) + c | 0; 11744 a += (b ^ c ^ d) + k[9] - 640364487 | 0; 11745 a = (a << 4 | a >>> 28) + b | 0; 11746 d += (a ^ b ^ c) + k[12] - 421815835 | 0; 11747 d = (d << 11 | d >>> 21) + a | 0; 11748 c += (d ^ a ^ b) + k[15] + 530742520 | 0; 11749 c = (c << 16 | c >>> 16) + d | 0; 11750 b += (c ^ d ^ a) + k[2] - 995338651 | 0; 11751 b = (b << 23 | b >>> 9) + c | 0; 11752 a += (c ^ (b | ~d)) + k[0] - 198630844 | 0; 11753 a = (a << 6 | a >>> 26) + b | 0; 11754 d += (b ^ (a | ~c)) + k[7] + 1126891415 | 0; 11755 d = (d << 10 | d >>> 22) + a | 0; 11756 c += (a ^ (d | ~b)) + k[14] - 1416354905 | 0; 11757 c = (c << 15 | c >>> 17) + d | 0; 11758 b += (d ^ (c | ~a)) + k[5] - 57434055 | 0; 11759 b = (b << 21 | b >>> 11) + c | 0; 11760 a += (c ^ (b | ~d)) + k[12] + 1700485571 | 0; 11761 a = (a << 6 | a >>> 26) + b | 0; 11762 d += (b ^ (a | ~c)) + k[3] - 1894986606 | 0; 11763 d = (d << 10 | d >>> 22) + a | 0; 11764 c += (a ^ (d | ~b)) + k[10] - 1051523 | 0; 11765 c = (c << 15 | c >>> 17) + d | 0; 11766 b += (d ^ (c | ~a)) + k[1] - 2054922799 | 0; 11767 b = (b << 21 | b >>> 11) + c | 0; 11768 a += (c ^ (b | ~d)) + k[8] + 1873313359 | 0; 11769 a = (a << 6 | a >>> 26) + b | 0; 11770 d += (b ^ (a | ~c)) + k[15] - 30611744 | 0; 11771 d = (d << 10 | d >>> 22) + a | 0; 11772 c += (a ^ (d | ~b)) + k[6] - 1560198380 | 0; 11773 c = (c << 15 | c >>> 17) + d | 0; 11774 b += (d ^ (c | ~a)) + k[13] + 1309151649 | 0; 11775 b = (b << 21 | b >>> 11) + c | 0; 11776 a += (c ^ (b | ~d)) + k[4] - 145523070 | 0; 11777 a = (a << 6 | a >>> 26) + b | 0;
vendor: 10,289 bytes, lines 11778-12063
11778 d += (b ^ (a | ~c)) + k[11] - 1120210379 | 0; 11779 d = (d << 10 | d >>> 22) + a | 0; 11780 c += (a ^ (d | ~b)) + k[2] + 718787259 | 0; 11781 c = (c << 15 | c >>> 17) + d | 0; 11782 b += (d ^ (c | ~a)) + k[9] - 343485551 | 0; 11783 b = (b << 21 | b >>> 11) + c | 0; 11784 x[0] = a + x[0] | 0; 11785 x[1] = b + x[1] | 0; 11786 x[2] = c + x[2] | 0; 11787 x[3] = d + x[3] | 0; 11788 } 11789 function md5blk(s) { 11790 var md5blks = [], i; 11791 for (i = 0; i < 64; i += 4) { 11792 md5blks[i >> 2] = s.charCodeAt(i) + (s.charCodeAt(i + 1) << 8) + (s.charCodeAt(i + 2) << 16) + (s.charCodeAt(i + 3) << 24); 11793 } 11794 return md5blks; 11795 } 11796 function md5blk_array(a) { 11797 var md5blks = [], i; 11798 for (i = 0; i < 64; i += 4) { 11799 md5blks[i >> 2] = a[i] + (a[i + 1] << 8) + (a[i + 2] << 16) + (a[i + 3] << 24); 11800 } 11801 return md5blks; 11802 } 11803 function md51(s) { 11804 var n = s.length, state = [ 1732584193, -271733879, -1732584194, 271733878 ], i, length, tail, tmp, lo, hi; 11805 for (i = 64; i <= n; i += 64) { 11806 md5cycle(state, md5blk(s.substring(i - 64, i))); 11807 } 11808 s = s.substring(i - 64); 11809 length = s.length; 11810 tail = [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ]; 11811 for (i = 0; i < length; i += 1) { 11812 tail[i >> 2] |= s.charCodeAt(i) << (i % 4 << 3); 11813 } 11814 tail[i >> 2] |= 128 << (i % 4 << 3); 11815 if (i > 55) { 11816 md5cycle(state, tail); 11817 for (i = 0; i < 16; i += 1) { 11818 tail[i] = 0; 11819 } 11820 } 11821 tmp = n * 8; 11822 tmp = tmp.toString(16).match(/(.*?)(.{0,8})$/); 11823 lo = parseInt(tmp[2], 16); 11824 hi = parseInt(tmp[1], 16) || 0; 11825 tail[14] = lo; 11826 tail[15] = hi; 11827 md5cycle(state, tail); 11828 return state; 11829 } 11830 function md51_array(a) { 11831 var n = a.length, state = [ 1732584193, -271733879, -1732584194, 271733878 ], i, length, tail, tmp, lo, hi; 11832 for (i = 64; i <= n; i += 64) { 11833 md5cycle(state, md5blk_array(a.subarray(i - 64, i))); 11834 } 11835 a = i - 64 < n ? a.subarray(i - 64) : new Uint8Array(0); 11836 length = a.length; 11837 tail = [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ]; 11838 for (i = 0; i < length; i += 1) { 11839 tail[i >> 2] |= a[i] << (i % 4 << 3); 11840 } 11841 tail[i >> 2] |= 128 << (i % 4 << 3); 11842 if (i > 55) { 11843 md5cycle(state, tail); 11844 for (i = 0; i < 16; i += 1) { 11845 tail[i] = 0; 11846 } 11847 } 11848 tmp = n * 8; 11849 tmp = tmp.toString(16).match(/(.*?)(.{0,8})$/); 11850 lo = parseInt(tmp[2], 16); 11851 hi = parseInt(tmp[1], 16) || 0; 11852 tail[14] = lo; 11853 tail[15] = hi; 11854 md5cycle(state, tail); 11855 return state; 11856 } 11857 function rhex(n) { 11858 var s = "", j; 11859 for (j = 0; j < 4; j += 1) { 11860 s += hex_chr[n >> j * 8 + 4 & 15] + hex_chr[n >> j * 8 & 15]; 11861 } 11862 return s; 11863 } 11864 function hex(x) { 11865 var i; 11866 for (i = 0; i < x.length; i += 1) { 11867 x[i] = rhex(x[i]); 11868 } 11869 return x.join(""); 11870 } 11871 if (hex(md51("hello")) !== "5d41402abc4b2a76b9719d911017c592") ; 11872 if (typeof ArrayBuffer !== "undefined" && !ArrayBuffer.prototype.slice) { 11873 (function() { 11874 function clamp(val, length) { 11875 val = val | 0 || 0; 11876 if (val < 0) { 11877 return Math.max(val + length, 0); 11878 } 11879 return Math.min(val, length); 11880 } 11881 ArrayBuffer.prototype.slice = function(from, to) { 11882 var length = this.byteLength, begin = clamp(from, length), end = length, num, target, targetArray, sourceArray; 11883 if (to !== undefined$1) { 11884 end = clamp(to, length); 11885 } 11886 if (begin > end) { 11887 return new ArrayBuffer(0); 11888 } 11889 num = end - begin; 11890 target = new ArrayBuffer(num); 11891 targetArray = new Uint8Array(target); 11892 sourceArray = new Uint8Array(this, begin, num); 11893 targetArray.set(sourceArray); 11894 return target; 11895 }; 11896 })(); 11897 } 11898 function toUtf8(str) { 11899 if (/[\u0080-\uFFFF]/.test(str)) { 11900 str = unescape(encodeURIComponent(str)); 11901 } 11902 return str; 11903 } 11904 function utf8Str2ArrayBuffer(str, returnUInt8Array) { 11905 var length = str.length, buff = new ArrayBuffer(length), arr = new Uint8Array(buff), i; 11906 for (i = 0; i < length; i += 1) { 11907 arr[i] = str.charCodeAt(i); 11908 } 11909 return returnUInt8Array ? arr : buff; 11910 } 11911 function arrayBuffer2Utf8Str(buff) { 11912 return String.fromCharCode.apply(null, new Uint8Array(buff)); 11913 } 11914 function concatenateArrayBuffers(first, second, returnUInt8Array) { 11915 var result = new Uint8Array(first.byteLength + second.byteLength); 11916 result.set(new Uint8Array(first)); 11917 result.set(new Uint8Array(second), first.byteLength); 11918 return returnUInt8Array ? result : result.buffer; 11919 } 11920 function hexToBinaryString(hex) { 11921 var bytes = [], length = hex.length, x; 11922 for (x = 0; x < length - 1; x += 2) { 11923 bytes.push(parseInt(hex.substr(x, 2), 16)); 11924 } 11925 return String.fromCharCode.apply(String, bytes); 11926 } 11927 function SparkMD5() { 11928 this.reset(); 11929 } 11930 SparkMD5.prototype.append = function(str) { 11931 this.appendBinary(toUtf8(str)); 11932 return this; 11933 }; 11934 SparkMD5.prototype.appendBinary = function(contents) { 11935 this._buff += contents; 11936 this._length += contents.length; 11937 var length = this._buff.length, i; 11938 for (i = 64; i <= length; i += 64) { 11939 md5cycle(this._hash, md5blk(this._buff.substring(i - 64, i))); 11940 } 11941 this._buff = this._buff.substring(i - 64); 11942 return this; 11943 }; 11944 SparkMD5.prototype.end = function(raw) { 11945 var buff = this._buff, length = buff.length, i, tail = [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], ret; 11946 for (i = 0; i < length; i += 1) { 11947 tail[i >> 2] |= buff.charCodeAt(i) << (i % 4 << 3); 11948 } 11949 this._finish(tail, length); 11950 ret = hex(this._hash); 11951 if (raw) { 11952 ret = hexToBinaryString(ret); 11953 } 11954 this.reset(); 11955 return ret; 11956 }; 11957 SparkMD5.prototype.reset = function() { 11958 this._buff = ""; 11959 this._length = 0; 11960 this._hash = [ 1732584193, -271733879, -1732584194, 271733878 ]; 11961 return this; 11962 }; 11963 SparkMD5.prototype.getState = function() { 11964 return { 11965 buff: this._buff, 11966 length: this._length, 11967 hash: this._hash.slice() 11968 }; 11969 }; 11970 SparkMD5.prototype.setState = function(state) { 11971 this._buff = state.buff; 11972 this._length = state.length; 11973 this._hash = state.hash; 11974 return this; 11975 }; 11976 SparkMD5.prototype.destroy = function() { 11977 delete this._hash; 11978 delete this._buff; 11979 delete this._length; 11980 }; 11981 SparkMD5.prototype._finish = function(tail, length) { 11982 var i = length, tmp, lo, hi; 11983 tail[i >> 2] |= 128 << (i % 4 << 3); 11984 if (i > 55) { 11985 md5cycle(this._hash, tail); 11986 for (i = 0; i < 16; i += 1) { 11987 tail[i] = 0; 11988 } 11989 } 11990 tmp = this._length * 8; 11991 tmp = tmp.toString(16).match(/(.*?)(.{0,8})$/); 11992 lo = parseInt(tmp[2], 16); 11993 hi = parseInt(tmp[1], 16) || 0; 11994 tail[14] = lo; 11995 tail[15] = hi; 11996 md5cycle(this._hash, tail); 11997 }; 11998 SparkMD5.hash = function(str, raw) { 11999 return SparkMD5.hashBinary(toUtf8(str), raw); 12000 }; 12001 SparkMD5.hashBinary = function(content, raw) { 12002 var hash = md51(content), ret = hex(hash); 12003 return raw ? hexToBinaryString(ret) : ret; 12004 }; 12005 SparkMD5.ArrayBuffer = function() { 12006 this.reset(); 12007 }; 12008 SparkMD5.ArrayBuffer.prototype.append = function(arr) { 12009 var buff = concatenateArrayBuffers(this._buff.buffer, arr, true), length = buff.length, i; 12010 this._length += arr.byteLength; 12011 for (i = 64; i <= length; i += 64) { 12012 md5cycle(this._hash, md5blk_array(buff.subarray(i - 64, i))); 12013 } 12014 this._buff = i - 64 < length ? new Uint8Array(buff.buffer.slice(i - 64)) : new Uint8Array(0); 12015 return this; 12016 }; 12017 SparkMD5.ArrayBuffer.prototype.end = function(raw) { 12018 var buff = this._buff, length = buff.length, tail = [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], i, ret; 12019 for (i = 0; i < length; i += 1) { 12020 tail[i >> 2] |= buff[i] << (i % 4 << 3); 12021 } 12022 this._finish(tail, length); 12023 ret = hex(this._hash); 12024 if (raw) { 12025 ret = hexToBinaryString(ret); 12026 } 12027 this.reset(); 12028 return ret; 12029 }; 12030 SparkMD5.ArrayBuffer.prototype.reset = function() { 12031 this._buff = new Uint8Array(0); 12032 this._length = 0; 12033 this._hash = [ 1732584193, -271733879, -1732584194, 271733878 ]; 12034 return this; 12035 }; 12036 SparkMD5.ArrayBuffer.prototype.getState = function() { 12037 var state = SparkMD5.prototype.getState.call(this); 12038 state.buff = arrayBuffer2Utf8Str(state.buff); 12039 return state; 12040 }; 12041 SparkMD5.ArrayBuffer.prototype.setState = function(state) { 12042 state.buff = utf8Str2ArrayBuffer(state.buff, true); 12043 return SparkMD5.prototype.setState.call(this, state); 12044 }; 12045 SparkMD5.ArrayBuffer.prototype.destroy = SparkMD5.prototype.destroy; 12046 SparkMD5.ArrayBuffer.prototype._finish = SparkMD5.prototype._finish; 12047 SparkMD5.ArrayBuffer.hash = function(arr, raw) { 12048 var hash = md51_array(new Uint8Array(arr)), ret = hex(hash); 12049 return raw ? hexToBinaryString(ret) : ret; 12050 }; 12051 return SparkMD5; 12052 })); 12053 })(sparkMd5); 12054 var SparkMD5 = sparkMd5.exports; 12055 const fileSlice = File.prototype.slice || File.prototype.mozSlice || File.prototype.webkitSlice; 12056 class FileChecksum { 12057 static create(file, callback) { 12058 const instance = new FileChecksum(file); 12059 instance.create(callback); 12060 } 12061 constructor(file) { 12062 this.file = file; 12063 this.chunkSize = 2097152;
12064 this.chunkCount = Math.ceil(this.file.size / this.chunkSize); 12065 this.chunkIndex = 0; 12066 } 12067 create(callback) { 12068 this.callback = callback; 12069 this.md5Buffer = new SparkMD5.ArrayBuffer; 12070 this.fileReader = new FileReader; 12071 this.fileReader.addEventListener("load", (event => this.fileReaderDidLoad(event))); 12072 this.fileReader.addEventListener("error", (event => this.fileReaderDidError(event))); 12073 this.readNextChunk(); 12074 } 12075 fileReaderDidLoad(event) { 12076 this.md5Buffer.append(event.target.result); 12077 if (!this.readNextChunk()) { 12078 const binaryDigest = this.md5Buffer.end(true); 12079 const base64digest = btoa(binaryDigest); 12080 this.callback(null, base64digest); 12081 } 12082 } 12083 fileReaderDidError(event) { 12084 this.callback(`Error reading ${this.file.name}`); 12085 } 12086 readNextChunk() { 12087 if (this.chunkIndex < this.chunkCount || this.chunkIndex == 0 && this.chunkCount == 0) { 12088 const start = this.chunkIndex * this.chunkSize; 12089 const end = Math.min(start + this.chunkSize, this.file.size); 12090 const bytes = fileSlice.call(this.file, start, end); 12091 this.fileReader.readAsArrayBuffer(bytes); 12092 this.chunkIndex++; 12093 return true; 12094 } else { 12095 return false; 12096 } 12097 } 12098 } 12099 function getMetaValue(name) { 12100 const element = findElement(document.head, `meta[name="${name}"]`); 12101 if (element) { 12102 return element.getAttribute("content"); 12103 } 12104 } 12105 function findElements(root, selector) { 12106 if (typeof root == "string") { 12107 selector = root; 12108 root = document; 12109 } 12110 const elements = root.querySelectorAll(selector); 12111 return toArray(elements); 12112 } 12113 function findElement(root, selector) { 12114 if (typeof root == "string") { 12115 selector = root; 12116 root = document; 12117 } 12118 return root.querySelector(selector); 12119 } 12120 function dispatchEvent(element, type, eventInit = {}) { 12121 const {disabled: disabled} = element;
12122 const {bubbles: bubbles, cancelable: cancelable, detail: detail} = eventInit; 12123 const event = document.createEvent("Event"); 12124 event.initEvent(type, bubbles || true, cancelable || true); 12125 event.detail = detail || {}; 12126 try { 12127 element.disabled = false; 12128 element.dispatchEvent(event); 12129 } finally { 12130 element.disabled = disabled; 12131 } 12132 return event; 12133 } 12134 function toArray(value) { 12135 if (Array.isArray(value)) { 12136 return value; 12137 } else if (Array.from) { 12138 return Array.from(value); 12139 } else { 12140 return [].slice.call(value); 12141 } 12142 } 12143 class BlobRecord { 12144 constructor(file, checksum, url, customHeaders = {}) { 12145 this.file = file; 12146 this.attributes = { 12147 filename: file.name, 12148 content_type: file.type || "application/octet-stream", 12149 byte_size: file.size, 12150 checksum: checksum 12151 }; 12152 this.xhr = new XMLHttpRequest; 12153 this.xhr.open("POST", url, true); 12154 this.xhr.responseType = "json"; 12155 this.xhr.setRequestHeader("Content-Type", "application/json"); 12156 this.xhr.setRequestHeader("Accept", "application/json"); 12157 this.xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest"); 12158 Object.keys(customHeaders).forEach((headerKey => { 12159 this.xhr.setRequestHeader(headerKey, customHeaders[headerKey]); 12160 })); 12161 const csrfToken = getMetaValue("csrf-token"); 12162 if (csrfToken != undefined) { 12163 this.xhr.setRequestHeader("X-CSRF-Token", csrfToken); 12164 } 12165 this.xhr.addEventListener("load", (event => this.requestDidLoad(event))); 12166 this.xhr.addEventListener("error", (event => this.requestDidError(event))); 12167 } 12168 get status() { 12169 return this.xhr.status; 12170 } 12171 get response() { 12172 const {responseType: responseType, response: response} = this.xhr; 12173 if (responseType == "json") { 12174 return response; 12175 } else { 12176 return JSON.parse(response); 12177 } 12178 } 12179 create(callback) { 12180 this.callback = callback; 12181 this.xhr.send(JSON.stringify({ 12182 blob: this.attributes 12183 })); 12184 } 12185 requestDidLoad(event) { 12186 if (this.status >= 200 && this.status < 300) { 12187 const {response: response} = this; 12188 const {direct_upload: direct_upload} = response; 12189 delete response.direct_upload; 12190 this.attributes = response; 12191 this.directUploadData = direct_upload; 12192 this.callback(null, this.toJSON()); 12193 } else { 12194 this.requestDidError(event); 12195 } 12196 } 12197 requestDidError(event) { 12198 this.callback(`Error creating Blob for "${this.file.name}". Status: ${this.status}`); 12199 } 12200 toJSON() { 12201 const result = {}; 12202 for (const key in this.attributes) { 12203 result[key] = this.attributes[key]; 12204 } 12205 return result; 12206 } 12207 } 12208 class BlobUpload { 12209 constructor(blob) { 12210 this.blob = blob; 12211 this.file = blob.file; 12212 const {url: url, headers: headers} = blob.directUploadData; 12213 this.xhr = new XMLHttpRequest; 12214 this.xhr.open("PUT", url, true); 12215 this.xhr.responseType = "text"; 12216 for (const key in headers) { 12217 this.xhr.setRequestHeader(key, headers[key]); 12218 } 12219 this.xhr.addEventListener("load", (event => this.requestDidLoad(event))); 12220 this.xhr.addEventListener("error", (event => this.requestDidError(event))); 12221 } 12222 create(callback) { 12223 this.callback = callback; 12224 this.xhr.send(this.file.slice()); 12225 } 12226 requestDidLoad(event) { 12227 const {status: status, response: response} = this.xhr; 12228 if (status >= 200 && status < 300) { 12229 this.callback(null, response); 12230 } else { 12231 this.requestDidError(event); 12232 } 12233 } 12234 requestDidError(event) { 12235 this.callback(`Error storing "${this.file.name}". Status: ${this.xhr.status}`); 12236 } 12237 } 12238 let id = 0; 12239 class DirectUpload { 12240 constructor(file, url, delegate, customHeaders = {}) { 12241 this.id = ++id; 12242 this.file = file; 12243 this.url = url; 12244 this.delegate = delegate; 12245 this.customHeaders = customHeaders; 12246 } 12247 create(callback) { 12248 FileChecksum.create(this.file, ((error, checksum) => { 12249 if (error) { 12250 callback(error); 12251 return; 12252 } 12253 const blob = new BlobRecord(this.file, checksum, this.url, this.customHeaders); 12254 notify(this.delegate, "directUploadWillCreateBlobWithXHR", blob.xhr); 12255 blob.create((error => { 12256 if (error) { 12257 callback(error); 12258 } else { 12259 const upload = new BlobUpload(blob); 12260 notify(this.delegate, "directUploadWillStoreFileWithXHR", upload.xhr); 12261 upload.create((error => { 12262 if (error) { 12263 callback(error); 12264 } else { 12265 callback(null, blob.toJSON()); 12266 } 12267 })); 12268 } 12269 })); 12270 })); 12271 } 12272 } 12273 function notify(object, methodName, ...messages) { 12274 if (object && typeof object[methodName] == "function") { 12275 return object[methodName](...messages); 12276 } 12277 } 12278 class DirectUploadController { 12279 constructor(input, file) { 12280 this.input = input; 12281 this.file = file; 12282 this.directUpload = new DirectUpload(this.file, this.url, this); 12283 this.dispatch("initialize"); 12284 } 12285 start(callback) { 12286 const hiddenInput = document.createElement("input"); 12287 hiddenInput.type = "hidden"; 12288 hiddenInput.name = this.input.name; 12289 this.input.insertAdjacentElement("beforebegin", hiddenInput); 12290 this.dispatch("start"); 12291 this.directUpload.create(((error, attributes) => { 12292 if (error) { 12293 hiddenInput.parentNode.removeChild(hiddenInput); 12294 this.dispatchError(error); 12295 } else { 12296 hiddenInput.value = attributes.signed_id; 12297 } 12298 this.dispatch("end"); 12299 callback(error); 12300 })); 12301 } 12302 uploadRequestDidProgress(event) { 12303 const progress = event.loaded / event.total * 100; 12304 if (progress) { 12305 this.dispatch("progress", { 12306 progress: progress 12307 }); 12308 } 12309 } 12310 get url() { 12311 return this.input.getAttribute("data-direct-upload-url"); 12312 } 12313 dispatch(name, detail = {}) { 12314 detail.file = this.file; 12315 detail.id = this.directUpload.id;
12316 return dispatchEvent(this.input, `direct-upload:${name}`, { 12317 detail: detail 12318 }); 12319 } 12320 dispatchError(error) { 12321 const event = this.dispatch("error", { 12322 error: error 12323 }); 12324 if (!event.defaultPrevented) { 12325 alert(error); 12326 } 12327 } 12328 directUploadWillCreateBlobWithXHR(xhr) { 12329 this.dispatch("before-blob-request", { 12330 xhr: xhr 12331 }); 12332 } 12333 directUploadWillStoreFileWithXHR(xhr) { 12334 this.dispatch("before-storage-request", { 12335 xhr: xhr 12336 }); 12337 xhr.upload.addEventListener("progress", (event => this.uploadRequestDidProgress(event))); 12338 } 12339 } 12340 const inputSelector = "input[type=file][data-direct-upload-url]:not([disabled])"; 12341 class DirectUploadsController { 12342 constructor(form) { 12343 this.form = form; 12344 this.inputs = findElements(form, inputSelector).filter((input => input.files.length)); 12345 } 12346 start(callback) { 12347 const controllers = this.createDirectUploadControllers(); 12348 const startNextController = () => { 12349 const controller = controllers.shift(); 12350 if (controller) { 12351 controller.start((error => { 12352 if (error) { 12353 callback(error); 12354 this.dispatch("end"); 12355 } else { 12356 startNextController(); 12357 } 12358 })); 12359 } else { 12360 callback(); 12361 this.dispatch("end"); 12362 } 12363 }; 12364 this.dispatch("start"); 12365 startNextController(); 12366 } 12367 createDirectUploadControllers() { 12368 const controllers = []; 12369 this.inputs.forEach((input => { 12370 toArray(input.files).forEach((file => { 12371 const controller = new DirectUploadController(input, file); 12372 controllers.push(controller); 12373 })); 12374 })); 12375 return controllers; 12376 } 12377 dispatch(name, detail = {}) { 12378 return dispatchEvent(this.form, `direct-uploads:${name}`, { 12379 detail: detail 12380 }); 12381 } 12382 } 12383 const processingAttribute = "data-direct-uploads-processing"; 12384 const submitButtonsByForm = new WeakMap; 12385 let started = false; 12386 function start() { 12387 if (!started) { 12388 started = true; 12389 document.addEventListener("click", didClick, true); 12390 document.addEventListener("submit", didSubmitForm, true); 12391 document.addEventListener("ajax:before", didSubmitRemoteElement); 12392 } 12393 } 12394 function didClick(event) { 12395 const button = event.target.closest("button, input"); 12396 if (button && button.type === "submit" && button.form) { 12397 submitButtonsByForm.set(button.form, button); 12398 } 12399 } 12400 function didSubmitForm(event) { 12401 handleFormSubmissionEvent(event); 12402 } 12403 function didSubmitRemoteElement(event) { 12404 if (event.target.tagName == "FORM") { 12405 handleFormSubmissionEvent(event); 12406 } 12407 } 12408 function handleFormSubmissionEvent(event) { 12409 const form = event.target; 12410 if (form.hasAttribute(processingAttribute)) { 12411 event.preventDefault(); 12412 return; 12413 } 12414 const controller = new DirectUploadsController(form); 12415 const {inputs: inputs} = controller; 12416 if (inputs.length) { 12417 event.preventDefault(); 12418 form.setAttribute(processingAttribute, ""); 12419 inputs.forEach(disable); 12420 controller.start((error => { 12421 form.removeAttribute(processingAttribute); 12422 if (error) { 12423 inputs.forEach(enable); 12424 } else { 12425 submitForm(form); 12426 } 12427 })); 12428 } 12429 } 12430 function submitForm(form) { 12431 let button = submitButtonsByForm.get(form) || findElement(form, "input[type=submit], button[type=submit]"); 12432 if (button) { 12433 const {disabled: disabled} = button; 12434 button.disabled = false; 12435 button.focus(); 12436 button.click(); 12437 button.disabled = disabled; 12438 } else { 12439 button = document.createElement("input"); 12440 button.type = "submit"; 12441 button.style.display = "none"; 12442 form.appendChild(button); 12443 button.click(); 12444 form.removeChild(button); 12445 } 12446 submitButtonsByForm.delete(form); 12447 } 12448 function disable(input) { 12449 input.disabled = true; 12450 } 12451 function enable(input) { 12452 input.disabled = false; 12453 } 12454 function autostart() { 12455 if (window.ActiveStorage) { 12456 start(); 12457 } 12458 } 12459 setTimeout(autostart, 1); 12460 exports.DirectUpload = DirectUpload; 12461 exports.DirectUploadController = DirectUploadController; 12462 exports.DirectUploadsController = DirectUploadsController; 12463 exports.start = start; 12464 Object.defineProperty(exports, "__esModule", { 12465 value: true 12466 }); 12467})); 12468/*! algoliasearch 3.35.1 | © 2014, 2015 Algolia SAS | github.com/algolia/algoliasearch-client-js */ 12469!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var t;t="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,t.algoliasearch=e()}}(function(){var e;return function t(e,r,o){function n(a,s){if(!r[a]){if(!e[a]){var u="function"==typeof require&&require;if(!s&&u)return u(a,!0);if(i)return i(a,!0);var c=new Error("Cannot find module '"+a+"'");throw c.code="MODULE_NOT_FOUND",c}var l=r[a]={exports:{}};e[a][0].call(l.exports,function(t){var r=e[a][1][t];return n(r?r:t)},l,l.exports,t,e,r,o)}return r[a].exports}for(var i="function"==typeof require&&require,a=0;a<o.length;a++)n(o[a]);return n}({1:[function(e,t,r){(function(o){function n(){return!("undefined"==typeof window||!window.process||"renderer"!==window.process.type)||("undefined"!=typeof document&&document.documentElement&&document.documentElement.style&&document.documentElement.style.WebkitAppearance||"undefined"!=typeof window&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||"undefined"!=typeof navigator&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/)&&parseInt(RegExp.$1,10)>=31||"undefined"!=typeof navigator&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/))}function i(e){var t=this.useColors;if(e[0]=(t?"%c":"")+this.namespace+(t?" %c":" ")+e[0]+(t?"%c ":" ")+"+"+r.humanize(this.diff),t){var o="color: "+this.color;e.splice(1,0,o,"color: inherit");var n=0,i=0;e[0].replace(/%[a-zA-Z%]/g,function(e){"%%"!==e&&(n++,"%c"===e&&(i=n))}),e.splice(i,0,o)}}function a(){return"object"==typeof console&&console.log&&Function.prototype.apply.call(console.log,console,arguments)}
12469function s(e){try{null==e?r.storage.removeItem("debug"):r.storage.debug=e}catch(t){}}function u(){var e;try{e=r.storage.debug}catch(t){}return!e&&"undefined"!=typeof o&&"env"in o&&(e=o.env.DEBUG),e}function c(){try{return window.localStorage}catch(e){}}r=t.exports=e(2),r.log=a,r.formatArgs=i,r.save=s,r.load=u,r.useColors=n,r.storage="undefined"!=typeof chrome&&"undefined"!=typeof chrome.storage?chrome.storage.local:c(),r.colors=["lightseagreen","forestgreen","goldenrod","dodgerblue","darkorchid","crimson"],r.formatters.j=function(e){try{return JSON.stringify(e)}catch(t){return"[UnexpectedJSONParseError]: "+t.message}},r.enable(u())}).call(this,e(11))},{11:11,2:2}],2:[function(e,t,r){function o(e){var t,o=0;for(t in e)o=(o<<5)-o+e.charCodeAt(t),o|=0;return r.colors[Math.abs(o)%r.colors.length]}function n(e){function t(){if(t.enabled){var e=t,o=+new Date,n=o-(c||o);e.diff=n,e.prev=c,e.curr=o,c=o;for(var i=new Array(arguments.length),a=0;a<i.length;a++)i[a]=arguments[a];i[0]=r.coerce(i[0]),"string"!=typeof i[0]&&i.unshift("%O");var s=0;i[0]=i[0].replace(/%([a-zA-Z%])/g,function(t,o){if("%%"===t)return t;s++;var n=r.formatters[o];if("function"==typeof n){var a=i[s];t=n.call(e,a),i.splice(s,1),s--}return t}),r.formatArgs.call(e,i);var u=t.log||r.log||console.log.bind(console);u.apply(e,i)}}return t.namespace=e,t.enabled=r.enabled(e),t.useColors=r.useColors(),t.color=o(e),"function"==typeof r.init&&r.init(t),t}function i(e){r.save(e),r.names=[],r.skips=[];for(var t=("string"==typeof e?e:"").split(/[\s,]+/),o=t.length,n=0;n<o;n++)t[n]&&(e=t[n].replace(/\*/g,".*?"),"-"===e[0]?r.skips.push(new RegExp("^"+e.substr(1)+"$")):r.names.push(new RegExp("^"+e+"$")))}function a(){r.enable("")}function s(e){var t,o;for(t=0,o=r.skips.length;t<o;t++)if(r.skips[t].test(e))return!1;for(t=0,o=r.names.length;t<o;t++)if(r.names[t].test(e))return!0;return!1}function u(e){return e instanceof Error?e.stack||e.message:e}r=t.exports=n.debug=n["default"]=n,r.coerce=u,r.disable=a,r.enable=i,r.enabled=s,r.humanize=e(8),r.names=[],r.skips=[],r.formatters={};var c},{8:8}],3:[function(t,r,o){(function(n,i){!function(t,n){"object"==typeof o&&"undefined"!=typeof r?r.exports=n():"function"==typeof e&&e.amd?e(n):t.ES6Promise=n()}(this,function(){"use strict";function e(e){var t=typeof e;return null!==e&&("object"===t||"function"===t)}function r(e){return"function"==typeof e}function o(e){Q=e}function a(e){Y=e}function s(){return function(){return n.nextTick(f)}}function u(){return"undefined"!=typeof G?function(){G(f)}:p()}function c(){var e=0,t=new Z(f),r=document.createTextNode("");return t.observe(r,{characterData:!0}),function(){r.data=e=++e%2}}function l(){var e=new MessageChannel;return e.port1.onmessage=f,function(){return e.port2.postMessage(0)}}function p(){var e=setTimeout;return function(){return e(f,1)}}function f(){for(var e=0;e<V;e+=2){var t=re[e],r=re[e+1];t(r),re[e]=void 0,re[e+1]=void 0}V=0}function d(){try{var e=t,r=e("vertx");return G=r.runOnLoop||r.runOnContext,u()}catch(o){return p()}}function h(e,t){var r=arguments,o=this,n=new this.constructor(m);void 0===n[ne]&&U(n);var i=o._state;return i?!function(){var e=r[i-1];Y(function(){return q(i,n,e,o._result)})}():k(o,n,e,t),n}function y(e){var t=this;if(e&&"object"==typeof e&&e.constructor===t)return e;var r=new t(m);return S(r,e),r}function m(){}function g(){return new TypeError("You cannot resolve a promise with itself")}function v(){return new TypeError("A promises callback cannot return that same promise.")}function b(e){try{return e.then}catch(t){return ue.error=t,ue}}function w(e,t,r,o){try{e.call(t,r,o)}catch(n){return n}}function _(e,t,r){Y(function(e){var o=!1,n=w(r,t,function(r){o||(o=!0,t!==r?S(e,r):j(e,r))},function(t){o||(o=!0,O(e,t))},"Settle: "+(e._label||" unknown promise"));!o&&n&&(o=!0,O(e,n))},e)}function x(e,t){t._state===ae?j(e,t._result):t._state===se?O(e,t._result):k(t,void 0,function(t){return S(e,t)},function(t){return O(e,t)})}function T(e,t,o){t.constructor===e.constructor&&o===h&&t.constructor.resolve===y?x(e,t):o===ue?(O(e,ue.error),ue.error=null):void 0===o?j(e,t):r(o)?_(e,t,o):j(e,t)}
vendor: 2,008 bytes, line 12469
12469function S(t,r){t===r?O(t,g()):e(r)?T(t,r,b(r)):j(t,r)}function A(e){e._onerror&&e._onerror(e._result),R(e)}function j(e,t){e._state===ie&&(e._result=t,e._state=ae,0!==e._subscribers.length&&Y(R,e))}function O(e,t){e._state===ie&&(e._state=se,e._result=t,Y(A,e))}function k(e,t,r,o){var n=e._subscribers,i=n.length;e._onerror=null,n[i]=t,n[i+ae]=r,n[i+se]=o,0===i&&e._state&&Y(R,e)}function R(e){var t=e._subscribers,r=e._state;if(0!==t.length){for(var o=void 0,n=void 0,i=e._result,a=0;a<t.length;a+=3)o=t[a],n=t[a+r],o?q(r,o,n,i):n(i);e._subscribers.length=0}}function C(){this.error=null}function I(e,t){try{return e(t)}catch(r){return ce.error=r,ce}}function q(e,t,o,n){var i=r(o),a=void 0,s=void 0,u=void 0,c=void 0;if(i){if(a=I(o,n),a===ce?(c=!0,s=a.error,a.error=null):u=!0,t===a)return void O(t,v())}else a=n,u=!0;t._state!==ie||(i&&u?S(t,a):c?O(t,s):e===ae?j(t,a):e===se&&O(t,a))}function N(e,t){try{t(function(t){S(e,t)},function(t){O(e,t)})}catch(r){O(e,r)}}function E(){return le++}function U(e){e[ne]=le++,e._state=void 0,e._result=void 0,e._subscribers=[]}function P(e,t){this._instanceConstructor=e,this.promise=new e(m),this.promise[ne]||U(this.promise),X(t)?(this.length=t.length,this._remaining=t.length,this._result=new Array(this.length),0===this.length?j(this.promise,this._result):(this.length=this.length||0,this._enumerate(t),0===this._remaining&&j(this.promise,this._result))):O(this.promise,D())}function D(){return new Error("Array Methods must be provided an Array")}function H(e){return new P(this,e).promise}function F(e){var t=this;return new t(X(e)?function(r,o){for(var n=e.length,i=0;i<n;i++)t.resolve(e[i]).then(r,o)}:function(e,t){return t(new TypeError("You must pass an array to race."))})}function J(e){var t=this,r=new t(m);return O(r,e),r}function M(){throw new TypeError("You must pass a resolver function as the first argument to the promise constructor")}function $(){throw new TypeError("Failed to construct 'Promise': Please use the 'new' operator, this object c
12469onstructor cannot be called as a function.")}function L(e){this[ne]=E(),this._result=this._state=void 0,this._subscribers=[],m!==e&&("function"!=typeof e&&M(),this instanceof L?N(this,e):$())}function B(){var e=void 0;if("undefined"!=typeof i)e=i;else if("undefined"!=typeof self)e=self;else try{e=Function("return this")()}catch(t){throw new Error("polyfill failed because global object is unavailable in this environment")}var r=e.Promise;if(r){var o=null;try{o=Object.prototype.toString.call(r.resolve())}catch(t){}if("[object Promise]"===o&&!r.cast)return}e.Promise=L}var K=void 0;K=Array.isArray?Array.isArray:function(e){return"[object Array]"===Object.prototype.toString.call(e)};var X=K,V=0,G=void 0,Q=void 0,Y=function(e,t){re[V]=e,re[V+1]=t,V+=2,2===V&&(Q?Q(f):oe())},z="undefined"!=typeof window?window:void 0,W=z||{},Z=W.MutationObserver||W.WebKitMutationObserver,ee="undefined"==typeof self&&"undefined"!=typeof n&&"[object process]"==={}.toString.call(n),te="undefined"!=typeof Uint8ClampedArray&&"undefined"!=typeof importScripts&&"undefined"!=typeof MessageChannel,re=new Array(1e3),oe=void 0;oe=ee?s():Z?c():te?l():void 0===z&&"function"==typeof t?d():p();var ne=Math.random().toString(36).substring(16),ie=void 0,ae=1,se=2,ue=new C,ce=new C,le=0;return P.prototype._enumerate=function(e){for(var t=0;this._state===ie&&t<e.length;t++)this._eachEntry(e[t],t)},P.prototype._eachEntry=function(e,t){var r=this._instanceConstructor,o=r.resolve;if(o===y){var n=b(e);if(n===h&&e._state!==ie)this._settledAt(e._state,t,e._result);else if("function"!=typeof n)this._remaining--,this._result[t]=e;else if(r===L){var i=new r(m);T(i,e,n),this._willSettleAt(i,t)}else this._willSettleAt(new r(function(t){return t(e)}),t)}else this._willSettleAt(o(e),t)},P.prototype._settledAt=function(e,t,r){var o=this.promise;o._state===ie&&(this._remaining--,e===se?O(o,r):this._result[t]=r),0===this._remaining&&j(o,this._result)},P.prototype._willSettleAt=function(e,t){var r=this;k(e,void 0,function(e){return r._settledAt(ae,t,e)},function(e){return r._settledAt(se,t,e)})},L.all=H,L.race=F,L.resolve=y,L.reject=J,L._setScheduler=o,L._setAsap=a,L._asap=Y,L.prototype={constructor:L,then:h,"catch":function(e){return this.then(null,e)}},L.polyfill=B,L.Promise=L,L})}).call(this,t(11),"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{11:11}],4:[function(e,t,r){var o=Object.prototype.hasOwnProperty,n=Object.prototype.toString;t.exports=function(e,t,r){if("[object Function]"!==n.call(t))throw new TypeError("iterator must be a function");var i=e.length;if(i===+i)for(var a=0;a<i;a++)t.call(r,e[a],a,e);else for(var s in e)o.call(e,s)&&t.call(r,e[s],s,e)}},{}],5:[function(e,t,r){(function(e){var r;r="undefined"!=typeof window?window:"undefined"!=typeof e?e:"undefined"!=typeof self?self:{},t.exports=r}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],6:[function(e,t,r){"function"==typeof Object.create?t.exports=function(e,t){e.super_=t,e.prototype=Object.create(t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}})}:t.exports=function(e,t){e.super_=t;var r=function(){};r.prototype=t.prototype,e.prototype=new r,e.prototype.constructor=e}},{}],7:[function(e,t,r){var o={}.toString;t.exports=Array.isArray||function(e){return"[object Array]"==o.call(e)}},{}],8:[function(e,t,r){function o(e){if(e=String(e),!(e.length>100)){var t=/^((?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|years?|yrs?|y)?$/i.exec(e);if(t){var r=parseFloat(t[1]),o=(t[2]||"ms").toLowerCase();switch(o){case"years":case"year":case"yrs":case"yr":case"y":return r*p;case"days":case"day":case"d":return r*l;case"hours":case"hour":case"hrs":case"hr":case"h":return r*c;case"minutes":case"minute":case"mins":case"min":case"m":return r*u;case"seconds":case"second":case"secs":case"sec":case"s":return r*s;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return r;default:return}}}}function n(e){return e>=l?Math.round(e/l)+"d":e>=c?Math.round(e/c)+"h":e>=u?Math.round(e/u)+"m":e>=s?Math.round(e/s)+"s":e+"ms"}function i(e){return a(e,l,"day")||a(e,c,"hour")||a(e,u,"minute")||a(e,s,"second")||e+" ms"}function a(e,t,r){if(!(e<t))return e<1.5*t?Math.floor(e/t)+" "+r:Math.ceil(e/t)+" "+r+"s"}
12469var s=1e3,u=60*s,c=60*u,l=24*c,p=365.25*l;t.exports=function(e,t){t=t||{};var r=typeof e;if("string"===r&&e.length>0)return o(e);if("number"===r&&isNaN(e)===!1)return t["long"]?i(e):n(e);throw new Error("val is not a non-empty string or a valid number. val="+JSON.stringify(e))}},{}],9:[function(e,t,r){"use strict";var o=Object.prototype.hasOwnProperty,n=Object.prototype.toString,i=Array.prototype.slice,a=e(10),s=Object.prototype.propertyIsEnumerable,u=!s.call({toString:null},"toString"),c=s.call(function(){},"prototype"),l=["toString","toLocaleString","valueOf","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","constructor"],p=function(e){var t=e.constructor;return t&&t.prototype===e},f={$console:!0,$external:!0,$frame:!0,$frameElement:!0,$frames:!0,$innerHeight:!0,$innerWidth:!0,$outerHeight:!0,$outerWidth:!0,$pageXOffset:!0,$pageYOffset:!0,$parent:!0,$scrollLeft:!0,$scrollTop:!0,$scrollX:!0,$scrollY:!0,$self:!0,$webkitIndexedDB:!0,$webkitStorageInfo:!0,$window:!0},d=function(){if("undefined"==typeof window)return!1;for(var e in window)try{if(!f["$"+e]&&o.call(window,e)&&null!==window[e]&&"object"==typeof window[e])try{p(window[e])}catch(t){return!0}}catch(t){return!0}return!1}(),h=function(e){if("undefined"==typeof window||!d)return p(e);try{return p(e)}catch(t){return!1}},y=function(e){var t=null!==e&&"object"==typeof e,r="[object Function]"===n.call(e),i=a(e),s=t&&"[object String]"===n.call(e),p=[];if(!t&&!r&&!i)throw new TypeError("Object.keys called on a non-object");var f=c&&r;if(s&&e.length>0&&!o.call(e,0))for(var d=0;d<e.length;++d)p.push(String(d));if(i&&e.length>0)for(var y=0;y<e.length;++y)p.push(String(y));else for(var m in e)f&&"prototype"===m||!o.call(e,m)||p.push(String(m));if(u)for(var g=h(e),v=0;v<l.length;++v)g&&"constructor"===l[v]||!o.call(e,l[v])||p.push(l[v]);return p};y.shim=function(){if(Object.keys){var e=function(){return 2===(Object.keys(arguments)||"").length}(1,2);if(!e){var t=Object.keys;Object.keys=function(e){return t(a(e)?i.call(e):e)}}}else Object.keys=y;return Object.keys||y},t.exports=y},{10:10}],10:[function(e,t,r){"use strict";var o=Object.prototype.toString;t.exports=function(e){var t=o.call(e),r="[object Arguments]"===t;return r||(r="[object Array]"!==t&&null!==e&&"object"==typeof e&&"number"==typeof e.length&&e.length>=0&&"[object Function]"===o.call(e.callee)),r}},{}],11:[function(e,t,r){function o(){throw new Error("setTimeout has not been defined")}function n(){throw new Error("clearTimeout has not been defined")}function i(e){if(p===setTimeout)return setTimeout(e,0);if((p===o||!p)&&setTimeout)return p=setTimeout,setTimeout(e,0);try{return p(e,0)}catch(t){try{return p.call(null,e,0)}catch(t){return p.call(this,e,0)}}}function a(e){if(f===clearTimeout)return clearTimeout(e);if((f===n||!f)&&clearTimeout)return f=clearTimeout,clearTimeout(e);try{return f(e)}catch(t){try{return f.call(null,e)}catch(t){return f.call(this,e)}}}function s(){m&&h&&(m=!1,h.length?y=h.concat(y):g=-1,y.length&&u())}function u(){if(!m){var e=i(s);m=!0;for(var t=y.length;t;){for(h=y,y=[];++g<t;)h&&h[g].run();g=-1,t=y.length}h=null,m=!1,a(e)}}function c(e,t){this.fun=e,this.array=t}function l(){}var p,f,d=t.exports={};!function(){try{p="function"==typeof setTimeout?setTimeout:o}catch(e){p=o}try{f="function"==typeof clearTimeout?clearTimeout:n}catch(e){f=n}}();var h,y=[],m=!1,g=-1;d.nextTick=function(e){var t=new Array(arguments.length-1);if(arguments.length>1)for(var r=1;r<arguments.length;r++)t[r-1]=arguments[r];y.push(new c(e,t)),1!==y.length||m||i(u)},c.prototype.run=function(){this.fun.apply(null,this.array)},d.title="browser",d.browser=!0,d.env={},d.argv=[],d.version="",d.versions={},d.on=l,d.addListener=l,d.once=l,d.off=l,d.removeListener=l,d.removeAllListeners=l,d.emit=l,d.binding=function(e){throw new Error("process.binding is not supported")},d.cwd=function(){return"/"},d.chdir=function(e){throw new Error("process.chdir is not supported")},d.umask=function(){return 0}},{}],12:[function(e,t,r){"use strict";function o(e,t){return Object.prototype.hasOwnProperty.call(e,t)}t.exports=function(e,t,r,i){t=t||"&",r=r||"=";var a={};if("string"!=typeof e||0===e.length)return a;var s=/\+/g;e=e.split(t);var u=1e3;i&&"number"==typeof i.maxKeys&&(u=i.maxKeys);var c=e.length;u>0&&c>u&&(c=u);for(var l=0;l<c;++l){var p,f,d,h,y=e[l].replace(s,"%20"),m=y.indexOf(r);m>=0?(p=y.substr(0,m),f=y.substr(m+1)):(p=y,f=""),d=decodeURIComponent(p),h=decodeURIComponent(f),o(a,d)?n(a[d])?a[d].push(h):a[d]=[a[d],h]:a[d]=h}return a};var n=Array.isArray||function(e){return"[object Array]"===Object.prototype.toString.call(e)}},{}],13:[function(e,t,r){"use strict";function o(e,t){if(e.map)return e.map(t);for(var r=[],o=0;o<e.length;o++)r.push(t(e[o],o));return r}var n=function(e){switch(typeof e){case"string":return e;case"boolean":return e?"true":"false";case"number":return isFinite(e)?e:"";default:return""}};t.exports=function(e,t,r,s){return t=t||"&",r=r||"=",null===e&&(e=void 0),"object"==typeof e?o(a(e),function(a){var s=encodeURIComponent(n(a))+r;return i(e[a])?o(e[a],function(e){return s+encodeURIComponent(n(e))}).join(t):s+encodeURIComponent(n(e[a]))}).join(t):s?encodeURIComponent(n(s))+r+encodeURIComponent(n(e)):""};var i=Array.isArray||function(e){return"[object Array]"===Object.prototype.toString.call(e)},a=Object.keys||function(e){var t=[];for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.push(r);return t}},{}],14:[function(e,t,r){"use strict";r.decode=r.parse=e(12),r.encode=r.stringify=e(13)},{12:12,13:13}],15:[function(e,t,r){(function(r){function o(t,r,o){var i=e(1)("algoliasearch"),a=e(22),s=e(7),c=e(27),l="Usage: algoliasearch(applicationID, apiKey, opts)";if(o._allowEmptyCredentials!==!0&&!t)throw new u.AlgoliaSearchError("Please provide an application ID. "+l);if(o._allowEmptyCredentials!==!0&&!r)throw new u.AlgoliaSearchError("Please provide an API key. "+l);this.applicationID=t,this.apiKey=r,this.hosts={read:[],write:[]},o=o||{},this._timeouts=o.timeouts||{connect:1e3,read:2e3,write:3e4},o.timeout&&(this._timeouts.connect=this._timeouts.read=this._timeouts.write=o.timeout);var p=o.protocol||"https:";if(/:$/.test(p)||(p+=":"),"http:"!==p&&"https:"!==p)throw new u.AlgoliaSearchError("protocol must be `http:` or `https:`
12469(was `"+o.protocol+"`)");if(this._checkAppIdData(),o.hosts)s(o.hosts)?(this.hosts.read=a(o.hosts),this.hosts.write=a(o.hosts)):(this.hosts.read=a(o.hosts.read),this.hosts.write=a(o.hosts.write));else{var f=c(this._shuffleResult,function(e){return t+"-"+e+".algolianet.com"}),d=(o.dsn===!1?"":"-dsn")+".algolia.net";this.hosts.read=[this.applicationID+d].concat(f),this.hosts.write=[this.applicationID+".algolia.net"].concat(f)}this.hosts.read=c(this.hosts.read,n(p)),this.hosts.write=c(this.hosts.write,n(p)),this.extraHeaders={},this.cache=o._cache||{},this._ua=o._ua,this._useCache=!(void 0!==o._useCache&&!o._cache)||o._useCache,this._useRequestCache=this._useCache&&o._useRequestCache,this._useFallback=void 0===o.useFallback||o.useFallback,this._setTimeout=o._setTimeout,i("init done, %j",this)}function n(e){return function(t){return e+"//"+t.toLowerCase()}}function i(e){if(void 0===Array.prototype.toJSON)return JSON.stringify(e);var t=Array.prototype.toJSON;delete Array.prototype.toJSON;var r=JSON.stringify(e);return Array.prototype.toJSON=t,r}function a(e){for(var t,r,o=e.length;0!==o;)r=Math.floor(Math.random()*o),o-=1,t=e[o],e[o]=e[r],e[r]=t;return e}function s(e){var t={};for(var r in e)if(Object.prototype.hasOwnProperty.call(e,r)){var o;o="x-algolia-api-key"===r||"x-algolia-application-id"===r?"**hidden for security purposes**":e[r],t[r]=o}return t}t.exports=o;var u=e(25),c=e(26),l=e(16),p=e(31),f=500,d=r.env.RESET_APP_DATA_TIMER&&parseInt(r.env.RESET_APP_DATA_TIMER,10)||12e4;o.prototype.initIndex=function(e){return new l(this,e)},o.prototype.setExtraHeader=function(e,t){this.extraHeaders[e.toLowerCase()]=t},o.prototype.getExtraHeader=function(e){return this.extraHeaders[e.toLowerCase()]},o.prototype.unsetExtraHeader=function(e){delete this.extraHeaders[e.toLowerCase()]},o.prototype.addAlgoliaAgent=function(e){var t="; "+e;this._ua.indexOf(t)===-1&&(this._ua+=t)},o.prototype._jsonRequest=function(t){function r(e,n){function c(e){var t=e&&e.body&&e.body.message&&e.body.status||e.statusCode||e&&e.body&&200;d("received response: statusCode: %s, computed statusCode: %d, headers: %j",e.statusCode,t,e.headers);var r=2===Math.floor(t/100),o=new Date;if(w.push({currentHost:A,headers:s(p),content:a||null,contentLength:void 0!==a?a.length:null,method:n.method,timeouts:n.timeouts,url:n.url,startTime:T,endTime:o,duration:o-T,statusCode:t}),r)return m._useCache&&!m._useRequestCache&&y&&(y[l]=e.responseText),{responseText:e.responseText,body:e.body};var i=4!==Math.floor(t/100);if(i)return g+=1,_();d("unrecoverable error");var c=new u.AlgoliaSearchError(e.body&&e.body.message,{debugData:w,statusCode:t});return m._promise.reject(c)}function f(e){d("error: %s, stack: %s",e.message,e.stack);var r=new Date;return w.push({currentHost:A,headers:s(p),content:a||null,contentLength:void 0!==a?a.length:null,method:n.method,timeouts:n.timeouts,url:n.url,startTime:T,endTime:r,duration:r-T}),e instanceof u.AlgoliaSearchError||(e=new u.Unknown(e&&e.message,e)),g+=1,e instanceof u.Unknown||e instanceof u.UnparsableJSON||g>=m.hosts[t.hostType].length&&(v||!b)?(e.debugData=w,m._promise.reject(e)):e instanceof u.RequestTimeout?x():_()}function _(){return d("retrying request"),m._incrementHostIndex(t.hostType),r(e,n)}function x(){return d("retrying request with higher timeout"),m._incrementHostIndex(t.hostType),m._incrementTimeoutMultipler(),n.timeouts=m._getTimeoutsForRequest(t.hostType),r(e,n)}m._checkAppIdData();var T=new Date;if(m._useCache&&!m._useRequestCache&&(l=t.url),m._useCache&&!m._useRequestCache&&a&&(l+="_body_"+n.body),o(!m._useRequestCache,y,l)){d("serving response from cache");var S=y[l];return m._promise.resolve({body:JSON.parse(S),responseText:S})}if(g>=m.hosts[t.hostType].length)return!b||v?(d("could not get any response"),m._promise.reject(new u.AlgoliaSearchError("Cannot connect to the AlgoliaSearch API. Send an email to [email protected] to report and resolve the issue. Application id was: "+m.applicationID,{debugData:w}))):(d("switching to fallback"),g=0,n.method=t.fallback.method,n.url=t.fallback.url,n.jsonBody=t.fallback.body,n.jsonBody&&(n.body=i(n.jsonBody)),p=m._computeRequestHeaders({additionalUA:h,headers:t.headers}),n.timeouts=m._getTimeoutsForRequest(t.hostType),m._setHostIndexByType(0,t.hostType),v=!0,r(m._request.fallback,n));var A=m._getHostByType(t.hostType),j=A+n.url,O={body:n.body,jsonBody:n.jsonBody,method:n.method,headers:p,timeouts:n.timeouts,debug:d,forceAuthHeaders:n.forceAuthHeaders};return d("method: %s, url: %s, headers: %j, timeouts: %d",O.method,j,O.headers,O.timeouts),e===m._request.fallback&&d("using fallback"),e.call(m,j,O).then(c,f)}function o(e,t,r){return m._useCache&&e&&t&&void 0!==t[r]}function n(e,r){return o(m._useRequestCache,y,l)&&e["catch"](function(){delete y[l]}),"function"!=typeof t.callback?e.then(r):void e.then(function(e){c(function(){t.callback(null,r(e))},m._setTimeout||setTimeout)},function(e){c(function(){t.callback(e)},m._setTimeout||setTimeout)})}this._checkAppIdData();var a,l,p,d=e(1)("algoliasearch:"+t.url),h=t.additionalUA||"",y=t.cache,m=this,g=0,v=!1,b=m._useFallback&&m._request.fallback&&t.fallback;this.apiKey.length>f&&void 0!==t.body&&(void 0!==t.body.params||void 0!==t.body.requests)?(t.body.apiKey=this.apiKey,p=this._computeRequestHeaders({additionalUA:h,withApiKey:!1,headers:t.headers})):p=this._computeRequestHeaders({additionalUA:h,headers:t.headers}),void 0!==t.body&&(a=i(t.body)),d("request start");var w=[];if(m._useCache&&m._useRequestCache&&(l=t.url),m._useCache&&m._useRequestCache&&a&&(l+="_body_"+a),o(m._useRequestCache,y,l)){d("serving request from cache");var _=y[l],x="function"!=typeof _.then?m._promise.resolve({responseText:_}):_;return n(x,function(e){return JSON.parse(e.responseText)})}var T=r(m._request,{url:t.url,method:t.method,body:a,jsonBody:t.body,timeouts:m._getTimeoutsForRequest(t.hostType),forceAuthHeaders:t.forceAuthHeaders});return m._useCache&&m._useRequestCache&&y&&(y[l]=T),n(T,function(e){return e.body})},o.prototype._getSearchParams=function(e,t){if(void 0===e||null===e)return t;for(var r in e)null!==r&&void 0!==e[r]&&e.hasOwnProperty(r)&&(t+=""===t?"":"&",t+=r+"="+encodeURIComponent("[object Array]"===Object.prototype.toString.call(e[r])?i(e[r]):e[r]));return t},o.prototype._computeRequestHeaders=function(t){var r=e(4),o=t.additionalUA?this._ua+"; "+t.additionalUA:this._ua,n={"x-algolia-agent":o,"x-algolia-application-id":this.applicationID};return t.withApiKey!==!1&&(n["x-algolia-api-key"]=this.apiKey),this.userToken&&(n["x-algolia-usertoken"]=this.userToken),this.securityTags&&(n["x-algolia-tagfilters"]=this.securityTags),r(this.extraHeaders,function(e,t){n[t]=e}),t.headers&&r(t.headers,function(e,t){n[t]=e}),n},o.prototype.search=function(t,r,o){var n=e(7),i=e(27),a="Usage: client.search(arrayOfQueries[, callback])";if(!n(t))throw new Error(a);"function"==typeof r?(o=r,r={}):void 0===r&&(r={});var s=this,u={requests:i(t,function(e){var t="";return void 0!==e.query&&(t+="query="+encodeURIComponent(e.query)),{indexName:e.indexName,params:s._getSearchParams(e.params,t)}})},c=i(u.requests,function(e,t){return t+"="+encodeURIComponent("/1/indexes/"+encodeURIComponent(e.indexName)+"?"+e.params)}).join("&"),l="/1/indexes/*/queries";return void 0!==r.strategy&&(u.strategy=r.strategy),this._jsonRequest({cache:this.cache,method:"POST",url:l,body:u,hostType:"read",fallback:{method:"GET",url:"/1/indexes/*",body:{params:c}},callback:o})},o.prototype.searchForFacetValues=function(t){var r=e(7),o=e(27),n="Usage: client.searchForFacetValues([{indexName, params: {facetName, facetQuery, ...params}}, ...queries])";if(!r(t))throw new Error(n);var i=this;return i._promise.all(o(t,function(t){if(!t||void 0===t.indexName||void 0===t.params.facetName||void 0===t.params.facetQuery)throw new Error(n);var r=e(22),o=e(29),a=t.indexName,s=t.params,u=s.facetName,c=o(r(s),function(e){return"facetName"===e}),l=i._getSearchParams(c,"");return i._jsonRequest({cache:i.cache,method:"POST",url:"/1/indexes/"+encodeURIComponent(a)+"/facets/"+encodeURIComponent(u)+"/query",hostType:"read",body:{params:l}})}))},o.prototype.setSecurityTags=function(e){if("[object Array]"===Object.prototype.toString.call(e)){for(var t=[],r=0;r<e.length;++r)if("[object Array]"===Object.prototype.toString.call(e[r])){for(var o=[],n=0;n<e[r].length;++n)o.push(e[r][n]);t.push("("+o.join(",")+")")}else t.push(e[r]);e=t.join(",")}this.securityTags=e},o.prototype.setUserToken=function(e){this.userToken=e},o.prototype.clearCache=function(){this.cache={}},o.prototype.setRequestTimeout=function(e){e&&(this._timeouts.connect=this._timeouts.read=this._timeouts.write=e)},o.prototype.setTimeouts=function(e){this._timeouts=e},o.prototype.getTimeouts=function(){return this._timeouts},o.prototype._getAppIdData=function(){var e=p.get(this.applicationID);return null!==e&&this._cacheAppIdData(e),e},o.prototype._setAppIdData=function(e){return e.lastChange=(new Date).getTime(),this._cacheAppIdData(e),p.set(this.applicationID,e)},o.prototype._checkAppIdData=function(){var e=this._getAppIdData(),t=(new Date).getTime();return null===e||t-e.lastChange>d?this._resetInitialAppIdData(e):e},o.prototype._resetInitialAppIdData=function(e){var t=e||{};return t.hostIndexes={read:0,write:0},t.timeoutMultiplier=1,t.shuffleResult=t.shuffleResult||a([1,2,3]),this._setAppIdData(t)},o.prototype._cacheAppIdData=function(e){this._hostIndexes=e.hostIndexes,this._timeoutMultiplier=e.timeoutMultiplier,this._shuffleResult=e.shuffleResult},o.prototype._partialAppIdDataUpdate=function(t){var r=e(4),o=this._getAppIdData();return r(t,function(e,t){o[t]=e}),this._setAppIdData(o)},o.prototype._getHostByType=function(e){return this.hosts[e][this._getHostIndexByType(e)]},o.prototype._getTimeoutMultiplier=function(){return this._timeoutMultiplier},o.prototype._getHostIndexByType=function(e){return this._hostIndexes[e]},o.prototype._setHostIndexByType=function(t,r){var o=e(22),n=o(this._hostIndexes);return n[r]=t,this._partialAppIdDataUpdate({hostIndexes:n}),t},o.prototype._incrementHostIndex=function(e){return this._setHostIndexByType((this._getHostIndexByType(e)+1)%this.hosts[e].length,e)},o.prototype._incrementTimeoutMultipler=function(){var e=Math.max(this._timeoutMultiplier+1,4);return this._partialAppIdDataUpdate({timeoutMultiplier:e})},o.prototype._getTimeoutsForRequest=function(e){return{connect:this._timeouts.connect*this._timeoutMultiplier,complete:this._timeouts[e]*this._timeoutMultiplier}}}).call(this,e(11))},{1:1,11:11,16:16,22:22,25:25,26:26,27:27,29:29,31:31,4:4,7:7}],16:[function(e,t,r){function o(e,t){this.indexName=t,this.as=e,this.typeAheadArgs=null,this.typeAheadValueOption=null,this.cache={}}var n=e(21),i=e(23),a=e(24);t.exports=o,o.prototype.clearCache=function(){this.cache={}},o.prototype.search=n("query"),o.prototype.similarSearch=i(n("similarQuery"),a("index.similarSearch(query[, callback])","index.search({ similarQuery: query }[, callback])")),o.prototype.browse=function(t,r,o){var n,i,a=e(28),s=this;0===arguments.length||1===arguments.length&&"function"==typeof arguments[0]?(n=0,o=arguments[0],t=void 0):"number"==typeof arguments[0]?(n=arguments[0],"number"==typeof arguments[1]?i=arguments[1]:"function"==typeof arguments[1]&&(o=arguments[1],i=void 0),t=void 0,r=void 0):"object"==typeof arguments[0]?("function"==typeof arguments[1]&&(o=arguments[1]),r=arguments[0],t=void 0):"string"==typeof arguments[0]&&"function"==typeof arguments[1]&&(o=arguments[1],r=void 0),r=a({},r||{},{page:n,hitsPerPage:i,query:t});var u=this.as._getSearchParams(r,"");return this.as._jsonRequest({method:"POST",url:"/1/indexes/"+encodeURIComponent(s.indexName)+"/browse",body:{params:u},hostType:"read",callback:o})},o.prototype.browseFrom=function(e,t){return this.as._jsonRequest({method:"POST",url:"/1/indexes/"+encodeURIComponent(this.indexName)+"/browse",body:{cursor:e},hostType:"read",callback:t})},o.prototype.searchForFacetValues=function(t,r){var o=e(22),n=e(29),i="Usage: index.searchForFacetValues({facetName, facetQuery, ...params}[, callback])";if(void 0===t.facetName||void 0===t.facetQuery)throw new Error(i);var a=t.facetName,s=n(o(t),function(e){return"facetName"===e}),u=this.as._getSearchParams(s,"");return this.as._jsonRequest({method:"POST",url:"/1/indexes/"+encodeURIComponent(this.indexName)+"/facets/"+encodeURIComponent(a)+"/query",hostType:"read",body:{params:u},callback:r})},o.prototype.searchFacet=i(function(e,t){return this.searchForFacetValues(e,t)},a("index.searchFacet(params[, callback])","index.searchForFacetValues(params[, callback])")),o.prototype._search=function(e,t,r,o){return this.as._jsonRequest({cache:this.cache,method:"POST",url:t||"/1/indexes/"+encodeURIComponent(this.indexName)+"/query",body:{params:e},hostType:"read",fallback:{method:"GET",url:"/1/indexes/"+encodeURIComponent(this.indexName),body:{params:e}},callback:r,additionalUA:o})},o.prototype.getObject=function(e,t,r){var o=this;1!==arguments.length&&"function"!=typeof t||(r=t,t=void 0);var n="";if(void 0!==t){n="?attributes=";for(var i=0;i<t.length;++i)0!==i&&(n+=","),n+=t[i]}return this.as._jsonRequest({method:"GET",url:"/1/indexes/"+encodeURIComponent(o.indexName)+"/"+encodeURIComponent(e)+n,hostType:"read",callback:r})},o.prototype.getObjects=function(t,r,o){var n=e(7),i=e(27),a="Usage: index.getObjects(arrayOfObjectIDs[, callback])";if(!n(t))throw new Error(a);var s=this;1!==arguments.length&&"function"!=typeof r||(o=r, 12470r=void 0);var u={requests:i(t,function(e){var t={indexName:s.indexName,objectID:e};return r&&(t.attributesToRetrieve=r.join(",")),t})};return this.as._jsonRequest({method:"POST",url:"/1/indexes/*/objects",hostType:"read",body:u,callback:o})},o.prototype.as=null,o.prototype.indexName=null,o.prototype.typeAheadArgs=null,o.prototype.typeAheadValueOption=null},{21:21,22:22,23:23,24:24,27:27,28:28,29:29,7:7}],17:[function(e,t,r){"use strict";var o=e(15),n=e(18);t.exports=n(o,"Browser (lite)")},{15:15,18:18}],18:[function(e,t,r){(function(r){"use strict";var o=e(5),n=o.Promise||e(3).Promise;t.exports=function(t,i){function a(t,r,o){var n=e(22);return o=n(o||{}),o._ua=o._ua||a.ua,new s(t,r,o)}function s(){t.apply(this,arguments)}var u=e(6),c=e(25),l=e(19),p=e(20),f=e(30);i=i||"","debug"===r.env.NODE_ENV&&e(1).enable("algoliasearch*"),a.version=e(32),a.ua="Algolia for JavaScript ("+a.version+"); "+i,a.initPlaces=f(a),o.__algolia={debug:e(1),algoliasearch:a};var d={hasXMLHttpRequest:"XMLHttpRequest"in o,hasXDomainRequest:"XDomainRequest"in o};return d.hasXMLHttpRequest&&(d.cors="withCredentials"in new XMLHttpRequest),u(s,t),s.prototype._request=function(e,t){return new n(function(r,o){function n(){if(!
12470h){clearTimeout(f);var e;try{e={body:JSON.parse(m.responseText),responseText:m.responseText,statusCode:m.status,headers:m.getAllResponseHeaders&&m.getAllResponseHeaders()||{}}}catch(t){e=new c.UnparsableJSON({more:m.responseText})}e instanceof c.UnparsableJSON?o(e):r(e)}}function i(e){h||(clearTimeout(f),o(new c.Network({more:e})))}function a(){h=!0,m.abort(),o(new c.RequestTimeout)}function s(){g=!0,clearTimeout(f),f=setTimeout(a,t.timeouts.complete)}function u(){g||s()}function p(){!g&&m.readyState>1&&s()}if(!d.cors&&!d.hasXDomainRequest)return void o(new c.Network("CORS not supported"));e=l(e,t.headers);var f,h,y=t.body,m=d.cors?new XMLHttpRequest:new XDomainRequest,g=!1;f=setTimeout(a,t.timeouts.connect),m.onprogress=u,"onreadystatechange"in m&&(m.onreadystatechange=p),m.onload=n,m.onerror=i,m instanceof XMLHttpRequest?(m.open(t.method,e,!0),t.forceAuthHeaders&&(m.setRequestHeader("x-algolia-application-id",t.headers["x-algolia-application-id"]),m.setRequestHeader("x-algolia-api-key",t.headers["x-algolia-api-key"]))):m.open(t.method,e),d.cors&&(y&&("POST"===t.method?m.setRequestHeader("content-type","application/x-www-form-urlencoded"):m.setRequestHeader("content-type","application/json")),m.setRequestHeader("accept","application/json")),y?m.send(y):m.send()})},s.prototype._request.fallback=function(e,t){return e=l(e,t.headers),new n(function(r,o){p(e,t,function(e,t){return e?void o(e):void r(t)})})},s.prototype._promise={reject:function(e){return n.reject(e)},resolve:function(e){return n.resolve(e)},delay:function(e){return new n(function(t){setTimeout(t,e)})},all:function(e){return n.all(e)}},a}}).call(this,e(11))},{1:1,11:11,19:19,20:20,22:22,25:25,3:3,30:30,32:32,5:5,6:6}],19:[function(e,t,r){"use strict";function o(e,t){return e+=/\?/.test(e)?"&":"?",e+n(t)}t.exports=o;var n=e(13)},{13:13}],20:[function(e,t,r){"use strict";function o(e,t,r){function o(){t.debug("JSONP: success"),m||f||(m=!0,p||(t.debug("JSONP: Fail. Script loaded but did not call the callback"),s(),r(new n.JSONPScriptFail)))}function a(){"loaded"!==this.readyState&&"complete"!==this.readyState||o()}function s(){clearTimeout(g),h.onload=null,h.onreadystatechange=null,h.onerror=null,d.removeChild(h)}function u(){try{delete window[y],delete window[y+"_loaded"]}catch(e){window[y]=window[y+"_loaded"]=void 0}}function c(){t.debug("JSONP: Script timeout"),f=!0,s(),r(new n.RequestTimeout)}function l(){t.debug("JSONP: Script error"),m||f||(s(),r(new n.JSONPScriptError))}if("GET"!==t.method)return void r(new Error("Method "+t.method+" "+e+" is not supported by JSONP."));t.debug("JSONP: start");var p=!1,f=!1;i+=1;var d=document.getElementsByTagName("head")[0],h=document.createElement("script"),y="algoliaJSONP_"+i,m=!1;window[y]=function(e){return u(),f?void t.debug("JSONP: Late answer, ignoring"):(p=!0,s(),void r(null,{body:e,responseText:JSON.stringify(e)}))},e+="&callback="+y,t.jsonBody&&t.jsonBody.params&&(e+="&"+t.jsonBody.params);var g=setTimeout(c,t.timeouts.complete);h.onreadystatechange=a,h.onload=o,h.onerror=l,h.async=!0,h.defer=!0,h.src=e,d.appendChild(h)}t.exports=o;var n=e(25),i=0},{25:25}
12470],21:[function(e,t,r){function o(e,t){return function(r,o,i){if("function"==typeof r&&"object"==typeof o||"object"==typeof i)throw new n.AlgoliaSearchError("index.search usage is index.search(query, params, cb)");0===arguments.length||"function"==typeof r?(i=r,r=""):1!==arguments.length&&"function"!=typeof o||(i=o,o=void 0),"object"==typeof r&&null!==r?(o=r,r=void 0):void 0!==r&&null!==r||(r="");var a="";void 0!==r&&(a+=e+"="+encodeURIComponent(r));var s;return void 0!==o&&(o.additionalUA&&(s=o.additionalUA,delete o.additionalUA),a=this.as._getSearchParams(o,a)),this._search(a,t,i,s)}}t.exports=o;var n=e(25)},{25:25}],22:[function(e,t,r){t.exports=function(e){return JSON.parse(JSON.stringify(e))}},{}],23:[function(e,t,r){t.exports=function(e,t){function r(){return o||(console.warn(t),o=!0),e.apply(this,arguments)}var o=!1;return r}},{}],24:[function(e,t,r){t.exports=function(e,t){var r=e.toLowerCase().replace(/[\.\(\)]/g,"");return"algoliasearch: `"+e+"` was replaced by `"+t+"`. Please see https://github.com/algolia/algoliasearch-client-javascript/wiki/Deprecated#"+r}},{}],25:[function(e,t,r){"use strict";function o(t,r){var o=e(4),n=this;"function"==typeof Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):n.stack=(new Error).stack||"Cannot get a stacktrace, browser is too old",this.name="AlgoliaSearchError",this.message=t||"Unknown error",r&&o(r,function(e,t){n[t]=e})}function n(e,t){function r(){var r=Array.prototype.slice.call(arguments,0);"string"!=typeof r[0]&&r.unshift(t),o.apply(this,r),this.name="AlgoliaSearch"+e+"Error"}return i(r,o),r}var i=e(6);
12470i(o,Error),t.exports={AlgoliaSearchError:o,UnparsableJSON:n("UnparsableJSON","Could not parse the incoming response as JSON, see err.more for details"),RequestTimeout:n("RequestTimeout","Request timed out before getting a response"),Network:n("Network","Network issue, see err.more for details"),JSONPScriptFail:n("JSONPScriptFail","<script> was loaded but did not call our provided callback"),ValidUntilNotFound:n("ValidUntilNotFound","The SecuredAPIKey does not have a validUntil parameter."),JSONPScriptError:n("JSONPScriptError","<script> unable to load due to an `error` event on it"),ObjectNotFound:n("ObjectNotFound","Object not found"),Unknown:n("Unknown","Unknown error occured")}},{4:4,6:6}],26:[function(e,t,r){t.exports=function(e,t){t(e,0)}},{}],27:[function(e,t,r){var o=e(4);t.exports=function(e,t){var r=[];return o(e,function(o,n){r.push(t(o,n,e))}),r}},{4:4}],28:[function(e,t,r){var o=e(4);t.exports=function n(e){var t=Array.prototype.slice.call(arguments);return o(t,function(t){for(var r in t)t.hasOwnProperty(r)&&("object"==typeof e[r]&&"object"==typeof t[r]?e[r]=n({},e[r],t[r]):void 0!==t[r]&&(e[r]=t[r]))}),e}},{4:4}],29:[function(e,t,r){t.exports=function(t,r){var o=e(9),n=e(4),i={};return n(o(t),function(e){r(e)!==!0&&(i[e]=t[e])}),i}},{4:4,9:9}],30:[function(e,t,r){function o(t){return function(r,o,a){var s=e(22);a=a&&s(a)||{},a.hosts=a.hosts||["places-dsn.algolia.net","places-1.algolianet.com","places-2.algolianet.com","places-3.algolianet.com"],0!==arguments.length&&"object"!=typeof r&&void 0!==r||(r="",o="",a._allowEmptyCredentials=!0);var u=t(r,o,a),c=u.initIndex("places");return c.search=i("query","/1/places/query"),c.reverse=function(e,t){var r=n.encode(e);return this.as._jsonRequest({method:"GET",url:"/1/places/reverse?"+r,hostType:"read",callback:t})},c.getObject=function(e,t){return this.as._jsonRequest({method:"GET",url:"/1/places/"+encodeURIComponent(e),hostType:"read",callback:t})},c}}t.exports=o;var n=e(14),i=e(21)},{14:14,21:21,22:22}],31:[function(e,t,r){(function(r){function o(e,t){return u("localStorage failed with",t),a(),s=l,s.get(e)}function n(e,t){return 1===arguments.length?s.get(e):s.set(e,t)}function i(){try{return"localStorage"in r&&null!==r.localStorage&&(r.localStorage[c]||r.localStorage.setItem(c,JSON.stringify({})),!0)}catch(e){return!1}}function a(){try{r.localStorage.removeItem(c)}catch(e){}}var s,u=e(1)("algoliasearch:src/hostIndexState.js"),c="algoliasearch-client-js",l={state:{},set:function(e,t){return this.state[e]=t,this.state[e]},get:function(e){return this.state[e]||null}},p={set:function(e,t){l.set(e,t);try{var n=JSON.parse(r.localStorage[c]);return n[e]=t,r.localStorage[c]=JSON.stringify(n),n[e]}catch(i){return o(e,i)}},get:function(e){try{return JSON.parse(r.localStorage[c])[e]||null}catch(t){return o(e,t)}}};s=i()?p:l,t.exports={get:n,set:n,supportsLocalStorage:i}}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{1:1}],32:[function(e,t,r){"use strict";t.exports="3.35.1"},{}]},{},[17])(17)}); 12471/*! 12472 * autocomplete.js 0.36.0 12473 * https://github.com/algolia/autocomplete.js 12474 * Copyright 2019
vendor: 18,400 bytes, lines 12474-12476
12474 Algolia, Inc. and other contributors; Licensed MIT 12475 */ 12476!function(a,b){"object"==typeof exports&&"object"==typeof module?module.exports=b():"function"==typeof define&&define.amd?define([],b):"object"==typeof exports?exports.autocomplete=b():a.autocomplete=b()}(this,function(){return function(a){function b(d){if(c[d])return c[d].exports;var e=c[d]={exports:{},id:d,loaded:!1};return a[d].call(e.exports,e,e.exports,b),e.loaded=!0,e.exports}var c={};return b.m=a,b.c=c,b.p="",b(0)}([function(a,b,c){"use strict";a.exports=c(1)},function(a,b,c){"use strict";function d(a,b,c,d){c=f.isArray(c)?c:[].slice.call(arguments,2);var j=e(a).each(function(a,f){var j=e(f),k=new i({el:j}),l=d||new h({input:j,eventBus:k,dropdownMenuContainer:b.dropdownMenuContainer,hint:void 0===b.hint||!!b.hint,minLength:b.minLength,autoselect:b.autoselect,autoselectOnBlur:b.autoselectOnBlur,tabAutocomplete:b.tabAutocomplete,openOnFocus:b.openOnFocus,templates:b.templates,debug:b.debug,clearOnSelected:b.clearOnSelected,cssClasses:b.cssClasses,datasets:c,keyboardShortcuts:b.keyboardShortcuts,appendTo:b.appendTo,autoWidth:b.autoWidth,ariaLabel:b.ariaLabel||f.getAttribute("aria-label")});j.data(g,l)});return j.autocomplete={},f.each(["open","close","getVal","setVal","destroy","getWrapper"],function(a){j.autocomplete[a]=function(){var b,c=arguments;return j.each(function(d,f){var h=e(f).data(g);b=h[a].apply(h,c)}),b}}),j}var e=c(2);c(3).element=e;var f=c(4);f.isArray=e.isArray,f.isFunction=e.isFunction,f.isObject=e.isPlainObject,f.bind=e.proxy,f.each=function(a,b){function c(a,c){return b(c,a)}e.each(a,c)},f.map=e.map,f.mixin=e.extend,f.Event=e.Event;var g="aaAutocomplete",h=c(5),i=c(6);d.sources=h.sources,d.escapeHighlightedString=f.escapeHighlightedString;var j="autocomplete"in window,k=window.autocomplete;d.noConflict=function(){return j?window.autocomplete=k:delete window.autocomplete,d},a.exports=d},function(a,b){!function(b,c){a.exports=function(a){var b=function(){function b(a){return null==a?String(a):V[W.call(a)]||"object"}function c(a){return"function"==b(a)}function d(a){return null!=a&&a==a.window}function e(a){return null!=a&&a.nodeType==a.DOCUMENT_NODE}function f(a){return"object"==b(a)}function g(a){return f(a)&&!d(a)&&Object.getPrototypeOf(a)==Object.prototype}function h(a){var b=!!a&&"length"in a&&a.length,c=z.type(a);return"function"!=c&&!d(a)&&("array"==c||0===b||"number"==typeof b&&b>0&&b-1 in a)}function i(a){return F.call(a,function(a){return null!=a})}function j(a){return a.length>0?z.fn.concat.apply([],a):a}function k(a){return a.replace(/::/g,"/").replace(/([A-Z]+)([A-Z][a-z])/g,"$1_$2").replace(/([a-z\d])([A-Z])/g,"$1_$2").replace(/_/g,"-").toLowerCase()}function l(a){return a in J?J[a]:J[a]=new RegExp("(^|\\s)"+a+"(\\s|$)")}function m(a,b){return"number"!=typeof b||K[k(a)]?b:b+"px"}function n(a){var b,c;return I[a]||(b=H.createElement(a),H.body.appendChild(b),c=getComputedStyle(b,"").getPropertyValue("display"),b.parentNode.removeChild(b),"none"==c&&(c="block"),I[a]=c),I[a]}function o(a){return"children"in a?G.call(a.children):z.map(a.childNodes,function(a){if(1==a.nodeType)return a})}function p(a,b){var c,d=a?a.length:0;for(c=0;c<d;c++)this[c]=a[c];this.length=d,this.selector=b||""}function q(a,b,c){for(y in b)c&&(g(b[y])||$(b[y]))?(g(b[y])&&!g(a[y])&&(a[y]={}),$(b[y])&&!$(a[y])&&(a[y]=[]),q(a[y],b[y],c)):b[y]!==x&&(a[y]=b[y])}function r(a,b){return null==b?z(a):z(a).filter(b)}function s(a,b,d,e){return c(b)?b.call(a,d,e):b}function t(a,b,c){null==c?a.removeAttribute(b):a.setAttribute(b,c)}function u(a,b){var c=a.className||"",d=c&&c.baseVal!==x;if(b===x)return d?c.baseVal:c;d?c.baseVal=b:a.className=b}function v(a){try{return a?"true"==a||"false"!=a&&("null"==a?null:+a+""==a?+a:/^[\[\{]/.test(a)?z.parseJSON(a):a):a}catch(b){return a}}function w(a,b){b(a);for(var c=0,d=a.childNodes.length;c<d;c++)w(a.childNodes[c],b)}var x,y,z,A,B,C,D=[],E=D.concat,F=D.filter,G=D.slice,H=a.document,I={},J={},K={"column-count":1,columns:1,"font-weight":1,"line-height":1,opacity:1,"z-index":1,zoom:1},L=/^\s*<(\w+|!)[^>]*>/,M=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,N=/^(?:body|html)$/i,O=["val","css","html","text","data","width","height","offset"],P=["after","prepend","before","append"],Q=H.createElement("table"),R=H.createElement("tr"),S={tr:H.createElement("tbody"),tbody:Q,thead:Q,tfoot:Q,td:R,th:R,"*":H.createElement("div")},T=/complete|loaded|interactive/,U=/^[\w-]*$/,V={},W=V.toString,X={},Y=H.createElement("div"),Z={tabindex:"tabIndex",readonly:"readOnly",for:"htmlFor",class:"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},$=Array.isArray||function(a){return a instanceof Array};return X.matches=function(a,b){if(!b||!a||1!==a.nodeType)return!1;var c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.matchesSelector;if(c)return c.call(a,b);var d,e=a.parentNode,f=!e;return f&&(e=Y).appendChild(a),d=~X.qsa(e,b).indexOf(a),f&&Y.removeChild(a),d},B=function(a){return a.replace(/-+(.)?/g,function(a,b){return b?b.toUpperCase():""})},C=function(a){return F.call(a,function(b,c){return a.indexOf(b)==c})},X.fragment=function(a,b,c){var d,e,f;return M.test(a)&&(d=z(H.createElement(RegExp.$1))),d||(a.replace&&(a=a.replace(/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,"<$1></$2>")),b===x&&(b=L.test(a)&&RegExp.$1),b in S||(b="*"),f=S[b],f.innerHTML=""+a,d=z.each(G.call(f.childNodes),function(){f.removeChild(this)})),g(c)&&(e=z(d),z.each(c,function(a,b){O.indexOf(a)>-1?e[a](b):e.attr(a,b)})),d},X.Z=function(a,b){return new p(a,b)},X.isZ=function(a){return a instanceof X.Z},X.init=function(a,b){var d;if(!a)return X.Z();if("string"==typeof a)if(a=a.trim(),"<"==a[0]&&L.test(a))d=X.fragment(a,RegExp.$1,b),a=null;else{if(b!==x)return z(b).find(a);d=X.qsa(H,a)}else{if(c(a))return z(H).ready(a);if(X.isZ(a))return a;if($(a))d=i(a);else if(f(a))d=[a],a=null;else if(L.test(a))d=X.fragment(a.trim(),RegExp.$1,b),a=null;else{if(b!==x)return z(b).find(a);d=X.qsa(H,a)}}return X.Z(d,a)},z=function(a,b){return X.init(a,b)},z.extend=function(a){var b,c=G.call(arguments,1);return"boolean"==typeof a&&(b=a,a=c.shift()),c.forEach(function(c){q(a,c,b)}),a},X.qsa=function(a,b){var c,d="#"==b[0],e=!d&&"."==b[0],f=d||e?b.slice(1):b,g=U.test(f);return a.getElementById&&g&&d?(c=a.getElementById(f))?[c]:[]:1!==a.nodeType&&9!==a.nodeType&&11!==a.nodeType?[]:G.call(g&&!d&&a.getElementsByClassName?e?a.getElementsByClassName(f):a.getElementsByTagName(b):a.querySelectorAll(b))},z.contains=H.documentElement.contains?function(a,b){return a!==b&&a.contains(b)}:function(a,b){for(;b&&(b=b.parentNode);)if(b===a)return!0;return!1},z.type=b,z.isFunction=c,z.isWindow=d,z.isArray=$,z.isPlainObject=g,z.isEmptyObject=function(a){var b;for(b in a)return!1;return!0},z.isNumeric=function(a){var b=Number(a),c=typeof a;return null!=a&&"boolean"!=c&&("string"!=c||a.length)&&!isNaN(b)&&isFinite(b)||!1},z.inArray=function(a,b,c){return D.indexOf.call(b,a,c)},z.camelCase=B,z.trim=function(a){return null==a?"":String.prototype.trim.call(a)},z.uuid=0,z.support={},z.expr={},z.noop=function(){},z.map=function(a,b){var c,d,e,f=[];if(h(a))for(d=0;d<a.length;d++)null!=(c=b(a[d],d))&&f.push(c);else for(e in a)null!=(c=b(a[e],e))&&f.push(c);return j(f)},z.each=function(a,b){var c,d;if(h(a)){for(c=0;c<a.length;c++)if(b.call(a[c],c,a[c])===!1)return a}else for(d in a)if(b.call(a[d],d,a[d])===!1)return a;return a},z.grep=function(a,b){return F.call(a,b)},a.JSON&&(z.parseJSON=JSON.parse),z.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(a,b){V["[object "+b+"]"]=b.toLowerCase()}),z.fn={constructor:X.Z,length:0,forEach:D.forEach,reduce:D.reduce,push:D.push,sort:D.sort,splice:D.splice,indexOf:D.indexOf,concat:function(){var a,b,c=[];for(a=0;a<arguments.length;a++)b=arguments[a],c[a]=X.isZ(b)?b.toArray():b;return E.apply(X.isZ(this)?this.toArray():this,c)},map:function(a){return z(z.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return z(G.apply(this,arguments))},ready:function(a){return T.test(H.readyState)&&H.body?a(z):H.addEventListener("DOMContentLoaded",function(){a(z)},!1),this},get:function(a){return a===x?G.call(this):this[a>=0?a:a+this.length]},toArray:function(){return this.get()},size:function(){return this.length},remove:function(){return this.each(function(){null!=this.parentNode&&this.parentNode.removeChild(this)})},each:function(a){return D.every.call(this,function(b,c){return a.call(b,c,b)!==!1}),this},filter:function(a){return c(a)?this.not(this.not(a)):z(F.call(this,function(b){return X.matches(b,a)}))},add:function(a,b){return z(C(this.concat(z(a,b))))},is:function(a){return this.length>0&&X.matches(this[0],a)},not:function(a){var b=[];if(c(a)&&a.call!==x)this.each(function(c){a.call(this,c)||b.push(this)});else{var d="string"==typeof a?this.filter(a):h(a)&&c(a.item)?G.call(a):z(a);this.forEach(function(a){d.indexOf(a)<0&&b.push(a)})}return z(b)},has:function(a){return this.filter(function(){return f(a)?z.contains(this,a):z(this).find(a).size()})},eq:function(a){return a===-1?this.slice(a):this.slice(a,+a+1)},first:function(){var a=this[0];return a&&!f(a)?a:z(a)},last:function(){var a=this[this.length-1];return a&&!f(a)?a:z(a)},find:function(a){var b=this;return a?"object"==typeof a?z(a).filter(function(){var a=this;return D.some.call(b,function(b){return z.contains(b,a)})}):1==this.length?z(X.qsa(this[0],a)):this.map(function(){return X.qsa(this,a)}):z()},closest:function(a,b){var c=[],d="object"==typeof a&&z(a);return this.each(function(f,g){for(;g&&!(d?d.indexOf(g)>=0:X.matches(g,a));)g=g!==b&&!e(g)&&g.parentNode;g&&c.indexOf(g)<0&&c.push(g)}),z(c)},parents:function(a){for(var b=[],c=this;c.length>0;)c=z.map(c,function(a){if((a=a.parentNode)&&!e(a)&&b.indexOf(a)<0)return b.push(a),a});return r(b,a)},parent:function(a){return r(C(this.pluck("parentNode")),a)},children:function(a){return r(this.map(function(){return o(this)}),a)},contents:function(){return this.map(function(){return this.contentDocument||G.call(this.childNodes)})},siblings:function(a){return r(this.map(function(a,b){return F.call(o(b.parentNode),function(a){return a!==b})}),a)},empty:function(){return this.each(function(){this.innerHTML=""})},pluck:function(a){return z.map(this,function(b){return b[a]})},show:function(){return this.each(function(){"none"==this.style.display&&(this.style.display=""),"none"==getComputedStyle(this,"").getPropertyValue("display")&&(this.style.display=n(this.nodeName))})},replaceWith:function(a){return this.before(a).remove()},wrap:function(a){var b=c(a);if(this[0]&&!b)var d=z(a).get(0),e=d.parentNode||this.length>1;return this.each(function(c){z(this).wrapAll(b?a.call(this,c):e?d.cloneNode(!0):d)})},wrapAll:function(a){if(this[0]){z(this[0]).before(a=z(a));for(var b;(b=a.children()).length;)a=b.first();z(a).append(this)}return this},wrapInner:function(a){var b=c(a);return this.each(function(c){var d=z(this),e=d.contents(),f=b?a.call(this,c):a;e.length?e.wrapAll(f):d.append(f)})},unwrap:function(){return this.parent().each(function(){z(this).replaceWith(z(this).children())}),this},clone:function(){return this.map(function(){return this.cloneNode(!0)})},hide:function(){return this.css("display","none")},toggle:function(a){return this.each(function(){var b=z(this);(a===x?"none"==b.css("display"):a)?b.show():b.hide()})},prev:function(a){return z(this.pluck("previousElementSibling")).filter(a||"*")},next:function(a){return z(this.pluck("nextElementSibling")).filter(a||"*")},html:function(a){return 0 in arguments?this.each(function(b){var c=this.innerHTML;z(this).empty().append(s(this,a,b,c))}):0 in this?this[0].innerHTML:null},text:function(a){return 0 in arguments?this.each(function(b){var c=s(this,a,b,this.textContent);this.textContent=null==c?"":""+c}):0 in this?this.pluck("textContent").join(""):null},attr:function(a,b){var c;return"string"!=typeof a||1 in arguments?this.each(function(c){if(1===this.nodeType)if(f(a))for(y in a)t(this,y,a[y]);else t(this,a,s(this,b,c,this.getAttribute(a)))}):0 in this&&1==this[0].nodeType&&null!=(c=this[0].getAttribute(a))?c:x},removeAttr:function(a){return this.each(function(){1===this.nodeType&&a.split(" ").forEach(function(a){t(this,a)},this)})},prop:function(a,b){return a=Z[a]||a,1 in arguments?this.each(function(c){this[a]=s(this,b,c,this[a])}):this[0]&&this[0][a]},removeProp:function(a){return a=Z[a]||a,this.each(function(){delete this[a]})},data:function(a,b){var c="data-"+a.replace(/([A-Z])/g,"-$1").toLowerCase(),d=1 in arguments?this.attr(c,b):this.attr(c);return null!==d?v(d):x},val:function(a){return 0 in arguments?(null==a&&(a=""),this.each(function(b){this.value=s(this,a,b,this.value)})):this[0]&&(this[0].multiple?z(this[0]).find("option").filter(function(){return this.selected}).pluck("value"):this[0].value)},offset:function(b){if(b)return this.each(function(a){var c=z(this),d=s(this,b,a,c.offset()),e=c.offsetParent().offset(),f={top:d.top-e.top,left:d.left-e.left};"static"==c.css("position")&&(f.position="relative"),c.css(f)});if(!this.length)return null;if(H.documentElement!==this[0]&&!z.contains(H.documentElement,this[0]))return{top:0,left:0};var c=this[0].getBoundingClientRect();return{left:c.left+a.pageXOffset,top:c.top+a.pageYOffset,width:Math.round(c.width),height:Math.round(c.height)}},css:function(a,c){if(arguments.length<2){var d=this[0];if("string"==typeof a){if(!d)return;return d.style[B(a)]||getComputedStyle(d,"").getPropertyValue(a)}if($(a)){if(!d)return;var e={},f=getComputedStyle(d,"");return z.each(a,function(a,b){e[b]=d.style[B(b)]||f.getPropertyValue(b)}),e}}var g="";if("string"==b(a))c||0===c?g=k(a)+":"+m(a,c):this.each(function(){this.style.removeProperty(k(a))});else for(y in a)a[y]||0===a[y]?g+=k(y)+":"+m(y,a[y])+";":this.each(function(){this.style.removeProperty(k(y))});return this.each(function(){this.style.cssText+=";"+g})},index:function(a){return a?this.indexOf(z(a)[0]):this.parent().children().indexOf(this[0])},hasClass:function(a){return!!a&&D.some.call(this,function(a){return this.test(u(a))},l(a))},addClass:function(a){return a?this.each(function(b){if("className"in this){A=[];var c=u(this);s(this,a,b,c).split(/\s+/g).forEach(function(a){z(this).hasClass(a)||A.push(a)},this),A.length&&u(this,c+(c?" ":"")+A.join(" "))}}):this},removeClass:function(a){return this.each(function(b){if("className"in this){if(a===x)return u(this,"");A=u(this),s(this,a,b,A).split(/\s+/g).forEach(function(a){A=A.replace(l(a)," ")}),u(this,A.trim())}})},toggleClass:function(a,b){return a?this.each(function(c){var d=z(this);s(this,a,c,u(this)).split(/\s+/g).forEach(function(a){(b===x?!d.hasClass(a):b)?d.addClass(a):d.removeClass(a)})}):this},scrollTop:function(a){if(this.length){var b="scrollTop"in this[0];return a===x?b?this[0].scrollTop:this[0].pageYOffset:this.each(b?function(){this.scrollTop=a}:function(){this.scrollTo(this.scrollX,a)})}},scrollLeft:function(a){if(this.length){var b="scrollLeft"in this[0];return a===x?b?this[0].scrollLeft:this[0].pageXOffset:this.each(b?function(){this.scrollLeft=a}:function(){this.scrollTo(a,this.scrollY)})}},position:function(){if(this.length){var a=this[0],b=this.offsetParent(),c=this.offset(),d=N.test(b[0].nodeName)?{top:0,left:0}:b.offset();return c.top-=parseFloat(z(a).css("margin-top"))||0,c.left-=parseFloat(z(a).css("margin-left"))||0,d.top+=parseFloat(z(b[0]).css("border-top-width"))||0,d.left+=parseFloat(z(b[0]).css("border-left-width"))||0,{top:c.top-d.top,left:c.left-d.left}}},offsetParent:function(){return this.map(function(){for(var a=this.offsetParent||H.body;a&&!N.test(a.nodeName)&&"static"==z(a).css("position");)a=a.offsetParent;return a})}},z.fn.detach=z.fn.remove,["width","height"].forEach(function(a){var b=a.replace(/./,function(a){return a[0].toUpperCase()});z.fn[a]=function(c){var f,g=this[0];return c===x?d(g)?g["inner"+b]:e(g)?g.documentElement["scroll"+b]:(f=this.offset())&&f[a]:this.each(function(b){g=z(this),g.css(a,s(this,c,b,g[a]()))})}}),P.forEach(function(c,d){var e=d%2;z.fn[c]=function(){var c,f,g=z.map(arguments,function(a){var d=[];return c=b(a),"array"==c?(a.forEach(function(a){return a.nodeType!==x?d.push(a):z.zepto.isZ(a)?d=d.concat(a.get()):void(d=d.concat(X.fragment(a)))}),d):"object"==c||null==a?a:X.fragment(a)}),h=this.length>1;return g.length<1?this:this.each(function(b,c){f=e?c:c.parentNode,c=0==d?c.nextSibling:1==d?c.firstChild:2==d?c:null;var i=z.contains(H.documentElement,f);g.forEach(function(b){if(h)b=b.cloneNode(!0);else if(!f)return z(b).remove();f.insertBefore(b,c),i&&w(b,function(b){if(!(null==b.nodeName||"SCRIPT"!==b.nodeName.toUpperCase()||b.type&&"text/javascript"!==b.type||b.src)){var c=b.ownerDocument?b.ownerDocument.defaultView:a;c.eval.call(c,b.innerHTML)}})})})},z.fn[e?c+"To":"insert"+(d?"Before":"After")]=function(a){return z(a)[c](this),this}}),X.Z.prototype=p.prototype=z.fn,X.uniq=C,X.deserializeValue=v,z.zepto=X,z}();return function(b){function c(a){return a._zid||(a._zid=n++)}function d(a,b,d,g){if(b=e(b),b.ns)var h=f(b.ns);return(r[c(a)]||[]).filter(function(a){return a&&(!b.e||a.e==b.e)&&(!b.ns||h.test(a.ns))&&(!d||c(a.fn)===c(d))&&(!g||a.sel==g)})}function e(a){var b=(""+a).split(".");return{e:b[0],ns:b.slice(1).sort().join(" ")}}function f(a){return new RegExp("(?:^| )"+a.replace(" "," .* ?")+"(?: |$)")}function g(a,b){return a.del&&!t&&a.e in u||!!b}function h(a){return v[a]||t&&u[a]||a}function i(a,d,f,i,j,l,n){var o=c(a),p=r[o]||(r[o]=[]);d.split(/\s/).forEach(function(c){if("ready"==c)return b(document).ready(f);var d=e(c);d.fn=f,d.sel=j,d.e in v&&(f=function(a){var c=a.relatedTarget;if(!c||c!==this&&!b.contains(this,c))return d.fn.apply(this,arguments)}),d.del=l;var o=l||f;d.proxy=function(b){if(b=k(b),!b.isImmediatePropagationStopped()){try{var c=Object.getOwnPropertyDescriptor(b,"data");c&&!c.writable||(b.data=i)}catch(b){}var d=o.apply(a,b._args==m?[b]:[b].concat(b._args));return d===!1&&(b.preventDefault(),b.stopPropagation()),d}},d.i=p.length,p.push(d),"addEventListener"in a&&a.addEventListener(h(d.e),d.proxy,g(d,n))})}function j(a,b,e,f,i){var j=c(a);(b||"").split(/\s/).forEach(function(b){d(a,b,e,f).forEach(function(b){delete r[j][b.i],"removeEventListener"in a&&a.removeEventListener(h(b.e),b.proxy,g(b,i))})})}function k(a,c){
vendor: 332 bytes, line 12476
12476return!c&&a.isDefaultPrevented||(c||(c=a),b.each(z,function(b,d){var e=c[b];a[b]=function(){return this[d]=w,e&&e.apply(c,arguments)},a[d]=x}),a.timeStamp||(a.timeStamp=Date.now()),(c.defaultPrevented!==m?c.defaultPrevented:"returnValue"in c?c.returnValue===!1:c.getPreventDefault&&c.getPreventDefault())&&(a.isDefaultPrevented=w)),
vendor: 13,280 bytes, line 12476
12476a}function l(a){var b,c={originalEvent:a};for(b in a)y.test(b)||a[b]===m||(c[b]=a[b]);return k(c,a)}var m,n=1,o=Array.prototype.slice,p=b.isFunction,q=function(a){return"string"==typeof a},r={},s={},t="onfocusin"in a,u={focus:"focusin",blur:"focusout"},v={mouseenter:"mouseover",mouseleave:"mouseout"};s.click=s.mousedown=s.mouseup=s.mousemove="MouseEvents",b.event={add:i,remove:j},b.proxy=function(a,d){var e=2 in arguments&&o.call(arguments,2);if(p(a)){var f=function(){return a.apply(d,e?e.concat(o.call(arguments)):arguments)};return f._zid=c(a),f}if(q(d))return e?(e.unshift(a[d],a),b.proxy.apply(null,e)):b.proxy(a[d],a);throw new TypeError("expected function")},b.fn.bind=function(a,b,c){return this.on(a,b,c)},b.fn.unbind=function(a,b){return this.off(a,b)},b.fn.one=function(a,b,c,d){return this.on(a,b,c,d,1)};var w=function(){return!0},x=function(){return!1},y=/^([A-Z]|returnValue$|layer[XY]$|webkitMovement[XY]$)/,z={preventDefault:"isDefaultPrevented",stopImmediatePropagation:"isImmediatePropagationStopped",stopPropagation:"isPropagationStopped"};b.fn.delegate=function(a,b,c){return this.on(b,a,c)},b.fn.undelegate=function(a,b,c){return this.off(b,a,c)},b.fn.live=function(a,c){return b(document.body).delegate(this.selector,a,c),this},b.fn.die=function(a,c){return b(document.body).undelegate(this.selector,a,c),this},b.fn.on=function(a,c,d,e,f){var g,h,k=this;return a&&!q(a)?(b.each(a,function(a,b){k.on(a,c,d,b,f)}),k):(q(c)||p(e)||e===!1||(e=d,d=c,c=m),e!==m&&d!==!1||(e=d,d=m),e===!1&&(e=x),k.each(function(k,m){f&&(g=function(a){return j(m,a.type,e),e.apply(this,arguments)}),c&&(h=function(a){var d,f=b(a.target).closest(c,m).get(0);if(f&&f!==m)return d=b.extend(l(a),{currentTarget:f,liveFired:m}),(g||e).apply(f,[d].concat(o.call(arguments,1)))}),i(m,a,e,d,c,h||g)}))},b.fn.off=function(a,c,d){var e=this;return a&&!q(a)?(b.each(a,function(a,b){e.off(a,c,b)}),e):(q(c)||p(d)||d===!1||(d=c,c=m),d===!1&&(d=x),e.each(function(){j(this,a,d,c)}))},b.fn.trigger=function(a,c){return a=q(a)||b.isPlainObject(a)?b.Event(a):k(a),a._args=c,this.each(function(){a.type in u&&"function"==typeof this[a.type]?this[a.type]():"dispatchEvent"in this?this.dispatchEvent(a):b(this).triggerHandler(a,c)})},b.fn.triggerHandler=function(a,c){var e,f;return this.each(function(g,h){e=l(q(a)?b.Event(a):a),e._args=c,e.target=h,b.each(d(h,a.type||a),function(a,b){if(f=b.proxy(e),e.isImmediatePropagationStopped())return!1})}),f},"focusin focusout focus blur load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select keydown keypress keyup error".split(" ").forEach(function(a){b.fn[a]=function(b){return 0 in arguments?this.bind(a,b):this.trigger(a)}}),b.Event=function(a,b){q(a)||(b=a,a=b.type);var c=document.createEvent(s[a]||"Events"),d=!0;if(b)for(var e in b)"bubbles"==e?d=!!b[e]:c[e]=b[e];return c.initEvent(a,d,!0),k(c)}}(b),function(a){var b,c=[];a.fn.remove=function(){return this.each(function(){this.parentNode&&("IMG"===this.tagName&&(c.push(this),this.src="data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs=",b&&clearTimeout(b),b=setTimeout(function(){c=[]},6e4)),this.parentNode.removeChild(this))})}}(b),function(a){function b(b,d){var i=b[h],j=i&&e[i];if(void 0===d)return j||c(b);if(j){if(d in j)return j[d];var k=g(d);if(k in j)return j[k]}return f.call(a(b),d)}function c(b,c,f){var i=b[h]||(b[h]=++a.uuid),j=e[i]||(e[i]=d(b));return void 0!==c&&(j[g(c)]=f),j}function d(b){var c={};return a.each(b.attributes||i,function(b,d){0==d.name.indexOf("data-")&&(c[g(d.name.replace("data-",""))]=a.zepto.deserializeValue(d.value))}),c}var e={},f=a.fn.data,g=a.camelCase,h=a.expando="Zepto"+ +new Date,i=[];a.fn.data=function(d,e){return void 0===e?a.isPlainObject(d)?this.each(function(b,e){a.each(d,function(a,b){c(e,a,b)})}):0 in this?b(this[0],d):void 0:this.each(function(){c(this,d,e)})},a.data=function(b,c,d){return a(b).data(c,d)},a.hasData=function(b){var c=b[h],d=c&&e[c];return!!d&&!a.isEmptyObject(d)},a.fn.removeData=function(b){return"string"==typeof b&&(b=b.split(/\s+/)),this.each(function(){var c=this[h],d=c&&e[c];d&&a.each(b||d,function(a){delete d[b?g(this):a]})})},["remove","empty"].forEach(function(b){var c=a.fn[b];a.fn[b]=function(){var a=this.find("*");return"remove"===b&&(a=a.add(this)),a.removeData(),c.call(this)}})}(b),b}(b)}(window)},function(a,b){"use strict";a.exports={element:null}},function(a,b,c){"use strict";function d(a){return a.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&")}var e=c(3);a.exports={isArray:null,isFunction:null,isObject:null,bind:null,each:null,map:null,mixin:null,isMsie:function(a){if(void 0===a&&(a=navigator.userAgent),/(msie|trident)/i.test(a)){var b=a.match(/(msie |rv:)(\d+(.\d+)?)/i);if(b)return b[2]}return!1},escapeRegExChars:function(a){return a.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&")},isNumber:function(a){return"number"==typeof a},toStr:function(a){return void 0===a||null===a?"":a+""},cloneDeep:function(a){var b=this.mixin({},a),c=this;return this.each(b,function(a,d){a&&(c.isArray(a)?b[d]=[].concat(a):c.isObject(a)&&(b[d]=c.cloneDeep(a)))}),b},error:function(a){throw new Error(a)},every:function(a,b){var c=!0;return a?(this.each(a,function(d,e){c&&(c=b.call(null,d,e,a)&&c)}),!!c):c},any:function(a,b){var c=!1;return a?(this.each(a,function(d,e){if(b.call(null,d,e,a))return c=!0,!1}),c):c},getUniqueId:function(){var a=0;return function(){return a++}}(),templatify:function(a){if(this.isFunction(a))return a;var b=e.element(a);return"SCRIPT"===b.prop("tagName")?function(){return b.text()}:function(){return String(a)}},defer:function(a){setTimeout(a,0)},noop:function(){},formatPrefix:function(a,b){return b?"":a+"-"},className:function(a,b,c){return(c?"":".")+a+b},escapeHighlightedString:function(a,b,c){b=b||"<em>";var e=document.createElement("div");e.appendChild(document.createTextNode(b)),c=c||"</em>";var f=document.createElement("div");f.appendChild(document.createTextNode(c));var g=document.createElement("div");return g.appendChild(document.createTextNode(a)),g.innerHTML.replace(RegExp(d(e.innerHTML),"g"),b).replace(RegExp(d(f.innerHTML),"g"),c)}}},function(a,b,c){"use strict";function d(a){var b,c;if(a=a||{},a.input||i.error("missing input"),this.isActivated=!1,this.debug=!!a.debug,this.autoselect=!!a.autoselect,this.autoselectOnBlur=!!a.autoselectOnBlur,this.openOnFocus=!!a.openOnFocus,this.minLength=i.isNumber(a.minLength)?a.minLength:1,this.autoWidth=void 0===a.autoWidth||!!a.autoWidth,this.clearOnSelected=!!a.clearOnSelected,this.tabAutocomplete=void 0===a.tabAutocomplete||!!a.tabAutocomplete,a.hint=!!a.hint,a.hint&&a.appendTo)throw new Error("[autocomplete.js] hint and appendTo options can't be used at the same time");this.css=a.css=i.mixin({},o,a.appendTo?o.appendTo:{}),this.cssClasses=a.cssClasses=i.mixin({},o.defaultClasses,a.cssClasses||{}),this.cssClasses.prefix=a.cssClasses.formattedPrefix=i.formatPrefix(this.cssClasses.prefix,this.cssClasses.noPrefix),this.listboxId=a.listboxId=[this.cssClasses.root,"listbox",i.getUniqueId()].join("-");var f=e(a);this.$node=f.wrapper;var g=this.$input=f.input;b=f.menu,c=f.hint,a.dropdownMenuContainer&&j.element(a.dropdownMenuContainer).css("position","relative").append(b.css("top","0")),g.on("blur.aa",function(a){var c=document.activeElement;i.isMsie()&&(b[0]===c||b[0].contains(c))&&(a.preventDefault(),a.stopImmediatePropagation(),i.defer(function(){g.focus()}))}),b.on("mousedown.aa",function(a){a.preventDefault()}),this.eventBus=a.eventBus||new k({el:g}),this.dropdown=new d.Dropdown({appendTo:a.appendTo,wrapper:this.$node,menu:b,datasets:a.datasets,templates:a.templates,cssClasses:a.cssClasses,minLength:this.minLength}).onSync("suggestionClicked",this._onSuggestionClicked,this).onSync("cursorMoved",this._onCursorMoved,this).onSync("cursorRemoved",this._onCursorRemoved,this).onSync("opened",this._onOpened,this).onSync("closed",this._onClosed,this).onSync("shown",this._onShown,this).onSync("empty",this._onEmpty,this).onSync("redrawn",this._onRedrawn,this).onAsync("datasetRendered",this._onDatasetRendered,this),this.input=new d.Input({input:g,hint:c}).onSync("focused",this._onFocused,this).onSync("blurred",this._onBlurred,this).onSync("enterKeyed",this._onEnterKeyed,this).onSync("tabKeyed",this._onTabKeyed,this).onSync("escKeyed",this._onEscKeyed,this).onSync("upKeyed",this._onUpKeyed,this).onSync("downKeyed",this._onDownKeyed,this).onSync("leftKeyed",this._onLeftKeyed,this).onSync("rightKeyed",this._onRightKeyed,this).onSync("queryChanged",this._onQueryChanged,this).onSync("whitespaceChanged",this._onWhitespaceChanged,this),this._bindKeyboardShortcuts(a),this._setLanguageDirection()}function e(a){var b,c,d,e;b=j.element(a.input),c=j.element(n.wrapper.replace("%ROOT%",a.cssClasses.root)).css(a.css.wrapper),a.appendTo||"block"!==b.css("display")||"table"!==b.parent().css("display")||c.css("display","table-cell");var g=n.dropdown.replace("%PREFIX%",a.cssClasses.prefix).replace("%DROPDOWN_MENU%",a.cssClasses.dropdownMenu);d=j.element(g).css(a.css.dropdown).attr({role:"listbox",id:a.listboxId}),a.templates&&a.templates.dropdownMenu&&d.html(i.templatify(a.templates.dropdownMenu)()),e=b.clone().css(a.css.hint).css(f(b)),e.val("").addClass(i.className(a.cssClasses.prefix,a.cssClasses.hint,!0)).removeAttr("id name placeholder required").prop("readonly",!0).attr({"aria-hidden":"true",autocomplete:"off",spellcheck:"false",tabindex:-1}),e.removeData&&e.removeData(),b.data(h,{"aria-autocomplete":b.attr("aria-autocomplete"),"aria-expanded":b.attr("aria-expanded"),"aria-owns":b.attr("aria-owns"),autocomplete:b.attr("autocomplete"),dir:b.attr("dir"),role:b.attr("role"),spellcheck:b.attr("spellcheck"),style:b.attr("style"),type:b.attr("type")}),b.addClass(i.className(a.cssClasses.prefix,a.cssClasses.input,!0)).attr({autocomplete:"off",spellcheck:!1,role:"combobox","aria-autocomplete":a.datasets&&a.datasets[0]&&a.datasets[0].displayKey?"both":"list","aria-expanded":"false","aria-label":a.ariaLabel,"aria-owns":a.listboxId}).css(a.hint?a.css.input:a.css.inputWithNoHint);try{b.attr("dir")||b.attr("dir","auto")}catch(a){}return c=a.appendTo?c.appendTo(j.element(a.appendTo).eq(0)).eq(0):b.wrap(c).parent(),c.prepend(a.hint?e:null).append(d),{wrapper:c,input:b,hint:e,menu:d}}function f(a){return{backgroundAttachment:a.css("background-attachment"),backgroundClip:a.css("background-clip"),backgroundColor:a.css("background-color"),backgroundImage:a.css("background-image"),backgroundOrigin:a.css("background-origin"),backgroundPosition:a.css("background-position"),backgroundRepeat:a.css("background-repeat"),backgroundSize:a.css("background-size")}}function g(a,b){var c=a.find(i.className(b.prefix,b.input));i.each(c.data(h),function(a,b){void 0===a?c.removeAttr(b):c.attr(b,a)}),c.detach().removeClass(i.className(b.prefix,b.input,!0)).insertAfter(a),c.removeData&&c.removeData(h),a.remove()}var h="aaAttrs",i=c(4),j=c(3),k=c(6),l=c(7),m=c(16),n=c(18),o=c(19);i.mixin(d.prototype,{_bindKeyboardShortcuts:function(a){if(a.keyboardShortcuts){var b=this.$input,c=[];i.each(a.keyboardShortcuts,function(a){"string"==typeof a&&(a=a.toUpperCase().charCodeAt(0)),c.push(a)}),j.element(document).keydown(function(a){var d=a.target||a.srcElement,e=d.tagName;if(!d.isContentEditable&&"INPUT"!==e&&"SELECT"!==e&&"TEXTAREA"!==e){var f=a.which||a.keyCode;c.indexOf(f)!==-1&&(b.focus(),a.stopPropagation(),a.preventDefault())}})}},_onSuggestionClicked:function(a,b){var c,d={selectionMethod:"click"};(c=this.dropdown.getDatumForSuggestion(b))&&this._select(c,d)},_onCursorMoved:function(a,b){var c=this.dropdown.getDatumForCursor(),d=this.dropdown.getCurrentCursor().attr("id");this.input.setActiveDescendant(d),c&&(b&&this.input.setInputValue(c.value,!0),this.eventBus.trigger("cursorchanged",c.raw,c.datasetName))},_onCursorRemoved:function(){this.input.resetInputValue(),this._updateHint(),this.eventBus.trigger("cursorremoved")},_onDatasetRendered:function(){this._updateHint(),this.eventBus.trigger("updated")},_onOpened:function(){this._updateHint(),this.input.expand(),this.eventBus.trigger("opened")},_onEmpty:function(){this.eventBus.trigger("empty")},_onRedrawn:function(){this.$node.css("top","0px"),this.$node.css("left","0px");var a=this.$input[0].getBoundingClientRect();this.autoWidth&&this.$node.css("width",a.width+"px");var b=this.$node[0].getBoundingClientRect(),c=a.bottom-b.top;this.$node.css("top",c+"px");var d=a.left-b.left;this.$node.css("left",d+"px"),this.eventBus.trigger("redrawn")},_onShown:function(){this.eventBus.trigger("shown"),this.autoselect&&this.dropdown.cursorTopSuggestion()},_onClosed:function(){this.input.clearHint(),this.input.removeActiveDescendant(),this.input.collapse(),this.eventBus.trigger("closed")},_onFocused:function(){if(this.isActivated=!0,this.openOnFocus){var a=this.input.getQuery();a.length>=this.minLength?this.dropdown.update(a):this.dropdown.empty(),this.dropdown.open()}},_onBlurred:function(){var a,b;a=this.dropdown.getDatumForCursor(),b=this.dropdown.getDatumForTopSuggestion();var c={selectionMethod:"blur"};this.debug||(this.autoselectOnBlur&&a?this._select(a,c):this.autoselectOnBlur&&b?this._select(b,c):(this.isActivated=!1,this.dropdown.empty(),this.dropdown.close()))},_onEnterKeyed:function(a,b){var c,d
12476;c=this.dropdown.getDatumForCursor(),
vendor: 8,384 bytes, line 12477
12477d=this.dropdown.getDatumForTopSuggestion();var e={selectionMethod:"enterKey"};c?(this._select(c,e),b.preventDefault()):this.autoselect&&d&&(this._select(d,e),b.preventDefault())},_onTabKeyed:function(a,b){if(!this.tabAutocomplete)return void this.dropdown.close();var c,d={selectionMethod:"tabKey"};(c=this.dropdown.getDatumForCursor())?(this._select(c,d),b.preventDefault()):this._autocomplete(!0)},_onEscKeyed:function(){this.dropdown.close(),this.input.resetInputValue()},_onUpKeyed:function(){var a=this.input.getQuery();this.dropdown.isEmpty&&a.length>=this.minLength?this.dropdown.update(a):this.dropdown.moveCursorUp(),this.dropdown.open()},_onDownKeyed:function(){var a=this.input.getQuery();this.dropdown.isEmpty&&a.length>=this.minLength?this.dropdown.update(a):this.dropdown.moveCursorDown(),this.dropdown.open()},_onLeftKeyed:function(){"rtl"===this.dir&&this._autocomplete()},_onRightKeyed:function(){"ltr"===this.dir&&this._autocomplete()},_onQueryChanged:function(a,b){this.input.clearHintIfInvalid(),b.length>=this.minLength?this.dropdown.update(b):this.dropdown.empty(),this.dropdown.open(),this._setLanguageDirection()},_onWhitespaceChanged:function(){this._updateHint(),this.dropdown.open()},_setLanguageDirection:function(){var a=this.input.getLanguageDirection();this.dir!==a&&(this.dir=a,this.$node.css("direction",a),this.dropdown.setLanguageDirection(a))},_updateHint:function(){var a,b,c,d,e,f;a=this.dropdown.getDatumForTopSuggestion(),a&&this.dropdown.isVisible()&&!this.input.hasOverflow()?(b=this.input.getInputValue(),c=l.normalizeQuery(b),d=i.escapeRegExChars(c),e=new RegExp("^(?:"+d+")(.+$)","i"),f=e.exec(a.value),f?this.input.setHint(b+f[1]):this.input.clearHint()):this.input.clearHint()},_autocomplete:function(a){var b,c,d,e;b=this.input.getHint(),c=this.input.getQuery(),d=a||this.input.isCursorAtEnd(),b&&c!==b&&d&&(e=this.dropdown.getDatumForTopSuggestion(),e&&this.input.setInputValue(e.value),this.eventBus.trigger("autocompleted",e.raw,e.datasetName))},_select:function(a,b){void 0!==a.value&&this.input.setQuery(a.value),this.clearOnSelected?this.setVal(""):this.input.setInputValue(a.value,!0),this._setLanguageDirection(),this.eventBus.trigger("selected",a.raw,a.datasetName,b).isDefaultPrevented()===!1&&(this.dropdown.close(),i.defer(i.bind(this.dropdown.empty,this.dropdown)))},open:function(){if(!this.isActivated){var a=this.input.getInputValue();a.length>=this.minLength?this.dropdown.update(a):this.dropdown.empty()}this.dropdown.open()},close:function(){this.dropdown.close()},setVal:function(a){a=i.toStr(a),this.isActivated?this.input.setInputValue(a):(this.input.setQuery(a),this.input.setInputValue(a,!0)),this._setLanguageDirection()},getVal:function(){return this.input.getQuery()},destroy:function(){this.input.destroy(),this.dropdown.destroy(),g(this.$node,this.cssClasses),this.$node=null},getWrapper:function(){return this.dropdown.$container[0]}}),d.Dropdown=m,d.Input=l,d.sources=c(20),a.exports=d},function(a,b,c){"use strict";function d(a){a&&a.el||e.error("EventBus initialized without el"),this.$el=f.element(a.el)}var e=c(4),f=c(3);e.mixin(d.prototype,{trigger:function(a,b,c,d){var f=e.Event("autocomplete:"+a);return this.$el.trigger(f,[b,c,d]),f}}),a.exports=d},function(a,b,c){"use strict";function d(a){var b,c,d,f,g=this;a=a||{},a.input||i.error("input is missing"),b=i.bind(this._onBlur,this),c=i.bind(this._onFocus,this),d=i.bind(this._onKeydown,this),f=i.bind(this._onInput,this),this.$hint=j.element(a.hint),this.$input=j.element(a.input).on("blur.aa",b).on("focus.aa",c).on("keydown.aa",d),0===this.$hint.length&&(this.setHint=this.getHint=this.clearHint=this.clearHintIfInvalid=i.noop),i.isMsie()?this.$input.on("keydown.aa keypress.aa cut.aa paste.aa",function(a){h[a.which||a.keyCode]||i.defer(i.bind(g._onInput,g,a))}):this.$input.on("input.aa",f),this.query=this.$input.val(),this.$overflowHelper=e(this.$input)}function e(a){return j.element('<pre aria-hidden="true"></pre>').css({position:"absolute",visibility:"hidden",whiteSpace:"pre",fontFamily:a.css("font-family"),fontSize:a.css("font-size"),fontStyle:a.css("font-style"),fontVariant:a.css("font-variant"),fontWeight:a.css("font-weight"),wordSpacing:a.css("word-spacing"),letterSpacing:a.css("letter-spacing"),textIndent:a.css("text-indent"),textRendering:a.css("text-rendering"),textTransform:a.css("text-transform")}).insertAfter(a)}function f(a,b){return d.normalizeQuery(a)===d.normalizeQuery(b)}function g(a){return a.altKey||a.ctrlKey||a.metaKey||a.shiftKey}var h;h={9:"tab",27:"esc",37:"left",39:"right",13:"enter",38:"up",40:"down"};var i=c(4),j=c(3),k=c(8);d.normalizeQuery=function(a){return(a||"").replace(/^\s*/g,"").replace(/\s{2,}/g," ")},i.mixin(d.prototype,k,{_onBlur:function(){this.resetInputValue(),this.$input.removeAttr("aria-activedescendant"),this.trigger("blurred")},_onFocus:function(){this.trigger("focused")},_onKeydown:function(a){var b=h[a.which||a.keyCode];this._managePreventDefault(b,a),b&&this._shouldTrigger(b,a)&&this.trigger(b+"Keyed",a)},_onInput:function(){this._checkInputValue()},_managePreventDefault:function(a,b){var c,d,e;switch(a){case"tab":d=this.getHint(),e=this.getInputValue(),c=d&&d!==e&&!g(b);break;case"up":case"down":c=!g(b);break;default:c=!1}c&&b.preventDefault()},_shouldTrigger:function(a,b){var c;switch(a){case"tab":c=!g(b);break;default:c=!0}return c},_checkInputValue:function(){var a,b,c;a=this.getInputValue(),b=f(a,this.query),c=!(!b||!this.query)&&this.query.length!==a.length,this.query=a,b?c&&this.trigger("whitespaceChanged",this.query):this.trigger("queryChanged",this.query)},focus:function(){this.$input.focus()},blur:function(){this.$input.blur()},getQuery:function(){return this.query},setQuery:function(a){this.query=a},getInputValue:function(){return this.$input.val()},setInputValue:function(a,b){void 0===a&&(a=this.query),this.$input.val(a),b?this.clearHint():this._checkInputValue()},expand:function(){this.$input.attr("aria-expanded","true")},collapse:function(){this.$input.attr("aria-expanded","false")},setActiveDescendant:function(a){this.$input.attr("aria-activedescendant",a)},removeActiveDescendant:function(){this.$input.removeAttr("aria-activedescendant")},resetInputValue:function(){this.setInputValue(this.query,!0)},getHint:function(){return this.$hint.val()},setHint:function(a){this.$hint.val(a)},clearHint:function(){this.setHint("")},clearHintIfInvalid:function(){var a,b,c,d;a=this.getInputValue(),b=this.getHint(),c=a!==b&&0===b.indexOf(a),(d=""!==a&&c&&!this.hasOverflow())||this.clearHint()},getLanguageDirection:function(){return(this.$input.css("direction")||"ltr").toLowerCase()},hasOverflow:function(){var a=this.$input.width()-2;return this.$overflowHelper.text(this.getInputValue()),this.$overflowHelper.width()>=a},isCursorAtEnd:function(){var a,b,c;return a=this.$input.val().length,b=this.$input[0].selectionStart,i.isNumber(b)?b===a:!document.selection||(c=document.selection.createRange(),c.moveStart("character",-a),a===c.text.length)},destroy:function(){this.$hint.off(".aa"),this.$input.off(".aa"),this.$hint=this.$input=this.$overflowHelper=null}}),a.exports=d},function(a,b,c){"use strict";function d(a,b,c,d){var e;if(!c)return this;for(b=b.split(l),c=d?j(c,d):c,this._callbacks=this._callbacks||{};e=b.shift();)this._callbacks[e]=this._callbacks[e]||{sync:[],async:[]},this._callbacks[e][a].push(c);return this}function e(a,b,c){return d.call(this,"async",a,b,c)}function f(a,b,c){return d.call(this,"sync",a,b,c)}function g(a){var b;if(!this._callbacks)return this;for(a=a.split(l);b=a.shift();)delete this._callbacks[b];return this}function h(a){var b,c,d,e,f;if(!this._callbacks)return this;for(a=a.split(l),d=[].slice.call(arguments,1);(b=a.shift())&&(c=this._callbacks[b]);)e=i(c.sync,this,[b].concat(d)),f=i(c.async,this,[b].concat(d)),e()&&k(f);return this}function i(a,b,c){function d(){for(var d,e=0,f=a.length;!d&&e<f;e+=1)d=a[e].apply(b,c)===!1;return!d}return d}function j(a,b){return a.bind?a.bind(b):function(){a.apply(b,[].slice.call(arguments,0))}}var k=c(9),l=/\s+/;a.exports={onSync:f,onAsync:e,off:g,trigger:h}},function(a,b,c){"use strict";function d(){h&&i&&(h=!1,i.length?m=i.concat(m):l=-1,m.length&&e())}function e(){if(!h){n=!1,h=!0;for(var a=m.length,b=setTimeout(d);a;){for(i=m,m=[];i&&++l<a;)i[l].run();l=-1,a=m.length}i=null,l=-1,h=!1,clearTimeout(b)}}function f(a,b){this.fun=a,this.array=b}
vendor: 5,143 bytes, line 12477
12477function g(a){var b=new Array(arguments.length-1);if(arguments.length>1)for(var c=1;c<arguments.length;c++)b[c-1]=arguments[c];m.push(new f(a,b)),n||h||(n=!0,j())}for(var h,i,j,k=[c(10),c(12),c(13),c(14),c(15)],l=-1,m=[],n=!1,o=-1,p=k.length;++o<p;)if(k[o]&&k[o].test&&k[o].test()){j=k[o].install(e);break}f.prototype.run=function(){var a=this.fun,b=this.array;switch(b.length){case 0:return a();case 1:return a(b[0]);case 2:return a(b[0],b[1]);case 3:return a(b[0],b[1],b[2]);default:return a.apply(null,b)}},a.exports=g},function(a,b,c){(function(a){"use strict";b.test=function(){return void 0!==a&&!a.browser},b.install=function(b){return function(){a.nextTick(b)}}}).call(b,c(11))},function(a,b){function c(){throw new Error("setTimeout has not been defined")}function d(){throw new Error("clearTimeout has not been defined")}function e(a){if(k===setTimeout)return setTimeout(a,0);if((k===c||!k)&&setTimeout)return k=setTimeout,setTimeout(a,0);try{return k(a,0)}catch(b){try{return k.call(null,a,0)}catch(b){return k.call(this,a,0)}}}function f(a){if(l===clearTimeout)return clearTimeout(a);if((l===d||!l)&&clearTimeout)return l=clearTimeout,clearTimeout(a);try{return l(a)}catch(b){try{return l.call(null,a)}catch(b){return l.call(this,a)}}}function g(){p&&n&&(p=!1,n.length?o=n.concat(o):q=-1,o.length&&h())}function h(){if(!p){var a=e(g);p=!0;for(var b=o.length;b;){for(n=o,o=[];++q<b;)n&&n[q].run();q=-1,b=o.length}n=null,p=!1,f(a)}}function i(a,b){this.fun=a,this.array=b}function j(){}var k,l,m=a.exports={};!function(){try{k="function"==typeof setTimeout?setTimeout:c}catch(a){k=c}try{l="function"==typeof clearTimeout?clearTimeout:d}catch(a){l=d}}();var n,o=[],p=!1,q=-1;m.nextTick=function(a){var b=new Array(arguments.length-1);if(arguments.length>1)for(var c=1;c<arguments.length;c++)b[c-1]=arguments[c];o.push(new i(a,b)),1!==o.length||p||e(h)},i.prototype.run=function(){this.fun.apply(null,this.array)},m.title="browser",m.browser=!0,m.env={},m.argv=[],m.version="",m.versions={},m.on=j,m.addListener=j,m.once=j,m.off=j,m.removeListener=j,m.removeAllListeners=j,m.emit=j,m.binding=function(a){throw new Error("process.binding is not supported")},m.cwd=function(){return"/"},m.chdir=function(a){throw new Error("process.chdir is not supported")},m.umask=function(){return 0}},function(a,b){(function(a){"use strict";var c=a.MutationObserver||a.WebKitMutationObserver;b.test=function(){return c},b.install=function(b){var d=0,e=new c(b),f=a.document.createTextNode("");return e.observe(f,{characterData:!0}),function(){f.data=d=++d%2}}}).call(b,function(){return this}())},function(a,b){(function(a){"use strict";b.test=function(){return!a.setImmediate&&void 0!==a.MessageChannel},b.install=function(b){var c=new a.MessageChannel;return c.port1.onmessage=b,function(){c.port2.postMessage(0)}}}).call(b,function(){return this}())},function(a,b){(function(a){"use strict";b.test=function(){return"document"in a&&"onreadystatechange"in a.document.createElement("script")},b.install=function(b){return function(){var c=a.document.createElement("script");return c.onreadystatechange=function(){b(),c.onreadystatechange=null,c.parentNode.removeChild(c),c=null},a.document.documentElement.appendChild(c),b}}}).call(b,function(){return this}())},function(a,b){"use strict";b.test=function(){return!0},b.install=function(a){return function(){setTimeout(a,0)}}},function(a,b,c){"use strict";function d(a){var b,c,d,h=this;a=a||{},a.menu||f.error("menu is required"),f.isArray(a.datasets)||f.isObject(a.datasets)||f.error("1 or more datasets required"),a.datasets||f.error("datasets is required"),this.isOpen=!1,this.isEmpty=!0,this.minLength=a.minLength||0,this.templates={},this.appendTo=a.appendTo||!1,this.css=f.mixin({},j,a.appendTo?j.appendTo:{}),this.cssClasses=a.cssClasses=f.mixin({},j.defaultClasses,a.cssClasses||{}),this.cssClasses.prefix=a.cssClasses.formattedPrefix||f.formatPrefix(this.cssClasses.prefix,this.cssClasses.noPrefix),b=f.bind(this._onSuggestionClick,this),c=f.bind(this._onSuggestionMouseEnter,this),d=f.bind(this._onSuggestionMouseLeave,this);var i=f.className(this.cssClasses.prefix,this.cssClasses.suggestion);this.$menu=g.element(a.menu).on("mouseenter.aa",i,c).on("mouseleave.aa",i,d).on("click.aa",i,b),this.$container=a.appendTo?a.wrapper:this.$menu,a.templates&&a.templates.header&&(this.templates.header=f.templatify(a.templates.header),this.$menu.prepend(this.templates.header())),a.templates&&a.templates.empty&&(this.templates.empty=f.templatify(a.templates.empty),this.$empty=g.element('<div class="'+f.className(this.cssClasses.prefix,this.cssClasses.empty,!0)+'"></div>'),this.$menu.append(this.$empty),this.$empty.hide()),this.datasets=f.map(a.datasets,function(b){return e(h.$menu,b,a.cssClasses)}),f.each(this.datasets,function(a){var b=a.getRoot();b&&0===b.parent().length&&h.$menu.append(b),a.onSync("rendered",h._onRendered,h)}),a.templates&&a.templates.footer&&(this.templates.footer=f.templatify(a.templates.footer),this.$menu.append(this.templates.footer()));var k=this;g.element(window).resize(function(){k._redraw()})}function e(a,b,c){return new d.Dataset(f.mixin({$menu:a,cssClasse
vendor: 7,347 bytes, line 12477
12477s:c},b))}var f=c(4),g=c(3),h=c(8),i=c(17),j=c(19);f.mixin(d.prototype,h,{_onSuggestionClick:function(a){this.trigger("suggestionClicked",g.element(a.currentTarget))},_onSuggestionMouseEnter:function(a){var b=g.element(a.currentTarget);if(!b.hasClass(f.className(this.cssClasses.prefix,this.cssClasses.cursor,!0))){this._removeCursor();var c=this;setTimeout(function(){c._setCursor(b,!1)},0)}},_onSuggestionMouseLeave:function(a){if(a.relatedTarget){if(g.element(a.relatedTarget).closest("."+f.className(this.cssClasses.prefix,this.cssClasses.cursor,!0)).length>0)return}this._removeCursor(),this.trigger("cursorRemoved")},_onRendered:function(a,b){function c(a){return a.isEmpty()}function d(a){return a.templates&&a.templates.empty}if(this.isEmpty=f.every(this.datasets,c),this.isEmpty)if(b.length>=this.minLength&&this.trigger("empty"),this.$empty)if(b.length<this.minLength)this._hide();else{var e=this.templates.empty({query:this.datasets[0]&&this.datasets[0].query});this.$empty.html(e),this.$empty.show(),this._show()}else f.any(this.datasets,d)?b.length<this.minLength?this._hide():this._show():this._hide();else this.isOpen&&(this.$empty&&(this.$empty.empty(),this.$empty.hide()),b.length>=this.minLength?this._show():this._hide());this.trigger("datasetRendered")},_hide:function(){this.$container.hide()},_show:function(){this.$container.css("display","block"),this._redraw(),this.trigger("shown")},_redraw:function(){this.isOpen&&this.appendTo&&this.trigger("redrawn")},_getSuggestions:function(){return this.$menu.find(f.className(this.cssClasses.prefix,this.cssClasses.suggestion))},_getCursor:function(){return this.$menu.find(f.className(this.cssClasses.prefix,this.cssClasses.cursor)).first()},_setCursor:function(a,b){a.first().addClass(f.className(this.cssClasses.prefix,this.cssClasses.cursor,!0)).attr("aria-selected","true"),this.trigger("cursorMoved",b)},_removeCursor:function(){this._getCursor().removeClass(f.className(this.cssClasses.prefix,this.cssClasses.cursor,!0)).removeAttr("aria-selected")},_moveCursor:function(a){var b,c,d,e;if(this.isOpen){if(c=this._getCursor(),b=this._getSuggestions(),this._removeCursor(),d=b.index(c)+a,(d=(d+1)%(b.length+1)-1)===-1)return void this.trigger("cursorRemoved");d<-1&&(d=b.length-1),this._setCursor(e=b.eq(d),!0),this._ensureVisible(e)}},_ensureVisible:function(a){var b,c,d,e;b=a.position().top,c=b+a.height()+parseInt(a.css("margin-top"),10)+parseInt(a.css("margin-bottom"),10),d=this.$menu.scrollTop(),e=this.$menu.height()+parseInt(this.$menu.css("padding-top"),10)+parseInt(this.$menu.css("padding-bottom"),10),b<0?this.$menu.scrollTop(d+b):e<c&&this.$menu.scrollTop(d+(c-e))},close:function(){this.isOpen&&(this.isOpen=!1,this._removeCursor(),this._hide(),this.trigger("closed"))},open:function(){this.isOpen||(this.isOpen=!0,this.isEmpty||this._show(),this.trigger("opened"))},setLanguageDirection:function(a){this.$menu.css("ltr"===a?this.css.ltr:this.css.rtl)},moveCursorUp:function(){this._moveCursor(-1)},moveCursorDown:function(){this._moveCursor(1)},getDatumForSuggestion:function(a){var b=null;return a.length&&(b={raw:i.extractDatum(a),value:i.extractValue(a),datasetName:i.extractDatasetName(a)}),b},getCurrentCursor:function(){return this._getCursor().first()},getDatumForCursor:function(){return this.getDatumForSuggestion(this._getCursor().first())},getDatumForTopSuggestion:function(){return this.getDatumForSuggestion(this._getSuggestions().first())},cursorTopSuggestion:function(){this._setCursor(this._getSuggestions().first(),!1)},update:function(a){function b(b){b.update(a)}f.each(this.datasets,b)},empty:function(){function a(a){a.clear()}f.each(this.datasets,a),this.isEmpty=!0},isVisible:function(){return this.isOpen&&!this.isEmpty},destroy:function(){function a(a){a.destroy()}this.$menu.off(".aa"),this.$menu=null,f.each(this.datasets,a)}}),d.Dataset=i,a.exports=d},function(a,b,c){"use strict";function d(a){a=a||{},a.templates=a.templates||{},a.source||k.error("missing source"),a.name&&!g(a.name)&&k.error("invalid dataset name: "+a.name),this.query=null,this._isEmpty=!0,this.highlight=!!a.highlight,this.name=void 0===a.name||null===a.name?k.getUniqueId():a.name,this.source=a.source,this.displayFn=e(a.display||a.displayKey),this.debounce=a.debounce,this.cache=a.cache!==!1,this.templates=f(a.templates,this.displayFn),this.css=k.mixin({},n,a.appendTo?n.appendTo:{}),this.cssClasses=a.cssClasses=k.mixin({},n.defaultClasses,a.cssClasses||{}),this.cssClasses.prefix=a.cssClasses.formattedPrefix||k.formatPrefix(this.cssClasses.prefix,this.cssClasses.noPrefix);var b=k.className(this.cssClasses.prefix,this.cssClasses.dataset);this.$el=a.$menu&&a.$menu.find(b+"-"+this.name).length>0?l.element(a.$menu.find(b+"-"+this.name)[0]):l.element(m.dataset.replace("%CLASS%",this.name).replace("%PREFIX%",this.cssClasses.prefix).replace("%DATASET%",this.cssClasses.dataset)),this.$menu=a.$menu,this.clearCachedSuggestions()}function e(a){function b(b){return b[a]}return a=a||"value",k.isFunction(a)?a:b}function f(a,b){function c(a){return"<p>"+b(a)+"</p>"}return{empty:a.empty&&k.templatify(a.empty),header:a.header&&k.templatify(a.header),footer:a.footer&&k.templatify(a.footer),suggestion:a.suggestion||c}}function g(a){return/^[_a-zA-Z0-9-]+$/.test(a)}var h="aaDataset",i="aaValue",j="aaDatum",k=c(4),l=c(3),m=c(18),n=c(19),o=c(8);d.extractDatasetName=function(a){return l.element(a).data(h)},d.extractValue=function(a){return l.element(a).data(i)},d.extractDatum=function(a){var b=l.element(a).data(j);return"string"==typeof b&&(b=JSON.parse(b)),b},k.mixin(d.prototype,o,{_render:function(a,b){function c(){var b=[].slice.call(arguments,0);return b=[{query:a,isEmpty:!0}].concat(b),n.templates.empty.apply(this,b)}function d(){function a(a){var b,c=m.suggestion.replace("%PREFIX%",f.cssClasses.prefix).replace("%SUGGESTION%",f.cssClasses.suggestion);return b=l.element(c).attr({role:"option",id:["option",Math.floor(1e8*Math.random())].join("-")}).append(n.templates.suggestion.apply(this,[a].concat(e))),b.data(h,n.name),b.data(i,n.displayFn(a)||void 0),b.data(j,JSON.stringify(a)),b.children().each(function(){l.element(this).css(f.css.suggestionChild)}),b}var c,d,e=[].slice.call(arguments,0),f=this,g=m.suggestions.replace("%PREFIX%",this.cssClasses.prefix).replace("%SUGGESTIONS%",this.cssClasses.suggestions);return c=l.element(g).css(this.css.suggestions),d=k.map(b,a),c.append.apply(c,d),c}function e(){var b=[].slice.call(arguments,0);return b=[{query:a,isEmpty:!g}].concat(b),n.templates.header.apply(this,b)}function f(){var b=[].slice.call(arguments,0);return b=[{query:a,isEmpty:!g}].concat(b),n.templates.footer.apply(this,b)}if(this.$el){var g,n=this,o=[].slice.call(arguments,2);if(this.$el.empty(),g=b&&b.length,this._isEmpty=!g,!g&&this.templates.empty)this.$el.html(c.apply(this,o)).prepend(n.templates.header?e.apply(this,o):null).append(n.templates.footer?f.apply(this,o):null);else if(g)this.$el.html(d.apply(this,o)).prepend(n.templates.header?e.apply(this,o):null).append(n.templates.footer?f.apply(this,o):null);else if(b&&!Array.isArray(b))throw new TypeError("suggestions must be an array");this.$menu&&this.$menu.addClass(this.cssClasses.prefix+(g?"with":"without")+"-"+this.name).removeClass(this.cssClasses.prefix+(g?"without":"with")+"-"+this.name),this.trigger("rendered",a)}},getRoot:function(){return this.$el},
vendor: 3,212 bytes, line 12477
12477update:function(a){function b(b){if(!this.canceled&&a===this.query){var c=[].slice.call(arguments,1);this.cacheSuggestions(a,b,c),this._render.apply(this,[a,b].concat(c))}}if(this.query=a,this.canceled=!1,this.shouldFetchFromCache(a))b.apply(this,[this.cachedSuggestions].concat(this.cachedRenderExtraArgs));else{var c=this,d=function(){c.canceled||c.source(a,b.bind(c))};if(this.debounce){var e=function(){c.debounceTimeout=null,d()};clearTimeout(this.debounceTimeout),this.debounceTimeout=setTimeout(e,this.debounce)}else d()}},cacheSuggestions:function(a,b,c){this.cachedQuery=a,this.cachedSuggestions=b,this.cachedRenderExtraArgs=c},shouldFetchFromCache:function(a){return this.cache&&this.cachedQuery===a&&this.cachedSuggestions&&this.cachedSuggestions.length},clearCachedSuggestions:function(){delete this.cachedQuery,delete this.cachedSuggestions,delete this.cachedRenderExtraArgs},cancel:function(){this.canceled=!0},clear:function(){this.cancel(),this.$el.empty(),this.trigger("rendered","")},isEmpty:function(){return this._isEmpty},destroy:function(){this.clearCachedSuggestions(),this.$el=null}}),a.exports=d},function(a,b){"use strict";a.exports={wrapper:'<span class="%ROOT%"></span>',dropdown:'<span class="%PREFIX%%DROPDOWN_MENU%"></span>',dataset:'<div class="%PREFIX%%DATASET%-%CLASS%"></div>',suggestions:'<span class="%PREFIX%%SUGGESTIONS%"></span>',suggestion:'<div class="%PREFIX%%SUGGESTION%"></div>'}},function(a,b,c){"use strict";var d=c(4),e={wrapper:{position:"relative",display:"inline-block"},hint:{position:"absolute",top:"0",left:"0",borderColor:"transparent",boxShadow:"none",opacity:"1"},input:{position:"relative",verticalAlign:"top",backgroundColor:"transparent"},inputWithNoHint:{position:"relative",verticalAlign:"top"},dropdown:{position:"absolute",top:"100%",left:"0",zIndex:"100",display:"none"},suggestions:{display:"block"},suggestion:{whiteSpace:"nowrap",cursor:"pointer"},suggestionChild:{whiteSpace:"normal"},ltr:{left:"0",right:"auto"},rtl:{left:"auto",right:"0"},defaultClasses:{root:"algolia-autocomplete",prefix:"aa",noPrefix:!1,dropdownMenu:"dropdown-menu",input:"input",hint:"hint",suggestions:"suggestions",suggestion:"suggestion",cursor:"cursor",dataset:"dataset",empty:"empty"},appendTo:{wrapper:{position:"absolute",zIndex:"100",display:"none"},input:{},inputWithNoHint:{},dropdown:{display:"block"}}};d.isMsie()&&d.mixin(e.input,{backgroundImage:"url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)"}),d.isMsie()&&d.isMsie()<=7&&d.mixin(e.input,{marginTop:"-1px"}),a.exports=e},function(a,b,c){"use strict";a.exports={hits:c(21),popularIn:c(24)}},function(a,b,c){"use strict";var d=c(4),e=c(22),f=c(23);a.exports=function(a,b){function c(c,e){a.search(c,b,function(a,b){if(a)return void d.error(a.message);e(b.hits,b)})}var g=f(a.as._ua);return g&&g[0]>=3&&g[1]>20&&(b=b||{},b.additionalUA="autocomplete.js "+e),c}},function(a,b){a.exports="0.36.0"},function(a,b){"use strict";a.exports=function(a){var b=a.match(/Algolia for vanilla JavaScript (\d+\.)(\d+\.)(\d+)/);if(b)return[b[1],b[2],b[3]]}},function(a,b,c){"use strict";var d=c(4),e=c(22),f=c(23);a.exports=function(a,b,c,g){function h(h,i){a.search(h,b,function(a,h){
12477if(a)return void d.error(a.message);if(h.hits.length>0){var l=h.hits[0],m=d.mixin({hitsPerPage:0},c);delete m.source,delete m.index;var n=f(k.as._ua);return n&&n[0]>=3&&n[1]>20&&(b.additionalUA="autocomplete.js "+e),void k.search(j(l),m,function(a,b){if(a)return void d.error(a.message);var c=[];if(g.includeAll){var e=g.allTitle||"All departments";c.push(d.mixin({facet:{value:e,count:b.nbHits}},d.cloneDeep(l)))}d.each(b.facets,function(a,b){d.each(a,function(a,e){c.push(d.mixin({facet:{facet:b,value:e,count:a}},d.cloneDeep(l)))})});for(var f=1;f<h.hits.length;++f)c.push(h.hits[f]);i(c,h)})}i([])})}var i=f(a.as._ua);if(i&&i[0]>=3&&i[1]>20&&(b=b||{},b.additionalUA="autocomplete.js "+e),!c.source)return d.error("Missing 'source' key");var j=d.isFunction(c.source)?c.source:function(a){return a[c.source]};if(!c.index)return d.error("Missing 'index' key");var k=c.index;return g=g||{},h}}])}); 12478/*! InstantSearch.js 4.43.0 | © Algolia, Inc. and contributors; MIT License | https://github.com/algolia/instantsearch.js */ 12479!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e=e||self).instantsearch=t()}(this,function(){"use strict";function f(e){return(f="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function C(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function r(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function E(e,t,n){return t&&r(e.prototype,t),n&&r(e,n),e}function k(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function h(){return(h=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e}).apply(this,arguments)}function i(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),n.push.apply(n,r)}return n}function W(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?i(Object(n),!0).forEach(function(e){k(t,e,n[e])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):i(Object(n)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))})}return t}function L(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&n(e,t)}function a(e){return(a=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function n(e,t){return(n=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}function j(e,t){if(null==e)return{};var n,r,i=function(e,t){if(null==e)return{};var n,r,i={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],0<=t.indexOf(n)||(i[n]=e[n]);return i}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],0<=t.indexOf(n)||Object.prototype.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i}function M(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function O(r){var i=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],function(){})),!0}catch(e){return!1}}();return function(){var e,t=a(r);if(i){var n=a(this).constructor;e=Reflect.construct(t,arguments,n)}else e=t.apply(this,arguments);return function(e,t){return!t||"object"!=typeof t&&"function"!=typeof t?M(e):t}(this,e)}}function D(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){if("undefined"==typeof Symbol||!(Symbol.iterator in Object(e)))return;var n=[],r=!0,i=!1,a=void 0;try{for(var s,o=e[Symbol.iterator]();!(r=(s=o.next()).done)&&(n.push(s.value),!t||n.length!==t);r=!0);}catch(e){i=!0,a=e}finally{try{r||null==o.return||o.return()}finally{if(i)throw a}}return n}(e,t)||s(e,t)||function(){throw new TypeError("Invalid attempt to de
12479structure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function P(e){return function(e){if(Array.isArray(e))return o(e)}(e)||function(e){if("undefined"!=typeof Symbol&&Symbol.iterator in Object(e))return Array.from(e)}(e)||s(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function s(e,t){if(e){if("string"==typeof e)return o(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?o(e,t):void 0}}function o(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function c(e){return"function"==typeof e||Array.isArray(e)||"[object Object]"===Object.prototype.toString.call(e)}function u(e,t){if(e===t)return e;for(var n in t)if(Object.prototype.hasOwnProperty.call(t,n)&&"__proto__"!==n){var r=t[n],i=e[n];void 0!==i&&void 0===r||(c(i)&&c(r)?e[n]=u(i,r):e[n]="object"==typeof(a=r)&&null!==a?u(Array.isArray(a)?[]:{},a):a)}var a;return e}var m=function(e){c(e)||(e={});for(var t=1,n=arguments.length;t<n;t++){var r=arguments[t];c(r)&&u(e,r)}return e},p=function(){return Array.prototype.slice.call(arguments).reduceRight(function(t,n){return Object.keys(Object(n)).forEach(function(e){void 0!==n[e]&&(void 0!==t[e]&&delete t[e],t[e]=n[e])}),t},{})};var l=function(n,r){return n.filter(function(e,t){return-1<r.indexOf(e)&&n.indexOf(e)===t})},g=function(e,t){if(Array.isArray(e))for(var n=0;n<e.length;n++)if(t(e[n]))return e[n]};var d=function e(t){if("number"==typeof t)return t;if("string"==typeof t)return parseFloat(t);if(Array.isArray(t))return t.map(e);throw new Error("The value should be a number, a parsable string or an array of those.")};var v=function(e,t){if(null===e)return{};var n,r,i={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],0<=t.indexOf(n)||(i[n]=e[n]);return i};var y=function(e){return e&&0<Object.keys(e).length},t=function(e){return null!==e&&/^[a-zA-Z0-9_-]{1,64}$/.test(e)},b={addRefinement:function(e,t,n){if(b.isRefined(e,t,n))return e;var r=""+n,i=e[t]?e[t].concat(r):[r],a={};return a[t]=i,p({},a,e)},removeRefinement:function(e,n,t){if(void 0===t)return b.clearRefinement(e,function(e,t){return n===t});var r=""+t;return b.clearRefinement(e,function(e,t){return n===t&&r===e})},toggleRefinement:function(e,t,n){if(void 0===n)throw new Error("toggleRefinement should be used with a value");return b.isRefined(e,t,n)?b.removeRefinement(e,t,n):b.addRefinement(e,t,n)},clearRefinement:function(i,a,s){if(void 0===a)return y(i)?{}:i;if("string"==typeof a)return v(i,[a]);if("function"==typeof a){var o=!1,e=Object.keys(i).reduce(function(e,t){var n=i[t]||[],r=n.filter(function(e){return!a(e,t,s)});return r.length!==n.length&&(o=!0),e[t]=r,e},{});return o?e:i}},isRefined:function(e,t,n){var r=!!e[t]&&0<e[t].length;if(void 0===n||!r)return r;var i=""+n;return-1!==e[t].indexOf(i)}},S=b;function R(e,n){return Array.isArray(e)&&Array.isArray(n)?e.length===n.length&&e.every(function(e,t){return R(n[t],e)}):e===n}function w(e){var r=e?w._parseNumbers(e):{};void 0===r.userToken||t(r.userToken)||console.warn("[algoliasearch-helper] The `userToken` parameter is invalid. This can lead to wrong analytics.\n - Format: [a-zA-Z0-9_-]{1,64}"),this.facets=r.facets||[],this.disjunctiveFacets=r.disjunctiveFacets||[],this.hierarchicalFacets=r.hierarchicalFacets||[],this.facetsRefinements=r.facetsRefinements||{},this.facetsExcludes=r.facetsExcludes||{},this.disjunctiveFacetsRefinements=r.disjunctiveFacetsRefinements||{},this.numericRefinements=r.numericRefinements||{},this.tagRefinements=r.tagRefinements||[],this.hierarchicalFacetsRefinements=r.hierarchicalFacetsRefinements||{};var i=this;Object.keys(r).forEach(function(e){var t=-1!==w.PARAMETERS.indexOf(e),n=void 0!==r[e];!t&&n&&(i[e]=r[e])})}w.PARAMETERS=Object.keys(new w),w._parseNumbers=function(i){if(i instanceof w)return i;var r={};if(["aroundPrecision","aroundRadius","getRankingInfo","minWordSizefor2Typos","minWordSizefor1Typo","page","maxValuesPerFacet","distinct","minimumAroun
12479dRadius","hitsPerPage","minProximity"].forEach(function(e){var t=i[e];if("string"==typeof t){var n=parseFloat(t);r[e]=isNaN(n)?t:n}}),Array.isArray(i.insideBoundingBox)&&(r.insideBoundingBox=i.insideBoundingBox.map(function(e){return Array.isArray(e)?e.map(function(e){return parseFloat(e)}):e})),i.numericRefinements){var a={};Object.keys(i.numericRefinements).forEach(function(n){var r=i.numericRefinements[n]||{};a[n]={},Object.keys(r).forEach(function(e){var t=r[e].map(function(e){return Array.isArray(e)?e.map(function(e){return"string"==typeof e?parseFloat(e):e}):"string"==typeof e?parseFloat(e):e});a[n][e]=t})}),r.numericRefinements=a}return m({},i,r)},w.make=function(e){var n=new w(e);return(e.hierarchicalFacets||[]).forEach(function(e){if(e.rootPath){var t=n.getHierarchicalRefinement(e.name);0<t.length&&0!==t[0].indexOf(e.rootPath)&&(n=n.clearRefinements(e.name)),0===(t=n.getHierarchicalRefinement(e.name)).length&&(n=n.toggleHierarchicalFacetRefinement(e.name,e.rootPath))}}),n},w.validate=function(e,t){var n=t||{};return e.tagFilters&&n.tagRefinements&&0<n.tagRefinements.length?new Error("[Tags] Cannot switch from the managed tag API to the advanced API. It is probably an error, if it is really what you want, you should first clear the tags with clearTags method."):0<e.tagRefinements.length&&n.tagFilters?new Error("[Tags] Cannot switch from the advanced tag API to the managed API. It is probably an error, if it is not, you should first clear the tags with clearTags method."):e.numericFilters&&n.numericRefinements&&y(n.numericRefinements)?new Error("[Numeric filters] Can't switch from the advanced to the managed API. It is probably an error, if this is really what you want, you have to first clear the numeric filters."):y(e.numericRefinements)&&n.numericFilters?new Error("[Numeric filters] Can't switch from the managed API to the advanced. It is probably an error, if this is really what you want, you have to first clear the numeric filters."):null},w.prototype={constructor:w,clearRefinements:function(e){var t={numericRefinements:this._clearNumericRefinements(e),facetsRefinements:S.clearRefinement(this.facetsRefinements,e,"conjunctiveFacet"),facetsExcludes:S.clearRefinement(this.facetsExcludes,e,"exclude"),disjunctiveFacetsRefinements:S.clearRefinement(this.disjunctiveFacetsRefinements,e,"disjunctiveFacet"),hierarchicalFacetsRefinements:S.clearRefinement(this.hierarchicalFacetsRefinements,e,"hierarchicalFacet")};return t.numericRefinements===this.numericRefinements&&t.facetsRefinements===this.facetsRefinements&&t.facetsExcludes===this.facetsExcludes&&t.disjunctiveFacetsRefinements===this.disjunctiveFacetsRefinements&&t.hierarchicalFacetsRefinements===this.hierarchicalFacetsRefinements?this:this.setQueryParameters(t)},clearTags:function(){return void 0===this.tagFilters&&0===this.tagRefinements.length?this:this.setQueryParameters({tagFilters:void 0,tagRefinements:[]})},setIndex:function(e){return e===this.index?this:this.setQueryParameters({index:e})},setQuery:function(e){return e===this.query?this:this.setQueryParameters({query:e})},setPage:function(e){return e===this.page?this:this.setQueryParameters({page:e})},setFacets:function(e){return this.setQueryParameters({facets:e})},setDisjunctiveFacets:function(e){return this.setQueryParameters({disjunctiveFacets:e})},setHitsPerPage:function(e){return this.hitsPerPage===e?this:this.setQueryParameters({hitsPerPage:e})},setTypoTolerance:function(e){return this.typoTolerance===e?this:this.setQueryParameters({typoTolerance:e})},addNumericRefinement:function(e,t,n){var r=d(n);if(this.isNumericRefined(e,t,r))return this;var i=m({},this.numericRefinements);return i[e]=m({},i[e]),i[e][t]?(i[e][t]=i[e][t].slice(),i[e][t].push(r)):i[e][t]=[r],this.setQueryParameters({numericRefinements:i})},getConjunctiveRefinements:function(e){return this.isConjunctiveFacet(e)&&this.facetsRefinements[e]||[]},getDisjunctiveRefinements:function(e){return this.isDisjunctiveFacet(e)&&this.disjunctiveFacetsRefinements[e]||[]},getHierarchicalRefinement:function(e){return this.hierarchicalFacetsRefinements[e]||[]},getExcludeRefinements:function(e){return this.isConjunctiveFacet(e)&&this.facetsExcludes[e]||[]},removeNumericRefinement:function(n,r,i){return void 0!==i?this.isNumericRefined(n,r,i)?this.setQueryParameters({numericRefinements:this._clearNumericRefinements(function(e,t){return t===n&&e.op===r&&R(e.val,d(i))})}):this:void 0!==r?this.isNumericRefined(n,r)?this.setQueryParameters({numericRefinements:this._clearNumericRefinements(function(e,t){return t===n&&e.op===r})}):this:this.isNumericRefined(n)?this.setQueryParameters({numericRefinements:this._clearNumericRefinements(function(e,t){return t===n})}):this},getNumericRefinements:function(e){return this.numericRefinements[e]||{}},getNumericRefinement:function(e,t){return this.numericRefinements[e]&&this.numericRefinements[e][t]},_clearNumericRefinements:function(s){if(void 0===s)return y(this.numericRefinements)?{}:this.numericRefinements;if("string"==typeof s)return v(this.numericRefinements,[s]);if("function"==typeof s){var o=!1,t=this.numericRefinements,e=Object.keys(t).reduce(function(e,r){var i=t[r],a={};return i=i||{}
vendor: 23,200 bytes, line 12479
12479,Object.keys(i).forEach(function(t){var e=i[t]||[],n=[];e.forEach(function(e){s({val:e,op:t},r,"numeric")||n.push(e)}),n.length!==e.length&&(o=!0),a[t]=n}),e[r]=a,e},{});return o?e:this.numericRefinements}},addFacet:function(e){return this.isConjunctiveFacet(e)?this:this.setQueryParameters({facets:this.facets.concat([e])})},addDisjunctiveFacet:function(e){return this.isDisjunctiveFacet(e)?this:this.setQueryParameters({disjunctiveFacets:this.disjunctiveFacets.concat([e])})},addHierarchicalFacet:function(e){if(this.isHierarchicalFacet(e.name))throw new Error("Cannot declare two hierarchical facets with the same name: `"+e.name+"`");return this.setQueryParameters({hierarchicalFacets:this.hierarchicalFacets.concat([e])})},addFacetRefinement:function(e,t){if(!this.isConjunctiveFacet(e))throw new Error(e+" is not defined in the facets attribute of the helper configuration");return S.isRefined(this.facetsRefinements,e,t)?this:this.setQueryParameters({facetsRefinements:S.addRefinement(this.facetsRefinements,e,t)})},addExcludeRefinement:function(e,t){if(!this.isConjunctiveFacet(e))throw new Error(e+" is not defined in the facets attribute of the helper configuration");return S.isRefined(this.facetsExcludes,e,t)?this:this.setQueryParameters({facetsExcludes:S.addRefinement(this.facetsExcludes,e,t)})},addDisjunctiveFacetRefinement:function(e,t){if(!this.isDisjunctiveFacet(e))throw new Error(e+" is not defined in the disjunctiveFacets attribute of the helper configuration");return S.isRefined(this.disjunctiveFacetsRefinements,e,t)?this:this.setQueryParameters({disjunctiveFacetsRefinements:S.addRefinement(this.disjunctiveFacetsRefinements,e,t)})},addTagRefinement:function(e){if(this.isTagRefined(e))return this;var t={tagRefinements:this.tagRefinements.concat(e)};return this.setQueryParameters(t)},removeFacet:function(t){return this.isConjunctiveFacet(t)?this.clearRefinements(t).setQueryParameters({facets:this.facets.filter(function(e){return e!==t})}):this},removeDisjunctiveFacet:function(t){return this.isDisjunctiveFacet(t)?this.clearRefinements(t).setQueryParameters({disjunctiveFacets:this.disjunctiveFacets.filter(function(e){return e!==t})}):this},removeHierarchicalFacet:function(t){return this.isHierarchicalFacet(t)?this.clearRefinements(t).setQueryParameters({hierarchicalFacets:this.hierarchicalFacets.filter(function(e){return e.name!==t})}):this},removeFacetRefinement:function(e,t){if(!this.isConjunctiveFacet(e))throw new Error(e+" is not defined in the facets attribute of the helper configuration");return S.isRefined(this.facetsRefinements,e,t)?this.setQueryParameters({facetsRefinements:S.removeRefinement(this.facetsRefinements,e,t)}):this},removeExcludeRefinement:function(e,t){if(!this.isConjunctiveFacet(e))throw new Error(e+" is not defined in the facets attribute of the helper configuration");return S.isRefined(this.facetsExcludes,e,t)?this.setQueryParameters({facetsExcludes:S.removeRefinement(this.facetsExcludes,e,t)}):this},removeDisjunctiveFacetRefinement:function(e,t){if(!this.isDisjunctiveFacet(e))throw new Error(e+" is not defined in the disjunctiveFacets attribute of the helper configuration");return S.isRefined(this.disjunctiveFacetsRefinements,e,t)?this.setQueryParameters({disjunctiveFacetsRefinements:S.removeRefinement(this.disjunctiveFacetsRefinements,e,t)}):this},removeTagRefinement:function(t){if(!this.isTagRefined(t))return this;var e={tagRefinements:this.tagRefinements.filter(function(e){return e!==t})};return this.setQueryParameters(e)},toggleRefinement:function(e,t){return this.toggleFacetRefinement(e,t)},toggleFacetRefinement:function(e,t){if(this.isHierarchicalFacet(e))return this.toggleHierarchicalFacetRefinement(e,t);if(this.isConjunctiveFacet(e))return this.toggleConjunctiveFacetRefinement(e,t);if(this.isDisjunctiveFacet(e))return this.toggleDisjunctiveFacetRefinement(e,t);throw new Error("Cannot refine the undeclared facet "+e+"; it should be added to the helper options facets, disjunctiveFacets or hierarchicalFacets")},toggleConjunctiveFacetRefinement:function(e,t){if(!this.isConjunctiveFacet(e))throw new Error(e+" is not defined in the facets attribute of the helper configuration");return this.setQueryParameters({facetsRefinements:S.toggleRefinement(this.facetsRefinements,e,t)})},toggleExcludeFacetRefinement:function(e,t){if(!this.isConjunctiveFacet(e))throw new Error(e+" is not defined in the facets attribute of the helper configuration");return this.setQueryParameters({facetsExcludes:S.toggleRefinement(this.facetsExcludes,e,t)})},toggleDisjunctiveFacetRefinement:function(e,t){if(!this.isDisjunctiveFacet(e))throw new Error(e+" is not defined in the disjunctiveFacets attribute of the helper configuration");return this.setQueryParameters({disjunctiveFacetsRefinements:S.toggleRefinement(this.disjunctiveFacetsRefinements,e,t)})},toggleHierarchicalFacetRefinement:function(e,t){if(!this.isHierarchicalFacet(e))throw new Error(e+" is not defined in the hierarchicalFacets attribute of the helper configuration");var n=this._getHierarchicalFacetSeparator(this.getHierarchicalFacetByName(e)),r={};return void 0!==this.hierarchicalFacetsRefinements[e]&&0<this.hierarchicalFacetsRefinements[e].length&&(this.hierarchicalFacetsRefinements[e][0]===t||0===this.hierarchicalFacetsRefinements[e][0].indexOf(t+n))?-1===t.indexOf(n)?r[e]=[]:r[e]=[t.slice(0,t.lastIndexOf(n))]:r[e]=[t],this.setQueryParameters({hierarchicalFacetsRefinements:p({},r,this.hierarchicalFacetsRefinements)})},addHierarchicalFacetRefinement:function(e,t){if(this.isHierarchicalFacetRefined(e))throw new Error(e+" is already refined.");if(!this.isHierarchicalFacet(e))throw new Error(e+" is not defined in the hierarchicalFacets attribute of the helper configuration.");var n={};return n[e]=[t],this.setQueryParameters({hierarchicalFacetsRefinements:p({},n,this.hierarchicalFacetsRefinements)})},removeHierarchicalFacetRefinement:function(e){if(!this.isHierarchicalFacetRefined(e))return this;var t={};return t[e]=[],this.setQueryParameters({hierarchicalFacetsRefinements:p({},t,this.hierarchicalFacetsRefinements)})},toggleTagRefinement:function(e){return this.isTagRefined(e)?this.removeTagRefinement(e):this.addTagRefinement(e)},isDisjunctiveFacet:function(e){return-1<this.disjunctiveFacets.indexOf(e)},isHierarchicalFacet:function(e){return void 0!==this.getHierarchicalFacetByName(e)},isConjunctiveFacet:function(e){return-1<this.facets.indexOf(e)},isFacetRefined:function(e,t){return!!this.isConjunctiveFacet(e)&&S.isRefined(this.facetsRefinements,e,t)},isExcludeRefined:function(e,t){return!!this.isConjunctiveFacet(e)&&S.isRefined(this.facetsExcludes,e,t)},isDisjunctiveFacetRefined:function(e,t){return!!this.isDisjunctiveFacet(e)&&S.isRefined(this.disjunctiveFacetsRefinements,e,t)},isHierarchicalFacetRefined:function(e,t){if(!this.isHierarchicalFacet(e))return!1;var n=this.getHierarchicalRefinement(e);return t?-1!==n.indexOf(t):0<n.length},isNumericRefined:function(e,t,n){if(void 0===n&&void 0===t)return!!this.numericRefinements[e];var r=this.numericRefinements[e]&&void 0!==this.numericRefinements[e][t];if(void 0===n||!r)return r;var i=d(n),a=void 0!==function(e,t){return g(e,function(e){return R(e,t)})}(this.numericRefinements[e][t],i);return r&&a},isTagRefined:function(e){return-1!==this.tagRefinements.indexOf(e)},getRefinedDisjunctiveFacets:function(){var t=this,e=l(Object.keys(this.numericRefinements).filter(function(e){return 0<Object.keys(t.numericRefinements[e]).length}),this.disjunctiveFacets);return Object.keys(this.disjunctiveFacetsRefinements).filter(function(e){return 0<t.disjunctiveFacetsRefinements[e].length}).concat(e).concat(this.getRefinedHierarchicalFacets())},getRefinedHierarchicalFacets:function(){var t=this;return l(this.hierarchicalFacets.map(function(e){return e.name}),Object.keys(this.hierarchicalFacetsRefinements).filter(function(e){return 0<t.hierarchicalFacetsRefinements[e].length}))},getUnrefinedDisjunctiveFacets:function(){var t=this.getRefinedDisjunctiveFacets();return this.disjunctiveFacets.filter(function(e){return-1===t.indexOf(e)})},managedParameters:["index","facets","disjunctiveFacets","facetsRefinements","hierarchicalFacets","facetsExcludes","disjunctiveFacetsRefinements","numericRefinements","tagRefinements","hierarchicalFacetsRefinements"],getQueryParams:function(){var n=this.managedParameters,r={},i=this;return Object.keys(this).forEach(function(e){var t=i[e];-1===n.indexOf(e)&&void 0!==t&&(r[e]=t)}),r},setQueryParameter:function(e,t){if(this[e]===t)return this;var n={};return n[e]=t,this.setQueryParameters(n)},setQueryParameters:function(e){if(!e)return this;var t=w.validate(this,e);if(t)throw t;var n=this,i=w._parseNumbers(e),r=Object.keys(this).reduce(function(e,t){return e[t]=n[t],e},{}),a=Object.keys(i).reduce(function(e,t){var n=void 0!==e[t],r=void 0!==i[t];return n&&!r?v(e,[t]):(r&&(e[t]=i[t]),e)},r);return new this.constructor(a)},resetPage:function(){return void 0===this.page?this:this.setPage(0)},_getHierarchicalFacetSortBy:function(e){return e.sortBy||["isRefined:desc","name:asc"]},_getHierarchicalFacetSeparator:function(e){return e.separator||" > "},_getHierarchicalRootPath:function(e){return e.rootPath||null},_getHierarchicalShowParentLevel:function(e){return"boolean"!=typeof e.showParentLevel||e.showParentLevel},getHierarchicalFacetByName:function(t){return g(this.hierarchicalFacets,function(e){return e.name===t})},getHierarchicalFacetBreadcrumb:function(e){if(!this.isHierarchicalFacet(e))return[];var t=this.getHierarchicalRefinement(e)[0];if(!t)return[];var n=this._getHierarchicalFacetSeparator(this.getHierarchicalFacetByName(e));return t.split(n).map(function(e){return e.trim()})},toString:function(){return JSON.stringify(this,null,2)}};var _=w;function x(e,t){if(e!==t){var n=void 0!==e,r=null===e,i=void 0!==t,a=null===t;if(!a&&t<e||r&&i||!n)return 1;if(!r&&e<t||a&&n||!i)return-1}return 0}function N(e){return Array.isArray(e)?e.filter(Boolean):[]}function I(e,t){if(!Array.isArray(e))return-1;for(var n=0;n<e.length;n++)if(t(e[n]))return n;return-1}function F(e,t){var i=(t||[]).map(function(e){return e.split(":")});return e.reduce(function(e,t){var n=t.split(":"),r=g(i,function(e){return e[0]===n[0]});return 1<n.length||!r?(e[0].push(n[0]),e[1].push(n[1])):(e[0].push(r[0]),e[1].push(r[1])),e},[[],[]])}var T=function(e,n,i){if(!Array.isArray(e))return[];Array.isArray(i)||(i=[]);var t=e.map(function(t,e){return{criteria:n.map(function(e){return t[e]}),index:e,value:t}});return t.sort(function(e,t){for(var n=-1;++n<e.criteria.length;){var r=x(e.criteria[n],t.criteria[n]);if(r)return n>=i.length?r:"desc"===i[n]?-r:r}return e.index-t.index}),t.map(function(e){return e.value})};var e=function(e){return"string"!=typeof e?e:String(e).replace(/^-/,"\\-")},A=function(e){return"string"!=typeof e?e:e.replace(/^\\-/,"-")},H=function(d){return function(e,t){var n=d.hierarchicalFacets[t],r=d.hierarchicalFacetsRefinements[n.name]&&d.hierarchicalFacetsRefinements[n.name][0]||"",i=d._getHierarchicalFacetSeparator(n),a=d._getHierarchicalRootPath(n),s=d._getHierarchicalShowParentLevel(n),o=F(d._getHierarchicalFacetSortBy(n)),c=e.every(function(e){return e.exhaustive}),u=function(o,c,u,l,d){return function(e,n,t){var r=e;if(0<t){var i=0;for(r=e;i<t;){var a=r&&Array.isArray(r.data)?r.data:[];r=g(a,function(e){return e.isRefined}),i++}}if(r){var s=Object.keys(n.data).map(function(e){return[e,n.data[e]]}).filter(function(e){return function(e,t,n,r,i,a){return(!i||0===e.indexOf(i)&&i!==e)&&(!i&&-1===e.indexOf(r)||i&&e.split(r).length-i.split(r).length==1||-1===e.indexOf(r)&&-1===n.indexOf(r)||0===n.indexOf(e)||0===e.indexOf(t+r)&&(a||0===e.indexOf(n)))}(e[0],r.path||u,d,c,u,l)});r.data=T(s.map(function(e){var t=e[0];return function(e,t,n,r,i){var a=t.split(n);return{name:a[a.length-1].trim(),path:t,escapedValue:B(t),count:e,isRefined:r===t||0===r.indexOf(t+n),exhaustive:i,data:null}}(e[1],t,c,U(d),n.exhaustive)}),o[0],o[1])}return e}}(o,i,a,s,r),l=e;return a&&(l=e.slice(a.split(i).length)),l.reduce(u,{name:d.hierarchicalFacets[t].name,count:null,isRefined:!0,path:null,escapedValue:null,exhaustive:c,data:null})}},B=e,U=A;var q=e,Q=A;function V(e){var n={};return e.forEach(function(e,t){n[e]=t}),n}function $(e,t,n){t&&t[n]&&(e.stats=t[n])}function K(l,t,n){var c=t[0];this._rawResults=t;var d=this;Object.keys(c).forEach(function(e){d[e]=c[e]}),Object.keys(n||{}).forEach(function(e){d[e]=n[e]}),this.processingTimeMS=t.reduce(function(e,t){return void 0===t.processingTimeMS?e:e+t.processingTimeMS},0),this.disjunctiveFacets=[],this.hierarchicalFacets=l.hierarchicalFacets.map(function(){return[]}),this.facets=[];var e=l.getRefinedDisjunctiveFacets(),u=V(l.facets),h=V(l.disjunctiveFacets),r=1,f=c.facets||{};Object.keys(f).forEach(function(e){var t=f[e],n=function(e,t){return g(e,function(e){return-1<(e.attributes||[]).indexOf(t)})}(l.hierarchicalFacets,e);if(n){var r=n.attributes.indexOf(e),i=I(l.hierarchicalFacets,function(e){return e.name===n.name});d.hierarchicalFacets[i][r]={attribute:e,data:t,exhaustive:c.exhaustiveFacetsCount}}else{var a,s=-1!==l.disjunctiveFacets.indexOf(e),o=-1!==l.facets.indexOf(e);s&&(a=h[e],d.disjunctiveFacets[a]={name:e,data:t,exhaustive:c.exhaustiveFacetsCount},$(d.disjunctiveFacets[a],c.facets_stats,e)),o&&(a=u[e],d.facets[a]={name:e,data:t,exhaustive:c.exhaustiveFacetsCount},$(d.facets[a],c.facets_stats,e))}}),this.hierarchicalFacets=N(this.hierarchicalFacets),e.forEach(function(e){var a=t[r],s=a&&a.facets?a.facets:{},o=l.getHierarchicalFacetByName(e);Object.keys(s).forEach(function(t){var n,e=s[t];if(o){n=I(l.hierarchicalFacets,function(e){return e.name===o.name});var r=I(d.hierarchicalFacets[n],function(e){return e.attribute===t});if(-1===r)return;d.hierarchicalFacets[n][r].data=m({},d.hierarchicalFacets[n][r].data,e)}else{n=h[t];var i=c.facets&&c.facets[t]||{};d.disjunctiveFacets[n]={name:t,data:p({},e,i),exhaustive:a.exhaustiveFacetsCount},$(d.disjunctiveFacets[n],a.facets_stats,t),l.disjunctiveFacetsRefinements[t]&&l.disjunctiveFacetsRefinements[t].forEach(function(e){!d.disjunctiveFacets[n].data[e]&&-1<l.disjunctiveFacetsRefinements[t].indexOf(Q(e))&&(d.disjunctiveFacets[n].data[e]=0)})}}),r++}),l.getRefinedHierarchicalFacets().forEach(function(e){var o=l.getHierarchicalFacetByName(e),c=l._getHierarchicalFacetSeparator(o),u=l.getHierarchicalRefinement(e);0===u.length||u[0].split(c).length<2||t.slice(r).forEach(function(e){var s=e&&e.facets?e.facets:{};Object.keys(s).forEach(function(t){var e=s[t],n=I(l.hierarchicalFacets,function(e){return e.name===o.name}),r=I(d.hierarchicalFacets[n],function(e){return e.attribute===t});if(-1!==r){var i={};if(0<u.length){var a=u[0].split(c)[0];i[a]=d.hierarchicalFacets[n][r].data[a]}d.hierarchicalFacets[n][r].data=p(i,e,d.hierarchicalFacets[n][r].data)}}),r++})}),Object.keys(l.facetsExcludes).forEach(function(t){var e=l.facetsExcludes[t],n=u[t];d.facets[n]={name:t,data:c.facets[t],exhaustive:c.exhaustiveFacetsCount},e.forEach(function(e){d.facets[n]=d.facets[n]||{name:t},d.facets[n].data=d.facets[n].data||{},d.facets[n].data[e]=0})}),this.hierarchicalFacets=this.hierarchicalFacets.map(H(l)),this.facets=N(this.facets),this.disjunctiveFacets=N(this.disjunctiveFacets),this._state=l}function z(e,t){var n=g(e,function(e){return e.name===t});return n&&n.stats}function J(e,t,n,r,i){var a=g(i,function(e){return e.name===n}),s=a&&a.data&&a.data[r]?a.data[r]:0,o=a&&a.exhaustive||!1;return{type:t,attributeName:n,name:r,count:s,exhaustive:o}}K.prototype.getFacetByName=function(t){function e(e){return e.name===t}return g(this.facets,e)||g(this.disjunctiveFacets,e)||g(this.hierarchicalFacets,e)},K.DEFAULT_SORT=["isRefined:desc","count:desc","name:asc"],K.prototype.getFacetValues=function(e,t){var n=function(n,r){function e(e){return e.name===r}if(n._state.isConjunctiveFacet(r)){var i=g(n.facets,e);return i?Object.keys(i.data).map(function(e){var t=q(e);return{name:e,escapedValue:t,count:i.data[e],isRefined:n._state.isFacetRefined(r,t),isExcluded:n._state.isExcludeRefined(r,e)}}):[]}if(n._state.isDisjunctiveFacet(r)){var a=g(n.disjunctiveFacets,e);return a?Object.keys(a.data).map(function(e){var t=q(e);return{name:e,escapedValue:t,count:a.data[e],isRefined:n._state.isDisjunctiveFacetRefined(r,t)}}):[]}if(n._state.isHierarchicalFacet(r))return g(n.hierarchicalFacets,e)}(this,e);if(n){var r,i=p({},t,{sortBy:K.DEFAULT_SORT,facetOrdering:!(t&&t.sortBy)}),a=this;if(Array.isArray(n))r=[e];else r=a._state.getHierarchicalFacetByName(n.name).attributes;return function t(n,e,r,i){if(i=i||0,Array.isArray(e))return n(e,r[i]);if(!e.data||0===e.data.length)return e;var a=e.data.map(function(e){return t(n,e,r,i+1)}),s=n(a,r[i]);return p({data:s},e)}(function(e,t){if(i.facetOrdering){var n=function(e,t){return e.renderingContent&&e.renderingContent.facetOrdering&&e.renderingContent.facetOrdering.values&&e.renderingContent.facetOrdering.values[t]}(a,t);if(Boolean(n))return function(e,t){var n=[],r=[],i=(t.order||[]).reduce(function(e,t,n){return e[t]=n,e},{});e.forEach(function(e){var t=e.path||e.name;void 0!==i[t]?n[i[t]]=e:r.push(e)}),n=n.filter(function(e){return e});var a,s=t.sortRemainingBy;return"hidden"===s?n:(a="alpha"===s?[["path","name"],["asc","asc"]]:[["count"],["desc"]],n.concat(T(r,a[0],a[1])))}(e,n)}if(Array.isArray(i.sortBy)){var r=F(i.sortBy,K.DEFAULT_SORT);return T(e,r[0],r[1])}if("function"==typeof i.sortBy)return function(e,t){return t.sort(e)}(i.sortBy,e);throw new Error("options.sortBy is optional but if defined it must be either an array of string (predicates) or a sorting function")},n,r)}},K.prototype.getFacetStats=function(e){return this._state.isConjunctiveFacet(e)?z(this.facets,e):this._state.isDisjunctiveFacet(e)?z(this.disjunctiveFacets,e):void 0},K.prototype.getRefinements=function(){var r=this._state,n=this,i=[];return Object.keys(r.facetsRefinements).forEach(function(t){r.facetsRefinements[t].forEach(function(e){i.push(J(r,"facet",t,e,n.facets))})}),Object.keys(r.facetsExcludes).forEach(function(t){r.facetsExcludes[t].forEach(function(e){i.push(J(r,"exclude",t,e,n.facets))})}),Object.keys(r.disjunctiveFacetsRefinements).forEach(function(t){r.disjunctiveFacetsRefinements[t].forEach(function(e){i.push(J(r,"disjunctive",t,e,n.disjunctiveFacets))})}),Object.keys(r.hierarchicalFacetsRefinements).forEach(function(t){r.hierarchicalFacetsRefinements[t].forEach(function(e){i.push(function(e,t,n,r){var i=e.getHierarchicalFacetByName(t),a=e._getHierarchicalFacetSeparator(i),s=n.split(a),o=g(r,function(e){return e.name===t}),c=s.reduce(function(e,t){var n=e&&g(e.data,function(e){return e.name===t});return void 0!==n?n:e},o),u=c&&c.count||0,l=c&&c.exhaustive||!1,d=c&&c.path||"";return{type:"hierarchical",attributeName:t,name:d,count:u,exhaustive:l}}(r,t,e,n.hierarchicalFacets))})}),Object.keys(r.numericRefinements).forEach(function(n){var e=r.numericRefinements[n];Object.keys(e).forEach(function(t){e[t].forEach(function(e){i.push({type:"numeric",attributeName:n,name:e,numericValue:e,operator:t})})})}),r.tagRefinements.forEach(function(e){i.push({type:"tag",attributeName:"_tags",name:e})}),i};var Y=K;function X(){this._events=this._events||{},this._maxListeners=this._maxListeners||void 0}var G=X;function Z(e){return"function"==typeof e}function ee(e){return"object"==typeof e&&null!==e}function te(e){return void 0===e}X.prototype._events=void 0,X.prototype._maxListeners=void 0,X.defaultMaxListeners=10,X.prototype.setMaxListeners=function(e){if(!function(e){return"number"==typeof e}(e)||e<0||isNaN(e))throw TypeError("n must be a positive number");return this._maxListeners=e,this},X.prototype.emit=function(e){var t,n,r,i,a,s;if(this._events||(this._events={}),"error"===e&&(!this._events.error||ee(this._events.error)&&!this._events.error.length)){if((t=arguments[1])instanceof Error)throw t;var o=new Error('Uncaught, unspecified "error" event. ('+t+")");throw o.context=t,o}if(te(n=this._events[e]))return!1;if(Z(n))switch(arguments.length){case 1:n.call(this);break;case 2:n.call(this,arguments[1]);break;case 3:n.call(this,arguments[1],arguments[2]);break;default:i=Array.prototype.slice.call(arguments,1),n.apply(this,i)}else if(ee(n))for(i=Array.prototype.slice.call(arguments,1),r=(s=n.slice()).length,a=0;a<r;a++)s[a].apply(this,i);return!0},X.prototype.on=X.prototype.addListener=function(e,t){var n;if(!Z(t))throw TypeError("listener must be a function");return this._events||(this._events={}),this._events.newListener&&this.emit("newListener",e,Z(t.listener)?t.listener:t),this._events[e]?ee(this._events[e])?this._events[e].push(t):this._events[e]=[this._events[e],t]:this._events[e]=t,ee(this._events[e])&&!this._events[e].warned&&(n=te(this._maxListeners)?X.defaultMaxListeners:this._maxListeners)&&0<n&&this._events[e].length>n&&(this._events[e].warned=!0,console.error("(node) warning: possible EventEmitter memory leak detected. %d listeners added. Use emitter.setMaxListeners() to increase limit.",this._events[e].length),"function"==typeof console.trace&&console.trace()),this},X.prototype.once=function(e,t){if(!Z(t))throw TypeError("listener must be a function");var n=!1;function r(){this.removeListener(e,r),n||(n=!0,t.apply(this,arguments))}return r.listener=t,this.on(e,r),this},X.prototype.removeListener=function(e,t){var n,r,i,a;if(!Z(t))throw TypeError("listener must be a function");if(!this._events||!this._events[e])return this;if(i=(n=this._events[e]).length,r=-1,n===t||Z(n.listener)&&n.listener===t)delete this._events[e],this._events.removeListener&&this.emit("removeListener",e,t);else if(ee(n)){for(a=i;0<a--;)if(n[a]===t||n[a].listener&&n[a].listener===t){r=a;break}if(r<0)return this;1===n.length?(n.length=0,delete this._events[e]):n.splice(r,1),this._events.removeListener&&this.emit("removeListener",e,t)}return this},X.prototype.removeAllListeners=function(e){var t,n;if(!this._events)return this;if(!this._events.removeListener)return 0===arguments.length?this._events={}:this._events[e]&&delete this._events[e],this;if(0===arguments.length){for(t in this._events)"removeListener"!==t&&this.removeAllListeners(t);return this.removeAllListeners("removeListener"),this._events={},this}if(Z(n=this._events[e]))this.removeListener(e,n);else if(n)for(;n.length;)this.removeListener(e,n[n.length-1]);return delete this._events[e],this},X.prototype.listeners=function(e){return this._events&&this._events[e]?Z(this._events[e])?[this._events[e]]:this._events[e].slice():[]},X.prototype.listenerCount=function(e){if(this._events){var t=this._events[e];if(Z(t))return 1;if(t)return t.length}return 0},X.listenerCount=function(e,t){return e.listenerCount(t)};var ne=function(e,t){e.prototype=Object.create(t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}})};function re(e,t){this.main=e,this.fn=t,this.lastResults=null}ne(re,G),re.prototype.detach=function(){this.removeAllListeners(),this.main.detachDerivedHelper(this)},re.prototype.getModifiedState=function(e){return this.fn(e)};var ie=re;function ae(n){return Object.keys(n).sort(function(e,t){return e.localeCompare(t)}).reduce(function(e,t){return e[t]=n[t],e},{})}var se={_getQueries:function(s,o){var c=[];return c.push({indexName:s,params:se._getHitsSearchParams(o)}
12479),o.getRefinedDisjunctiveFacets().forEach(function(e){c.push({indexName:s,params:se._getDisjunctiveFacetSearchParams(o,e)})}),o.getRefinedHierarchicalFacets().forEach(function(e){var r=o.getHierarchicalFacetByName(e),t=o.getHierarchicalRefinement(e),i=o._getHierarchicalFacetSeparator(r);if(0<t.length&&1<t[0].split(i).length){var a=t[0].split(i).slice(0,-1).reduce(function(e,t,n){return e.concat({attribute:r.attributes[n],value:0===n?t:[e[e.length-1].value,t].join(i)})},[]);a.forEach(function(e,t){var n=se._getDisjunctiveFacetSearchParams(o,e.attribute,0===t),r=a[t-1];n.facetFilters=0<t?[r.attribute+":"+r.value]:void 0,c.push({indexName:s,params:n})})}}),c},_getHitsSearchParams:function(e){var t=e.facets.concat(e.disjunctiveFacets).concat(se._getHitsHierarchicalFacetsAttributes(e)),n=se._getFacetFilters(e),r=se._getNumericFilters(e),i=se._getTagFilters(e),a={facets:-1<t.indexOf("*")?["*"]:t,tagFilters:i};return 0<n.length&&(a.facetFilters=n),0<r.length&&(a.numericFilters=r),ae(m({},e.getQueryParams(),a))},_getDisjunctiveFacetSearchParams:function(e,t,n){var r=se._getFacetFilters(e,t,n),i=se._getNumericFilters(e,t),a=se._getTagFilters(e),s={hitsPerPage:0,page:0,analytics:!1,clickAnalytics:!1};0<a.length&&(s.tagFilters=a);var o=e.getHierarchicalFacetByName(t);return s.facets=o?se._getDisjunctiveHierarchicalFacetAttribute(e,o,n):t,0<i.length&&(s.numericFilters=i),0<r.length&&(s.facetFilters=r),ae(m({},e.getQueryParams(),s))},_getNumericFilters:function(e,i){if(e.numericFilters)return e.numericFilters;var a=[];return Object.keys(e.numericRefinements).forEach(function(r){var t=e.numericRefinements[r]||{};Object.keys(t).forEach(function(n){var e=t[n]||[];
vendor: 9,518 bytes, line 12479
12479i!==r&&e.forEach(function(e){if(Array.isArray(e)){var t=e.map(function(e){return r+n+e});a.push(t)}else a.push(r+n+e)})})}),a},_getTagFilters:function(e){return e.tagFilters?e.tagFilters:e.tagRefinements.join(",")},_getFacetFilters:function(o,c,u){var l=[],e=o.facetsRefinements||{};Object.keys(e).forEach(function(t){(e[t]||[]).forEach(function(e){l.push(t+":"+e)})});var n=o.facetsExcludes||{};Object.keys(n).forEach(function(t){(n[t]||[]).forEach(function(e){l.push(t+":-"+e)})});var r=o.disjunctiveFacetsRefinements||{};Object.keys(r).forEach(function(t){var e=r[t]||[];if(t!==c&&e&&0!==e.length){var n=[];e.forEach(function(e){n.push(t+":"+e)}),l.push(n)}});var d=o.hierarchicalFacetsRefinements||{};return Object.keys(d).forEach(function(e){var t=(d[e]||[])[0];if(void 0!==t){var n,r,i=o.getHierarchicalFacetByName(e),a=o._getHierarchicalFacetSeparator(i),s=o._getHierarchicalRootPath(i);if(c===e){if(-1===t.indexOf(a)||!s&&!0===u||s&&s.split(a).length===t.split(a).length)return;t=s?(r=s.split(a).length-1,s):(r=t.split(a).length-2,t.slice(0,t.lastIndexOf(a))),n=i.attributes[r]}else r=t.split(a).length-1,n=i.attributes[r];n&&l.push([n+":"+t])}}),l},_getHitsHierarchicalFacetsAttributes:function(s){return s.hierarchicalFacets.reduce(function(e,t){var n=s.getHierarchicalRefinement(t.name)[0];if(!n)return e.push(t.attributes[0]),e;var r=s._getHierarchicalFacetSeparator(t),i=n.split(r).length,a=t.attributes.slice(0,i+1);return e.concat(a)},[])},_getDisjunctiveHierarchicalFacetAttribute:function(e,t,n){var r=e._getHierarchicalFacetSeparator(t);if(!0===n){var i=e._getHierarchicalRootPath(t),a=0;return i&&(a=i.split(r).length),[t.attributes[a]]}var s=(e.getHierarchicalRefinement(t.name)[0]||"").split(r).length-1;return t.attributes.slice(0,1+s)},getSearchForFacetQuery:function(e,t,n,r){var i=r.isDisjunctiveFacet(e)?r.clearRefinements(e):r,a={facetQuery:t,facetName:e};return"number"==typeof n&&(a.maxFacetHits=n),ae(m({},se._getHitsSearchParams(i),a))}},oe=se,ce="3.10.0",ue=e;function le(e,t,n){"function"==typeof e.addAlgoliaAgent&&e.addAlgoliaAgent("JS Helper (3.10.0)"),this.setClient(e);var r=n||{};r.index=t,this.state=_.make(r),this.lastResults=null,this._queryId=0,this._lastQueryIdReceived=-1,this.derivedHelpers=[],this._currentNbQueries=0}function de(e){if(e<0)throw new Error("Page requested below 0.");return this._change({state:this.state.setPage(e),isPageReset:!1}),this}function he(){return this.state.page}ne(le,G),le.prototype.search=function(){return this._search({onlyWithDerivedHelpers:!1}),this},le.prototype.searchOnlyWithDerivedHelpers=function(){return this._search({onlyWithDerivedHelpers:!0}),this},le.prototype.getQuery=function(){var e=this.state;return oe._getHitsSearchParams(e)},le.prototype.searchOnce=function(e,t){var n=e?this.state.setQueryParameters(e):this.state,r=oe._getQueries(n.index,n),i=this;if(this._currentNbQueries++,this.emit("searchOnce",{state:n}),!t)return this.client.search(r).then(function(e){return i._currentNbQueries--,0===i._currentNbQueries&&i.emit("searchQueueEmpty"),{content:new Y(n,e.results),state:n,_originalResponse:e}},function(e){throw i._currentNbQueries--,0===i._currentNbQueries&&i.emit("searchQueueEmpty"),e});this.client.search(r).then(function(e){i._currentNbQueries--,0===i._currentNbQueries&&i.emit("searchQueueEmpty"),t(null,new Y(n,e.results),n)}).catch(function(e){i._currentNbQueries--,0===i._currentNbQueries&&i.emit("searchQueueEmpty"),t(e,null,n)})},le.prototype.findAnswers=function(e){var t=this.state,n=this.derivedHelpers[0];if(!n)return Promise.resolve([]);var r=n.getModifiedState(t),i=m({attributesForPrediction:e.attributesForPrediction,nbHits:e.nbHits},{params:v(oe._getHitsSearchParams(r),["attributesToSnippet","hitsPerPage","restrictSearchableAttributes","snippetEllipsisText"])}),a="search for answers was called, but this client does not have a function client.initIndex(index).findAnswers";if("function"!=typeof this.client.initIndex)throw new Error(a);var s=this.client.initIndex(r.index);if("function"!=typeof s.findAnswers)throw new Error(a);return s.findAnswers(r.query,e.queryLanguages,i)},le.prototype.searchForFacetValues=function(t,e,n,r){var i="function"==typeof this.client.searchForFacetValues,a="function"==typeof this.client.initIndex;if(!i&&!a&&"function"!=typeof this.client.search)throw new Error("search for facet values (searchable) was called, but this client does not have a function client.searchForFacetValues or client.initIndex(index).searchForFacetValues");var s=this.state.setQueryParameters(r||{}),o=s.isDisjunctiveFacet(t),c=oe.getSearchForFacetQuery(t,e,n,s);this._currentNbQueries++;var u,l=this;return u=i?this.client.searchForFacetValues([{indexName:s.index,params:c}]):a?this.client.initIndex(s.index).searchForFacetValues(c):(delete c.facetName,this.client.search([{type:"facet",facet:t,indexName:s.index,params:c}]).then(function(e){return e.results[0]})),this.emit("searchForFacetValues",{state:s,facet:t,query:e}),u.then(function(e){return l._currentNbQueries--,0===l._currentNbQueries&&l.emit("searchQueueEmpty"),(e=Array.isArray(e)?e[0]:e).facetHits.forEach(function(e){e.escapedValue=ue(e.value),e.isRefined=o?s.isDisjunctiveFacetRefined(t,e.escapedValue):s.isFacetRefined(t,e.escapedValue)}),e},function(e){throw l._currentNbQueries--,0===l._currentNbQueries&&l.emit("searchQueueEmpty"),e})},le.prototype.setQuery=function(e){return this._change({state:this.state.resetPage().setQuery(e),isPageReset:!0}),this},le.prototype.clearRefinements=function(e){return this._change({state:this.state.resetPage().clearRefinements(e),isPageReset:!0}),this},le.prototype.clearTags=function(){return this._change({state:this.state.resetPage().clearTags(),isPageReset:!0}),this},le.prototype.addDisjunctiveFacetRefinement=function(e,t){return this._change({state:this.state.resetPage().addDisjunctiveFacetRefinement(e,t),isPageReset:!0}),this},le.prototype.addDisjunctiveRefine=function(){return this.addDisjunctiveFacetRefinement.apply(this,arguments)},le.prototype.addHierarchicalFacetRefinement=function(e,t){return this._change({state:this.state.resetPage().addHierarchicalFacetRefinement(e,t),isPageReset:!0}),this},le.prototype.addNumericRefinement=function(e,t,n){return this._change({state:this.state.resetPage().addNumericRefinement(e,t,n),isPageReset:!0}),this},le.prototype.addFacetRefinement=function(e,t){return this._change({state:this.state.resetPage().addFacetRefinement(e,t),isPageReset:!0}),this},le.prototype.addRefine=function(){return this.addFacetRefinement.apply(this,arguments)},le.prototype.addFacetExclusion=function(e,t){return this._change({state:this.state.resetPage().addExcludeRefinement(e,t),isPageReset:!0}),this},le.prototype.addExclude=function(){return this.addFacetExclusion.apply(this,arguments)},le.prototype.addTag=function(e){return this._change({state:this.state.resetPage().addTagRefinement(e),isPageReset:!0}),this},le.prototype.removeNumericRefinement=function(e,t,n){return this._change({state:this.state.resetPage().removeNumericRefinement(e,t,n),isPageReset:!0}),this},le.prototype.removeDisjunctiveFacetRefinement=function(e,t){return this._change({state:this.state.resetPage().removeDisjunctiveFacetRefinement(e,t),isPageReset:!0}),this},le.prototype.removeDisjunctiveRefine=function(){return this.removeDisjunctiveFacetRefinement.apply(this,arguments)},le.prototype.removeHierarchicalFacetRefinement=function(e){return this._change({state:this.state.resetPage().removeHierarchicalFacetRefinement(e),isPageReset:!0}),this},le.prototype.removeFacetRefinement=function(e,t){return this._change({state:this.state.resetPage().removeFacetRefinement(e,t),isPageReset:!0}),this},le.prototype.removeRefine=function(){return this.removeFacetRefinement.apply(this,arguments)},le.prototype.removeFacetExclusion=function(e,t){return this._change({state:this.state.resetPage().removeExcludeRefinement(e,t),isPageReset:!0}),this},le.prototype.removeExclude=function(){return this.removeFacetExclusion.apply(this,arguments)},le.prototype.removeTag=function(e){return this._change({state:this.state.resetPage().removeTagRefinement(e),isPageReset:!0}),this},le.prototype.toggleFacetExclusion=function(e,t){return this._change({state:this.state.resetPage().toggleExcludeFacetRefinement(e,t),isPageReset:!0}),this},le.prototype.toggleExclude=function(){return this.toggleFacetExclusion.apply(this,arguments)},le.prototype.toggleRefinement=function(e,t){return this.toggleFacetRefinement(e,t)},le.prototype.toggleFacetRefinement=function(e,t){return this._change({state:this.state.resetPage().toggleFacetRefinement(e,t),isPageReset:!0}),this},le.prototype.toggleRefine=function(){return this.toggleFacetRefinement.apply(this,arguments)},le.prototype.toggleTag=function(e){return this._change({state:this.state.resetPage().toggleTagRefinement(e),isPageReset:!0}),this},le.prototype.nextPage=function(){var e=this.state.page||0;return this.setPage(e+1)},le.prototype.previousPage=function(){var e=this.state.page||0;return this.setPage(e-1)},le.prototype.setCurrentPage=de,le.prototype.setPage=de,le.prototype.setIndex=function(e){return this._change({state:this.state.resetPage().setIndex(e),isPageReset:!0}),this},le.prototype.setQueryParameter=function(e,t){return this._change({state:this.state.resetPage().setQueryParameter(e,t),isPageReset:!0}),this},le.prototype.setState=function(e){return this._change({state:_.make(e),isPageReset:!1}),this},le.prototype.overrideStateWithoutTriggeringChangeEvent=function(e){return this.state=new _(e),this}
12479,le.prototype.hasRefinements=function(e){return!!y(this.state.getNumericRefinements(e))||(this.state.isConjunctiveFacet(e)?this.state.isFacetRefined(e):this.state.isDisjunctiveFacet(e)?this.state.isDisjunctiveFacetRefined(e):!!this.state.isHierarchicalFacet(e)&&this.state.isHierarchicalFacetRefined(e))},le.prototype.isExcluded=function(e,t){return this.state.isExcludeRefined(e,t)},le.prototype.isDisjunctiveRefined=function(e,t){return this.state.isDisjunctiveFacetRefined(e,t)},le.prototype.hasTag=function(e){return this.state.isTagRefined(e)},le.prototype.isTagRefined=function(){return this.hasTagRefinements.apply(this,arguments)},le.prototype.getIndex=function(){return this.state.index},le.prototype.getCurrentPage=he,le.prototype.getPage=he,le.prototype.getTags=function(){return this.state.tagRefinements},le.prototype.getRefinements=function(e){var n=[];if(this.state.isConjunctiveFacet(e))this.state.getConjunctiveRefinements(e).forEach(function(e){n.push({value:e,type:"conjunctive"})}),this.state.getExcludeRefinements(e).forEach(function(e){n.push({value:e,type:"exclude"})});else if(this.state.isDisjunctiveFacet(e)){this.state.getDisjunctiveRefinements(e).forEach(function(e){n.push({value:e,type:"disjunctive"})})}var r=this.state.getNumericRefinements(e);return Object.keys(r).forEach(function(e){var t=r[e];n.push({value:t,operator:e,type:"numeric"})}),n},le.prototype.getNumericRefinement=function(e,t){return this.state.getNumericRefinement(e,t)},le.prototype.getHierarchicalFacetBreadcrumb=function(e){return this.state.getHierarchicalFacetBreadcrumb(e)},le.prototype._search=function(e){var r=this.state,i=[],t=[];e.onlyWithDerivedHelpers||(t=oe._getQueries(r.index,r),i.push({state:r,queriesCount:t.length,helper:this}),this.emit("search",{state:r,results:this.lastResults}));var n=this.derivedHelpers.map(function(e){var t=e.getModifiedState(r),n=oe._getQueries(t.index,t);return i.push({state:t,queriesCount:n.length,helper:e}),e.emit("search",{state:t,results:e.lastResults}),n}),a=Array.prototype.concat.apply(t,n),s=this._queryId++;this._currentNbQueries++;try{this.client.search(a).then(this._dispatchAlgoliaResponse.bind(this,i,s)).catch(this._dispatchAlgoliaError.bind(this,s))}catch(e){this.emit("error",{error:e})}},le.prototype._dispatchAlgoliaResponse=function(e,t,n){if(!(t<this._lastQueryIdReceived)){this._currentNbQueries-=t-this._lastQueryIdReceived,this._lastQueryIdReceived=t,0===this._currentNbQueries&&this.emit("searchQueueEmpty");var s=n.results.slice();e.forEach(function(e){var t=e.state,n=e.queriesCount,r=e.helper,i=s.splice(0,n),a=r.lastResults=new Y(t,i);r.emit("result",{results:a,state:t})})}},le.prototype._dispatchAlgoliaError=function(e,t){e<this._lastQueryIdReceived||(this._currentNbQueries-=e-this._lastQueryIdReceived,this._lastQueryIdReceived=e,this.emit("error",{error:t}),0===this._currentNbQueries&&this.emit("searchQueueEmpty"))},le.prototype.containsRefinement=function(e,t,n,r){return e||0!==t.length||0!==n.length||0!==r.length},le.prototype._hasDisjunctiveRefinements=function(e){return this.state.disjunctiveRefinements[e]&&0<this.state.disjunctiveRefinements[e].length},le.prototype._change=function(e){var t=e.state,n=e.isPageReset;t!==this.state&&(this.state=t,this.emit("change",{state:this.state,results:this.lastResults,isPageReset:n}))},le.prototype.clearCache=function(){return this.client.clearCache&&this.client.clearCache(),this},le.prototype.setClient=function(e){return this.client===e||("function"==typeof e.addAlgoliaAgent&&e.addAlgoliaAgent("JS Helper (3.10.0)"),this.client=e),this},le.prototype.getClient=function(){return this.client},le.prototype.derive=function(e){var t=new ie(this,e);return this.derivedHelpers.push(t),t},le.prototype.detachDerivedHelper=function(e){var t=this.derivedHelpers.indexOf(e);if(-1===t)throw new Error("Derived helper already detached");this.derivedHelpers.splice(t,1)},le.prototype.hasPendingRequests=function(){return 0<this._currentNbQueries};var fe=le;function me(e,t,n){return new fe(e,t,n)}me.version=ce,me.AlgoliaSearchHelper=fe,me.SearchParameters=_,me.SearchResults=Y;var pe=me;function ge(r){function e(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];null===i&&(i=ve.then(function(){i=null,a?a=!1:r.apply(void 0,t)}))}var i=null,a=!1;return e.wait=function(){if(null===i)throw new Error("The deferred function should be called before calling `wait()`");return i},e.cancel=function(){null!==i&&(a=!0)},e}var ve=Promise.resolve();function ye(e){var t="string"==typeof e,n=t?document.querySelector(e):e;if(function(e){return e instanceof HTMLElement||Boolean(e)&&0<e.nodeType}(n))return n;
vendor: 8,713 bytes, line 12479
12479var r="Container must be `string` or `HTMLElement`.";throw t&&(r+=" Unable to find ".concat(e)),new Error(r)}function be(e){return 1===e.button||e.altKey||e.ctrlKey||e.metaKey||e.shiftKey}function Se(e){return e.filter(function(e,t,n){return n.indexOf(e)===t})}function Re(e){var t=e.defaultTemplates,n=e.templates;return W({templatesConfig:e.templatesConfig},function(a,e){var s=1<arguments.length&&void 0!==e?e:{};return Se([].concat(P(Object.keys(a||{})),P(Object.keys(s)))).reduce(function(e,t){var n=a?a[t]:void 0,r=s[t],i=void 0!==r&&r!==n;return e.templates[t]=i?r:n,e.useCustomCompileOptions[t]=i,e},{templates:{},useCustomCompileOptions:{}})}(t,n))}function we(e,t){return e(t={exports:{}},t.exports),t.exports}var _e=we(function(e,t){!function(S){var R=/\S/,t=/\"/g,n=/\n/g,r=/\r/g,i=/\\/g,a=/\u2028/,s=/\u2029/;function w(e){"}"===e.n.substr(e.n.length-1)&&(e.n=e.n.substring(0,e.n.length-1))}function _(e){return e.trim?e.trim():e.replace(/^\s*|\s*$/g,"")}function P(e,t,n){if(t.charAt(n)!=e.charAt(0))return!1;for(var r=1,i=e.length;r<i;r++)if(t.charAt(n+r)!=e.charAt(r))return!1;return!0}S.tags={"#":1,"^":2,"<":3,$:4,"/":5,"!":6,">":7,"=":8,_v:9,"{":10,"&":11,_t:12},S.scan=function(e,t){var n,r,i,a,s,o=e.length,c=0,u=null,l=null,d="",h=[],f=!1,m=0,p=0,g="{{",v="}}";function y(){0<d.length&&(h.push({tag:"_t",text:new String(d)}),d="")}function b(e,t){if(y(),e&&function(){for(var e=!0,t=p;t<h.length;t++)if(!(e=S.tags[h[t].tag]<S.tags._v||"_t"==h[t].tag&&null===h[t].text.match(R)))return!1;return e}())for(var n,r=p;r<h.length;r++)h[r].text&&((n=h[r+1])&&">"==n.tag&&(n.indent=h[r].text.toString()),h.splice(r,1));else t||h.push({tag:"\n"});f=!1,p=h.length}for(t&&(t=t.split(" "),g=t[0],v=t[1]),m=0;m<o;m++)0==c?P(g,e,m)?(--m,y(),c=1):"\n"==e.charAt(m)?b(f):d+=e.charAt(m):1==c?(m+=g.length-1,c="="==(u=(l=S.tags[e.charAt(m+1)])?e.charAt(m+1):"_v")?(r=m,void 0,i="="+v,a=(n=e).indexOf(i,r),s=_(n.substring(n.indexOf("=",r)+1,a)).split(" "),g=s[0],v=s[s.length-1],m=a+i.length-1,0):(l&&m++,2),f=m):P(v,e,m)?(h.push({tag:u,n:_(d),otag:g,ctag:v,i:"/"==u?f-g.length:m+v.length}),d="",m+=v.length-1,c=0,"{"==u&&("}}"==v?m++:w(h[h.length-1]))):d+=e.charAt(m);return b(f,!0),h};var u={_t:!0,"\n":!0,$:!0,"/":!0};function l(e,t){for(var n=0,r=t.length;n<r;n++)if(t[n].o==e.n)return e.tag="#",!0}function d(e,t,n){for(var r=0,i=n.length;r<i;r++)if(n[r].c==e&&n[r].o==t)return!0}function o(e){var t=[];for(var n in e.partials)t.push('"'+h(n)+'":{name:"'+h(e.partials[n].name)+'", '+o(e.partials[n])+"}");return"partials: {"+t.join(",")+"}, subs: "+function(e){var t=[];for(var n in e)t.push('"'+h(n)+'": function(c,p,t,i) {'+e[n]+"}");return"{ "+t.join(",")+" }"}(e.subs)}S.stringify=function(e,t,n){return"{code: function (c,p,i) { "+S.wrapMain(e.code)+" },"+o(e)+"}"};var c=0;function h(e){return e.replace(i,"\\\\").replace(t,'\\"').replace(n,"\\n").replace(r,"\\r").replace(a,"\\u2028").replace(s,"\\u2029")}function f(e){return~e.indexOf(".")?"d":"f"}function m(e,t){var n="<"+(t.prefix||"")+e.n+c++;return t.partials[n]={name:e.n,partials:{}},t.code+='t.b(t.rp("'+h(n)+'",c,p,"'+(e.indent||"")+'"));',n}function e(e,t){t.code+="t.b(t.t(t."+f(e.n)+'("'+h(e.n)+'",c,p,0)));'}function p(e){return"t.b("+e+");"}S.generate=function(e,t,n){c=0;var r={code:"",subs:{},partials:{}};return S.walk(e,r),n.asString?this.stringify(r,t,n):this.makeTemplate(r,t,n)},S.wrapMain=function(e){return'var t=this;t.b(i=i||"");'+e+"return t.fl();"},S.template=S.Template,S.makeTemplate=function(e,t,n){var r=this.makePartials(e);return r.code=new Function("c","p","i",this.wrapMain(e.code)),new this.template(r,t,this,n)},S.makePartials=function(e){var t,n={subs:{},partials:e.partials,name:e.name};for(t in n.partials)n.partials[t]=this.makePartials(n.partials[t]);for(t in e.subs)n.subs[t]=new Function("c","p","t","i",e.subs[t]);return n},S.codegen={"#":function(e,t){t.code+="if(t.s(t."+f(e.n)+'("'+h(e.n)+'",c,p,1),c,p,0,'+e.i+","+e.end+',"'+e.otag+" "+e.ctag+'")){t.rs(c,p,function(c,p,t){',S.walk(e.nodes,t),t.code+="});c.pop();}"},"^":function(e,t){t.code+="if(!t.s(t."+f(e.n)+'("'+h(e.n)+'",c,p,1),c,p,1,0,0,"")){',S.walk(e.nodes,t),t.code+="};"},">":m,"<":function(e,t){var n={partials:{},code:"",subs:{},inPartial:!0};S.walk(e.nodes,n);var r=t.partials[m(e,t)];r.subs=n.subs,r.partials=n.partials},$:function(e,t){var n={subs:{},code:"",partials:t.partials,prefix:e.n};S.walk(e.nodes,n),t.subs[e.n]=n.code,t.inPartial||(t.code+='t.sub("'+h(e.n)+'",c,p,i);')},"\n":function(e,t){t.code+=p('"\\n"'+(e.last?"":" + i"))},_v:function(e,t){t.code+="t.b(t.v(t."+f(e.n)+'("'+h(e.n)+'",c,p,0)));'},_t:function(e,t){t.code+=p('"'+h(e.text)+'"')},"{":e,"&":e},S.walk=function(e,t){for(var n,r=0,i=e.length;r<i;r++)(n=S.codegen[e[r].tag])&&n(e[r],t);return t},S.parse=function(e,t,n){return function e(t,n,r,i){var a,s=[],o=null,c=null;for(a=r[r.length-1];0<t.length;){if(c=t.shift(),a&&"<"==a.tag&&!(c.tag in u))throw new Error("Illegal content in < super tag.");if(S.tags[c.tag]<=S.tags.$||l(c,i))r.push(c),c.nodes=e(t,c.tag,r,i);else{if("/"==c.tag){if(0===r.length)throw new Error("Closing tag without opener: /"+c.n);if(o=r.pop(),c.n!=o.n&&!d(c.n,o.n,i))throw new Error("Nesting error: "+o.n+" vs. "+c.n);return o.end=c.i,s}"\n"==c.tag&&(c.last=0==t.length||"\n"==t[0].tag)}s.push(c)}if(0<r.length)throw new Error("missing closing tag: "+r.pop().n);return s}(e,0,[],(n=n||{}).sectionTags||[])},S.cache={},S.cacheKey=function(e,t){return[e,!!t.asString,!!t.disableLambda,t.delimiters,!!t.modelGet].join("||")},S.compile=function(e,t){t=t||{};var n=S.cacheKey(e,t),r=this.cache[n];if(r){var i=r.partials;for(var a in i)delete i[a].instance;return r}return r=this.generate(this.parse(this.scan(e,t.delimiters),e,t),e,t),this.cache[n]=r}}(t)}),Pe=we(function(e,t){!function(e){function l(e,t,n){var r;return t&&"object"==typeof t&&(void 0!==t[e]?r=t[e]:n&&t.get&&"function"==typeof t.get&&(r=t.get(e))),r}e.Template=function(e,t,n,r){e=e||{},this.r=e.code||this.r,this.c=n,this.options=r||{},this.text=t||"",this.partials=e.partials||{},this.subs=e.subs||{},this.buf=""},e.Template.prototype={r:function(e,t,n){return""},v:function(e){return e=o(e),s.test(e)?e.replace(t,"&").replace(n,"<").replace(r,">").replace(i,"'").replace(a,"""):e},t:o,render:function(e,t,n){return this.ri([e],t||{},n)},ri:function(e,t,n){return this.r(e,t,n)},ep:function(e,t){var n=this.partials[e],r=t[n.name];if(n.instance&&n.base==r)return n.instance;if("string"==typeof r){if(!this.c)throw new Error("No compiler available.");r=this.c.compile(r,this.options)}if(!r)return null;if(this.partials[e].base=r,n.subs){for(key in t.stackText||(t.stackText={}),n.subs)t.stackText[key]||(t.stackText[key]=void 0!==this.activeSub&&t.stackText[this.activeSub]?t.stackText[this.activeSub]:this.text);r=function(e,t,n,r,i,a){function s(){}function o(){}var c;o.prototype=(s.prototype=e).subs;var u=new s;for(c in u.subs=new o,u.subsText={},u.buf="",r=r||{},u.stackSubs=r,u.subsText=a,t)r[c]||(r[c]=t[c]);for(c in r)u.subs[c]=r[c];for(c in i=i||{},u.stackPartials=i,n)i[c]||(i[c]=n[c]);for(c in i)u.partials[c]=i[c];return u}(r,n.subs,n.partials,this.stackSubs,this.stackPartials,t.stackText)}return this.partials[e].instance=r},rp:function(e,t,n,r){var i=this.ep(e,n);return i?i.ri(t,n,r):""},rs:function(e,t,n){var r=e[e.length-1];if(d(r))for(var i=0;i<r.length;i++)e.push(r[i]),n(e,t,this),e.pop();else n(e,t,this)},s:function(e,t,n,r,i,a,s){var o;return(!d(e)||0!==e.length)&&("function"==typeof e&&(e=this.ms(e,t,n,r,i,a,s)),o=!!e,!r&&o&&t&&t.push("object"==typeof e?e:t[t.length-1]),o)},d:function(e,t,n,r){var i,a=e.split("."),s=this.f(a[0],t,n,r),o=this.options.modelGet,c=null;if("."===e&&d(t[t.length-2]))s=t[t.length-1];else for(var u=1;u<a.length;u++)s=void 0!==(i=l(a[u],s,o))?(c=s,i):"";return!(r&&!s)&&(r||"function"!=typeof s||(t.push(c),s=this.mv(s,t,n),t.pop()),s)},f:function(e,t,n,r){for(var i=!1,a=!1,s=this.options.modelGet,o=t.length-1;0<=o;o--)if(void 0!==(i=l(e,t[o],s))){a=!0;break}return a?(r||"function"!=typeof i||(i=this.mv(i,t,n)),i):!r&&""},ls:function(e,t,n,r,i){var a=this.options.delimiters;return this.options.delimiters=i,this.b(this.ct(o(e.call(t,r)),t,n)),this.options.delimiters=a,!1},ct:function(e,t,n){if(this.options.disableLambda)throw new Error("Lambda features disabled.");return this.c.compile(e,this.options).render(t,n)},b:function(e){this.buf+=e},fl:function(){var e=this.buf;return this.buf="",e},ms:function(e,t,n,r,i,a,s){var o,c=t[t.length-1],u=e.call(c);return"function"==typeof u?!!r||(o=this.activeSub&&this.subsText&&this.subsText[this.activeSub]?this.subsText[this.activeSub]:this.text,this.ls(u,c,n,o.substring(i,a),s)):u},mv:function(e,t,n){var r=t[t.length-1],i=e.call(r);
12479return"function"==typeof i?this.ct(o(i.call(r)),r,n):i},sub:function(e,t,n,r){var i=this.subs[e];i&&(this.activeSub=e,i(t,n,this,r),this.activeSub=!1)}};var t=/&/g,n=/</g,r=/>/g,i=/\'/g,a=/\"/g,s=/[&<>\"\']/;function o(e){return String(null==e?"":e)}var d=Array.isArray||function(e){return"[object Array]"===Object.prototype.toString.call(e)}}(t)});_e.Template=Pe.Template,_e.template=_e.Template;var xe=_e;function Ne(e){var t=e.templates,n=e.templateKey,r=e.compileOptions,i=e.helpers,a=e.data,s=e.bindEvent,o=t[n];if("string"!=typeof o&&"function"!=typeof o)throw new Error("Template must be 'string' or 'function', was '".concat(f(o),"' (key: ").concat(n,")"));if("function"==typeof o)return o(a,s);var c=function(e,t,n){var r=0<arguments.length&&void 0!==e?e:{},i=1<arguments.length?t:void 0,a=2<arguments.length?n:void 0;return Object.keys(r).reduce(function(e,n){return W(W({},e),{},k({},n,function(){var t=this;return function(e){return r[n].call(a,e,function(e){return xe.compile(e,i).render(t)})}}))},{})}(i,r,a);return xe.compile(o,r).render(W(W({},a),{},{helpers:c})).replace(/[ \n\r\t\f\xA0]+/g,function(e){return e.replace(/(^|\xA0+)[^\xA0]+/g,"$1 ")}).trim()}function Ie(e,t){for(var n,r=0;r<e.length;r++)if(t(n=e[r],r,e))return n}function Fe(e){return"number"==typeof e&&e<0||"string"==typeof e?String(e).replace(/^-/,"\\-"):e}function Te(i,e,a,s,t){var o,n=4<arguments.length&&void 0!==t?t:[],r={type:e,attribute:a,name:s,escapedValue:Fe(s)},c=Ie(n,function(e){return e.name===a});return"hierarchical"===e?function(){for(var e=i.getHierarchicalFacetByName(a),n=s.split(e.separator),t=function(t){c=c&&c.data&&Ie(Object.keys(c.data).map(function(t){return function(e){return t[e]}}(c.data)),function(e){return e.name===n[t]})},r=0;void 0!==c&&r<n.length;++r)t(r);o=c&&c.count}():o=c&&c.data&&c.data[r.name],void 0!==o&&(r.count=o),c&&void 0!==c.exhaustive&&(r.exhaustive=c.exhaustive),r}function Ce(n,r,e){var t=2<arguments.length&&void 0!==e&&e,a=[],i=r.facetsRefinements,s=void 0===i?{}:i,o=r.facetsExcludes,c=void 0===o?{}:o,u=r.disjunctiveFacetsRefinements,l=void 0===u?{}:u,d=r.hierarchicalFacetsRefinements,h=void 0===d?{}:d,f=r.numericRefinements,m=void 0===f?{}:f,p=r.tagRefinements,g=void 0===p?[]:p;return Object.keys(s).forEach(function(t){s[t].forEach(function(e){a.push(Te(r,"facet",t,e,n.facets))})}),Object.keys(c).forEach(function(t){c[t].forEach(function(e){a.push({type:"exclude",attribute:t,name:e,exclude:!0})})}),Object.keys(l).forEach(function(t){l[t].forEach(function(e){a.push(Te(r,"disjunctive",t,function(e){return"string"==typeof e?e.replace(/^\\-/,"-"):e}(e),n.disjunctiveFacets))})}),Object.keys(h).forEach(function(t){h[t].forEach(function(e){a.push(Te(r,"hierarchical",t,e,n.hierarchicalFacets))})}),Object.keys(m).forEach(function(r){var i=m[r];
12479Object.keys(i).forEach(function(e){var t=e,n=i[t];(Array.isArray(n)?n:[n]).forEach(function(e){a.push({type:"numeric",attribute:r,name:"".concat(e),numericValue:e,operator:t})})})}),g.forEach(function(e){a.push({type:"tag",attribute:"_tags",name:e})}),t&&r.query&&r.query.trim()&&a.push({attribute:"query",type:"query",name:r.query,query:r.query}),a}function Ee(e){var t=e.helper,n=e.attributesToClear,r=void 0===n?[]:n,i=t.state.setPage(0);return i=r.reduce(function(e,t){return i.isNumericRefined(t)?e.removeNumericRefinement(t):i.isHierarchicalFacet(t)?e.removeHierarchicalFacetRefinement(t):i.isDisjunctiveFacet(t)?e.removeDisjunctiveFacetRefinement(t):i.isConjunctiveFacet(t)?e.removeFacetRefinement(t):e},i),-1!==r.indexOf("query")&&(i=i.setQuery("")),i}function ke(e,t){if(void 0===e||"function"!=typeof e)throw new Error("The render function is not valid (received type ".concat(function(e){return Object.prototype.toString.call(e).slice(8,-1)}(e),").\n\n").concat(t))}function Le(){}function je(e,t){return e}function Me(e,t){return(Array.isArray(t)?t:t.split(".")).reduce(function(e,t){return e&&e[t]},e)}function Oe(e){return"number"==typeof e&&isFinite(e)}function Ae(e){if(!function(e){return"object"===f(e)&&null!==e}(e)||"[object Object]"!==function(e){return null===e?void 0===e?"[object Undefined]":"[object Null]":Object.prototype.toString.call(e)}(e))return!1;if(null===Object.getPrototypeOf(e))return!0;for(var t=e;null!==Object.getPrototypeOf(t);)t=Object.getPrototypeOf(t);return Object.getPrototypeOf(e)===t}function He(e){var t=e.start,n=void 0===t?0:t,r=e.end,i=e.step,a=void 0===i?1:i,s=0===a?1:a,o=Math.round((r-n)/s);return P(Array(o)).map(function(e,t){return n+t*s})}function We(e){return e!==Object(e)}function De(e,t){if(e===t)return!0;if(We(e)||We(t)||"function"==typeof e||"function"==typeof t)return e===t;if(Object.keys(e).length!==Object.keys(t).length)return!1;for(var n=0,r=Object.keys(e);n<r.length;n++){var i=r[n];if(!(i in t))return!1;if(!De(e[i],t[i]))return!1}return!0}var Be={"&":"&","<":"<",">":">",'"':""","'":"'"},Ue=/[&<>"']/g,qe=RegExp(Ue.source);var Qe={"&":"&","<":"<",">":">",""":'"',"'":"'"},Ve=/&(amp|quot|lt|gt|#39);/g,$e=RegExp(Ve.source);var Ke={highlightPreTag:"__ais-highlight__",highlightPostTag:"__/ais-highlight__"},ze={highlightPreTag:"<mark>",highlightPostTag:"</mark>"};function Je(e){return function(e){return e&&qe.test(e)?e.replace(Ue,function(e){return Be[e]}):e}(e).replace(new RegExp(Ke.highlightPreTag,"g"),ze.highlightPreTag).replace(new RegExp(Ke.highlightPostTag,"g"),ze.highlightPostTag)}function Ye(n){return Ae(n)&&"string"!=typeof n.value?Object.keys(n).reduce(function(e,t){return W(W({},e),{},k({},t,Ye(n[t])))},{}):Array.isArray(n)?n.map(Ye):W(W({},n),{},{value:Je(n.value)})}function Xe(e){return void 0===e.__escaped&&((e=e.map(function(e){var t=h({},e);return t._highlightResult&&(t._highlightResult=Ye(t._highlightResult)),t._snippetResult&&(t._snippetResult=Ye(t._snippetResult)),t})).__escaped=!0),e}function Ge(e){var t=ze.highlightPreTag,n=ze.highlightPostTag;return e.map(function(e){return e.isHighlighted?t+e.value+n:e.value}).join("")}function Ze(e){var n=ze.highlightPostTag,t=ze.highlightPreTag,r=e.split(t),i=r.shift(),a=i?[{value:i,isHighlighted:!1}]:[];return r.forEach(function(e){var t=e.split(n);a.push({value:t[0],isHighlighted:!0}),""!==t[1]&&a.push({value:t[1],isHighlighted:!1})}),a}var et=new RegExp(/\w/i);function tt(e,t){var n,r,i=e[t],a=(null===(n=e[t+1])||void 0===n?void 0:n.isHighlighted)||!0,s=(null===(r=e[t-1])||void 0===r?void 0:r.isHighlighted)||!0;return et.test(function(e){return e&&$e.test(e)?e.replace(Ve,function(e){return Qe[e]}):e}(i.value))||s!==a?i.isHighlighted:s}function nt(n){return n.some(function(e){return e.isHighlighted})?n.map(function(e,t){return W(W({},e),{},{isHighlighted:!tt(n,t)})}):n.map(function(e){return W(W({},e),{},{isHighlighted:!1})})}function rt(e,t){return e.setQueryParameters({hierarchicalFacets:t.hierarchicalFacets.reduce(function(e,t){var n=function(e,t){if(!Array.isArray(e))return-1;for(var n=0;n<e.length;n++)if(t(e[n]))return n;return-1}(e,function(e){return e.name===t.name});if(-1===n)return e.concat(t);var r=e.slice();return r.splice(n,1,t),r},e.hierarchicalFacets)})}function it(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return t.reduce(function(e,t){var n=function(e,t){return e.setQueryParameters({hierarchicalFacetsRefinements:W(W({},e.hierarchicalFacetsRefinements),t.hierarchicalFacetsRefinements)})}(e,t);return function(e,t){t.facets,t.disjunctiveFacets,t.facetsRefinements,t.facetsExcludes,t.disjunctiveFacetsRefinements,t.numericRefinements,t.tagRefinements,t.hierarchicalFacets,t.hierarchicalFacetsRefinements,t.ruleContexts;var n=j(t,["facets","disjunctiveFacets","facetsRefinements","facetsExcludes","disjunctiveFacetsRefinements","numericRefinements","tagRefinements","hierarchicalFacets","hierarchicalFacetsRefinements","ruleContexts"]);return e.setQueryParameters(n)}(function(e,t){return t.facets.reduce(function(e,t){return e.addFacet(t)},e)}(function(e,t){var n=Se([].concat(e.ruleContexts).concat(t.ruleContexts).filter(
12479Boolean));return 0<n.length?e.setQueryParameters({ruleContexts:n}):e}(function(e,t){return t.disjunctiveFacets.reduce(function(e,t){return e.addDisjunctiveFacet(t)},e)}(function(e,t){return e.setQueryParameters({facetsRefinements:W(W({},e.facetsRefinements),t.facetsRefinements)})}(function(e,t){return e.setQueryParameters({facetsExcludes:W(W({},e.facetsExcludes),t.facetsExcludes)})}(function(e,t){return e.setQueryParameters({disjunctiveFacetsRefinements:W(W({},e.disjunctiveFacetsRefinements),t.disjunctiveFacetsRefinements)})}(function(e,t){return e.setQueryParameters({numericRefinements:W(W({},e.numericRefinements),t.numericRefinements)})}(function(e,t){return t.tagRefinements.reduce(function(e,t){return e.addTagRefinement(t)},e)}(rt(n,t),t),t),t),t),t),t),t),t),t)})}function at(e){return Array.isArray(e)?e:[e]}function st(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];var r=t.map(function(e){return function(e){var t=e.name,n=e.connector;return["https://www.algolia.com/doc/api-reference/widgets/",t,"/js/",void 0!==n&&n?"#connector":""].join("")}(e)}).join(", ");return function(e){return[e,"See documentation: ".concat(r)].filter(Boolean).join("\n\n")}}var ot=/^(-?\d+(?:\.\d+)?),\s*(-?\d+(?:\.\d+)?)$/;function ct(e){return Array.isArray(e)?function(e){var t=D(e,1)[0],n=D(t=void 0===t?[void 0,void 0,void 0,void 0]:t,4),r=n[0],i=n[1],a=n[2],s=n[3];if(!(r&&i&&a&&s))throw new Error('Invalid value for "insideBoundingBox" parameter: ['.concat(e,"]"));return{northEast:{lat:r,lng:i},southWest:{lat:a,lng:s}}}(e):function(e){var t=D(e.split(",").map(parseFloat),4),n=t[0],r=t[1],i=t[2],a=t[3];if(!(n&&r&&i&&a))throw new Error('Invalid value for "insideBoundingBox" parameter: "'.concat(e,'"'));return{northEast:{lat:n,lng:r},southWest:{lat:i,lng:a}}}(e)}function ut(e,n,r){return e.map(function(e,t){return W(W({},e),{},{__position:r*n+t+1})})}function lt(e,t){return t?e.map(function(e){return W(W({},e),{},{__queryID:t})}):e}function dt(e){var o=e.instantSearchInstance,c=e.helper,u=e.attribute,l=e.widgetType;return function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];var r=t[0],i=t[1],a=t[2],s=void 0===a?"Filter Applied":a;1===t.length&&"object"===f(t[0])?o.sendEventToInsights(t[0]):"click"!==r||2!==t.length&&3!==t.length||function(e,t,n){return e.state.isHierarchicalFacet(t)?e.state.isHierarchicalFacetRefined(t,n):e.state.isConjunctiveFacet(t)?e.state.isFacetRefined(t,n):e.state.isDisjunctiveFacetRefined(t,n)}(c,u,i)||o.sendEventToInsights({insightsMethod:"clickedFilters",widgetType:l,eventType:r,payload:{eventName:s,index:c.getIndex(),filters:["".concat(u,":").concat(i)]},attribute:u})}}function ht(e){return btoa(encodeURIComponent(JSON.stringify(e)))}function ft(e){return JSON.parse(decodeURIComponent(atob(e)))}function mt(e){var n=e.index,r=e.widgetType,t=(e.methodName,e.args),i=e.isSearchStalled;if(1===t.length&&"object"===f(t[0]))return[t[0]];var a=t[0],s=t[1],o=t[2];if(!s)return[];if(("click"===a||"conversion"===a)&&!o)return[];var c=Array.isArray(s)?function(e){return e.slice()}(s):[s];if(0===c.length)return[];var u=c[0].__queryID,l=function(e,t){for(var n=1<arguments.length&&void 0!==t?t:20,r=[],i=0;i<Math.ceil(e.length/n);i++)r.push(e.slice(i*n,(i+1)*n));return r}(c),d=l.map(function(e){return e.map(function(e){return e.objectID})}),h=l.map(function(e){return e.map(function(e){return e.__position})});return"view"===a?i?[]:l.map(function(e,t){return{insightsMethod:"viewedObjectIDs",widgetType:r,eventType:a,payload:{eventName:o||"Hits Viewed",index:n,objectIDs:d[t]},hits:e}}):"click"===a?l.map(function(e,t){return{insightsMethod:"clickedObjectIDsAfterSearch",widgetType:r,eventType:a,payload:{eventName:o,index:n,queryID:u,objectIDs:d[t],positions:h[t]},hits:e}}):"conversion"===a?l.map(function(e,t){return{insightsMethod:"convertedObjectIDsAfterSearch",widgetType:r,eventType:a,payload:{eventName:o,index:n,queryID:u,objectIDs:d[t]},hits:e}}):[]}function pt(e){var r=e.instantSearchInstance,i=e.index,a=e.widgetType;return function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];mt({widgetType:a,index:i,methodName:"sendEvent",args:t,isSearchStalled:r._isSearchStalled}
12479).forEach(function(e){return r.sendEventToInsights(e)})}}function gt(e){var i=e.index,a=e.widgetType;return function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];var r=mt({widgetType:a,index:i,methodName:"bindEvent",args:t,isSearchStalled:!1});return r.length?"data-insights-event=".concat(ht(r)):""}}function vt(e,n){if(!e)return null;var r=e.numericRefinements[n],i=[];return Object.keys(r).filter(function(e){return Array.isArray(r[e])&&0<r[e].length}).forEach(function(t){r[t].forEach(function(e){i.push("".concat(n).concat(t).concat(e))})}),i}function yt(r,i){var a=null;return function(){for(var e=arguments.length,n=new Array(e),t=0;t<e;t++)n[t]=arguments[t];return new Promise(function(e,t){a&&clearTimeout(a),a=setTimeout(function(){a=null,Promise.resolve(r.apply(void 0,n)).then(e).catch(t)},i)})}}function bt(e,t){var n,r=null===(n=e.getWidgetRenderState)||void 0===n?void 0:n.call(e,t),i=null;if(r&&r.widgetParams){var a=r.widgetParams;a.attribute?i=a.attribute:Array.isArray(a.attributes)&&(i=a.attributes[0])}if("string"!=typeof i)throw new Error("Could not find the attribute of the widget:\n\n".concat(JSON.stringify(e),"\n\nPlease check whether the widget's getWidgetRenderState returns widgetParams.attribute correctly."));return i}function St(e,t){var n=(1<arguments.length&&void 0!==t?t:{fallback:function(){}}).fallback;return"undefined"==typeof window?n():e({window:window})}var Rt=st({name:"index-widget"});function wt(e){return"ais.index"===e.$$type}function _t(e,t){var n=t.state,r=t.isPageReset,i=t._uiState;n!==e.state&&(e.state=n,e.emit("change",{state:e.state,results:e.lastResults,isPageReset:r,_uiState:i}))}function Pt(e,n,t){var r=2<arguments.length&&void 0!==t?t:{};return e.reduce(function(e,t){return wt(t)?e:t.getWidgetUiState||t.getWidgetState?t.getWidgetUiState?t.getWidgetUiState(e,n):t.getWidgetState(e,n):e},r)}function xt(e,t){var n=t.initialSearchParameters,r=j(t,["initialSearchParameters"]);return e.filter(function(e){return!wt(e)}).reduce(function(e,t){return t.getWidgetSearchParameters?t.getWidgetSearchParameters(e,r):e},n)}function Nt(e){if(void 0===e||void 0===e.indexName)throw new Error(Rt("The `indexName` option is required."));var l=e.indexName,t=e.indexId,d=void 0===t?l:t,h=[],f={},m=null,p=null,g=null,v=null;return{$$type:"ais.index",$$widgetType:"ais.index",getIndexName:function(){return l},getIndexId:function(){return d},getHelper:function(){return g},getResults:function(){return v&&v.lastResults},getScopedResults:function(){var e=this.getParent();return function n(e){return e.filter(wt).reduce(function(e,t){return e.concat.apply(e,[{indexId:t.getIndexId(),results:t.getResults(),helper:t.getHelper()}].concat(P(n(t.getWidgets()))))},[])}(e?e.getWidgets():[this])},getParent:function(){return p},createURL:function(e){return m._createURL(k({},d,Pt(h,{searchParameters:e,helper:g})))},getWidgets:function(){return h},addWidgets:function(e){var t=this;if(!Array.isArray(e))throw new Error(Rt("The `addWidgets` method expects an array of widgets."));if(e.some(function(e){return"function"!=typeof e.init&&"function"!=typeof e.render}))throw new Error(Rt("The widget definition expects a `render` and/or an `init` method."));return h=h.concat(e),m&&Boolean(e.length)&&(_t(g,{state:xt(h,{uiState:f,initialSearchParameters:g.state}),_uiState:f}),e.forEach(function(e){e.getRenderState&&It({renderState:e.getRenderState(m.renderState[t.getIndexId()]||{},{uiState:m._initialUiState,helper:t.getHelper(),parent:t,instantSearchInstance:m,state:g.state,renderState:m.renderState,templatesConfig:m.templatesConfig,createURL:t.createURL,scopedResults:[],searchMetadata:{isSearchStalled:m._isSearchStalled}}),instantSearchInstance:m,parent:t})}),e.forEach(function(e){e.init&&e.init({helper:g,parent:t,uiState:m._initialUiState,instantSearchInstance:m,state:g.state,renderState:m.renderState,templatesConfig:m.templatesConfig,createURL:t.createURL,scopedResults:[],searchMetadata:{isSearchStalled:m._isSearchStalled}})}),m.scheduleSearch()),this},removeWidgets:function(t){var n=this;if(!Array.isArray(t))throw new Error(Rt("The `removeWidgets` method expects an array of widgets."));if(t.some(function(e){return"function"!=typeof e.dispose}))throw new Error(Rt("The widget definition expects a `dispose` method."));if(h=h.filter(function(e){return-1===t.indexOf(e)}),m&&Boolean(t.length)){var e=t.reduce(function(e,t){return t.dispose({helper:g,state:e,parent:n})||e},g.state);f=Pt(h,{searchParameters:e,helper:g}),g.setState(xt(h,{uiState:f,initialSearchParameters:e})),h.length&&m.scheduleSearch()}return this},init:function(e){var t,n=this,r=e.instantSearchInstance,i=e.parent,a=e.uiState;if(null===g){m=r,p=i,f=a[d]||{};var s=r.mainHelper,o=xt(h,{uiState:f,initialSearchParameters:new pe.SearchParameters({index:l})});(g=pe({},o.index,o)).search=function(){return r.onStateChange?(r.onStateChange({uiState:r.mainIndex.getWidgetUiState({}),setUiState:r.setUiState.bind(r)}),s):s.search()},g.searchWithoutTriggeringOnStateChange=function(){return s.search()},g.searchForFacetValues=function(e,t,n,r){var i=g.state.setQueryParameters(r);return s.searchForFacetValues(e,t,n,i)},v=s.derive(function(){return it.apply(void 0,P(function(e){for(var t=e.getParent(),n=[e.getHelper().state];null!==t;)n=[t.getHelper().state].concat(n),t=t.getParent();return n}(n)))});var c=null===(t=r._initialResults)||void 0===t?void 0:t[this.getIndexId()];if(c){var u=new pe.SearchResults(new pe.SearchParameters(c.state),c.results);v.lastResults=u,g.lastResults=u}g.on("change",function(e){e.isPageReset&&!function n(e){var t=e.filter(wt);0!==t.length&&t.forEach(function(e){var t=e.getHelper();_t(t,{state:t.state.resetPage(),isPageReset:!0}),n(e.getWidgets())})}(h)}),v.on("search",function(){r.scheduleStalledRender()}),v.on("result",function(e){var t=e.results;r.scheduleRender(),g.lastResults=t}
12479),h.forEach(function(e){e.getRenderState&&It({renderState:e.getRenderState(r.renderState[n.getIndexId()]||{},{uiState:a,helper:g,parent:n,instantSearchInstance:r,state:g.state,renderState:r.renderState,templatesConfig:r.templatesConfig,createURL:n.createURL,scopedResults:[],searchMetadata:{isSearchStalled:r._isSearchStalled}}),instantSearchInstance:r,parent:n})}),h.forEach(function(e){e.init&&e.init({uiState:a,helper:g,parent:n,instantSearchInstance:r,state:g.state,renderState:r.renderState,templatesConfig:r.templatesConfig,createURL:n.createURL,scopedResults:[],searchMetadata:{isSearchStalled:r._isSearchStalled}})}),g.on("change",function(e){var t=e.state,n=e._uiState;f=Pt(h,{searchParameters:t,helper:g},n||{}),r.onStateChange||r.onInternalStateChange()}),c&&r.scheduleRender()}},render:function(e){var t=this,n=e.instantSearchInstance;this.getResults()&&(h.forEach(function(e){e.getRenderState&&It({renderState:e.getRenderState(n.renderState[t.getIndexId()]||{},{helper:t.getHelper(),parent:t,instantSearchInstance:n,results:t.getResults(),scopedResults:t.getScopedResults(),state:t.getResults()._state,renderState:n.renderState,templatesConfig:n.templatesConfig,createURL:t.createURL,searchMetadata:{isSearchStalled:n._isSearchStalled}}),instantSearchInstance:n,parent:t})}),h.forEach(function(e){e.render&&e.render({helper:g,parent:t,instantSearchInstance:n,results:t.getResults(),scopedResults:t.getScopedResults(),state:t.getResults()._state,renderState:n.renderState,templatesConfig:n.templatesConfig,createURL:t.createURL,searchMetadata:{isSearchStalled:n._isSearchStalled}})}))},dispose:function(){var t=this;h.forEach(function(e){e.dispose&&e.dispose({helper:g,state:g.state,parent:t})}),p=m=null,g.removeAllListeners(),g=null,v.detach(),v=null},getWidgetUiState:function(e){return h.filter(wt).reduce(function(e,t){return t.getWidgetUiState(e)},W(W({},e),{},k({},this.getIndexId(),f)))},getWidgetState:function(e){return this.getWidgetUiState(e)},getWidgetSearchParameters:function(e,t){var n=t.uiState;return xt(h,{uiState:n,initialSearchParameters:e})},refreshUiState:function(){f=Pt(h,{searchParameters:this.getHelper().state,helper:this.getHelper()},f)}}}function It(e){var t=e.renderState,n=e.instantSearchInstance,r=e.parent,i=r?r.getIndexId():n.mainIndex.getIndexId();n.renderState=W(W({},n.renderState),{},k({},i,W(W({},n.renderState[i]),t)))}function Ft(a){return function(){var e=0<arguments.length&&void 0!==arguments[0]?arguments[0]:{},t=e.descendantName,n=e.modifierName,r=t?"-".concat(t):"",i=n?"--".concat(n):"";return"".concat("ais","-").concat(a).concat(r).concat(i)}}var Tt=Ft("Highlight");function Ct(e){var t=e.attribute,n=e.highlightedTagName,r=void 0===n?"mark":n,i=e.hit,a=e.cssClasses,s=void 0===a?{}:a,o=(Me(i._highlightResult,t)||{}).value,c=void 0===o?"":o,u=Tt({descendantName:"highlighted"})+(s.highlighted?" ".concat(s.highlighted):"");return c.replace(new RegExp(ze.highlightPreTag,"g"),"<".concat(r,' class="').concat(u,'">')).replace(new RegExp(ze.highlightPostTag,"g"),"</".concat(r,">"))}var Et=Ft("ReverseHighlight");function kt(e){var t=e.attribute,n=e.highlightedTagName,r=void 0===n?"mark":n,i=e.hit,a=e.cssClasses,s=void 0===a?{}:a,o=(Me(i._highlightResult,t)||{}).value,c=void 0===o?"":o,u=Et({descendantName:"highlighted"})+(s.highlighted?" ".concat(s.highlighted):"");return Ge(nt(Ze(c))).replace(new RegExp(ze.highlightPreTag,"g"),"<".concat(r,' class="').concat(u,'">')).replace(new RegExp(ze.highlightPostTag,"g"),"</".concat(r,">"))}var Lt=Ft("Snippet");function jt(e){var t=e.attribute,n=e.highlightedTagName,r=void 0===n?"mark":n,i=e.hit,a=e.cssClasses,s=void 0===a?{}:a,o=(Me(i._snippetResult,t)||{}).value,c=void 0===o?"":o,u=Lt({descendantName:"highlighted"})+(s.highlighted?" ".concat(s.highlighted):"");return c.replace(new RegExp(ze.highlightPreTag,"g"),"<".concat(r,' class="').concat(u,'">')).replace(new RegExp(ze.highlightPostTag,"g"),"</".concat(r,">"))}var Mt=Ft("ReverseSnippet");function Ot(e){var t=e.attribute,n=e.highlightedTagName,r=void 0===n?"mark":n,i=e.hit,a=e.cssClasses,s=void 0===a?{}:a,o=(Me(i._snippetResult,t)||{}).value,c=void 0===o?"":o,u=Mt({descendantName:"highlighted"})+(s.highlighted?" ".concat(s.highlighted):"");
12479return Ge(nt(Ze(c))).replace(new RegExp(ze.highlightPreTag,"g"),"<".concat(r,' class="').concat(u,'">')).replace(new RegExp(ze.highlightPostTag,"g"),"</".concat(r,">"))}function At(e,t){return function(e){var t,n=e.method,r=e.payload;if("object"!==f(r))throw new Error("The insights helper expects the payload to be an object.");try{t=ht(r)}catch(e){throw new Error("Could not JSON serialize the payload object.")}return'data-insights-method="'.concat(n,'" data-insights-payload="').concat(t,'"')}({method:e,payload:t})}function Ht(){return function(e){for(var t="".concat(e,"="),n=document.cookie.split(";"),r=0;r<n.length;r++){for(var i=n[r];" "===i.charAt(0);)i=i.substring(1);if(0===i.indexOf(t))return i.substring(t.length,i.length)}}("_ALGOLIA")}function Wt(e){e.configure;return j(e,["configure"])}function Dt(){return{stateToRoute:function(n){return Object.keys(n).reduce(function(e,t){return W(W({},e),{},k({},t,Wt(n[t])))},{})},routeToState:function(e){var n=0<arguments.length&&void 0!==e?e:{};return Object.keys(n).reduce(function(e,t){return W(W({},e),{},k({},t,Wt(n[t])))},{})}}}function Bt(e,t){for(var n=t&&t.plainObjects?Object.create(null):{},r=0;r<e.length;++r)void 0!==e[r]&&(n[r]=e[r]);return n}function Ut(e,t){an.apply(e,rn(t)?t:[t])}function qt(e,t,n,r,i,a,s,o,c,u,l,d,h,f){var m=e;if("function"==typeof s?m=s(t,m):m instanceof Date?m=u(m):"comma"===n&&rn(m)&&(m=en.maybeMap(m,function(e){return e instanceof Date?u(e):e})),null===m){if(r)return a&&!h?a(t,cn.encoder,f,"key",l):t;m=""}if(function(e){return"string"==typeof e||"number"==typeof e||"boolean"==typeof e||"symbol"==typeof e||"bigint"==typeof e}(m)||en.isBuffer(m))return a?[d(h?t:a(t,cn.encoder,f,"key",l))+"="+d(a(m,cn.encoder,f,"value",l))]:[d(t)+"="+d(String(m))];var p,g=[];if(void 0===m)return g;if("comma"===n&&rn(m))p=[{value:0<m.length?m.join(",")||null:void 0}];else if(rn(s))p=s;else{var v=Object.keys(m);p=o?v.sort(o):v}for(var y=0;y<p.length;++y){var b=p[y],S="object"==typeof b&&void 0!==b.value?b.value:m[b];if(!i||null!==S){var R=rn(m)?"function"==typeof n?n(t,b):t:t+(c?"."+b:"["+b+"]");Ut(g,qt(S,R,n,r,i,a,s,o,c,u,l,d,h,f))}}return g}function Qt(e,t){return e&&"string"==typeof e&&t.comma&&-1<e.indexOf(",")?e.split(","):e}function Vt(e,t,n,r){if(e){var i=n.allowDots?e.replace(/\.([^.[]+)/g,"[$1]"):e,a=/(\[[^[\]]*])/g,s=0<n.depth&&/(\[[^[\]]*])/.exec(i),o=s?i.slice(0,s.index):i,c=[];if(o){if(!n.plainObjects&&un.call(Object.prototype,o)&&!n.allowPrototypes)return;c.push(o)}for(var u=0;0<n.depth&&null!==(s=a.exec(i))&&u<n.depth;){if(u+=1,!n.plainObjects&&un.call(Object.prototype,s[1].slice(1,-1))&&!n.allowPrototypes)return;c.push(s[1])}return s&&c.push("["+i.slice(s.index)+"]"),function(e,t,n,r){for(var i=r?t:Qt(t,n),a=e.length-1;0<=a;--a){var s,o=e[a];if("[]"===o&&n.parseArrays)s=[].concat(i);else{s=n.plainObjects?Object.create(null):{};var c="["===o.charAt(0)&&"]"===o.charAt(o.length-1)?o.slice(1,-1):o,u=parseInt(c,10);n.parseArrays||""!==c?!isNaN(u)&&o!==c&&String(u)===c&&0<=u&&n.parseArrays&&u<=n.arrayLimit?(s=[])[u]=i:s[c]=i:s={0:i}}i=s}return i}(c,t,n,r)}}function $t(e){e&&(window.document.title=e)}var Kt=String.prototype.replace,zt=/%20/g,Jt="RFC3986",Yt={default:Jt,formatters:{RFC1738:function(e){return Kt.call(e,zt,"+")},RFC3986:function(e){return String(e)}},RFC1738:"RFC1738",RFC3986:Jt},Xt=Object.prototype.hasOwnProperty,Gt=Array.isArray,Zt=function(){for(var e=[],t=0;t<256;++t)e.push("%"+((t<16?"0":"")+t.toString(16)).toUpperCase());return e}(),en={arrayToObject:Bt,assign:function(e,n){return Object.keys(n).reduce(function(e,t){return e[t]=n[t],e},e)},combine:function(e,t){return[].concat(e,t)},compact:function(e){for(var t=[{obj:{o:e},prop:"o"}],n=[],r=0;r<t.length;++r)for(var i=t[r],a=i.obj[i.prop],s=Object.keys(a),o=0;o<s.length;++o){var c=s[o],u=a[c];"object"==typeof u&&null!==u&&-1===n.indexOf(u)&&(t.push({obj:a,prop:c}),n.push(u))}return function(e){for(;1<e.length;){var t=e.pop(),n=t.obj[t.prop];if(Gt(n)){for(var r=[],i=0;i<n.length;++i)void 0!==n[i]&&r.push(n[i]);t.obj[t.prop]=r}}}(t),e},decode:function(e,t,n){var r=e.replace(/\+/g," ");
vendor: 1,115 bytes, line 12479
12479if("iso-8859-1"===n)return r.replace(/%[0-9a-f]{2}/gi,unescape);try{return decodeURIComponent(r)}catch(e){return r}},encode:function(e,t,n,r,i){if(0===e.length)return e;var a=e;if("symbol"==typeof e?a=Symbol.prototype.toString.call(e):"string"!=typeof e&&(a=String(e)),"iso-8859-1"===n)return escape(a).replace(/%u[0-9a-f]{4}/gi,function(e){return"%26%23"+parseInt(e.slice(2),16)+"%3B"});for(var s="",o=0;o<a.length;++o){var c=a.charCodeAt(o);45===c||46===c||95===c||126===c||48<=c&&c<=57||65<=c&&c<=90||97<=c&&c<=122||i===Yt.RFC1738&&(40===c||41===c)?s+=a.charAt(o):c<128?s+=Zt[c]:c<2048?s+=Zt[192|c>>6]+Zt[128|63&c]:c<55296||57344<=c?s+=Zt[224|c>>12]+Zt[128|c>>6&63]+Zt[128|63&c]:(o+=1,c=65536+((1023&c)<<10|1023&a.charCodeAt(o)),s+=Zt[240|c>>18]+Zt[128|c>>12&63]+Zt[128|c>>6&63]+Zt[128|63&c])}return s},isBuffer:function(e){return!(!e||"object"!=typeof e)&&!!(e.constructor&&e.constructor.isBuffer&&e.constructor.isBuffer(e))},isRegExp:function(e){return"[object RegExp]"===Object.prototype.toString.call(e)},maybeMap:function(e,t){if(Gt(e)){for(var n=[],r=0;r<e.length;r+=1)n.push(t(e[r]));return n}return t(e)}
12479,merge:function r(i,a,s){if(!a)return i;if("object"!=typeof a){if(Gt(i))i.push(a);else{if(!i||"object"!=typeof i)return[i,a];(s&&(s.plainObjects||s.allowPrototypes)||!Xt.call(Object.prototype,a))&&(i[a]=!0)}return i}if(!i||"object"!=typeof i)return[i].concat(a);var e=i;return Gt(i)&&!Gt(a)&&(e=Bt(i,s)),Gt(i)&&Gt(a)?(a.forEach(function(e,t){if(Xt.call(i,t)){var n=i[t];n&&"object"==typeof n&&e&&"object"==typeof e?i[t]=r(n,e,s):i.push(e)}else i[t]=e}),i):Object.keys(a).reduce(function(e,t){var n=a[t];return Xt.call(e,t)?e[t]=r(e[t],n,s):e[t]=n,e},e)}},tn=Object.prototype.hasOwnProperty,nn={brackets:function(e){return e+"[]"},comma:"comma",indices:function(e,t){return e+"["+t+"]"},repeat:function(e){return e}},rn=Array.isArray,an=Array.prototype.push,sn=Date.prototype.toISOString,on=Yt.default,cn={addQueryPrefix:!1,allowDots:!1,charset:"utf-8",charsetSentinel:!1,delimiter:"&",encode:!0,encoder:en.encode,encodeValuesOnly:!1,format:on,formatter:Yt.formatters[on],indices:!1,serializeDate:function(e){return sn.call(e)},skipNulls:!1,strictNullHandling:!1},un=Object.prototype.hasOwnProperty,ln=Array.isArray,dn={allowDots:!1,allowPrototypes:!1,arrayLimit:20,charset:"utf-8",charsetSentinel:!1,comma:!1,decoder:en.decode,delimiter:"&",depth:5,ignoreQueryPrefix:!1,interpretNumericEntities:!1,parameterLimit:1e3,parseArrays:!0,plainObjects:!1,strictNullHandling:!1},hn={formats:Yt,parse:function(e,t){var n=function(e){if(!e)return dn;if(null!==e.decoder&&void 0!==e.decoder&&"function"!=typeof e.decoder)throw new TypeError("Decoder has to be a function.");if(void 0!==e.charset&&"utf-8"!==e.charset&&"iso-8859-1"!==e.charset)throw new TypeError("The charset option must be either utf-8, iso-8859-1, or undefined");var t=void 0===e.charset?dn.charset:e.charset;return{allowDots:void 0===e.allowDots?dn.allowDots:!!e.allowDots,allowPrototypes:"boolean"==typeof e.allowPrototypes?e.allowPrototypes:dn.allowPrototypes,arrayLimit:"number"==typeof e.arrayLimit?e.arrayLimit:dn.arrayLimit,charset:t,charsetSentinel:"boolean"==typeof e.charsetSentinel?e.charsetSentinel:dn.charsetSentinel,comma:"boolean"==typeof e.comma?e.comma:dn.comma,decoder:"function"==typeof e.decoder?e.decoder:dn.decoder,delimiter:"string"==typeof e.delimiter||en.isRegExp(e.delimiter)?e.delimiter:dn.delimiter,depth:"number"==typeof e.depth||!1===e.depth?+e.depth:dn.depth,ignoreQueryPrefix:!0===e.ignoreQueryPrefix,interpretNumericEntities:"boolean"==typeof e.interpretNumericEntities?e.interpretNumericEntities:dn.interpretNumericEntities,parameterLimit:"number"==typeof e.parameterLimit?e.parameterLimit:dn.parameterLimit,parseArrays:!1!==e.parseArrays,plainObjects:"boolean"==typeof e.plainObjects?e.plainObjects:dn.plainObjects,strictNullHandling:"boolean"==typeof e.strictNullHandling?e.strictNullHandling:dn.strictNullHandling}}(t);if(""===e||null==e)return n.plainObjects?Object.create(null):{};for(var r="string"==typeof e?function(e,t){var n,r={},i=t.ignoreQueryPrefix?e.replace(/^\?/,""):e,a=t.parameterLimit===1/0?void 0:t.parameterLimit,s=i.split(t.delimiter,a),o=-1,c=t.charset;if(t.charsetSentinel)for(n=0;n<s.length;++n)0===s[n].indexOf("utf8=")&&("utf8=%E2%9C%93"===s[n]?c="utf-8":"utf8=%26%2310003%3B"===s[n]&&(c="iso-8859-1"),o=n,n=s.length);for(n=0;n<s.length;++n)if(n!==o){var u,l,d=s[n],h=d.indexOf("]="),f=-1===h?d.indexOf("="):h+1;(l=-1===f?(u=t.decoder(d,dn.decoder,c,"key"),t.strictNullHandling?null:""):(u=t.decoder(d.slice(0,f),dn.decoder,c,"key"),en.maybeMap(Qt(d.slice(f+1),t),function(e){return t.decoder(e,dn.decoder,c,"value")})))&&t.interpretNumericEntities&&"iso-8859-1"===c&&(l=l.replace(/&#(\d+);/g,function(e,t){return String.fromCharCode(parseInt(t,10))})),-1<d.indexOf("[]=")&&(l=ln(l)?[l]:l),un.call(r,u)?r[u]=en.combine(r[u],l):r[u]=l}return r}(e,n):e,i=n.plainObjects?Object.create(null):{},a=Object.keys(r),s=0;s<a.length;++s){var o=a[s],c=Vt(o,r[o],n,"string"==typeof e);i=en.merge(i,c,n)}return en.compact(i)},stringify:function(e,t){var n,r=e,i=function(e){if(!e)return cn;if(null!==e.encoder&&void 0!==e.encoder&&"function"!=typeof e.encoder)throw new TypeError("Encoder has to be a function.");var t=e.charset||cn.charset;if(void 0!==e.charset&&"utf-8"!==e.charset&&"iso-8859-1"!==e.charset)throw new TypeError("The charset option must be either utf-8, iso-8859-1, or undefined");var n=Yt.default;if(void 0!==e.format){if(!tn.call(Yt.formatters,e.format))throw new TypeError("Unknown format option provided.");n=e.format}var r=Yt.formatters[n],i=cn.filter;return"function"!=typeof e.filter&&!rn(e.filter)||(i=e.filter),{addQueryPrefix:"boolean"==typeof e.addQueryPrefix?e.addQueryPrefix:cn.addQueryPrefix,allowDots:void 0===e.allowDots?cn.allowDots:!!e.allowDots,charset:t,charsetSentinel:"boolean"==typeof e.charsetSentinel?e.charsetSentinel:cn.charsetSentinel,delimiter:void 0===e.delimiter?cn.delimiter:e.delimiter,encode:"boolean"==typeof e.encode?e.encode:cn.encode,encoder:"function"==typeof e.encoder?e.encoder:cn.encoder,encodeValuesOnly:"boolean"==typeof e.encodeValuesOnly?e.encodeValuesOnly:cn.encodeValuesOnly,filter:i,format:n,formatter:r,serializeDate:"function"==typeof e.serializeDate?e.serializeDate:cn.serializeDate,skipNulls:"boolean"==typeof e.skipNulls?e.skipNulls:cn.skipNulls,sort:"function"==typeof e.sort?e.sort:null,strictNullHandling:"boolean"==typeof e.strictNullHandling?e.strictNullHandling:cn.strictNullHandling}}(t);"function"==typeof i.filter?r=(0,i.filter)("",r):rn(i.filter)&&(n=i.filter);var a,s=[];if("object"!=typeof r||null===r)return"";a=t&&t.arrayFormat in nn?t.arrayFormat:t&&"indices"in t?t.indices?"indices":"repeat":"indices";var o=nn[a];n=n||Object.keys(r),i.sort&&n.sort(i.sort);for(var c=0;c<n.length;++c){var u=n[c];i.skipNulls&&null===r[u]||Ut(s,qt(r[u],u,o,i.strictNullHandling,i.skipNulls,i.encode?i.encoder:null,i.filter,i.sort,i.allowDots,i.serializeDate,i.format,i.formatter,i.encodeValuesOnly,i.charset))}var l=s.join(i.delimiter),d=!0===i.addQueryPrefix?"?":"";return i.charsetSentinel&&("iso-8859-1"===i.charset?d+="utf8=%26%2310003%3B&":d+="utf8=%E2%9C%93&"),0<l.length?d+l:""}},fn=function(){function c(e){var r=this,t=e.windowTitle,n=e.writeDelay,i=void 0===n?400:n,a=e.createURL,s=e.parseURL,o=e.getLocation;C(this,c),k(this,"windowTitle",void 0),k(this,"writeDelay",void 0),k(this,"_createURL",void 0),k(this,"parseURL",void 0),k(this,"getLocation",void 0),k(this,"writeTimer",void 0),k(this,"inPopState",!1),k(this,"isDisposed",!1),k(this,"latestAcknowledgedHistory",0),this.windowTitle=t,this.writeTimer=void 0,this.writeDelay=i,this._createURL=a,this.parseURL=s,this.getLocation=o,St(function(e){var t=e.window,n=r.windowTitle&&r.windowTitle(r.read());$t(n),r.latestAcknowledgedHistory=t.history.length})}return E(c,[{key:"read",value:function(){return this.parseURL({qsModule:hn,location:this.getLocation()})}},{key:"write",value:function(i){var a=this;St(function(e){var t=e.window,n=a.createURL(i),r=a.windowTitle&&a.windowTitle(i);a.writeTimer&&clearTimeout(a.writeTimer),a.writeTimer=setTimeout(function(){$t(r),a.shouldWrite(n)&&(t.history.pushState(i,r||"",n),a.latestAcknowledgedHistory=t.history.length),a.inPopState=!1,a.writeTimer=void 0},a.writeDelay)})}}
12479,{key:"onUpdate",value:function(n){var r=this;this._onPopState=function(e){r.writeTimer&&(clearTimeout(r.writeTimer),r.writeTimer=void 0),r.inPopState=!0;var t=e.state;n(t||r.read())},St(function(e){e.window.addEventListener("popstate",r._onPopState)})}},{key:"createURL",value:function(e){return this._createURL({qsModule:hn,routeState:e,location:this.getLocation()})}},{key:"dispose",value:function(){var n=this;this.isDisposed=!0,St(function(e){var t=e.window;n._onPopState&&t.removeEventListener("popstate",n._onPopState)}),this.writeTimer&&clearTimeout(this.writeTimer),this.write({})}},{key:"shouldWrite",value:function(r){var i=this;return St(function(e){var t=e.window,n=!(i.isDisposed&&i.latestAcknowledgedHistory!==t.history.length);return!i.inPopState&&n&&r!==t.location.href})}}]),c}();function mn(){var e=0<arguments.length&&void 0!==arguments[0]?arguments[0]:{},t=e.createURL,n=void 0===t?function(e){var t=e.qsModule,n=e.routeState,r=e.location,i=r.protocol,a=r.hostname,s=r.port,o=void 0===s?"":s,c=r.pathname,u=r.hash,l=t.stringify(n),d=""===o?"":":".concat(o);return l?"".concat(i,"//").concat(a).concat(d).concat(c,"?").concat(l).concat(u):"".concat(i,"//").concat(a).concat(d).concat(c).concat(u)}:t,r=e.parseURL,i=void 0===r?function(e){var t=e.qsModule,n=e.location;return t.parse(n.search.slice(1),{arrayLimit:99})}:r,a=e.writeDelay,s=void 0===a?400:a,o=e.windowTitle,c=e.getLocation;return new fn({createURL:n,parseURL:i,writeDelay:s,windowTitle:o,getLocation:void 0===c?function(){return St(function(e){return e.window.location},{fallback:function(){throw new Error("You need to provide `getLocation` to the `history` router in environments where `window` does not exist.")}})}:c})}function pn(e){var t=0<arguments.length&&void 0!==e?e:{},n=t.router,a=void 0===n?mn():n,r=t.stateMapping,s=void 0===r?Dt():r;return function(e){var r=e.instantSearchInstance;r._createURL=function(n){var e=Object.keys(n).reduce(function(e,t){return W(W({},e),{},k({},t,n[t]))},r.mainIndex.getWidgetUiState({})),t=s.stateToRoute(e);return a.createURL(t)};var i=void 0,t=r._initialUiState;return{onStateChange:function(e){var t=e.uiState,n=s.stateToRoute(t);void 0!==i&&De(i,n)||(a.write(n),i=n)},subscribe:function(){r._initialUiState=W(W({},t),s.routeToState(a.read())),a.onUpdate(function(e){r.setUiState(s.routeToState(e))})},unsubscribe:function(){a.dispose()}}}}function gn(){return St(function(e){var t,n;return-1<(null===(t=e.window.navigator)||void 0===t?void 0:null===(n=t.userAgent)||void 0===n?void 0:n.indexOf("Algolia Crawler"))},{fallback:function(){return!1}})}function vn(){return function(e){var t=e.instantSearchInstance,n={widgets:[]},r=document.createElement("meta"),i=document.querySelector("head");return r.name="instantsearch:widgets",{onStateChange:function(){},subscribe:function(){setTimeout(function(){var e=t.client;n.ua=e.transporter&&e.transporter.userAgent?e.transporter.userAgent.value:e._ua,function i(e,a,s){var t=a.mainIndex,o={instantSearchInstance:a,parent:t,scopedResults:[],state:t.getHelper().state,helper:t.getHelper(),createURL:t.createURL,uiState:a._initialUiState,renderState:a.renderState,templatesConfig:a.templatesConfig,searchMetadata:{isSearchStalled:a._isSearchStalled}};e.forEach(function(e){var t={};if(e.getWidgetRenderState){var n=e.getWidgetRenderState(o);n&&n.widgetParams&&(t=n.widgetParams)}var r=Object.keys(t).filter(function(e){return void 0!==t[e]});s.widgets.push({type:e.$$type,widgetType:e.$$widgetType,params:r}),"ais.index"===e.$$type&&i(e.getWidgets(),a,s)})}(t.mainIndex.getWidgets(),t,n),r.content=JSON.stringify(n),i.appendChild(r)},0)},unsubscribe:function(){r.remove()}}}}var yn=st({name:"instantsearch"});function bn(){return"#"}function Sn(i,e){var h=1<arguments.length&&void 0!==e?e:Le;return ke(i,wn()),function(a){var e=a||{},t=e.includedAttributes,s=void 0===t?[]:t,n=e.excludedAttributes,o=void 0===n?["query"]:n,r=e.transformItems,c=void 0===r?function(e){return e}:r;if(a&&a.includedAttributes&&a.excludedAttributes)throw new Error(wn("The options `includedAttributes` and `excludedAttributes` cannot be used together."));function u(){return d.refine()}function l(){return d.createURL()}var d={refine:Le,createURL:function(){return""},attributesToClear:[]};return{$$type:"ais.clearRefinements",init:function(e){var t=e.instantSearchInstance;i(W(W({},this.getWidgetRenderState(e)),{},{instantSearchInstance:t}),!0)},render:function(e){var t=e.instantSearchInstance;i(W(W({},this.getWidgetRenderState(e)),{},{instantSearchInstance:t}),!1)},dispose:function(){h()},getRenderState:function(e,t){return W(W({},e),{},{clearRefinements:this.getWidgetRenderState(t)})},getWidgetRenderState:function(e){var t=e.createURL,n=e.scopedResults,r=e.results;d.attributesToClear=n.reduce(function(e,t){return e.concat(function(e){var t=e.scopedResult,n=e.includedAttributes,r=e.excludedAttributes,i=e.transformItems,a=e.results,s=-1!==n.indexOf("query")||-1===r.indexOf("query");return{helper:t.helper,items:i(Se(Ce(t.results,t.helper.state,s).map(function(e){return e.attribute}).filter(function(e){return 0===n.length||-1!==n.indexOf(e)}).filter(function(e){return"query"===e&&s||-1===r.indexOf(e)})),{results:a})}}({scopedResult:t,includedAttributes:s,excludedAttributes:o,transformItems:c,results:r}))},[]),d.refine=function(){d.attributesToClear.forEach(function(e){var t=e.helper,n=e.items;t.setState(Ee({helper:t,attributesToClear:n})).search()})},d.createURL=function(){return t(it.apply(void 0,P(d.attributesToClear.map(function(e){return Ee({helper:e.helper,attributesToClear:e.items})}))))};var i=d.attributesToClear.some(function(e){return 0<e.items.length});return{canRefine:i,hasRefinements:i,refine:u,createURL:l,widgetParams:a}}}}}var Rn=function(){L(S,G);var b=O(S);function S(e){var n;C(this,S),k(M(n=b.call(this)),"client",void 0),k(M(n),"indexName",void 0),k(M(n),"insightsClient",void 0),k(M(n),"onStateChange",null),k(M(n),"helper",void 0),k(M(n),"mainHelper",void 0),k(M(n),"mainIndex",void 0),k(M(n),"started",void 0),k(M(n),"templatesConfig",void 0),k(M(n),"renderState",{}),k(M(n),"_stalledSearchDelay",void 0),k(M(n),"_searchStalledTimer",void 0),k(M(n),"_isSearchStalled",void 0),k(M(n),"_initialUiState",void 0),k(M(n),"_initialResults",void 0),k(M(n),"_createURL",void 0),k(M(n),"_searchFunction",void 0),k(M(n),"_mainHelperSearch",void 0),k(M(n),"middleware",[]),k(M(n),"sendEventToInsights",void 0),k(M(n),"scheduleSearch",ge(function(){n.started&&n.mainHelper.search()})),k(M(n),"scheduleRender",ge(function(){n.mainHelper.hasPendingRequests()||(clearTimeout(n._searchStalledTimer),n._searchStalledTimer=null,n._isSearchStalled=!1),n.mainIndex.render({instantSearchInstance:M(n)}),n.emit("render")})),k(M(n),"onInternalStateChange",ge(function(){var t=n.mainIndex.getWidgetUiState({});n.middleware.forEach(function(e){e.instance.onStateChange({uiState:t})})}));var t=e.indexName,r=void 0===t?null:t,i=e.numberLocale,a=e.initialUiState,s=void 0===a?{}:a,o=e.routing,c=void 0===o?null:o,u=e.searchFunction,l=e.stalledSearchDelay,d=void 0===l?200:l,h=e.searchClient,f=void 0===h?null:h,m=e.insightsClient,p=void 0===m?null:m,g=e.onStateChange,v=void 0===g?null:g;if(null===r)throw new Error(yn("The `indexName` option is required."));if(null===f)throw new Error(yn("The `searchClient` option is required."));if("function"!=typeof f.search)throw new Error("The `searchClient` must implement a `search` method.\n\nSee: https://www.algolia.com/doc/guides/building-search-ui/going-further/backend-search/in-depth/backend-instantsearch/js/");if("function"==typeof f.addAlgoliaAgent&&f.addAlgoliaAgent("instantsearch.js (".concat("4.43.0",")")),p&&"function"!=typeof p)throw new Error(yn("The `insightsClient` option should be a function."));if(n.client=f,n.insightsClient=p,n.indexName=r,n.helper=null,n.mainHelper=null,n.mainIndex=Nt({indexName:r}),n.onStateChange=v,n.started=!1,n.templatesConfig={helpers:function(e){var n=e.numberLocale;return{formatNumber:function(e,t){return Number(t(e)).toLocaleStr
12479ing(n)},highlight:function(e,t){try{return t(Ct(W(W({},JSON.parse(e)),{},{hit:this})))}catch(e){throw new Error('\nThe highlight helper expects a JSON object of the format:\n{ "attribute": "name", "highlightedTagName": "mark" }')}},reverseHighlight:function(e,t){try{return t(kt(W(W({},JSON.parse(e)),{},{hit:this})))}catch(e){throw new Error('\n The reverseHighlight helper expects a JSON object of the format:\n { "attribute": "name", "highlightedTagName": "mark" }')}},snippet:function(e,t){try{return t(jt(W(W({},JSON.parse(e)),{},{hit:this})))}catch(e){throw new Error('\nThe snippet helper expects a JSON object of the format:\n{ "attribute": "name", "highlightedTagName": "mark" }')}},reverseSnippet:function(e,t){try{return t(Ot(W(W({},JSON.parse(e)),{},{hit:this})))}catch(e){throw new Error('\n The reverseSnippet helper expects a JSON object of the format:\n { "attribute": "name", "highlightedTagName": "mark" }')}},insights:function(e,t){try{var n=JSON.parse(e),r=n.method,i=n.payload;return t(At(r,W({objectIDs:[this.objectID]},i)))}catch(e){throw new Error('\nThe insights helper expects a JSON object of the format:\n{ "method": "method-name", "payload": { "eventName": "name of the event" } }')}}}}({numberLocale:i}),compileOptions:{}},n._stalledSearchDelay=d,n._searchStalledTimer=null,n._isSearchStalled=!1,n._createURL=bn,n._initialUiState=s,n._initialResults=null,u&&(n._searchFunction=u),n.sendEventToInsights=Le,c){var y="boolean"==typeof c?void 0:c;n.use(pn(y))}return gn()&&n.use(vn()),n}return E(S,[{key:"use",value:function(){for(var n=this,e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];var i=t.map(function(e){var t=W({subscribe:Le,unsubscribe:Le,onStateChange:Le},e({instantSearchInstance:n}));return n.middleware.push({creator:e,instance:t}),t});return this.started&&i.forEach(function(e){e.subscribe()}),this}},{key:"unuse",value:function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return this.middleware.filter(function(e){return t.includes(e.creator)}).forEach(function(e){return e.instance.unsubscribe()}),this.middleware=this.middleware.filter(function(e){return!t.includes(e.creator)}),this}},{key:"EXPERIMENTAL_use",value:function(){return this.use.apply(this,arguments)}},{key:"addWidget",value:function(e){return this.addWidgets([e])}},{key:"addWidgets",value:function(e){if(!Array.isArray(e))throw new Error(yn("The `addWidgets` method expects an array of widgets. Please use `addWidget`."));if(e.some(function(e){return"function"!=typeof e.init&&"function"!=typeof e.render}))throw new Error(yn("The widget definition expects a `render` and/or an `init` method."));return this.mainIndex.addWidgets(e),this}},{key:"removeWidget",value:function(e){return this.removeWidgets([e])}},{key:"removeWidgets",value:function(e){if(!Array.isArray(e))throw new Error(yn("The `removeWidgets` method expects an array of widgets. Please use `removeWidget`."));if(e.some(function(e){return"function"!=typeof e.dispose}))throw new Error(yn("The widget definition expects a `dispose` method."));return this.mainIndex.removeWidgets(e),this}},{key:"start",value:function(){var r=this;if(this.started)throw new Error(yn("The `start` method has already been called once."));var t=this.mainHelper||pe(this.client,this.indexName);if(t.search=function(){return t.searchOnlyWithDerivedHelpers()},this._searchFunction){var i={search:function(){return new Promise(Le)}};this._mainHelperSearch=t.search.bind(t),t.search=function(){var n=r.mainIndex.getHelper(),e=pe(i,n.state.index,n.state);return e.once("search",function(e){var t=e.state;n.overrideStateWithoutTriggeringChangeEvent(t),r._mainHelperSearch()}),e.on("change",function(e){var t=e.state;n.setState(t)}),r._searchFunction(e),t}}if(t.on("error",function(e){var t=e.error;t.error=t,r.emit("error",t)}),this.mainHelper=t,this.middleware.forEach(function(e){e.instance.subscribe()}),this.mainIndex.init({instantSearchInstance:this,parent:null,uiState:this._initialUiState}),this._initialResults){var e=this.scheduleSearch;this.scheduleSearch=ge(Le),ge(function(){r.scheduleSearch=e})()}else 0<this.mainIndex.getWidgets().length&&this.scheduleSearch();this.helper=this.mainIndex.getHelper(),this.started=!0}},{key:"dispose",value:function(){this.scheduleSearch.cancel(),this.scheduleRender.cancel(),clearTimeout(this._searchStalledTimer),this.removeWidgets(this.mainIndex.getWidgets()),this.mainIndex.dispose(),this.started=!1,this.removeAllListeners(),this.mainHelper.removeAllListeners(),this.mainHelper=null,this.helper=null,this.middleware.forEach(function(e){e.instance.unsubscribe()})}},{key:"scheduleStalledRender",value:function(){var e=this;this._searchStalledTimer||(this._searchStalledTimer=setTimeout(function(){e._isSearchStalled=!0,e.scheduleRender()},this._stalledSearchDelay))}},{key:"setUiState",value:function(e){if(!this.mainHelper)throw new Error(yn("The `start` method needs to be called before `setUiState`."));this.mainIndex.refreshUiState();var r="function"==typeof e?e(this.mainIndex.getWidgetUiState({})):e;!function e(t){var n=r[t.getIndexId()]||{};
12479t.getHelper().setState(t.getWidgetSearchParameters(t.getHelper().state,{uiState:n})),t.getWidgets().filter(wt).forEach(e)}(this.mainIndex),this.scheduleSearch(),this.onInternalStateChange()}},{key:"getUiState",value:function(){return this.started&&this.mainIndex.refreshUiState(),this.mainIndex.getWidgetUiState({})}},{key:"createURL",value:function(e){var t=0<arguments.length&&void 0!==e?e:{};if(!this.started)throw new Error(yn("The `start` method needs to be called before `createURL`."));return this._createURL(t)}},{key:"refresh",value:function(){if(!this.mainHelper)throw new Error(yn("The `start` method needs to be called before `refresh`."));this.mainHelper.clearCache().search()}}]),S}(),wn=st({name:"clear-refinements",connector:!0});function _n(r,e){var i=1<arguments.length&&void 0!==e?e:Le;return ke(r,Pn()),function(s){if((s||{}).includedAttributes&&(s||{}).excludedAttributes)throw new Error(Pn("The options `includedAttributes` and `excludedAttributes` cannot be used together."));var e=s||{},o=e.includedAttributes,t=e.excludedAttributes,c=void 0===t?["query"]:t,n=e.transformItems,u=void 0===n?function(e){return e}:n;return{$$type:"ais.currentRefinements",init:function(e){var t=e.instantSearchInstance;r(W(W({},this.getWidgetRenderState(e)),{},{instantSearchInstance:t}),!0)},render:function(e){var t=e.instantSearchInstance;r(W(W({},this.getWidgetRenderState(e)),{},{instantSearchInstance:t}),!1)},dispose:function(){i()},getRenderState:function(e,t){return W(W({},e),{},{currentRefinements:this.getWidgetRenderState(t)})},getWidgetRenderState:function(e){var n=e.results,t=e.scopedResults,r=e.createURL,i=e.helper;var a=n?t.reduce(function(e,t){return e.concat(u(xn({results:t.results,helper:t.helper,includedAttributes:o,excludedAttributes:c}),{results:n}))},[]):u(xn({results:{},helper:i,includedAttributes:o,excludedAttributes:c}),{results:n});return{items:a,canRefine:0<a.length,refine:function(e){return In(i,e)},createURL:function(e){return r(Nn(i.state,e))},widgetParams:s}}}}}var Pn=st({name:"current-refinements",connector:!0});function xn(e){var t=e.results,n=e.helper,r=e.includedAttributes,i=e.excludedAttributes,a=-1!==(r||[]).indexOf("query")||-1===(i||[]).indexOf("query"),s=r?function(e){return-1!==r.indexOf(e.attribute)}:function(e){return-1===i.indexOf(e.attribute)},o=Ce(t,n.state,a).map(Fn).filter(s);return o.reduce(function(e,t){return[].concat(P(e.filter(function(e){return e.attribute!==t.attribute})),[{indexName:n.state.index,attribute:t.attribute,label:t.attribute,refinements:o.filter(function(e){return e.attribute===t.attribute}).sort(function(e,t){return"numeric"===e.type?e.value-t.value:0}),refine:function(e){return In(n,e)}}])},[])}function Nn(e,t){switch(t.type){case"facet":return e.removeFacetRefinement(t.attribute,String(t.value));case"disjunctive":return e.removeDisjunctiveFacetRefinement(t.attribute,String(t.value));case"hierarchical":return e.removeHierarchicalFacetRefinement(t.attribute);case"exclude":return e.removeExcludeRefinement(t.attribute,String(t.value));case"numeric":return e.removeNumericRefinement(t.attribute,t.operator,String(t.value));case"tag":return e.removeTagRefinement(String(t.value));case"query":return e.setQueryParameter("query","");default:return e}}function In(e,t){e.setState(Nn(e.state,t)).search()}function Fn(e){var t=function(e){if("numeric"===e.type)return Number(e.name);if("escapedValue"in e)return e.escapedValue;return e.name}(e),n=e.operator?"".concat(function(e){switch(e){case">=":return"â¥";case"<=":return"â¤";default:return e}}(e.operator)," ").concat(e.name):e.name,r={attribute:e.attribute,type:e.type,value:t,label:n};return void 0!==e.operator&&(r.operator=e.operator),void 0!==e.count&&(r.count=e.count),void 0!==e.exhaustive&&(r.exhaustive=e.exhaustive),r}function Tn(N,e){var I=1<arguments.length&&void 0!==e?e:Le;return ke(N,kn()),function(d){var e=d||{},c=e.attributes,t=e.separator,u=void 0===t?" > ":t,n=e.rootPath,l=void 0===n?null:n,r=e.showParentLevel,h=void 0===r||r,i=e.limit,f=void 0===i?10:i,a=e.showMore,m=void 0!==a&&a,s=e.showMoreLimit,p=void 0===s?20:s,o=e.sortBy,g=void 0===o?Ln:o,v=e.transformItems,y=void 0===v?function(e){return e}:v;if(!c||!Array.isArray(c)||0===c.length)throw new Error(kn("The `attributes` option expects an array of str
12479ings."));if(!0===m&&p<=f)throw new Error(kn("The `showMoreLimit` option must be greater than `limit`."));var b,S,R=D(c,1)[0],w=function(){};function _(){w()}var P=!1;function x(){return P?p:f}return{$$type:"ais.hierarchicalMenu",init:function(e){var t=e.instantSearchInstance;N(W(W({},this.getWidgetRenderState(e)),{},{instantSearchInstance:t}),!0)},render:function(e){var t=e.instantSearchInstance;w=function(e,t){return function(){P=!P,t.render(e)}}(e,this),N(W(W({},this.getWidgetRenderState(e)),{},{instantSearchInstance:t}),!1)},dispose:function(e){var t=e.state;return I(),t.removeHierarchicalFacet(R).setQueryParameter("maxValuesPerFacet",void 0)},getRenderState:function(e,t){return W(W({},e),{},{hierarchicalMenu:W(W({},e.hierarchicalMenu),{},k({},R,this.getWidgetRenderState(t)))})},getWidgetRenderState:function(e){var t=e.results,n=e.state,r=e.createURL,i=e.instantSearchInstance,a=e.helper,s=[],o=!1;if(b=b||dt({instantSearchInstance:i,helper:a,attribute:R,widgetType:this.$$type}),S=S||function(e){b("click",e),a.toggleFacetRefinement(R,e).search()},t){var c=t.getFacetValues(R,{sortBy:g,facetOrdering:g===Ln}),u=c&&!Array.isArray(c)&&c.data?c.data:[],l=(n.maxValuesPerFacet||0)>x()?u.length<=x():u.length<x();o=m&&(P||!l),s=y(function a(e){return e.slice(0,x()).map(function(e){var t=e.name,n=e.escapedValue,r=e.data,i=(e.path,W(W({},j(e,["name","escapedValue","data","path"])),{},{value:n,label:t,data:null}));return Array.isArray(r)&&(i.data=a(r)),i})}(u),{results:t})}return{items:s,refine:S,canRefine:0<s.length,createURL:function(e){return r(n.resetPage().toggleFacetRefinement(R,e))},sendEvent:b,widgetParams:d,isShowingMore:P,toggleShowMore:_,canToggleShowMore:o}},getWidgetUiState:function(e,t){var n=t.searchParameters.getHierarchicalFacetBreadcrumb(R);return n.length?W(W({},e),{},{hierarchicalMenu:W(W({},e.hierarchicalMenu),{},k({},R,n))}):e},getWidgetSearchParameters:function(e,t){var n=t.uiState,r=n.hierarchicalMenu&&n.hierarchicalMenu[R];if(e.isHierarchicalFacet(R))e.getHierarchicalFacetByName(R);var i=e.removeHierarchicalFacet(R).addHierarchicalFacet({name:R,attributes:c,separator:u,rootPath:l,showParentLevel:h}),a=i.maxValuesPerFacet||0,s=Math.max(a,m?p:f),o=i.setQueryParameter("maxValuesPerFacet",s);return r?o.addHierarchicalFacetRefinement(R,r.join(u)):o.setQueryParameters({hierarchicalFacetsRefinements:W(W({},o.hierarchicalFacetsRefinements),{},k({},R,[]))})}}}}function Cn(r,e){var i=1<arguments.length&&void 0!==e?e:Le;return ke(r,jn()),function(a){var s,o,e=a||{},t=e.escapeHTML,c=void 0===t||t,n=e.transformItems,u=void 0===n?function(e){return e}:n;return{$$type:"ais.hits",init:function(e){r(W(W({},this.getWidgetRenderState(e)),{},{instantSearchInstance:e.instantSearchInstance}),!0)},render:function(e){var t=this.getWidgetRenderState(e);r(W(W({},t),{},{instantSearchInstance:e.instantSearchInstance}),!1),t.sendEvent("view",t.hits)},getRenderState:function(e,t){return W(W({},e),{},{hits:this.getWidgetRenderState(t)})},getWidgetRenderState:function(e){var t=e.results,n=e.helper,r=e.instantSearchInstance;if(s=s||pt({instantSearchInstance:r,index:n.getIndex(),widgetType:this.$$type}),o=o||gt({index:n.getIndex(),widgetType:this.$$type}),!t)return{hits:[],results:void 0,sendEvent:s,bindEvent:o,widgetParams:a};c&&0<t.hits.length&&(t.hits=Xe(t.hits));var i=lt(ut(t.hits,t.page,t.hitsPerPage),t.queryID);return{hits:u(i,{results:t}),results:t,sendEvent:s,bindEvent:o,widgetParams:a}},dispose:function(e){var t=e.state;return i(),c?t.setQueryParameters(Object.keys(Ke).reduce(function(e,t){return W(W({},e),{},k({},t,void 0))},{})):t},getWidgetSearchParameters:function(e){return c?e.setQueryParameters(Ke):e}}}}function En(e){var t=e.method,n=e.results,r=e.hits,i=e.objectIDs,a=n.index,s=function(n,e){return e.map(function(t){var e=Ie(n,function(e){return e.objectID===t});if(void 0===e)throw new Error('Could not find objectID "'.concat(t,'" passed to `clickedObjectIDsAfterSearch` in the returned hits. This is necessary to infer the absolute position and the query ID.'));return e})}(r,i),o=function(e){var t=Se(e.map(function(e){return e.__queryID}));
12479if(1<t.length)throw new Error("Insights currently allows a single `queryID`. The `objectIDs` provided map to multiple `queryID`s.");var n=t[0];if("string"!=typeof n)throw new Error("Could not infer `queryID`. Ensure InstantSearch `clickAnalytics: true` was added with the Configure widget.\n\nSee: https://alg.li/lNiZZ7");return n}(s);switch(t){case"clickedObjectIDsAfterSearch":return{index:a,queryID:o,objectIDs:i,positions:function(e){return e.map(function(e){return e.__position})}(s)};case"convertedObjectIDsAfterSearch":return{index:a,queryID:o,objectIDs:i};default:throw new Error('Unsupported method passed to insights: "'.concat(t,'".'))}}var kn=st({name:"hierarchical-menu",connector:!0}),Ln=["name:asc"],jn=st({name:"hits",connector:!0});function Mn(t){return function(s,e){return t(function(e,t){var n=e.results,r=e.hits,i=e.instantSearchInstance;if(n&&r&&i){var a=function(o,c,u){return function(e){for(var t=arguments.length,n=new Array(1<t?t-1:0),r=1;r<t;r++)n[r-1]=arguments[r];var i=n[0];if(!o){var a=st({name:"instantsearch"});throw new Error(a("The `insightsClient` option has not been provided to `instantsearch`."))}if(!Array.isArray(i.objectIDs))throw new TypeError("Expected `objectIDs` to be an array.");var s=En({method:e,results:c,hits:u,objectIDs:i.objectIDs});o(e,W(W({},s),i))}}(i.insightsClient,n,r);return s(W(W({},e),{},{insights:a}),t)}return s(e,t)},e)}}var On,An,Hn,Wn,Dn,Bn,Un={},qn=[],Qn=/acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i;function Vn(e,t){for(var n in t)e[n]=t[n];return e}function $n(e){var t=e.parentNode;t&&t.removeChild(e)}function Kn(e,t,n){var r,i,a,s={};for(a in t)"key"==a?r=t[a]:"ref"==a?i=t[a]:s[a]=t[a];if(2<arguments.length&&(s.children=3<arguments.length?On.call(arguments,2):n),"function"==typeof e&&null!=e.defaultProps)for(a in e.defaultProps)void 0===s[a]&&(s[a]=e.defaultProps[a]
vendor: 4,692 bytes, line 12479
12479);return zn(e,s,r,i,null)}function zn(e,t,n,r,i){var a={type:e,props:t,key:n,ref:r,__k:null,__:null,__b:0,__e:null,__d:void 0,__c:null,__h:null,constructor:void 0,__v:null==i?++Hn:i};return null==i&&null!=An.vnode&&An.vnode(a),a}function Jn(e){return e.children}function Yn(e,t){this.props=e,this.context=t}function Xn(e,t){if(null==t)return e.__?Xn(e.__,e.__.__k.indexOf(e)+1):null;for(var n;t<e.__k.length;t++)if(null!=(n=e.__k[t])&&null!=n.__e)return n.__e;return"function"==typeof e.type?Xn(e):null}function Gn(e){var t,n;if(null!=(e=e.__)&&null!=e.__c){for(e.__e=e.__c.base=null,t=0;t<e.__k.length;t++)if(null!=(n=e.__k[t])&&null!=n.__e){e.__e=e.__c.base=n.__e;break}return Gn(e)}}function Zn(e){(!e.__d&&(e.__d=!0)&&Wn.push(e)&&!er.__r++||Bn!==An.debounceRendering)&&((Bn=An.debounceRendering)||Dn)(er)}function er(){for(var e;er.__r=Wn.length;)e=Wn.sort(function(e,t){return e.__v.__b-t.__v.__b}),Wn=[],e.some(function(e){var t,n,r,i,a,s;e.__d&&(a=(i=(t=e).__v).__e,(s=t.__P)&&(n=[],(r=Vn({},i)).__v=i.__v+1,cr(s,i,r,t.__n,void 0!==s.ownerSVGElement,null!=i.__h?[a]:null,n,null==a?Xn(i):a,i.__h),ur(n,i),i.__e!=a&&Gn(i)))})}function tr(e,t,n,r,i,a,s,o,c,u){var l,d,h,f,m,p,g,v=r&&r.__k||qn,y=v.length;for(n.__k=[],l=0;l<t.length;l++)if(null!=(f=n.__k[l]=null==(f=t[l])||"boolean"==typeof f?null:"string"==typeof f||"number"==typeof f||"bigint"==typeof f?zn(null,f,null,null,f):Array.isArray(f)?zn(Jn,{children:f},null,null,null):0<f.__b?zn(f.type,f.props,f.key,null,f.__v):f)){if(f.__=n,f.__b=n.__b+1,null===(h=v[l])||h&&f.key==h.key&&f.type===h.type)v[l]=void 0;else for(d=0;d<y;d++){if((h=v[d])&&f.key==h.key&&f.type===h.type){v[d]=void 0;break}h=null}cr(e,f,h=h||Un,i,a,s,o,c,u),m=f.__e,(d=f.ref)&&h.ref!=d&&(g=g||[],h.ref&&g.push(h.ref,null,f),g.push(d,f.__c||m,f)),null!=m?(null==p&&(p=m),"function"==typeof f.type&&f.__k===h.__k?f.__d=c=nr(f,c,e):c=rr(e,f,h,v,m,c),"function"==typeof n.type&&(n.__d=c)):c&&h.__e==c&&c.parentNode!=e&&(c=Xn(h))}for(n.__e=p,l=y;l--;)null!=v[l]&&("function"==typeof n.type&&null!=v[l].__e&&v[l].__e==n.__d&&(n.__d=Xn(r,l+1)),dr(v[l],v[l]));if(g)for(l=0;l<g.length;l++)lr(g[l],g[++l],g[++l])}function nr(e,t,n){for(var r,i=e.__k,a=0;i&&a<i.length;a++)(r=i[a])&&(r.__=e,t="function"==typeof r.type?nr(r,t,n):rr(n,r,r,i,r.__e,t));return t}function rr(e,t,n,r,i,a){var s,o,c;if(void 0!==t.__d)s=t.__d,t.__d=void 0;else if(null==n||i!=a||null==i.parentNode)e:if(null==a||a.parentNode!==e)e.appendChild(i),s=null;else{for(o=a,c=0;(o=o.nextSibling)&&c<r.length;c+=2)if(o==i)break e;e.insertBefore(i,a),s=a}return void 0!==s?s:i.nextSibling}function ir(e,t,n){"-"===t[0]?e.setProperty(t,n):e[t]=null==n?"":"number"!=typeof n||Qn.test(t)?n:n+"px"}function ar(e,t,n,r,i){var a;e:if("style"===t)if("string"==typeof n)e.style.cssText=n;else{if("string"==typeof r&&(e.style.cssText=r=""),r)for(t in r)n&&t in n||ir(e.style,t,"");if(n)for(t in n)r&&n[t]===r[t]||ir(e.style,t,n[t])}else if("o"===t[0]&&"n"===t[1])a=t!==(t=t.replace(/Capture$/,"")),t=t.toLowerCase()in e?t.toLowerCase().slice(2):t.slice(2),e.l||(e.l={}),e.l[t+a]=n,n?r||e.addEventListener(t,a?or:sr,a):e.removeEventListener(t,a?or:sr,a);else if("dangerouslySetInnerHTML"!==t){if(i)t=t.replace(/xlink[H:h]/,"h").replace(/sName$/,"s");else if("href"!==t&&"list"!==t&&"form"!==t&&"tabIndex"!==t&&"download"!==t&&t in e)try{e[t]=null==n?"":n;break e}catch(e){}"function"==typeof n||(null!=n&&(!1!==n||"a"===t[0]&&"r"===t[1])?e.setAttribute(t,n):e.removeAttribute(t))}}function sr(e){this.l[e.type+!1](An.event?An.event(e):e)}function or(e){this.l[e.type+!0](An.event?An.event(e):e)}function cr(e,t,n,r,i,a,s,o,c){var u,l,d,h,f,m,p,g,v,y,b,S=t.type;if(void 0!==t.constructor)return null;null!=n.__h&&(c=n.__h,o=t.__e=n.__e,t.__h=null,a=[o]),(u=An.__b)&&u(t);try{e:if("function"==typeof S){if(g=t.props,v=(u=S.contextType)&&r[u.__c],y=u?v?v.props.value:u.__:r,n.__c?p=(l=t.__c=n.__c).__=l.__E:("prototype"in S&&S.prototype.render?t.__c=l=new S(g,y):(t.__c=l=new Yn(g,y),l.constructor=S,l.render=hr),v&&v.sub(l),l.props=g,l.state||(l.state={}),l.context=y,l.__n=r,d=l.__d=!0,l.__h=[]),null==l.__s&&(l.__s=l.state),null!=S.getDerivedStateFromProps&&(l.__s==l.state&&(l.__s=Vn({},l.__s)),Vn(l.__s,S.getDerivedStateFromProps(g,l.__s))),h=l.props,f=l.state,d)null==S.getDerivedStateFromProps&&null!=l.componentWillMount&&l.componentWillMount(),null!=l.componentDidMount&&l.__h.push(l.componentDidMount);else{if(null==S.getDerivedStateFromProps&&g!==h&&null!=l.componentWillReceiveProps&&l.componentWillReceiveProps(g,y),!l.__e&&null!=l.shouldComponentUpdate&&!1===l.shouldComponentUpdate(g,l.__s,y)||t.__v===n.__v){l.props=g,l.state=l.__s,t.__v!==n.__v&&(l.__d=!1),(l.__v=t).__e=n.__e,t.__k=n.__k,t.__k.forEac
vendor: 3,758 bytes, line 12479
12479h(function(e){e&&(e.__=t)}),l.__h.length&&s.push(l);break e}null!=l.componentWillUpdate&&l.componentWillUpdate(g,l.__s,y),null!=l.componentDidUpdate&&l.__h.push(function(){l.componentDidUpdate(h,f,m)})}l.context=y,l.props=g,l.state=l.__s,(u=An.__r)&&u(t),l.__d=!1,l.__v=t,l.__P=e,u=l.render(l.props,l.state,l.context),l.state=l.__s,null!=l.getChildContext&&(r=Vn(Vn({},r),l.getChildContext())),d||null==l.getSnapshotBeforeUpdate||(m=l.getSnapshotBeforeUpdate(h,f)),b=null!=u&&u.type===Jn&&null==u.key?u.props.children:u,tr(e,Array.isArray(b)?b:[b],t,n,r,i,a,s,o,c),l.base=t.__e,t.__h=null,l.__h.length&&s.push(l),p&&(l.__E=l.__=null),l.__e=!1}else null==a&&t.__v===n.__v?(t.__k=n.__k,t.__e=n.__e):t.__e=function(e,t,n,r,i,a,s,o){var c,u,l,d=n.props,h=t.props,f=t.type,m=0;if("svg"===f&&(i=!0),null!=a)for(;m<a.length;m++)if((c=a[m])&&"setAttribute"in c==!!f&&(f?c.localName===f:3===c.nodeType)){e=c,a[m]=null;break}if(null==e){if(null===f)return document.createTextNode(h);e=i?document.createElementNS("http://www.w3.org/2000/svg",f):document.createElement(f,h.is&&h),a=null,o=!1}if(null===f)d===h||o&&e.data===h||(e.data=h);else{if(a=a&&On.call(e.childNodes),u=(d=n.props||Un).dangerouslySetInnerHTML,l=h.dangerouslySetInnerHTML,!o){if(null!=a)for(d={},m=0;m<e.attributes.length;m++)d[e.attributes[m].name]=e.attributes[m].value;(l||u)&&(l&&(u&&l.__html==u.__html||l.__html===e.innerHTML)||(e.innerHTML=l&&l.__html||""))}if(function(e,t,n,r,i){var a;for(a in n)"children"===a||"key"===a||a in t||ar(e,a,null,n[a],r);for(a in t)i&&"function"!=typeof t[a]||"children"===a||"key"===a||"value"===a||"checked"===a||n[a]===t[a]||ar(e,a,t[a],n[a],r)}(e,h,d,i,o),l)t.__k=[];else if(m=t.props.children,tr(e,Array.isArray(m)?m:[m],t,n,r,i&&"foreignObject"!==f,a,s,a?a[0]:n.__k&&Xn(n,0),o),null!=a)for(m=a.length;m--;)null!=a[m]&&$n(a[m]);o||("value"in h&&void 0!==(m=h.value)&&(m!==d.value||m!==e.value||"progress"===f&&!m)&&ar(e,"value",m,d.value,!1),"checked"in h&&void 0!==(m=h.checked)&&m!==e.checked&&ar(e,"checked",m,d.checked,!1))}return e}(n.__e,t,n,r,i,a,s,c);(u=An.diffed)&&u(t)}catch(e){t.__v=null,!c&&null==a||(t.__e=o,t.__h=!!c,a[a.indexOf(o)]=null),An.__e(e,t,n)}}function ur(e,t){An.__c&&An.__c(t,e),e.some(function(t){try{e=t.__h,t.__h=[],e.some(function(e){e.call(t)})}catch(e){An.__e(e,t.__v)}})}function lr(e,t,n){try{"function"==typeof e?e(t):e.current=t}catch(e){An.__e(e,n)}}function dr(e,t,n){var r,i;if(An.unmount&&An.unmount(e),(r=e.ref)&&(r.current&&r.current!==e.__e||lr(r,null,t)),null!=(r=e.__c)){if(r.componentWillUnmount)try{r.componentWillUnmount()}catch(e){An.__e(e,t)}r.base=r.__P=null}if(r=e.__k)for(i=0;i<r.length;i++)r[i]&&dr(r[i],t,"function"!=typeof e.type);n||null==e.__e||$n(e.__e),e.__e=e.__d=void 0}function hr(e,t,n){return this.constructor(e,n)}function fr(e,t,n){var r,i,a;An.__&&An.__(e,t),i=(r="function"==typeof n)?null:n&&n.__k||t.__k,a=[],cr(t,e=(!r&&n||t).__k=Kn(Jn,null,[e]),i||Un,Un,void 0!==t.ownerSVGElement,!r&&n?[n]:i?null:t.firstChild?On.call(t.childNodes):null,a,!r&&n?n:i?i.__e:t.firstChild,r),ur(a,e)}On=qn.slice,An={__e:function(e,t){for(var n,r,i;t=t.__;)if((n=t.__c)&&!n.__)try{if((r=n.constructor)&&null!=r.getDerivedStateFromError&&(n.setState(r.getDerivedStateFromError(e)),i=n.__d),null!=n.componentDidCatch&&(n.componentDidCatch(e),i=n.__d),i)return n.__E=n}catch(t){e=t}throw e}},Hn=0,Yn.prototype.setState=function(e,t){var n;n=null!=this.__s&&this.__s!==this.state?this.__s:this.__s=Vn({},this.state),"function"==typeof e&&(e=e(Vn({},n),this.props)),e&&Vn(n,e),null!=e&&this.__v&&(t&&this.__h.push(t),Zn(this))},Yn.prototype.forceUpdate=function(e){this.__v&&(this.__e=!0,e&&this.__h.push(e),Zn(this))},Yn.prototype.render=Jn,Wn=[],Dn="function"==typeof Promise?Promise.prototype.then.bind(Prom
12479ise.resolve()):setTimeout,er.__r=0;function mr(e,t,n){for(var r=e;r&&!n(r);){if(r===t)return null;r=r.parentElement}return r}function pr(e){return function(s){return Kn("div",{onClick:function(e){if(s.sendEvent){var t=mr(e.target,e.currentTarget,function(e){return e.hasAttribute("data-insights-event")});if(t)(function(e){var t=e.getAttribute("data-insights-event");if("string"!=typeof t)throw new Error("The insights middleware expects `data-insights-event` to be a base64-encoded JSON string.");try{return ft(t)}catch(e){throw new Error("The insights middleware was unable to parse `data-insights-event`.")}})(t).forEach(function(e){return s.sendEvent(e)})}var n=mr(e.target,e.currentTarget,function(e){return function(e){return e.hasAttribute("data-insights-method")}(e)});if(n){var r=function(e){var t=e.getAttribute("data-insights-method"),n=e.getAttribute("data-insights-payload");if("string"!=typeof n)throw new Error("The insights helper expects `data-insights-payload` to be a base64-encoded JSON string.");try{return{method:t,payload:ft(n)}}catch(e){throw new Error("The insights helper was unable to parse `data-insights-payload`.")}}(n),i=r.method,a=r.payload;s.insights(i,a)}}},Kn(e,s))}}function gr(l,e){var d=1<arguments.length&&void 0!==e?e:Le;return ke(l,yr()),function(a){var e=a||{},t=e.items,n=e.transformItems,s=void 0===n?function(e){return e}:n;if(!Array.isArray(t))throw new Error(yr("The `items` option expects an array of objects."));var o=t,r=o.filter(function(e){return!0===e.default});if(0===r.length)throw new Error(yr("A default value must be specified in `items`."));if(1<r.length)throw new Error(yr("More than one default value is specified in `items`."));var i=r[0],c=function(t){return function(e){return e||0===e?t.setQueryParameter("hitsPerPage",e).search():t.setQueryParameter("hitsPerPage",void 0).search()}},u=function(e){var t=e.state,n=e.createURL;return function(e){return n(t.resetPage().setQueryParameter("hitsPerPage",e||0===e?e:void 0))}};return{$$type:"ais.hitsPerPage",init:function(e){var t=e.state,n=e.instantSearchInstance;o.some(function(e){return Number(t.hitsPerPage)===Number(e.value)})||(o=[{value:"",label:""}].concat(P(o))),l(W(W({},this.getWidgetRenderState(e)),{},{instantSearchInstance:n}),!0)},render:function(e){var t=e.instantSearchInstance;l(W(W({},this.getWidgetRenderState(e)),{},{instantSearchInstance:t}),!1)},dispose:function(e){var t=e.state;return d(),t.setQueryParameter("hitsPerPage",void 0)},getRenderState:function(e,t){return W(W({},e),{},{hitsPerPage:this.getWidgetRenderState(t)})},getWidgetRenderState:function(e){var t=e.state,n=e.results,r=e.createURL,i=e.helper;return{items:s(function(e){var t=e.hitsPerPage;return o.map(function(e){return W(W({},e),{},{isRefined:Number(e.value)===Number(t)})})}(t),{results:n}),refine:c(i),createURL:u({state:t,createURL:r}),hasNoResults:!n||0===n.nbHits,widgetParams:a}},getWidgetUiState:function(e,t){var n=t.searchParameters.hitsPerPage;return void 0===n||n===i.value?e:W(W({},e),{},{hitsPerPage:n})},getWidgetSearchParameters:function(e,t){var n=t.uiState;return e.setQueryParameters({hitsPerPage:n.hitsPerPage||i.value})}}}}var vr=Mn(Cn),yr=st({name:"hits-per-page",connector:!0}),br=st({name:"infinite-hits",connector:!0});function Sr(e){var t=e||{};t.page;return j(t,["page"])}function Rr(i,e){var a=1<arguments.length&&void 0!==e?e:Le;return ke(i,br()),function(m){function p(e,t){var n=e.page,r=void 0===n?0:n,i=Object.keys(t).map(Number);return 0===i.length?r:Math.min.apply(Math,[r].concat(P(i)))}function g(e,t){var n=e.page,r=void 0===n?0:n,i=Object.keys(t).map(Number);return 0===i.length?r:Math.max.apply(Math,[r].concat(P(i)))}var v,y,b,S,e=m||{},t=e.escapeHTML,R=void 0===t||t,n=e.transformItems,w=void 0===n?function(e){return e}:n,r=e.cache,_=void 0===r?function(){var r=null,i=null;return{read:function(e){var t=e.state;return De(i,Sr(t))?r:null},write:function(e){var t=e.state,n=e.hits;i=Sr(t),r=n}}}():r;return{$$type:"ais.infiniteHits",init:function(e){i(W(W({},this.getWidgetRenderState(e)),{},{instantSearchInstance:e.instantSearchInstance}),!0)},render:function(e){var t=e.instantSearchInstance,n=this.getWidgetRenderState(e);i(W(W({},n),{},{instantSearchInstance:t}),!1),b("view",n.currentPageHits)},getRenderState:function(e,t){return W(W({},e),{},{infiniteHits:this.getWidgetRenderState(t)})},getWidgetRenderState:function(e){var t,n=e.results,r=e.helper,i=e.state,a=e.instantSearchInstance,s=[],o=_.read({state:i})||{};if(n){var c=i.page,u=void 0===c?0:c;R&&0<n.hits.length&&(n.hits=Xe(n.hits));
12479var l=lt(ut(n.hits,n.page,n.hitsPerPage),n.queryID),d=w(l,{results:n});void 0!==o[u]||n.__isArtificial||(o[u]=d,_.write({state:i,hits:o})),s=d,t=0===p(i,o)}else v=function(e){return function(){e.overrideStateWithoutTriggeringChangeEvent(W(W({},e.state),{},{page:p(e.state,_.read({state:e.state})||{})-1})).searchWithoutTriggeringOnStateChange()}}(r),y=function(e){return function(){e.setPage(g(e.state,_.read({state:e.state})||{})+1).search()}}(r),b=pt({instantSearchInstance:a,index:r.getIndex(),widgetType:this.$$type}),S=gt({index:r.getIndex(),widgetType:this.$$type}),t=void 0===i.page||0===p(i,o);var h=function(n){return Object.keys(n).map(Number).sort(function(e,t){return e-t}).reduce(function(e,t){return e.concat(n[t])},[])}(o),f=!n||n.nbPages<=g(i,o)+1;return{hits:h,currentPageHits:s,sendEvent:b,bindEvent:S,results:n,showPrevious:v,showMore:y,isFirstPage:t,isLastPage:f,widgetParams:m}},dispose:function(e){var t=e.state;a();var n=t.setQueryParameter("page",void 0);return R?n.setQueryParameters(Object.keys(Ke).reduce(function(e,t){return W(W({},e),{},k({},t,void 0))},{})):n},getWidgetUiState:function(e,t){var n=t.searchParameters.page||0;return n?W(W({},e),{},{page:n+1}):e},getWidgetSearchParameters:function(e,t){var n=t.uiState,r=e;R&&(r=e.setQueryParameters(Ke));var i=n.page?n.page-1:0;return r.setQueryParameter("page",i)}}}}function wr(s,e){var o=1<arguments.length&&void 0!==e?e:Le;return ke(s,xr()),function(u){var l,d,h,e=u||{},f=e.attribute,t=e.limit,c=void 0===t?10:t,n=e.showMore,m=void 0!==n&&n,r=e.showMoreLimit,p=void 0===r?20:r,i=e.sortBy,g=void 0===i?Nr:i,a=e.transformItems,v=void 0===a?function(e){return e}:a;if(!f)throw new Error(xr("The `attribute` option is required."));if(!0===m&&p<=c)throw new Error(xr("The `showMoreLimit` option must be greater than `limit`."));var y=!1,b=function(){};function S(){b()}function R(){return y?p:c}return{$$type:"ais.menu",init:function(e){var t=e.instantSearchInstance;s(W(W({},this.getWidgetRenderState(e)),{},{instantSearchInstance:t}),!0)},render:function(e){var t=e.instantSearchInstance;s(W(W({},this.getWidgetRenderState(e)),{},{instantSearchInstance:t}),!1)},dispose:function(e){var t=e.state;return o(),t.removeHierarchicalFacet(f).setQueryParameter("maxValuesPerFacet",void 0)},getRenderState:function(e,t){return W(W({},e),{},{menu:W(W({},e.menu),{},k({},f,this.getWidgetRenderState(t)))})},getWidgetRenderState:function(e){var t=e.results,n=e.createURL,r=e.instantSearchInstance,i=e.helper,a=[],s=!1;if(l=l||dt({instantSearchInstance:r,helper:i,attribute:f,widgetType:this.$$type}),d=d||function(e){return n(i.state.resetPage().toggleFacetRefinement(f,e))},h=h||function(e){var t=D(i.getHierarchicalFacetBreadcrumb(f),1)[0];l("click",e||t),i.toggleFacetRefinement(f,e||t).search()},e.results&&(b=function(e,t){return function(){y=!y,t.render(e)}}(e,this)),t){var o=t.getFacetValues(f,{sortBy:g,facetOrdering:g===Nr}),c=o&&!Array.isArray(o)&&o.data?o.data:[];s=m&&(y||c.length>R()),a=v(c.slice(0,R()).map(function(e){var t=e.name,n=e.escapedValue;e.path;return W(W({},j(e,["name","escapedValue","path"])),{},{label:t,value:n})}),{results:t})}return{items:a,createURL:d,refine:h,sendEvent:l,canRefine:0<a.length,widgetParams:u,isShowingMore:y,toggleShowMore:S,canToggleShowMore:s}},getWidgetUiState:function(e,t){var n=D(t.searchParameters.getHierarchicalFacetBreadcrumb(f),1)[0];return n?W(W({},e),{},{menu:W(W({},e.menu),{},k({},f,n))}):e},getWidgetSearchParameters:function(e,t){var n=t.uiState,r=n.menu&&n.menu[f],i=e.removeHierarchicalFacet(f).addHierarchicalFacet({name:f,attributes:[f]}),a=i.maxValuesPerFacet||0,s=Math.max(a,m?p:c),o=i.setQueryParameter("maxValuesPerFacet",s);return r?o.addHierarchicalFacetRefinement(f,r):o.setQueryParameters({hierarchicalFacetsRefinements:W(W({},o.hierarchicalFacetsRefinements),{},k({},f,[]))})}}}}function _r(i,e){var a=1<arguments.length&&void 0!==e?e:Le;return ke(i,Ir()),function(s){var e=s||{},t=e.attribute,u=void 0===t?"":t,n=e.items,o=void 0===n?[]:n,r=e.transformItems,c=void 0===r?function(e){return e}:r;if(""===u)throw new Error(Ir("The `attribute` option is required."));if(!o||0===o.length)throw new Error(Ir("The `items` option expects an array of objects."));var l={};return{$$type:Fr,init:function(e){var t=e.instantSearchInstance;i(W(W({},this.getWidgetRenderState(e)),{},{instantSearchInstance:t}),!0)},render:function(e){var t=e.instantSearchInstance;i(W(W({},this.getWidgetRenderState(e)),{},{instantSearchInstance:t}),!1)},dispose:function(e){var t=e.state;return a(),t.clearRefinements(u)},getWidgetUiState:function(e,t){var n=t.searchParameters.getNumericRefinements(u),r=n["="]&&n["="][0];if(r||0===r)return W(W({},e),{},{numericMenu:W(W({},e.numericMenu),{},k({},u,"".concat(n["="])))});var i=n[">="]&&n[">="][0]||"",a=n["<="]&&n["<="][0]||"";return""===i&&""===a?e:W(W({},e),{},{numericMenu:W(W({},e.numericMenu),{},k({},u,"".concat(i,":").concat(a)))})},getWidgetSearchParameters:function(e,t){var n=t.uiState,r=n.numericMenu&&n.numericMenu[u],i=e.clearRefinements(u);if(!r)return i.setQueryParameters({numericRefinements:W(W({},i.numericRefinements),{},k({},u,{}))});if(-1===r.indexOf(":"))return i.addNumericRefinement(u,"=",Number(r));var a=D(r.split(":").map(parseFloat),2),s=a[0],o=a[1],c=Oe(s)?i.addNumericRefinement(u,">=",s):i;return Oe(o)?c.addNumericRefinement(u,"<=",o):c},getRenderState:function(e,t){return W(W({},e),{},{numericMenu:W(W({},e.numericMenu),{},k({},u,this.getWidgetRenderState(t)))})},getWidgetRenderState:function(e){var t=e.results,n=e.state,r=e.instantSearchInstance,i=e.helper,a=e.createURL;return l.refine||(l.refine=function(e){var t=Cr(i.state,u,e);
12479l.sendEvent("click",e),i.setState(t).search()}),l.createURL||(l.createURL=function(t){return function(e){return a(Cr(t,u,e))}}),l.sendEvent||(l.sendEvent=function(e){var c=e.instantSearchInstance,u=e.helper,l=e.attribute;return function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];if(1!==t.length){var r=t[0],i=t[1],a=t[2],s=void 0===a?"Filter Applied":a;if("click"===r){var o=vt(Cr(u.state,l,i),l);o&&0<o.length&&c.sendEventToInsights({insightsMethod:"clickedFilters",widgetType:Fr,eventType:r,payload:{eventName:s,index:u.getIndex(),filters:o},attribute:l})}}else c.sendEventToInsights(t[0])}}({instantSearchInstance:r,helper:i,attribute:u})),{createURL:l.createURL(n),items:c(function(i){return o.map(function(e){var t=e.start,n=e.end,r=e.label;return{label:r,value:encodeURI(JSON.stringify({start:t,end:n})),isRefined:Tr(i,u,{start:t,end:n,label:r})}})}(n),{results:t}),hasNoResults:!t||0===t.nbHits,refine:l.refine,sendEvent:l.sendEvent,widgetParams:s}}}}}var Pr=Mn(Rr),xr=st({name:"menu",connector:!0}),Nr=["isRefined","name:asc"],Ir=st({name:"numeric-menu",connector:!0}),Fr="ais.numericMenu";function Tr(e,t,n){var r=e.getNumericRefinements(t);return void 0!==n.start&&void 0!==n.end?n.start===n.end?Er(r,"=",n.start):Er(r,">=",n.start)&&Er(r,"<=",n.end):void 0!==n.start?Er(r,">=",n.start):void 0!==n.end?Er(r,"<=",n.end):void 0===n.start&&void 0===n.end&&Object.keys(r).every(function(e){return 0===(r[e]||[]).length})}function Cr(e,t,n){var r=e,i=JSON.parse(decodeURI(n)),a=r.getNumericRefinements(t);if(void 0===i.start&&void 0===i.end)return r.removeNumericRefinement(t);if(Tr(r,t,i)||(r=r.removeNumericRefinement(t)),void 0!==i.start&&void 0!==i.end){if(i.start>i.end)throw new Error("option.start should be > to option.end");if(i.start===i.end)return r=Er(a,"=",i.start)?r.removeNumericRefinement(t,"=",i.start):r.addNumericRefinement(t,"=",i.start)}return void 0!==i.start&&(Er(a,">=",i.start)&&(r=r.removeNumericRefinement(t,">=",i.start)),r=r.addNumericRefinement(t,">=",i.start)),void 0!==i.end&&(Er(a,"<=",i.end)&&(r=r.removeNumericRefinement(t,"<=",i.end)),r=r.addNumericRefinement(t,"<=",i.end)),"number"==typeof r.page&&(r.page=0),r}function Er(e,t,n){return void 0!==e[t]&&e[t].includes(n)}function kr(n,e){var r=1<arguments.length&&void 0!==e?e:Le;return ke(n,jr()),function(o){var e=o||{},c=e.totalPages,t=e.padding,u=new Lr({currentPage:0,total:0,padding:void 0===t?3:t}),l={};return{$$type:"ais.pagination",init:function(e){var t=e.instantSearchInstance;n(W(W({},this.getWidgetRenderState(e)),{},{instantSearchInstance:t}),!0)},render:function(e){var t=e.instantSearchInstance;n(W(W({},this.getWidgetRenderState(e)),{},{instantSearchInstance:t}),!1)},dispose:function(e){var t=e.state;return r(),t.setQueryParameter("page",void 0)},getWidgetUiState:function(e,t){var n=t.searchParameters.page||0;return n?W(W({},e),{},{page:n+1}):e},getWidgetSearchParameters:function(e,t){var n=t.uiState,r=n.page?n.page-1:0;return e.setQueryParameter("page",r)},getWidgetRenderState:function(e){var t=e.results,n=e.helper,r=e.state,i=e.createURL;l.refine||(l.refine=function(e){n.setPage(e),n.search()}),l.createURL||(l.createURL=function(t){return function(e){return i(t.setPage(e))}});var a=r.page||0,s=function(e){var t=e.nbPages;return void 0!==c?Math.min(c,t):t}(t||{nbPages:0});return u.currentPage=a,u.total=s,{createURL:l.createURL(r),refine:l.refine,canRefine:1<s,currentRefinement:a,nbHits:(null==t?void 0:t.nbHits)||0,nbPages:s,pages:t?u.pages():[],isFirstPage:u.isFirstPage(),isLastPage:u.isLastPage(),widgetParams:o}},getRenderState:function(e,t){return W(W({},e),{},{pagination:this.getWidgetRenderState(t)})}}}}var Lr=function(){function t(e){C(this,t),k(this,"currentPage",void 0),k(this,"total",void 0),k(this,"padding",void 0),this.currentPage=e.currentPage,this.total=e.total,this.padding=e.padding}return E(t,[{key:"pages",value:function(){var e=this.total,t=this.currentPage,n=this.padding;if(0===e)return[0];var r=this.nbPagesDisplayed(n,e);if(r===e)return He({end:e});var i=this.calculatePaddingLeft(t,n,e,r);return He({start:t-i,end:t+(r-i)})}},{key:"nbPagesDisplayed",value:function(e,t){return Math.min(2*e+1,t)}},{key:"calculatePaddingLeft",value:function(e,t,n,r){return e<=t?e:n-t<=e?r-(n-e):t}},{key:"isLastPage",value:function(){return this.currentPage===this.total-1||
124790===this.total}},{key:"isFirstPage",value:function(){return 0===this.currentPage}}]),t}(),jr=st({name:"pagination",connector:!0}),Mr=st({name:"range-input",connector:!0},{name:"range-slider",connector:!0}),Or="ais.range";function Ar(e){var t=e.min,n=e.max,r=e.precision,i=Math.pow(10,r);return{min:t?Math.floor(t*i)/i:t,max:n?Math.ceil(n*i)/i:n}}function Hr(r,e){var i=1<arguments.length&&void 0!==e?e:Le;return ke(r,Mr()),function(o){var e=o||{},t=e.attribute,w=void 0===t?"":t,_=e.min,P=e.max,n=e.precision,x=void 0===n?0:n;if(!w)throw new Error(Mr("The `attribute` option is required."));if(Oe(_)&&Oe(P)&&P<_)throw new Error(Mr("The `max` option can't be lower than `min`."));function f(e,t,n,r){var i,a,s=e.state,o=t.min,c=t.max,u=D(s.getNumericRefinement(w,">=")||[],1)[0],l=D(s.getNumericRefinement(w,"<=")||[],1)[0],d=void 0===n||""===n,h=void 0===r||""===r,f=Ar({min:d?void 0:parseFloat(n),max:h?void 0:parseFloat(r),precision:x}),m=f.min,p=f.max;i=Oe(_)||o!==m?Oe(_)&&d?_:m:void 0,a=Oe(P)||c!==p?Oe(P)&&h?P:p:void 0;var g=void 0===i,v=Oe(o)&&o<=i,y=g||Oe(i)&&(!Oe(o)||v),b=void 0===a,S=Oe(a)&&a<=c,R=b||Oe(a)&&(!Oe(c)||S);return(u!==i||l!==a)&&y&&R?(s=s.removeNumericRefinement(w),Oe(i)&&(s=s.addNumericRefinement(w,">=",i)),Oe(a)&&(s=s.addNumericRefinement(w,"<=",a)),s.resetPage()):null}function m(e,t,n,r){var i=3<arguments.length&&void 0!==r?r:"Filter Applied",a=vt(e,w);a&&0<a.length&&t.sendEventToInsights({insightsMethod:"clickedFilters",widgetType:Or,eventType:"click",payload:{eventName:i,index:n.getIndex(),filters:a},attribute:w})}var c={from:function(e){return e.toLocaleString()},to:function(e){return function(e){return Number(Number(e).toFixed(x))}(e).toLocaleString()}};function u(i,a,s){return function(){var e=D(0<arguments.length&&void 0!==arguments[0]?arguments[0]:[void 0,void 0],2),t=e[0],n=e[1],r=f(a,s,t,n);r&&(m(r,i,a),a.setState(r).search())}}return{$$type:Or,init:function(e){r(W(W({},this.getWidgetRenderState(e)),{},{instantSearchInstance:e.instantSearchInstance}),!0)},render:function(e){r(W(W({},this.getWidgetRenderState(e)),{},{instantSearchInstance:e.instantSearchInstance}),!1)},getRenderState:function(e,t){return W(W({},e),{},{range:W(W({},e.range),{},k({},w,this.getWidgetRenderState(t)))})},getWidgetRenderState:function(e){var t=e.results,n=e.helper,r=e.instantSearchInstance,i=Ie(t&&t.disjunctiveFacets||[],function(e){return e.name===w}),a=function(e){return Ar({min:Oe(_)?_:Oe(e.min)?e.min:0,max:Oe(P)?P:Oe(e.max)?e.max:0,precision:x})}(i&&i.stats||{min:void 0,max:void 0}),s=function(e){var t=D(e.getNumericRefinement(w,">=")||[],1)[0],n=D(e.getNumericRefinement(w,"<=")||[],1)[0];return[Oe(t)?t:-1/0,Oe(n)?n:1/0]}(n);return{refine:u(r,n,t?a:{min:void 0,max:void 0}),canRefine:a.min!==a.max,format:c,range:a,sendEvent:function(l,d,h){return function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];if(1!==t.length){var r=t[0],i=t[1],a=t[2];if("click"===r){var s=D(i,2),o=s[0],c=s[1],u=f(d,h,o,c);m(u,l,d,a)}}else l.sendEventToInsights(t[0])}}(r,n,a),widgetParams:W(W({},o),{},{precision:x}),start:s}},dispose:function(e){var t=e.state;return i(),t.removeDisjunctiveFacet(w).removeNumericRefinement(w)},getWidgetUiState:function(e,t){var n=t.searchParameters.getNumericRefinements(w),r=n[">="],i=void 0===r?[]:r,a=n["<="],s=void 0===a?[]:a;return 0===i.length&&0===s.length?e:W(W({},e),{},{range:W(W({},e.range),{},k({},w,"".concat(i,":").concat(s)))})},getWidgetSearchParameters:function(e,t){var n=t.uiState,r=e.addDisjunctiveFacet(w).setQueryParameters({numericRefinements:W(W({},e.numericRefinements),{},k({},w,{}))});Oe(_)&&(r=r.addNumericRefinement(w,">=",_)),Oe(P)&&(r=r.addNumericRefinement(w,"<=",P));var i=n.range&&n.range[w];if(!i||-1===i.indexOf(":"))return r;var a=D(i.split(":").map(parseFloat),2),s=a[0],o=a[1];return Oe(s)&&(!Oe(_)||_<s)&&(r=(r=r.removeNumericRefinement(w,">=")).addNumericRefinement(w,">=",s)),Oe(o)&&(!Oe(P)||o<P)&&(r=(r=r.removeNumericRefinement(w,"<=")).addNumericRefinement(w,"<=",o)),r}}}}function Wr(u,e){var l=1<arguments.length&&void 0!==e?e:Le;return ke(u,Kr()),function(f){var e=f||{},m=e.attribute,t=e.operator,d=void 0===t?"or":t,n=e.limit,p=void 0===n?10:n,r=e.showMore,g=void 0!==r&&r,i=e.showMoreLimit,h=void 0===i?20:i,a=e.sortBy,v=void 0===a?zr:a,s=e.escapeFacetValues,o=void 0===s||s,c=e.transformItems,y=void 0===c?function(e){return e}:c;if(!m)throw new Error(Kr("The `attribute` option is required."));if(!/^(and|or)$/.test(d))throw new Error(Kr('The `operator` must one of: `"and"`, `"or"` (got "'.concat(d,'").')));if(!0===g&&h<=p)throw new Error(Kr("`showMoreLimit` should be greater than `limit`."));function b(e){var t=e.name,n=e.escapedValue;return W(W({},j(e,["name","escapedValue"])),{},{value:n,label:t,highlighted:t})}var S,R,w,_=[],P=!0,x=!1,N=function(){};function I(){N()}function F(){return x?h:p}function T(n,s){return function(a){return function(e){var r=a.instantSearchInstance,i=a.results;if(""===e&&_)u(W(W({},s.getWidgetRenderState(W(W({},a),{},{results:S}))),{},{instantSearchInstance:r}),!1);else{var t={highlightPreTag:o?Ke.highlightPreTag:ze.highlightPreTag,highlightPostTag:o?Ke.highlightPostTag:ze.highlightPostTag};n.searchForFacetValues(m,e,Math.min(F(),100),t).then(function(e){var t=o?function(e){return e.map(function(e){return W(W({},e),{},{highlighted:Je(e.highlighted)})})}(e.facetHits):e.facetHits,n=y(t.map(function(e){var t=e.escapedValue,n=e.value;return W(W({},j(e,["escapedValue","value"])),{},{value:t,label:n})}),{results:i});u(W(W({},s.getWidgetRenderState(W(W({},a),{},{results:S}))),{},{items:n,canToggleShowMore:!1,canRefine:!0,isFromSearch:!0,instantSearchInstance:r}),!1)})}}}}var C=function(){return function(){}};return{$$type:"ais.refinementList",init:function(e){u(W(W({},this.getWidgetRenderState(e)),{},{instantSearchInstance:e.instantSearchInstance}),!0)},render:function(e){u(W(W({},this.getWidgetRenderState(e)),{},{instantSearchInstance:e.instantSearchInstance}),!1)},getRenderState:function(e,t){return W(W({},e),{},{refinementList:W(W({},e.refinementList),{},k({},m,this.getWidgetRenderState(t)))})},getWidgetRenderState:function(e){var t=e.results,n=e.state,r=e.createURL,i=e.instantSearchInstance,a=e.helper,s=[],o=[];if(w&&R&&C||(w=dt({instantSearchInstance:i,helper:a,attribute:m,widgetType:this.$$type}),R=function(e){w("click",e),a.toggleFacetRefinement(m,e).search()},C=T(a,this)),t){var c=t.getFacetValues(m,{sortBy:v,facetOrdering:v===zr});o=c&&Array.isArray(c)?c:[],s=y(o.slice(0,F()).map(b),{results:t});var u=n.maxValuesPerFacet,l=F();P=l<u?o.length<=l:o.length<l,S=t,_=s,e.results&&(N=function(e,t){return function(){x=!x,t.render(e)}}(e,this))}var d=C&&C(e),h=x&&_.length>p||g&&!P;return{createURL:function(e){return r(n.resetPage().toggleFacetRefinement(m,e))},items:s,refine:R,searchForItems:d,isFromSearch:!1,canRefine:0<s.length,widgetParams:f,isShowingMore:x,canToggleShowMore:h,toggleShowMore:I,sendEvent:w,hasExhaustiveItems:P}},dispose:function(e){var t=e.state;l();var n=t.setQueryParameter("maxValuesPerFacet",void 0);return"and"===d?n.removeFacet(m):n.removeDisjunctiveFacet(m)},getWidgetUiState:function(e,t){var n=t.searchParameters,r="or"===d?n.getDisjunctiveRefinements(m):n.getConjunctiveRefinements(m);return r.length?W(W({},e),{},{refinementList:W(W({},e.refinementList),{},k({},m,r))}):e},getWidgetSearchParameters:function(e,t){var n=t.uiState,r="or"===d,i=n.refinementList&&n.refinementList[m],a=e.clearRefinements(m),s=r?a.addDisjunctiveFacet(m):a.addFacet(m),o=s.maxValuesPerFacet||0,c=Math.max(o,g?h:p),u=s.setQueryParameter("maxValuesPerFacet",c);if(i)return i.reduce(function(e,t){return r?e.addDisjunctiveFacetRefinement(m,t):e.addFacetRefinement(m,t)},u);var l=r?"disjunctiveFacetsRefinements":"facetsRefinements";return u.setQueryParameters(k({},l,W(W({},u[l]),{},k({},m,[]))))}}}}function Dr(e,t){return t(e)}function Br(n,e){var r=1<arguments.length&&void 0!==e?e:Le;return ke(n,Jr()),function(i){var a,s,e=(i||{}).queryHook,o=void 0===e?Dr:e;return{$$type:"ais.searchBox",init:function(e){var t=e.instantSearchInstance;n(W(W({},this.getWidgetRenderState(e)),{},{instantSearchInstance:t}),!0)},render:function(e){var t=e.instantSearchInstance;n(W(W({},this.getWidgetRenderState(e)),{},{instantSearchInstance:t}),!1)},dispose:function(e){var t=e.state;return r(),t.setQueryParameter("query",void 0)},getRenderState:function(e,t){return W(W({},e),{},{searchBox:this.getWidgetRenderState(t)})},getWidgetRenderState:function(e){var t=e.helper,n=e.searchMetadata,r=e.state;return a||(a=function(e){o(e,function(e){return t.setQuery(e).search()})},s=function(){t.setQuery("").search()}),{query:r.query||"",refine:a,clear:s,widgetParams:i,isSearchStalled:n.isSearchStalled}},getWidgetUiState:function(e,t){var n=t.searchParameters.query||"";return""===n||e&&e.query===n?e:W(W({},e),{},{query:n})},getWidgetSearchParameters:function(e,t){var n=t.uiState;return e.setQueryParameter("query",n.query||"")}}}}function Ur(i,e){var n=1<arguments.length&&void 0!==e?e:Le;ke(i,Yr());var c={};return function(a){var e=a||{},s=e.items,t=e.transformItems,o=void 0===t?function(e){return e}:t;if(!Array.isArray(s))throw new Error(Yr("The `items` option expects an array of objects."));return{$$type:"ais.sortBy",init:function(e){var t=e.instantSearchInstance,n=this.getWidgetRenderState(e),r=n.currentRefinement;Ie(s,function(e){return e.value===r});i(W(W({},n),{},{instantSearchInstance:t}),!0)},render:function(e){var t=e.instantSearchInstance;i(W(W({},this.getWidgetRenderState(e)),{},{instantSearchInstance:t}),!1)},dispose:function(e){var t=e.state;return n(),c.initialIndex?t.setIndex(c.initialIndex):t},getRenderState:function(e,t){return W(W({},e),{},{sortBy:this.getWidgetRenderState(t)})},getWidgetRenderState:function(e){var t=e.results,n=e.helper,r=e.state,i=e.parent;return!c.initialIndex&&i&&(c.initialIndex=i.getIndexName()),c.setIndex||(c.setIndex=function(e){n.setIndex(e).search()}
12479),{currentRefinement:r.index,options:o(s,{results:t}),refine:c.setIndex,hasNoResults:!t||0===t.nbHits,widgetParams:a}},getWidgetUiState:function(e,t){var n=t.searchParameters.index;return W(W({},e),{},{sortBy:n!==c.initialIndex?n:void 0})},getWidgetSearchParameters:function(e,t){var n=t.uiState;return e.setQueryParameter("index",n.sortBy||c.initialIndex||e.index)}}}}function qr(n,e){var i=1<arguments.length&&void 0!==e?e:Le;return ke(n,Xr()),function(d){var h,e=d||{},f=e.attribute,t=e.max,m=void 0===t?5:t;if(!f)throw new Error(Xr("The `attribute` option is required."));function p(e){var t,n=e.getNumericRefinements(f);if(null!==(t=n[">="])&&void 0!==t&&t.length)return n[">="][0]}function r(e,t){var n=p(e)===Number(t),r=e.resetPage().removeNumericRefinement(f);return n?r:r.addNumericRefinement(f,"<=",m).addNumericRefinement(f,">=",Number(t))}var g=function(e){return function(e,t){h("click",t),e.setState(r(e.state,t)).search()}.bind(null,e)},v=function(e){var t=e.state,n=e.createURL;return function(e){return n(r(t,e))}};return{$$type:Gr,init:function(e){var t=e.instantSearchInstance;n(W(W({},this.getWidgetRenderState(e)),{},{instantSearchInstance:t}),!0)},render:function(e){var t=e.instantSearchInstance;n(W(W({},this.getWidgetRenderState(e)),{},{instantSearchInstance:t}),!1)},getRenderState:function(e,t){return W(W({},e),{},{ratingMenu:W(W({},e.ratingMenu),{},k({},f,this.getWidgetRenderState(t)))})},getWidgetRenderState:function(e){var t=e.helper,n=e.results,r=e.state,i=e.instantSearchInstance,a=e.createURL,s=[];if(h=h||function(e){var o=e.instantSearchInstance,c=e.helper,u=e.getRefinedStar,l=e.attribute;return function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];if(1!==t.length){var r=t[0],i=t[1],a=t[2],s=void 0===a?"Filter Applied":a;if("click"===r)u()===Number(i)||o.sendEventToInsights({insightsMethod:"clickedFilters",widgetType:Gr,eventType:r,payload:{eventName:s,index:c.getIndex(),filters:["".concat(l,">=").concat(i)]},attribute:l})}else o.sendEventToInsights(t[0])}}({instantSearchInstance:i,helper:t,getRefinedStar:function(){return p(t.state)},attribute:f}),n)for(var o=n.getFacetValues(f,{}),c=(o.length,function(e){var r=0;e.forEach(function(e){var t=D(e.name.split("."),2)[1],n=void 0===t?"":t;r=Math.max(r,n.length)})}(o),p(r)),u=function(n){var e=c===n,t=o.filter(function(e){return Number(e.name)>=n&&Number(e.name)<=m}).map(function(e){return e.count}).reduce(function(e,t){return e+t},0);if(c&&!e&&0===t)return"continue";var r=P(new Array(Math.floor(m/1))).map(function(e,t){return 1*t<n});s.push({stars:r,name:String(n),label:String(n),value:String(n),count:t,isRefined:e})},l=1;l<m;l+=1)u(l);return{items:s=s.reverse(),hasNoResults:!n||0===n.nbHits,canRefine:0<s.length,refine:g(t),sendEvent:h,createURL:v({state:r,createURL:a}),widgetParams:d}},dispose:function(e){var t=e.state;return i(),t.removeNumericRefinement(f)},getWidgetUiState:function(e,t){var n=t.searchParameters,r=p(n);return"number"!=typeof r?e:W(W({},e),{},{ratingMenu:W(W({},e.ratingMenu),{},k({},f,r))})},getWidgetSearchParameters:function(e,t){var n=t.uiState,r=n.ratingMenu&&n.ratingMenu[f],i=e.clearRefinements(f).addDisjunctiveFacet(f);return r?i.addNumericRefinement(f,"<=",m).addNumericRefinement(f,">=",r):i.setQueryParameters({numericRefinements:W(W({},i.numericRefinements),{},k({},f,{}))})}}}}function Qr(n,e){var t=1<arguments.length&&void 0!==e?e:Le;return ke(n,Zr()),function(r){return{$$type:"ais.stats",init:function(e){var t=e.instantSearchInstance;n(W(W({},this.getWidgetRenderState(e)),{},{instantSearchInstance:t}),!0)},render:function(e){var t=e.instantSearchInstance;n(W(W({},this.getWidgetRenderState(e)),{},{instantSearchInstance:t}),!1)},dispose:function(){t()},getRenderState:function(e,t){return W(W({},e),{},{stats:this.getWidgetRenderState(t)})},getWidgetRenderState:function(e){var t=e.results,n=e.state;return t?{hitsPerPage:t.hitsPerPage,nbHits:t.nbHits,nbSortedHits:t.nbSortedHits,areHitsSorted:void 0!==t.appliedRelevancyStrictness&&0<t.appliedRelevancyStrictness&&t.nbSortedHits!==t.nbHits,nbPages:t.nbPages,page:t.page,processingTimeMS:t.processingTimeMS,query:t.query,widgetParams:r}:{hitsPerPage:n.hitsPerPage,nbHits:0,nbSortedHits:void 0,areHitsSorted:!1,nbPages:0,page:n.page||0,processingTimeMS:-1,query:n.query||"",widgetParams:r}}}}}function Vr(i,e){var a=1<arguments.length&&void 0!==e?e:Le;return ke(i,ei()),function(m){var e=m||{},p=e.attribute,t=e.on,n=void 0===t||t,r=e.off;if(!p)throw new Error(ei("The `attribute` option is required."));var g,v=void 0!==r,y=at(n).map(Fe),b=v?at(r).map(Fe):void 0,S=function(n,e){var r=e.state,i=e.createURL;return function(){r=r.resetPage();var e=n?y:b;e&&e.forEach(function(e){r=r.removeDisjunctiveFacetRefinement(p,e)});var t=n?b:y;return t&&t.forEach(function(e){r=r.addDisjunctiveFacetRefinement(p,e)}),i(r)}};return{$$type:ti,init:function(e){var t=e.instantSearchInstance;i(W(W({},this.getWidgetRenderState(e)),{},{instantSearchInstance:t}),!0)},render:function(e){var t=e.instantSearchInstance;i(W(W({},this.getWidgetRenderState(e)),{},{instantSearchInstance:t}),!1)},dispose:function(e){var t=e.state;return a(),t.removeDisjunctiveFacet(p)},getRenderState:function(e,t){return W(W({},e),{},{toggleRefinement:W(W({},e.toggleRefinement),{},k({},p,this.getWidgetRenderState(t)))})},getWidgetRenderState:function(e){var t=e.state,n=e.helper,r=e.results,i=e.createURL,a=e.instantSearchInstance,s=r?y.every(function(e){return t.isDisjunctiveFacetRefined(p,e)}):y.every(function(e){return t.isDisjunctiveFacetRefined(p,e)}),o={isRefined:s,count:0},c={isRefined:v&&!s,count:0};if(r){var u=at(b||!1),l=r.getFacetValues(p,{})||[],d=y.map(function(t){return Ie(l,function(e){return e.escapedValue===Fe(String(t))})}).filter(function(e){return void 0!==e}),h=v?u.map(function(t){return Ie(l,function(e){return e.escapedValue===Fe(String(t))})}).filter(function(e){return void 0!==e}):[];o={isRefined:!!d.length&&d.every(function(e){return e.isRefined}),count:d.reduce(function(e,t){return e+t.count},0)||null},c={isRefined:!!h.length&&h.every(function(e){return e.isRefined}),count:h.reduce(function(e,t){return e+t.count},0)||l.reduce(function(e,t){return e+t.count},0)}}g=g||function(e){var o=e.instantSearchInstance,c=e.helper,u=e.attribute,l=e.on;return function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];if(1!==t.length){var r=t[0],i=t[1],a=t[2],s=void 0===a?"Filter Applied":a;"click"===r&&void 0!==l&&(i||o.sendEventToInsights({insightsMethod:"clickedFilters",widgetType:ti,eventType:r,payload:{eventName:s,index:c.getIndex(),filters:l.map(function(e){return"".concat(u,":").concat(e)})},attribute:u}))}else o.sendEventToInsights(t[0])}}({instantSearchInstance:a,attribute:p,on:y,helper:n});var f=s?c:o;return{value:{name:p,isRefined:s,count:r?f.count:null,onFacetValue:o,offFacetValue:c},createURL:S(s,{state:t,createURL:i}),sendEvent:g,canRefine:Boolean(r?f.count:null),refine:function(t){return function(){var e=(0<arguments.length&&void 0!==arguments[0]?arguments[0]:{isRefined:!1}).isRefined;e?(y.forEach(function(e){return t.removeDisjunctiveFacetRefinement(p,e)}),v&&b.forEach(function(e){return t.addDisjunctiveFacetRefinement(p,e)})):(g("click",e),v&&b.forEach(function(e){return t.removeDisjunctiveFacetRefinement(p,e)}
12479),y.forEach(function(e){return t.addDisjunctiveFacetRefinement(p,e)})),t.search()}}(n),widgetParams:m}},getWidgetUiState:function(e,t){var n=t.searchParameters,r=y&&y.every(function(e){return n.isDisjunctiveFacetRefined(p,e)});return r?W(W({},e),{},{toggle:W(W({},e.toggle),{},k({},p,r))}):e},getWidgetSearchParameters:function(e,t){var n=t.uiState,r=e.clearRefinements(p).addDisjunctiveFacet(p);return Boolean(n.toggle&&n.toggle[p])?(y&&y.forEach(function(e){r=r.addDisjunctiveFacetRefinement(p,e)}),r):v?(b&&b.forEach(function(e){r=r.addDisjunctiveFacetRefinement(p,e)}),r):r.setQueryParameters({disjunctiveFacetsRefinements:W(W({},e.disjunctiveFacetsRefinements),{},k({},p,[]))})}}}}function $r(d,e){var h=1<arguments.length&&void 0!==e?e:Le;ke(d,ni());var f={};return function(s){var e=s||{},t=e.attributes,n=e.separator,r=void 0===n?" > ":n,i=e.rootPath,a=void 0===i?null:i,o=e.transformItems,c=void 0===o?function(e){return e}:o;if(!t||!Array.isArray(t)||0===t.length)throw new Error(ni("The `attributes` option expects an array of strings."));var u=D(t,1)[0];function l(e,t){if(t)return e.resetPage().toggleFacetRefinement(u,t);var n=e.getHierarchicalFacetBreadcrumb(u);return 0===n.length?e:e.resetPage().toggleFacetRefinement(u,n[0])}return{$$type:"ais.breadcrumb",init:function(e){d(W(W({},this.getWidgetRenderState(e)),{},{instantSearchInstance:e.instantSearchInstance}),!0)},render:function(e){d(W(W({},this.getWidgetRenderState(e)),{},{instantSearchInstance:e.instantSearchInstance}),!1)},dispose:function(){h()},getRenderState:function(e,t){return W(W({},e),{},{breadcrumb:W(W({},e.breadcrumb),{},k({},u,this.getWidgetRenderState(t)))})},getWidgetRenderState:function(e){var t=e.helper,n=e.createURL,r=e.results,i=e.state;var a=function(){if(!r||0===i.hierarchicalFacets.length)return[];var e=D(i.hierarchicalFacets,1)[0].name,t=r.getFacetValues(e,{}),n=Array.isArray(t.data)?t.data:[];return c(function(n){return n.map(function(e,t){return{label:e.label,value:t+1===n.length?null:n[t+1].value}})}(function n(e){return e.reduce(function(e,t){return t.isRefined&&(e.push({label:t.name,value:t.escapedValue}),Array.isArray(t.data)&&(e=e.concat(n(t.data)))),e},[])}(n)),{results:r})}();return f.createURL||(f.createURL=function(e){return n(l(t.state,e))}),f.refine||(f.refine=function(e){t.setState(l(t.state,e)).search()}),{canRefine:0<a.length,createURL:f.createURL,items:a,refine:f.refine,widgetParams:s}},getWidgetSearchParameters:function(e){if(e.isHierarchicalFacet(u)){e.getHierarchicalFacetByName(u);return e}return e.addHierarchicalFacet({name:u,attributes:t,separator:r,rootPath:a})}}}}var Kr=st({name:"refinement-list",connector:!0}),zr=["isRefined","count:desc","name:asc"],Jr=st({name:"search-box",connector:!0}),Yr=st({name:"sort-by",connector:!0}),Xr=st({name:"rating-menu",connector:!0}),Gr="ais.ratingMenu",Zr=st({name:"stats",connector:!0}),ei=st({name:"toggle-refinement",connector:!0}),ti="ais.toggleRefinement",ni=st({name:"breadcrumb",connector:!0});var ri=st({name:"geo-search",connector:!0});function ii(e){return e.insideBoundingBox||""}function ai(e,t){return e.setQueryParameter("insideBoundingBox",t)}function si(v,e){var i=1<arguments.length&&void 0!==e?e:Le;return ke(v,ri()),function(s){function o(e){return e.aroundLatLng?function(e){var t=e.match(ot);if(!t)throw new Error('Invalid value for "aroundLatLng" parameter: "'.concat(e,'"'));return{lat:parseFloat(t[1]),lng:parseFloat(t[2])}}(e.aroundLatLng):void 0}function c(){return g.internalToggleRefineOnMapMove()}function u(e,t){return function(){g.isRefineOnMapMove=!g.isRefineOnMapMove,t(e)}}function l(){return g.isRefineOnMapMove}function d(){return g.internalSetMapMoveSinceLastRefine()}function h(t,n){return function(){var e=!0!==g.hasMapMoveSinceLastRefine;g.hasMapMoveSinceLastRefine=!0,e&&n(t)}}function f(){return g.hasMapMoveSinceLastRefine}var m,e=s||{},t=e.enableRefineOnMapMove,n=void 0===t||t,r=e.transformItems,p=void 0===r?function(e){return e}:r,g={isRefineOnMapMove:n,hasMapMoveSinceLastRefine:!1,lastRefinePosition:"",lastRefineBoundingBox:"",internalToggleRefineOnMapMove:Le,internalSetMapMoveSinceLastRefine:Le};return{$$type:ci,init:function(e){var t=e.instantSearchInstance;g.internalToggleRefineOnMapMove=u(e,Le),g.internalSetMapMoveSinceLastRefine=h(e,Le),v(W(W({},this.getWidgetRenderState(e)),{},{instantSearchInstance:t}),!0)},render:function(e){var t=e.helper,n=e.instantSearchInstance,r=t.state,i=Boolean(r.aroundLatLng)&&Boolean(g.lastRefinePosition)&&r.aroundLatLng!==g.lastRefinePosition,a=!r.insideBoundingBox&&Boolean(g.lastRefineBoundingBox)&&r.insideBoundingBox!==g.lastRefineBoundingBox;(i||a)&&(g.hasMapMoveSinceLastRefine=!1),g.lastRefinePosition=r.aroundLatLng||"",g.lastRefineBoundingBox=ii(r),g.internalToggleRefineOnMapMove=u(e,this.render.bind(this)),g.internalSetMapMoveSinceLastRefine=h(e,this.render.bind(this));var s=this.getWidgetRenderState(e);m("view",s.items),v(W(W({},s),{},{instantSearchInstance:n}),!1)},getWidgetRenderState:function(e){var t=e.helper,n=e.results,r=e.instantSearchInstance,i=t.state,a=n?p(n.hits.filter(function(e){return e._geoloc}),{results:n}):[];return m=m||pt({instantSearchInstance:r,index:t.getIndex(),widgetType:ci}),{items:a,position:o(i),currentRefinement:function(e){return e.insideBoundingBox&&ct(e.insideBoundingBox)}(i),refine:function(i){return function(e){var t=e.northEast,n=e.southWest,r=[t.lat,t.lng,n.lat,n.lng].join();i.setState(ai(i.state,r).resetPage()).search(),g.hasMapMoveSinceLastRefine=!1,g.lastRefineBoundingBox=r}}(t),sendEvent:m,clearMapRefinement:function(e){return function(){e.setQueryParameter("insideBoundingBox",void 0).search()}}
12479(t),isRefinedWithMap:function(e){return function(){return Boolean(e.insideBoundingBox)}}(i),toggleRefineOnMapMove:c,isRefineOnMapMove:l,setMapMoveSinceLastRefine:d,hasMapMoveSinceLastRefine:f,widgetParams:s}},getRenderState:function(e,t){return W(W({},e),{},{geoSearch:this.getWidgetRenderState(t)})},dispose:function(e){var t=e.state;return i(),t.setQueryParameter("insideBoundingBox",void 0)},getWidgetUiState:function(e,t){var n=ii(t.searchParameters);return!n||e&&e.geoSearch&&e.geoSearch.boundingBox===n?e:W(W({},e),{},{geoSearch:{boundingBox:n}})},getWidgetSearchParameters:function(e,t){var n=t.uiState;return n&&n.geoSearch?ai(e,n.geoSearch.boundingBox):e.setQueryParameter("insideBoundingBox",void 0)}}}}function oi(r,e){var i=1<arguments.length&&void 0!==e?e:Le;ke(r,ui());var a="https://www.algolia.com/?utm_source=instantsearch.js&utm_medium=website&"+"utm_content=".concat(St(function(e){var t;return(null===(t=e.window.location)||void 0===t?void 0:t.hostname)||""},{fallback:function(){return""}}),"&")+"utm_campaign=poweredby";return function(e){var t=(e||{}).url,n=void 0===t?a:t;return{$$type:"ais.poweredBy",init:function(e){var t=e.instantSearchInstance;r(W(W({},this.getWidgetRenderState(e)),{},{instantSearchInstance:t}),!0)},render:function(e){var t=e.instantSearchInstance;r(W(W({},this.getWidgetRenderState(e)),{},{instantSearchInstance:t}),!1)},getRenderState:function(e,t){return W(W({},e),{},{poweredBy:this.getWidgetRenderState(t)})},getWidgetRenderState:function(){return{url:n,widgetParams:e}},dispose:function(){i()}}}}var ci="ais.geoSearch",ui=st({name:"powered-by",connector:!0}),li=st({name:"configure",connector:!0});function di(e,t){return e.setQueryParameters(Object.keys(t.searchParameters).reduce(function(e,t){return W(W({},e),{},k({},t,void 0))},{}))}function hi(e,t){var r=0<arguments.length&&void 0!==e?e:Le,a=1<arguments.length&&void 0!==t?t:Le;return function(i){if(!i||!Ae(i.searchParameters))throw new Error(li("The `searchParameters` option expects an object."));var n={};return{$$type:"ais.configure",init:function(e){var t=e.instantSearchInstance;r(W(W({},this.getWidgetRenderState(e)),{},{instantSearchInstance:t}),!0)},render:function(e){var t=e.instantSearchInstance;r(W(W({},this.getWidgetRenderState(e)),{},{instantSearchInstance:t}),!1)},dispose:function(e){var t=e.state;return a(),di(t,i)},getRenderState:function(e,t){var n,r=this.getWidgetRenderState(t);return W(W({},e),{},{configure:W(W({},r),{},{widgetParams:W(W({},r.widgetParams),{},{searchParameters:it(new pe.SearchParameters(null===(n=e.configure)||void 0===n?void 0:n.widgetParams.searchParameters),new pe.SearchParameters(r.widgetParams.searchParameters)).getQueryParams()})})})},getWidgetRenderState:function(e){var t=e.helper;return n.refine||(n.refine=function(r){return function(e){var t=di(r.state,i),n=it(t,new pe.SearchParameters(e));i.searchParameters=e,r.setState(n).search()}}(t)),{refine:n.refine,widgetParams:i}},getWidgetSearchParameters:function(e,t){var n=t.uiState;return it(e,new pe.SearchParameters(W(W({},n.configure),i.searchParameters)))},getWidgetUiState:function(e){return W(W({},e),{},{configure:W(W({},e.configure),i.searchParameters)})}}}}var fi=st({name:"configure-related-items",connector:!0});function mi(e){var t=e.attributeName,n=e.attributeValue,r=e.attributeScore;return"".concat(t,":").concat(n,"<score=").concat(r||1,">")}function pi(c,u){return function(e){var t=e||{},a=t.hit,s=t.matchingPatterns,n=t.transformSearchParameters,r=void 0===n?function(e){return e}:n;if(!a)throw new Error(fi("The `hit` option is required."));if(!s)throw new Error(fi("The `matchingPatterns` option is required."));var i=Object.keys(s).reduce(function(e,t){var n=s[t],r=Me(a,t),i=n.score;return Array.isArray(r)?[].concat(P(e),[r.map(function(e){return mi({attributeName:t,attributeValue:e,attributeScore:i})})]):"string"==typeof r?[].concat(P(e),[mi({attributeName:t,attributeValue:r,attributeScore:i})]):e},[]),o=W({},r(new pe.SearchParameters({sumOrFiltersScores:!0,facetFilters:["objectID:-".concat(a.objectID)],optionalFilters:i})));return W(W({},hi(c,u)({searchParameters:o})),{},{$$type:"ais.configureRelatedItems"})}}var gi=st({name:"autocomplete",connector:!0}),vi=st({name:"query-rules",connector:!0});function yi(e){var t=this.helper,n=this.initialRuleContexts,r=this.trackedFilters,i=this.transformRuleContexts,a=e.state,s=a.ruleContexts||[],o=function(e){var i=e.helper,a=e.sharedHelperState,s=e.trackedFilters;return Object.keys(s).reduce(function(e,t){var n=Ce(i.lastResults||{},a,!0).filter(function(e){return e.attribute===t}).map(function(e){return e.numericValue||e.name}),r=(0,s[t])(n);return[].concat(P(e),P(n.filter(function(e){return r.includes(e)}).map(function(e){return function(e){return e.replace(/[^a-z0-9-_]+/gi,"_")}("ais-".concat(t,"-").concat(e))})))},[])}({helper:t,sharedHelperState:a,trackedFilters:r}),c=i([].concat(P(n),P(o))).slice(0,10);De(s,c)||t.overrideStateWithoutTriggeringChangeEvent(W(W({},a),{},{ruleContexts:c}))}function bi(d,e){var h=1<arguments.length&&void 0!==e?e:Le;return ke(d,vi()),function(i){var e=i||{},t=e.trackedFilters,a=void 0===t?{}:t,n=e.transformRuleContexts,s=void 0===n?function(e){return e}:n,r=e.transformItems,o=void 0===r?function(e){return e}:r;
12479Object.keys(a).forEach(function(e){if("function"!=typeof a[e])throw new Error(vi("'The \"".concat(e,'" filter value in the `trackedFilters` option expects a function.')))});var c,u=0<Object.keys(a).length,l=[];return{$$type:"ais.queryRules",init:function(e){var t=e.helper,n=e.state,r=e.instantSearchInstance;l=n.ruleContexts||[],c=yi.bind({helper:t,initialRuleContexts:l,trackedFilters:a,transformRuleContexts:s}),u&&((function(e){return[e.disjunctiveFacetsRefinements,e.facetsRefinements,e.hierarchicalFacetsRefinements,e.numericRefinements].some(function(e){return Boolean(e&&0<Object.keys(e).length)})}(n)||Boolean(i.transformRuleContexts))&&c({state:n}),t.on("change",c)),d(W(W({},this.getWidgetRenderState(e)),{},{instantSearchInstance:r}),!0)},render:function(e){var t=e.instantSearchInstance;d(W(W({},this.getWidgetRenderState(e)),{},{instantSearchInstance:t}),!1)},getWidgetRenderState:function(e){var t=e.results,n=(t||{}).userData;return{items:o(void 0===n?[]:n,{results:t}),widgetParams:i}},getRenderState:function(e,t){return W(W({},e),{},{queryRules:this.getWidgetRenderState(t)})},dispose:function(e){var t=e.helper,n=e.state;return h(),u?(t.removeListener("change",c),n.setQueryParameter("ruleContexts",l)):n}}}}function Si(e){function t(e){return{status:e,transcript:"",isSpeechFinal:!1,errorCode:void 0}}function n(e){var t=0<arguments.length&&void 0!==e?e:{};p=W(W({},p),t),f()}function r(e){n(t(0<arguments.length&&void 0!==e?e:"initial"))}function i(){n({status:"waiting"})}function a(e){n({status:"error",errorCode:e.error})}function s(e){n({status:"recognizing",transcript:e.results[0]&&e.results[0][0]&&e.results[0][0].transcript||"",isSpeechFinal:e.results[0]&&e.results[0].isFinal}),l&&p.transcript&&h(p.transcript)}function o(){p.errorCode||!p.transcript||l||h(p.transcript),"error"!==p.status&&n({status:"finished"})}function c(){u&&(u.stop(),u.removeEventListener("start",i),u.removeEventListener("error",a),u.removeEventListener("result",s),u.removeEventListener("end",o),u=void 0)}var u,l=e.searchAsYouSpeak,d=e.language,h=e.onQueryChange,f=e.onStateChange,m=window.webkitSpeechRecognition||window.SpeechRecognition,p=t("initial");return{getState:function(){return p},isBrowserSupported:function(){return Boolean(m)},isListening:function(){return"askingPermission"===p.status||"waiting"===p.status||"recognizing"===p.status},startListening:function(){(u=new m)&&(r("askingPermission"),u.interimResults=!0,d&&(u.lang=d),u.addEventListener("start",i),u.addEventListener("error",a),u.addEventListener("result",s),u.addEventListener("end",o),u.start())},stopListening:function(){c(),r("finished")},dispose:c}}function Ri(p,e){var a=1<arguments.length&&void 0!==e?e:Le;return ke(p,wi()),function(l){var e=l.searchAsYouSpeak,d=void 0!==e&&e,h=l.language,f=l.additionalQueryParameters,t=l.createVoiceSearchHelper,m=void 0===t?Si:t;return{$$type:"ais.voiceSearch",init:function(e){var t=e.instantSearchInstance;p(W(W({},this.getWidgetRenderState(e)),{},{instantSearchInstance:t}),!0)},render:function(e){var t=e.instantSearchInstance;p(W(W({},this.getWidgetRenderState(e)),{},{instantSearchInstance:t}),!1)},getRenderState:function(e,t){return W(W({},e),{},{voiceSearch:this.getWidgetRenderState(t)})},getWidgetRenderState:function(e){var t=this,n=e.helper,r=e.instantSearchInstance;this._refine||(this._refine=function(e){if(e!==n.state.query){var t=h?[h.split("-")[0]]:void 0;n.setQueryParameter("queryLanguages",t),"function"==typeof f&&n.setState(n.state.setQueryParameters(W({ignorePlurals:!0,removeStopWords:!0,optionalWords:e},f({query:e})))),n.setQuery(e).search()}}),this._voiceSearchHelper||(this._voiceSearchHelper=m({searchAsYouSpeak:d,language:h,onQueryChange:function(e){return t._refine(e)},onStateChange:function(){p(W(W({},t.getWidgetRenderState(e)),{},{instantSearchInstance:r}),!1)}}));var i=this._voiceSearchHelper,a=i.isBrowserSupported,s=i.isListening,o=i.startListening,c=i.stopListening,u=i.getState;return{isBrowserSupported:a(),isListening:s(),toggleListening:function(){a()&&(s()?c():o())},voiceListeningState:u(),widgetParams:l}},dispose:function(e){var t=e.state;
12479this._voiceSearchHelper.dispose(),a();var n=t;if("function"==typeof f){var r=f({query:""}),i=r?Object.keys(r).reduce(function(e,t){return e[t]=void 0,e},{}):{};n=t.setQueryParameters(W({queryLanguages:void 0,ignorePlurals:void 0,removeStopWords:void 0,optionalWords:void 0},i))}return n.setQueryParameter("query",void 0)},getWidgetUiState:function(e,t){var n=t.searchParameters.query||"";return n?W(W({},e),{},{query:n}):e},getWidgetSearchParameters:function(e,t){var n=t.uiState;return e.setQueryParameter("query",n.query||"")}}}}var wi=st({name:"voice-search",connector:!0});function _i(b,e){var S=1<arguments.length&&void 0!==e?e:Le;return ke(b,Ni()),function(e){var t=e||{},i=t.queryLanguages,a=t.attributesForPrediction,n=t.nbHits,s=void 0===n?1:n,r=t.renderDebounceTime,o=void 0===r?100:r,c=t.searchDebounceTime,u=void 0===c?100:c,l=t.escapeHTML,d=void 0===l||l,h=t.extraParameters,f=void 0===h?{}:h;if(!i||0===i.length)throw new Error(Ni("The `queryLanguages` expects an array of strings."));var m,p=function(){var n=-1,r=-1,i=void 0;return function(e){var t=++n;return Promise.resolve(e).then(function(e){return i&&t<r?i:(r=t,i=e)})}}(),g=[],v=!1,y=yt(b,o);return{$$type:"ais.answers",init:function(e){var t=e.state,n=e.instantSearchInstance.client.initIndex(t.index);if(!function(e){return"function"==typeof e.findAnswers}(n))throw new Error(Ni("`algoliasearch` >= 4.8.0 required."));
12479m=yt(n.findAnswers,u),b(W(W({},this.getWidgetRenderState(e)),{},{instantSearchInstance:e.instantSearchInstance}),!0)},render:function(n){var r=this,e=n.state.query;if(!e)return v=!(g=[]),void b(W(W({},this.getWidgetRenderState(n)),{},{instantSearchInstance:n.instantSearchInstance}),!1);g=[],v=!0,b(W(W({},this.getWidgetRenderState(n)),{},{instantSearchInstance:n.instantSearchInstance}),!1),p(m(e,i,W(W({},f),{},{nbHits:s,attributesForPrediction:a}))).then(function(e){if(e){d&&0<e.hits.length&&(e.hits=Xe(e.hits));var t=lt(ut(e.hits,0,s),e.queryID);g=t,v=!1,y(W(W({},r.getWidgetRenderState(n)),{},{instantSearchInstance:n.instantSearchInstance}),!1)}})},getRenderState:function(e,t){return W(W({},e),{},{answers:this.getWidgetRenderState(t)})},getWidgetRenderState:function(){return{hits:g,isLoading:v,widgetParams:e}},dispose:function(e){var t=e.state;return S(),t},getWidgetSearchParameters:function(e){return e}}}}function Pi(e,t){var n=0<arguments.length&&void 0!==e?e:Le,r=1<arguments.length&&void 0!==t?t:Le;return function(a){var s={};return{$$type:"ais.relevantSort",init:function(e){var t=e.instantSearchInstance;n(W(W({},this.getWidgetRenderState(e)),{},{instantSearchInstance:t}),!0)},render:function(e){var t=e.instantSearchInstance;n(W(W({},this.getWidgetRenderState(e)),{},{instantSearchInstance:t}),!1)},dispose:function(e){var t=e.state;return r(),t.setQueryParameter("relevancyStrictness",void 0)},getRenderState:function(e,t){return W(W({},e),{},{relevantSort:this.getWidgetRenderState(t)})},getWidgetRenderState:function(e){var t=e.results,n=e.helper;s.refine||(s.refine=function(e){n.setQueryParameter("relevancyStrictness",e).search()});var r=(t||{}).appliedRelevancyStrictness,i=void 0!==r;return{isRelevantSorted:void 0!==r&&0<r,isVirtualReplica:i,canRefine:i,refine:s.refine,widgetParams:a}},getWidgetSearchParameters:function(e,t){var n,r=t.uiState;return e.setQueryParameter("relevancyStrictness",null!==(n=r.relevantSort)&&void 0!==n?n:e.relevancyStrictness)},getWidgetUiState:function(e,t){var n=t.searchParameters;return W(W({},e),{},{relevantSort:n.relevancyStrictness||e.relevantSort})}}}}function xi(d,e){var s=1<arguments.length&&void 0!==e?e:Le;return ke(d,Ii()),function(o){var e=o.widgets,t=o.maxValuesPerFacet,n=void 0===t?20:t,r=o.facets,i=void 0===r?["*"]:r,a=o.transformItems,c=void 0===a?function(e){return e}:a,u=o.fallbackWidget;if(!(e&&Array.isArray(e)&&e.every(function(e){return"object"===f(e)}
12479)))throw new Error(Ii("The `widgets` option expects an array of widgets."));if(!(Array.isArray(i)&&i.length<=1)||"*"!==i[0]&&void 0!==i[0])throw new Error(Ii('The `facets` option only accepts [] or ["*"], you passed '.concat(JSON.stringify(i))));var l=new Map;return{$$type:"ais.dynamicWidgets",init:function(n){e.forEach(function(e){var t=bt(e,n);l.set(t,{widget:e,isMounted:!1})}),d(W(W({},this.getWidgetRenderState(n)),{},{instantSearchInstance:n.instantSearchInstance}),!0)},render:function(e){var t=e.parent,a=this.getWidgetRenderState(e),s=[],o=[];u&&a.attributesToRender.forEach(function(e){if(!l.has(e)){var t=u({attribute:e});l.set(e,{widget:t,isMounted:!1})}}),l.forEach(function(e,t){var n=e.widget,r=e.isMounted,i=-1<a.attributesToRender.indexOf(t);!r&&i?(o.push(n),l.set(t,{widget:n,isMounted:!0})):r&&!i&&(s.push(n),l.set(t,{widget:n,isMounted:!1}))}),t.addWidgets(o),setTimeout(function(){return t.removeWidgets(s)},0),d(W(W({},a),{},{instantSearchInstance:e.instantSearchInstance}),!1)},dispose:function(e){var t=e.parent,n=[];l.forEach(function(e){var t=e.widget;e.isMounted&&n.push(t)}),t.removeWidgets(n),s()},getWidgetSearchParameters:function(e){return i.reduce(function(e,t){return e.addFacet(t)},e.setQueryParameters({maxValuesPerFacet:Math.max(n||0,e.maxValuesPerFacet||0)}))},getRenderState:function(e,t){return W(W({},e),{},{dynamicWidgets:this.getWidgetRenderState(t)})},getWidgetRenderState:function(e){var t,n,r,i,a=e.results;e.state;if(!a)return{attributesToRender:[],widgetParams:o};var s=c(null!==(t=null===(n=a.renderingContent)||void 0===n?void 0:null===(r=n.facetOrdering)||void 0===r?void 0:null===(i=r.facets)||void 0===i?void 0:i.order)&&void 0!==t?t:[],{results:a});if(!Array.isArray(s))throw new Error(Ii("The `transformItems` option expects a function that returns an Array."));return{attributesToRender:s,widgetParams:o}}}}}var Ni=st({name:"answers",connector:!0}),Ii=st({name:"dynamic-widgets",connector:!0}),Fi=je(xi),Ti=Object.freeze({__proto__:null,connectDynamicWidgets:xi,EXPERIMENTAL_connectDynamicWidgets:Fi,connectClearRefinements:Sn,connectCurrentRefinements:_n,connectHierarchicalMenu:Tn,connectHits:Cn,connectHitsWithInsights:vr,connectHitsPerPage:gr,connectInfiniteHits:Rr,connectInfiniteHitsWithInsights:Pr,connectMenu:wr,connectNumericMenu:_r,connectPagination:kr,connectRange:Hr,connectRefinementList:Wr,connectSearchBox:Br,connectSortBy:Ur,connectRatingMenu:qr,connectStats:Qr,connectToggleRefinement:Vr,connectBreadcrumb:$r,connectGeoSearch:si,connectPoweredBy:oi,connectConfigure:hi,EXPERIMENTAL_connectConfigureRelatedItems:pi,connectAutocomplete:function(r,e){var i=1<arguments.length&&void 0!==e?e:Le;return ke(r,gi()),function(o){var e=(o||{}).escapeHTML,c=void 0===e||e,u={};return{$$type:"ais.autocomplete",init:function(e){var t=e.instantSearchInstance;r(W(W({},this.getWidgetRenderState(e)),{},{instantSearchInstance:t}),!0)},render:function(e){var t=e.instantSearchInstance,n=this.getWidgetRenderState(e);n.indices.forEach(function(e){(0,e.sendEvent)("view",e.hits)}),r(W(W({},n),{},{instantSearchInstance:t}),!1)},getRenderState:function(e,t){return W(W({},e),{},{autocomplete:this.getWidgetRenderState(t)})},getWidgetRenderState:function(e){var n=this,t=e.helper,r=e.state,i=e.scopedResults,a=e.instantSearchInstance;u.refine||(u.refine=function(e){t.setQuery(e).search()});var s=i.map(function(e){e.results.hits=c?Xe(e.results.hits):e.results.hits;var t=pt({instantSearchInstance:a,index:e.results.index,widgetType:n.$$type});return{indexId:e.indexId,indexName:e.results.index,hits:e.results.hits,results:e.results,sendEvent:t}});return{currentRefinement:r.query||"",indices:s,refine:u.refine,widgetParams:o}},getWidgetUiState:function(e,t){var n=t.searchParameters.query||"";return""===n||e&&e.query===n?e:W(W({},e),{},{query:n})},getWidgetSearchParameters:function(e,t){var n={query:t.uiState.query||""};return c?e.setQueryParameters(W(W({},n),Ke)):e.setQueryParameters(n)},dispose:function(e){var t=e.state;i();var n=t.setQueryParameter("query",void 0);return c?n.setQueryParameters(Object.keys(Ke).reduce(function(e,t){return W(W({},e),{},k({},t,void 0))},{})):n}}}},connectQueryRules:bi,connectVoiceSearch:Ri,EXPERIMENTAL_connectAnswers:_i,connectRelevantSort:Pi}),Ci=st({name:"analytics"}),Ei=we(function(e){function s(){for(var e=[],t=0;t<arguments.length;t++){var n=arguments[t];if(n){var r=typeof n;if("string"==r||"number"==r)e.push(n);else if(Array.isArray(n)&&n.length){var i=s.apply(null,n);i&&e.push(i)}else if("object"==r)for(var a in n)o.call(n,a)&&n[a]&&e.push(a)}}return e.join(" ")}var o;o={}.hasOwnProperty,e.exports?(s.default=s,e.exports=s):window.classNames=s}),ki=function(){L(t,Yn);var e=O(t);function t(){return C(this,t),e.apply(this,arguments)}return E(t,[{key:"shouldComponentUpdate",value:function(e){return!De(this.props.data,e.data)||this.props.templateKey!==e.templateKey||!De(this.props.rootProps,e.rootProps)}},{key:"render",value:function(){var e=this.props.rootTagName,t=this.props.useCustomCompileOptions[this.props.templateKey]?this.props.templatesConfig.compileOptions:{},n=Ne({templates:this.props.templates,templateKey:this.props.templateKey,compileOptions:t,helpers:this.props.templatesConfig.helpers,data:this.props.data,bindEvent:this.props.bindEvent});return null===n?null:Kn(e,h({},this.props.rootProps,{dangerouslySetInnerHTML:{__html:n}}))}}]),t}();k(ki,"defaultProps",{data:{},rootTagName:"div",useCustomCompileOptions:{},templates:{},templatesConfig:{}});
12479function Li(e){var r=e.items,i=e.cssClasses,a=e.templateProps,s=e.createURL,o=e.refine;return Kn("div",{className:Ei(i.root,k({},i.noRefinementRoot,0===r.length))},Kn("ul",{className:i.list},Kn("li",{className:Ei(i.item,k({},i.selectedItem,0===r.length))},Kn(ki,h({},a,{templateKey:"home",rootTagName:"a",rootProps:{className:i.link,href:s(void 0),onClick:function(e){e.preventDefault(),o(void 0)}}}))),r.map(function(t,e){var n=e===r.length-1;return Kn("li",{key:t.label+e,className:Ei(i.item,k({},i.selectedItem,n))},Kn(ki,h({},a,{templateKey:"separator",rootTagName:"span",rootProps:{className:i.separator,"aria-hidden":!0}})),n?t.label:Kn("a",{className:i.link,href:s(t.value),onClick:function(e){e.preventDefault(),o(t.value)}},t.label))})))}function ji(e){var t=e.hasRefinements,n=e.refine,r=e.cssClasses,i=e.templateProps;return Kn("div",{className:r.root},Kn(ki,h({},i,{templateKey:"resetLabel",rootTagName:"button",rootProps:{className:Ei(r.button,k({},r.disabledButton,!t)),onClick:n,disabled:!t},data:{hasRefinements:t}})))}function Mi(e){var t=e.items,n=e.cssClasses;return Kn("div",{className:n.root},Kn("ul",{className:n.list},t.map(function(t,e){return Kn("li",{key:"".concat(t.indexName,"-").concat(t.attribute,"-").concat(e),className:n.item},Kn("span",{className:n.label},function(e){return e.toString().charAt(0).toUpperCase()+e.toString().slice(1)}(t.label),":"),t.refinements.map(function(e){return Kn("span",{key:function(e){var t=e.attribute,n=e.value;return[t,e.type,n,e.operator].map(function(e){return e}).filter(Boolean).join(":")}(e),className:n.category},Kn("span",{className:n.categoryLabel},"query"===e.attribute?Kn("q",null,e.label):e.label),Kn("button",{className:n.delete,onClick:function(t){return function(e){be(e)||(e.preventDefault(),t())}}(t.refine.bind(null,e))},"â"))}))})))}function Oi(e,t){var n=e.items,r=e.widgetParams;if(!t){var i=r,a=i.container,s=i.cssClasses;fr(Kn(Mi,{cssClasses:s,items:n}),a)}}function Ai(e){var t=e.hits,n=e.isLoading,r=e.cssClasses,i=e.templateProps;return Kn("div",{className:Ei(r.root,k({},r.emptyRoot,0===t.length))},Kn(ki,h({},i,{templateKey:"header",rootProps:{className:r.header},data:{hits:t,isLoading:n}})),n?Kn(ki,h({},i,{templateKey:"loader",rootProps:{className:r.loader}})):Kn("ul",{className:r.list},t.map(function(e,t){return Kn(ki,h({},i,{templateKey:"item",rootTagName:"li",rootProps:{className:r.item},key:e.objectID,data:W(W({},e),{},{__hitIndex:t})}))})))}var Hi={home:"Home",separator:">"},Wi=st({name:"breadcrumb"}),Di=Ft("Breadcrumb"),Bi={resetLabel:"Clear refinements"},Ui=st({name:"clear-refinements"}),qi=Ft("ClearRefinements"),Qi=st({name:"current-refinements"}),Vi=Ft("CurrentRefinements"),$i={header:"",loader:"",item:function(e){return JSON.stringify(e)}},Ki=st({name:"answers"}),zi=Ft("Answers"),Ji=st({name:"dynamic-widgets"}),Yi=Ft("DynamicWidgets");function Xi(e){var t=document.createElement("div");return t.className=Yi({descendantName:"widget"}),e.appendChild(t),t}function Gi(e){var t=e||{},n=t.container,r=t.widgets,i=t.fallbackWidget,a=j(t,["container","widgets","fallbackWidget"]);if(!n)throw new Error(Ji("The `container` option is required."));if(!(r&&Array.isArray(r)&&r.every(function(e){return"function"==typeof e})))throw new Error(Ji("The `widgets` option expects an array of callbacks."));var s=ye(n),o=document.createElement("div");o.className=Yi();var c=new Map,u=[],l=xi(function(e,t){var n=e.attributesToRender;t&&s.appendChild(o),n.forEach(function(e){if(c.has(e)){var t=c.get(e);o.appendChild(t)}})},function(){s.removeChild(o)})(W(W({},a),{},{widgets:u,fallbackWidget:"function"==typeof i?function(e){var t=e.attribute,n=Xi(o);return c.set(t,n),i({attribute:t,container:n})}:void 0}));return W(W({},l),{},{init:function(i){r.forEach(function(e){var t=Xi(o),n=e(t),r=bt(n,i);c.set(r,t),u.push(n)}),l.init(i)},$$widgetType:"ais.dynamicWidgets"})}function Zi(e){var t=e.className,n=e.disabled,r=void 0!==n&&n;return Kn("button",{className:t,onClick:e.onClick,disabled:r},e.children)}function ea(e){var t=e.classNameLabel,n=e.classNameInput,r=e.checked,i=e.onToggle,a=e.children;return Kn("label",{className:t},Kn("input",{className:n,type:"checkbox",checked:r,onChange:i}),a)}
12479function ta(e){var t=e.cssClasses,n=e.enableRefine,r=e.enableRefineControl,i=e.enableClearMapRefinement,a=e.isRefineOnMapMove,s=e.isRefinedWithMap,o=e.hasMapMoveSinceLastRefine,c=e.onRefineToggle,u=e.onRefineClick,l=e.onClearClick,d=e.templateProps;return Kn(Jn,null,n&&Kn("div",null,r&&Kn("div",{className:t.control},a||!o?Kn(ea,{classNameLabel:Ei(t.label,k({},t.selectedLabel,a)),classNameInput:t.input,checked:a,onToggle:c},Kn(ki,h({},d,{templateKey:"toggle",rootTagName:"span"}))):Kn(Zi,{className:t.redo,disabled:!o,onClick:u},Kn(ki,h({},d,{templateKey:"redo",rootTagName:"span"})))),!r&&!a&&Kn("div",{className:t.control},Kn(Zi,{className:Ei(t.redo,k({},t.disabledRedo,!o)),disabled:!o,onClick:u},Kn(ki,h({},d,{templateKey:"redo",rootTagName:"span"})))),i&&s&&Kn(Zi,{className:t.reset,onClick:l},Kn(ki,h({},d,{templateKey:"reset",rootTagName:"span"})))))}function na(e){var t=e.refine,n=e.mapInstance;return t({northEast:n.getBounds().getNorthEast().toJSON(),southWest:n.getBounds().getSouthWest().toJSON()})}function ra(e,t){e.isUserInteraction=!1,t(),e.isUserInteraction=!0}function ia(e,t){var n=e.items,r=e.position,i=e.currentRefinement,a=e.refine,s=e.clearMapRefinement,o=e.toggleRefineOnMapMove,c=e.isRefineOnMapMove,u=e.setMapMoveSinceLastRefine,l=e.hasMapMoveSinceLastRefine,d=e.isRefinedWithMap,h=e.widgetParams,f=e.instantSearchInstance,m=h.container,p=h.googleReference,g=h.cssClasse
12479s,v=h.templates,y=h.initialZoom,b=h.initialPosition,S=h.enableRefine,R=h.enableClearMapRefinement,w=h.enableRefineControl,_=h.mapOptions,P=h.createMarker,x=h.markerOptions,N=h.renderState;if(t){N.isUserInteraction=!0,N.isPendingRefine=!1,N.markers=[];var I=document.createElement("div");I.className=g.root,m.appendChild(I);var F=document.createElement("div");F.className=g.map,I.appendChild(F);var T=document.createElement("div");T.className=g.tree,I.appendChild(T),N.mapInstance=new p.maps.Map(F,W({mapTypeControl:!1,fullscreenControl:!1,streetViewControl:!1,clickableIcons:!1,zoomControlOptions:{position:p.maps.ControlPosition.LEFT_TOP}},_));return p.maps.event.addListenerOnce(N.mapInstance,"idle",function(){function e(){N.isUserInteraction&&S&&(u(),c()&&(N.isPendingRefine=!0))}N.mapInstance.addListener("center_changed",e),N.mapInstance.addListener("zoom_changed",e),N.mapInstance.addListener("dragstart",e),N.mapInstance.addListener("idle",function(){N.isUserInteraction&&N.isPendingRefine&&(N.isPendingRefine=!1,na({mapInstance:N.mapInstance,refine:a}))})}),void(N.templateProps=Re({templatesConfig:f.templatesConfig,templates:v}))}var C=n.map(function(e){return e.objectID}),E=D(function(e,a){return e.reduce(function(e,t){var n=D(e,2),r=n[0],i=n[1];return a.includes(t.__id)?[r.concat(t),i]:[r,i.concat(t)]},[[],[]])}(N.markers,C),2),k=E[0],L=E[1],j=k.map(function(e){return e.__id}),M=n.filter(function(e){return!j.includes(e.objectID)});L.forEach(function(e){return e.setMap(null)}),N.markers=k.concat(M.map(function(n){var r=P({map:N.mapInstance,item:n});return Object.keys(x.events).forEach(function(t){r.addListener(t,function(e){x.events[t]({map:N.mapInstance,event:e,item:n,marker:r})})}),r}));var O=!l(),A=i?0:null,H=!i&&Boolean(N.markers.length)?function(e,t){var n=t.reduce(function(e,t){return e.extend(t.getPosition())},new e.maps.LatLngBounds);return{northEast:n.getNorthEast().toJSON(),southWest:n.getSouthWest
12479().toJSON()}}(p,N.markers):i;H&&O?ra(N,function(){N.mapInstance.fitBounds(new p.maps.LatLngBounds(H.southWest,H.northEast),A)}):O&&ra(N,function(){N.mapInstance.setCenter(r||b),N.mapInstance.setZoom(y)}),fr(Kn(ta,{cssClasses:g,enableRefine:S,enableRefineControl:w,enableClearMapRefinement:R,isRefineOnMapMove:c(),isRefinedWithMap:d(),hasMapMoveSinceLastRefine:l(),onRefineToggle:o,onRefineClick:function(){return na({mapInstance:N.mapInstance,refine:a})},onClearClick:s,templateProps:N.templateProps}),m.querySelector(".".concat(g.tree)))}var aa={HTMLMarker:"<p>Your custom HTML Marker</p>",reset:"Clear the map refinement",toggle:"Search as I move the map",redo:"Redo search here"},sa=st({name:"geo-search"}),oa=Ft("GeoSearch");function ca(e){var t=e.className,n=e.handleClick,r=e.facetValueToRefine,i=e.isRefined,a=e.templateProps,s=e.templateKey,o=e.templateData,c=e.subItems;return Kn("li",{className:t,onClick:function(e){n({facetValueToRefine:r,isRefined:i,originalEvent:e})}},Kn(ki,h({},a,{templateKey:s,data:o})),c)}var ua={query:"",showSubmit:!0,showReset:!0,showLoadingIndicator:!0,autofocus:!1,searchAsYouType:!0,isSearchStalled:!1,disabled:!1,onChange:Le,onSubmit:Le,onReset:Le,refine:Le},la=function(){L(i,Yn);var r=O(i);function i(){var s;C(this,i);for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return k(M(s=r.call.apply(r,[this].concat(t))),"state",{query:s.props.query,focused:!1}),k(M(s),"input",{current:null}),k(M(s),"onInput",function(e){var t=s.props,n=t.searchAsYouType,r=t.refine,i=t.onChange,a=e.target.value;n&&r(a),s.setState({query:a}),i(e)}),k(M(s),"onSubmit",function(e){var t=s.props,n=t.searchAsYouType,r=t.refine,i=t.onSubmit;return e.preventDefault(),e.stopPropagation(),s.input.current&&s.input.current.blur(),n||r(s.state.query),i(e),!1}),k(M(s),"onReset",function(e){var t=s.props,n=t.refine,r=t.onReset;s.input.current&&s.input.current.focus(),n(""),s.setState({query:""}),r(e)}),k(M(s),"onBlur",function(){s.setState({focused:!1})}),k(M(s),"onFocus",function(){s.setState({focused:!0})}),s}return E(i,[{key:"resetInput",value:function(){this.setState({query:""})}},{key:"componentWillReceiveProps",value:function(e){this.state.focused||e.query===this.state.query||this.setState({query:e.query})}},{key:"render",value:function(){var e=this.props,t=e.cssClasses,n=e.placeholder,r=e.autofocus,i=e.showSubmit,a=e.showReset,s=e.showLoadingIndicator,o=e.templates,c=e.isSearchStalled;return Kn("div",{className:t.root},Kn("form",{action:"",role:"search",className:t.form,noValidate:!0,onSubmit:this.onSubmit,onReset:this.onReset},Kn("input",{ref:this.input,value:this.state.query,disabled:this.props.disabled,className:t.input,type:"search",placeholder:n,autoFocus:r,autoComplete:"off",autoCorrect:"off",autoCapitalize:"off",spellCheck:"false",maxLength:512,onInput:this.onInput,onBlur:this.onBlur,onFocus:this.onFocus}),Kn(ki,{templateKey:"submit",rootTagName:"button",rootProps:{className:t.submit,type:"submit",title:"Submit the search query.",hidden:!i},templates:o,data:{cssClasses:t}}),Kn(ki,{templateKey:"reset",rootTagName:"button",rootProps:{className:t.reset,type:"reset",title:"Clear the search query.",hidden:!(a&&this.state.query.trim()&&!c)},templates:o,data:{cssClasses:t}}),s&&Kn(ki,{templateKey:"loadingIndicator",rootTagName:"span",rootProps:{className:t.loadingIndicator,hidden:!c},templates:o,data:{cssClasses:t}})))}}]),i}();k(la,"defaultProps",ua);function da(e){return void 0!==e.data}var ha=function(){L(u,Yn);var n=O(u);function u(e){var t;return C(this,u),k(M(t=n.call(this,e)),"searchBox",{current:null}),t.handleItemClick=t.handleItemClick.bind(M(t)),t}return E(u,[{key:"shouldComponentUpdate",value:function(e){return!De(this.props.facetValues,e.facetValues)}},{key:"refine",value:function(e){this.props.toggleRefinement(e)}},{key:"_generateFacetItem",value:function(e){var t,n;if(da(e)&&Array.isArray(e.data)&&0<e.data.length){var r=this.props.cssClasses,i=(r.root,j(r,["root"]));n=Kn(u,h({},this.props,{cssClasses:i,depth:this.props.depth+1,facetValues:e.data,showMore:!1,className:this.props.cssClasses.childList}))}var a=this.props.createURL(e.value),s=W(W({},e),{}
12479,{url:a,attribute:this.props.attribute,cssClasses:this.props.cssClasses,isFromSearch:this.props.isFromSearch}),o=e.value;void 0!==e.isRefined&&(o+="/".concat(e.isRefined)),void 0!==e.count&&(o+="/".concat(e.count));var c=Ei(this.props.cssClasses.item,(k(t={},this.props.cssClasses.selectedItem,e.isRefined),k(t,this.props.cssClasses.disabledItem,!e.count),k(t,this.props.cssClasses.parentItem,da(e)&&Array.isArray(e.data)&&0<e.data.length),t));return Kn(ca,{templateKey:"item",key:o,facetValueToRefine:e.value,handleClick:this.handleItemClick,isRefined:e.isRefined,className:c,subItems:n,templateData:s,templateProps:this.props.templateProps})}},{key:"handleItemClick",value:function(e){var t=e.facetValueToRefine,n=e.isRefined,r=e.originalEvent;if(!be(r)&&r.target instanceof HTMLElement&&r.target.parentNode instanceof HTMLElement&&(!n||!r.target.parentNode.querySelector('input[type="radio"]:checked')))if("INPUT"!==r.target.tagName){for(var i=r.target;i!==r.currentTarget;){if("LABEL"===i.tagName&&(i.querySelector('input[type="checkbox"]')||i.querySelector('input[type="radio"]')))return;"A"===i.tagName&&i.href&&r.preventDefault(),i=i.parentNode}r.stopPropagation(),this.refine(t)}else this.refine(t)}},{key:"componentWillReceiveProps",value:function(e){this.searchBox.current&&!e.isFromSearch&&this.searchBox.current.resetInput()}},{key:"refineFirstValue",value:function(){var e=this.props.facetValues&&this.props.facetValues[0];if(e){var t=e.value;this.props.toggleRefinement(t)}}},{key:"render",value:function(){var t=this,e=Ei(this.props.cssClasses.showMore,k({},this.props.cssClasses.disabledShowMore,!(!0===this.props.showMore&&this.props.canToggleShowMore))),n=!0===this.props.showMore&&Kn(ki,h({},this.props.templateProps,{templateKey:"showMoreText",rootTagName:"button",rootProps:{className:e,disabled:!this.props.canToggleShowMore,onClick:this.props.toggleShowMore},data:{isShowingMore:this.props.isShowingMore}})),r=!0!==this.props.searchIsAlwaysActive&&!(this.props.isFromSearch||!this.props.hasExhaustiveItems),i=this.props.searchFacetValues&&Kn("div",{className:this.props.cssClasses.searchBox},Kn(la,{ref:this.searchBox,placeholder:this.props.searchPlaceholder,disabled:r,cssClasses:this.props.cssClasses.searchable,templates:this.props.searchBoxTemplateProps.templates,onChange:function(e){return t.props.searchFacetValues(e.target.value)},onReset:function(){return t.props.searchFacetValues("")},onSubmit:function(){return t.refineFirstValue()},searchAsYouType:!1})),a=this.props.facetValues&&0<this.props.facetValues.length&&Kn("ul",{className:this.props.cssClasses.list},this.props.facetValues.map(this._generateFacetItem,this)),s=this.props.searchFacetValues&&this.props.isFromSearch&&(!this.props.facetValues||0===this.props.facetValues.length)&&Kn(ki,h({},this.props.templateProps,{templateKey:"searchableNoResults",rootProps:{className:this.props.cssClasses.noResults}}));return Kn("div",{className:Ei(this.props.cssClasses.root,k({},this.props.cssClasses.noRefinementRoot,!this.props.facetValues||0===this.props.facetValues.length),this.props.className)},this.props.children,i,a,s,n)}}]),u}();k(ha,"defaultProps",{cssClasses:{},depth:0});var fa={item:'<a class="{{cssClasses.link}}" href="{{url}}"><span class="{{cssClasses.label}}">{{label}}</span><span class="{{cssClasses.count}}">{{#helpers.formatNumber}}{{count}}{{/helpers.formatNumber}}</span></a>',showMoreText:"\n {{#isShowingMore}}\n Show less\n {{/isShowingMore}}\n {{^isShowingMore}}\n Show more\n {{/isShowingMore}}\n "},ma=st({name:"hierarchical-menu"}),pa=Ft("HierarchicalMenu"),ga={empty:"No results",item:function(e){return JSON.stringify(e,null,2)}},va=st({name:"hits"}),ya=Ft("Hits"),ba=pr(function(e){var t=e.results,n=e.hits,r=e.bindEvent,i=e.cssClasses,a=e.templateProps;return 0===t.hits.length?Kn(ki,h({},a,{templateKey:"empty",rootProps:{className:Ei(i.root,i.emptyRoot)},data:t})):Kn("div",{className:i.root},Kn("ol",{className:i.list},n.map(function(e,t){return Kn(ki,h({},a,{templateKey:"item",rootTagName:"li",rootProps:{className:i.item},key:e.objectID,data:W(W({},e),{},{__hitIndex:t}),bindEvent:r}))})))});
12479function Sa(e){var t=e.currentValue,n=e.options,r=e.cssClasses,i=e.setValue;return Kn("select",{className:Ei(r.select),onChange:function(e){return i(e.target.value)},value:"".concat(t)},n.map(function(e){return Kn("option",{className:Ei(r.option),key:e.label+e.value,value:"".concat(e.value)},e.label)}))}var Ra=st({name:"hits-per-page"}),wa=Ft("HitsPerPage"),_a={empty:"No results",showPreviousText:"Show previous results",showMoreText:"Show more results",item:function(e){return JSON.stringify(e,null,2)}},Pa=st({name:"infinite-hits"}),xa=Ft("InfiniteHits"),Na=pr(function(e){var t=e.results,n=e.hits,r=e.bindEvent,i=e.hasShowPrevious,a=e.showPrevious,s=e.showMore,o=e.isFirstPage,c=e.isLastPage,u=e.cssClasses,l=e.templateProps;return 0===t.hits.length?Kn(ki,h({},l,{templateKey:"empty",rootProps:{className:Ei(u.root,u.emptyRoot)},data:t})):Kn("div",{className:u.root},i&&Kn(ki,h({},l,{templateKey:"showPreviousText",rootTagName:"button",rootProps:{className:Ei(u.loadPrevious,k({},u.disabledLoadPrevious,o)),disabled:o,onClick:a}})),Kn("ol",{className:u.list},n.map(function(e,t){return Kn(ki,h({},l,{templateKey:"item",rootTagName:"li",rootProps:{className:u.item},key:e.objectID,data:W(W({},e),{},{__hitIndex:t}),bindEvent:r}))})),Kn(ki,h({},l,{templateKey:"showMoreText",rootTagName:"button",rootProps:{className:Ei(u.loadMore,k({},u.disabledLoadMore,c)),disabled:c,onClick:s}})))}),Ia={item:'<a class="{{cssClasses.link}}" href="{{url}}"><span class="{{cssClasses.label}}">{{label}}</span><span class="{{cssClasses.count}}">{{#helpers.formatNumber}}{{count}}{{/helpers.formatNumber}}</span></a>',showMoreText:"\n {{#isShowingMore}}\n Show less\n {{/isShowingMore}}\n {{^isShowingMore}}\n Show more\n {{/isShowingMore}}\n "},Fa=st({name:"menu"}),Ta=Ft("Menu");function Ca(e){var t=e.cssClasses,n=e.templateProps,r=e.items,i=e.refine,a=(Ie(r,function(e){return e.isRefined})||{value:""}).value;return Kn("div",{className:Ei(t.root,k({},t.noRefinementRoot,0===r.length))},Kn("select",{className:t.select,value:a,onChange:function(e){i(e.target.value)}},Kn(ki,h({},n,{templateKey:"defaultOption",rootTagName:"option",rootProps:{value:"",className:t.option}})),r.map(function(e){return Kn(ki,h({},n,{templateKey:"item",rootTagName:"option",rootProps:{value:e.value,className:t.option},key:e.value,data:e}))})))}var Ea={item:"{{label}} ({{#helpers.formatNumber}}{{count}}{{/helpers.formatNumber}})",defaultOption:"See all"},ka=st({name:"menu-select"}),La=Ft("MenuSelect"),ja={item:'<label class="{{cssClasses.label}}">\n <input type="radio" class="{{cssClasses.radio}}" name="{{attribute}}"{{#isRefined}} checked{{/isRefined}} />\n <span class="{{cssClasses.labelText}}">{{label}}</span>\n</label>'},Ma=st({name:"numeric-menu"}),Oa=Ft("NumericMenu");function Aa(n){function t(t){return function(e){be(e)||(e.preventDefault(),n.setCurrentPage(t))}}return Kn("div",{className:Ei(n.cssClasses.root,k({}
12479,n.cssClasses.noRefinementRoot,n.nbPages<=1))},Kn("ul",{className:n.cssClasses.list},n.showFirst&&Kn(Ha,{ariaLabel:"First",className:n.cssClasses.firstPageItem,isDisabled:n.isFirstPage,label:n.templates.first,pageNumber:0,createURL:n.createURL,cssClasses:n.cssClasses,createClickHandler:t}),n.showPrevious&&Kn(Ha,{ariaLabel:"Previous",className:n.cssClasses.previousPageItem,isDisabled:n.isFirstPage,label:n.templates.previous,pageNumber:n.currentPage-1,createURL:n.createURL,cssClasses:n.cssClasses,createClickHandler:t}),n.pages.map(function(e){return Kn(Ha,{key:e,ariaLabel:"".concat(e+1),className:n.cssClasses.pageItem,isSelected:e===n.currentPage,label:"".concat(e+1),pageNumber:e,createURL:n.createURL,cssClasses:n.cssClasses,createClickHandler:t})}),n.showNext&&Kn(Ha,{ariaLabel:"Next",className:n.cssClasses.nextPageItem,isDisabled:n.isLastPage,label:n.templates.next,pageNumber:n.currentPage+1,createURL:n.createURL,cssClasses:n.cssClasses,createClickHandler:t}),n.showLast&&Kn(Ha,{ariaLabel:"Last",className:n.cssClasses.lastPageItem,isDisabled:n.isLastPage,label:n.templates.last,pageNumber:n.nbPages-1,createURL:n.createURL,cssClasses:n.cssClasses,createClickHandler:t})))}function Ha(e){var t=e.label,n=e.ariaLabel,r=e.pageNumber,i=e.className,a=e.isDisabled,s=void 0!==a&&a,o=e.isSelected,c=void 0!==o&&o,u=e.cssClasses,l=e.createURL,d=e.createClickHandler;return Kn("li",{className:Ei(u.item,i,s&&u.disabledItem,c&&u.selectedItem)},s?Kn("span",{className:u.link,dangerouslySetInnerHTML:{__html:t}}):Kn("a",{className:u.link,"aria-label":n,href:l(r),onClick:d(r),dangerouslySetInnerHTML:{__html:t}}))}var Wa,Da,Ba,Ua=Ft("Pagination"),qa=st({name:"pagination"}
12479),Qa={previous:"â¹",next:"âº",first:"«",last:"»"},Va=0,$a=[],Ka=An.__b,za=An.__r,Ja=An.diffed,Ya=An.__c,Xa=An.unmount;function Ga(e,t){An.__h&&An.__h(Da,e,Va||t),Va=0;var n=Da.__H||(Da.__H={__:[],__h:[]});return e>=n.__.length&&n.__.push({}),n.__[e]}function Za(e){return Va=1,function(e,t,n){var r=Ga(Wa++,2);return r.t=e,r.__c||(r.__=[n?n(t):ss(void 0,t),function(e){var t=r.t(r.__[0],e);r.__[0]!==t&&(r.__=[t,r.__[1]],r.__c.setState({}))}],r.__c=Da),r.__}(ss,e)}function es(e){return Va=5,function(e,t){var n=Ga(Wa++,7);return as(n.__H,t)&&(n.__=e(),n.__H=t,n.__h=e),n.__}(function(){return{current:e}},[])}function ts(){var t;for($a.sort(function(e,t){return e.__v.__b-t.__v.__b});t=$a.pop();)if(t.__P)try{t.__H.__h.forEach(rs),t.__H.__h.forEach(is),t.__H.__h=[]}catch(e){t.__H.__h=[],An.__e(e,t.__v)}}An.__b=function(e){Da=null,Ka&&Ka(e)},An.__r=function(e){za&&za(e),Wa=0;var t=(Da=e.__c).__H;t&&(t.__h.forEach(rs),t.__h.forEach(is),t.__h=[])},An.diffed=function(e){Ja&&Ja(e);var t=e.__c;t&&t.__H&&t.__H.__h.length&&(1!==$a.push(t)&&Ba===An.requestAnimationFrame||((Ba=An.requestAnimationFrame)||function(e){function t(){clearTimeout(r),ns&&cancelAnimationFrame(n),setTimeout(e)}var n,r=setTimeout(t,100);ns&&(n=requestAnimationFrame(t))})(ts)),Da=null}
vendor: 7,062 bytes, line 12479
12479,An.__c=function(e,n){n.some(function(t){try{t.__h.forEach(rs),t.__h=t.__h.filter(function(e){return!e.__||is(e)})}catch(e){n.some(function(e){e.__h&&(e.__h=[])}),n=[],An.__e(e,t.__v)}}),Ya&&Ya(e,n)},An.unmount=function(e){Xa&&Xa(e);var t,n=e.__c;n&&n.__H&&(n.__H.__.forEach(function(e){try{rs(e)}catch(e){t=e}}),t&&An.__e(t,n.__v))};var ns="function"==typeof requestAnimationFrame;function rs(e){var t=Da,n=e.__c;"function"==typeof n&&(e.__c=void 0,n()),Da=t}function is(e){var t=Da;e.__c=e.__(),Da=t}function as(n,e){return!n||n.length!==e.length||e.some(function(e,t){return e!==n[t]})}function ss(e,t){return"function"==typeof t?t(e):t}function os(t){var e,n=D(Za(t.isCollapsed),2),r=n[0],i=n[1],a=D(Za(!1),2),s=a[0],o=a[1],c=es(null);return function(e,t){var n=Ga(Wa++,3);!An.__s&&as(n.__H,t)&&(n.__=e,n.__H=t,Da.__H.__h.push(n))}(function(){var e=c.current;if(e)return e.appendChild(t.bodyElement),function(){e.removeChild(t.bodyElement)}},[c,t.bodyElement]),s||t.isCollapsed===r||i(t.isCollapsed),Kn("div",{className:Ei(t.cssClasses.root,(e={},k(e,t.cssClasses.noRefinementRoot,t.hidden),k(e,t.cssClasses.collapsibleRoot,t.collapsible),k(e,t.cssClasses.collapsedRoot,r),e)),hidden:t.hidden},t.templates.header&&Kn("div",{className:t.cssClasses.header},Kn(ki,{templates:t.templates,templateKey:"header",rootTagName:"span",data:t.data}),t.collapsible&&Kn("button",{className:t.cssClasses.collapseButton,"aria-expanded":!r,onClick:function(e){e.preventDefault(),o(!0),i(function(e){return!e})}},Kn(ki,{templates:t.templates,templateKey:"collapseButtonText",rootTagName:"span",data:{collapsed:r}}))),Kn("div",{className:t.cssClasses.body,ref:c}),t.templates.footer&&Kn(ki,{templates:t.templates,templateKey:"footer",rootProps:{className:t.cssClasses.footer},data:t.data}))}function cs(e){var t=e.url,n=e.theme,r=e.cssClasses;return Kn("div",{className:r.root},Kn("a",{href:t,target:"_blank",className:r.link,"aria-label":"Search by Algolia",rel:"noopener noreferrer"},Kn("svg",{height:"1.2em",className:r.logo,viewBox:"0 0 168 24",style:{width:"auto"}},Kn("path",{fill:"dark"===n?"#FFF":"#5D6494",d:"M6.97 6.68V8.3a4.47 4.47 0 00-2.42-.67 2.2 2.2 0 00-1.38.4c-.34.26-.5.6-.5 1.02 0 .43.16.77.49 1.03.33.25.83.53 1.51.83a7.04 7.04 0 011.9 1.08c.34.24.58.54.73.89.15.34.23.74.23 1.18 0 .95-.33 1.7-1 2.24a4 4 0 01-2.6.81 5.71 5.71 0 01-2.94-.68v-1.71c.84.63 1.81.94 2.92.94.58 0 1.05-.14 1.39-.4.34-.28.5-.65.5-1.13 0-.29-.1-.55-.3-.8a2.2 2.2 0 00-.65-.53 23.03 23.03 0 00-1.64-.78 13.67 13.67 0 01-1.11-.64c-.12-.1-.28-.22-.46-.4a1.72 1.72 0 01-.39-.5 4.46 4.46 0 01-.22-.6c-.07-.23-.1-.48-.1-.75 0-.91.33-1.63 1-2.17a4 4 0 012.57-.8c.97 0 1.8.18 2.47.52zm7.47 5.7v-.3a2.26 2.26 0 00-.5-1.44c-.3-.35-.74-.53-1.32-.53-.53 0-.99.2-1.37.58a2.9 2.9 0 00-.72 1.68h3.91zm1 2.79v1.4c-.6.34-1.38.51-2.36.51a4.02 4.02 0 01-3-1.13 4.04 4.04 0 01-1.11-2.97c0-1.3.34-2.32 1.02-3.06a3.38 3.38 0 012.6-1.1c1.03 0 1.85.32 2.46.96.6.64.9 1.57.9 2.78 0 .33-.03.68-.09 1.04h-5.31c.1.7.4 1.24.89 1.61.49.38 1.1.56 1.85.56.86 0 1.58-.2 2.15-.6zm6.61-1.78h-1.21c-.6 0-1.05.12-1.35.36-.3.23-.46.53-.46.89 0 .37.12.66.36.88.23.2.57.32 1.02.32.5 0 .9-.15 1.2-.43.3-.28.44-.65.44-1.1v-.92zm-4.07-2.55V9.33a4.96 4.96 0 012.5-.55c2.1 0 3.17 1.03 3.17 3.08V17H22.1v-.96c-.42.68-1.15 1.02-2.19 1.02-.76 0-1.38-.22-1.84-.66-.46-.44-.7-1-.7-1.68 0-.78.3-1.38.88-1.81.59-.43 1.4-.65 2.46-.65h1.34v-.46c0-.55-.13-.97-.4-1.25-.26-.29-.7-.43-1.32-.43-.86 0-1.65.24-2.35.72zm9.34-1.93v1.42c.39-1 1.1-1.5 2.12-1.5.15 0 .31.02.5.05v1.53c-.23-.1-.48-.14-.76-.14-.54 0-.99.24-1.34.71a2.8 2.8 0 00-.52 1.71V17h-1.57V8.91h1.57zm5 4.09a3 3 0 00.76 2.01c.47.53 1.14.8 2 .8.64 0 1.24-.18 1.8-.53v1.4c-.53.32-1.2.48-2 .48a3.98 3.98 0 01-4.17-4.18c0-1.16.38-2.15 1.14-2.98a4 4 0 013.1-1.23c.7 0 1.34.15 1.92.44v1.44a3.24 3.24 0 00-1.77-.5A2.65 2.65 0 0032.33 13zm7.92-7.28v4.58c.46-1 1.3-1.5 2.5-1.5.8 0 1.42.24 1.9.73.48.5.72 1.17.72 2.05V17H43.8v-5.1c0-.56-.14-.99-.43-1.29-.28-.3-.65-.45-1.1-.45-.54 0-1 .2-1.42.6-.4.4-.61 1.02-.61 1.85V17h-1.56V5.72h1.56zM55.2 15.74c.6 0 1.1-.25 1.5-.76.4-.5.6-1.16.6-1.95 0-.92-.2-1.62-.6-2.12-.4-.5-.92-.74-1.55-.74-.56 0-1.05.22-1.5.67-.44.45-.66 1.13-.66 2.06 0 .96.22 1.67.64 2.14.43.47.95.7 1.57.7zM53 5.72v4.42a2.74 2.74 0 012.43-1.34c1.03 0 1.86.38 2.51 1.15.65.76.97 1.78.97 3.05 0 1.13-.3 2.1-.92 2.9-.62.81-1.47 1.21-2.54 1.21s-1.9-.45-2.46-1.34V17h-1.58V5.72H53zm9.9 11.1l-3.22-7.9h1.74l1 2.62 1.26 3.42c.1-.32.48-1.46 1.15-3.42l.91-2.63h1.66l-2.92 7.87c-.78 2.07-1.96 3.1-3.56 3.1-.28 0-.53-.02-.73-.07v-1.34c.17.04.35.06.54.06 1.03 0 1.76-.57 2.17-1.7z"}),hs,fs,Kn("path",{fill:"dark"===n?"#FFF":"#5468FF",d:"M120.92 18.8c-4.38.02-4.38-3.54-4.38-4.1V1.36l2.67-.42v13.25c0 .32 0 2.36 1.71 2.37v2.24zm-10.84-2.18c.82 0 1.43-.04 1.85-.12v-2.72a5.48 5.48 0 00-1.57-.2c-.3 0-.6.02-.9.07-.3.04-.57.12-.81.24-.24.11-.44.28-.58.49a.93.93 0 00-.22.65c0 .63.22 1 .61 1.23.4.24.94.36 1.62.36zm-.23-9.7c.88 0 1.62.11 2.23.33.6.22 1.09.53 1.44.92.36.4.61.92.76 1.48.16.56.23 1.17.23 1.85v6.87a21.69 21.69 0 01-4.68.5c-.69 0-1.32-.07-1.9-.2a4 4 0 01-1.46-.63 3.3 3.3 0 01-.96-1.13 4.3 4.3 0 01-.34-1.8 3.13 3.13 0 011.43-2.63c.45-.3.95-.5 1.54-.62a8.8 8.8 0 013.79.05v-.44c0-.3-.04-.6-.11-.87a1.78 1.78 0 00-1.1-1.22 3.2 3.2 0 00-1.15-.2 9.75 9.75 0 00-2.95.46l-.33-2.19a11.43 11.43 0 013.56-.53zm52.84 9.63c.82 0 1.43-.05 1.85-.13V13.7a5.42 5.42 0 00-1.57-.2c-.3 0-.6.02-.9.07-.3.04-.57.12-.81.24-.24.12-.44.28-.58.5a.93.93 0 00-.22.65c0 .63.22.99.61 1.23.4.24.94.36 1.62.36zm-.23-9.7c.88 0 1.63.11 2.23.33.6.22 1.1.53 1.45.92.35.39.6.92.76 1.48.15.56.23 1.18.23 1.85v6.88c-.41.08-1.03.19-1.87.31-.83.12-1.77.18-2.81.18-.7 0-1.33-.06-1.9-.2a4 4 0 01-1.47-.63c-.4-.3-.72-.67-.95-1.13a4.3 4.3 0 01-.34-1.8c0-.66.13-1.08.38-1.53.26-.45.61-.82 1.05-1.1.44-.3.95-.5 1.53-.62a8.8 8.8 0 013.8.05v-.43c0-.31-.04-.6-.12-.88-.07-.28-.2-.52-.38-.73a1.78 1.78 0 00-.73-.5c-.3-.1-.68-.2-1.14-.2a9.85 9.85 0 00-2.95.47l-.32-2.19a11.63 11.63 0 013.55-.53zm-8.03-1.27a1.62 1.62 0 000-3.24 1.62 1.62 0 100 3.24zm1.35 13.22h-2.7V7.27l2.7-.42V18.8zm-4.72 0c-4.38.02-4.38-3.54-4.38-4.1l-.01-13.34 2.67-.42v13.25c0 .32 0 2.36 1.72 2.37v2.24zm-8.7-5.9a4.7 4.7 0 00-.74-2.79 2.4 2.4 0 00-2.07-1 2.4 2.4 0 00-2.06 1 4.7 4.7 0 00-.74 2.8c0 1.16.25 1.94.74 2.62a2.4 2.4 0 002.07 1.02c.88 0 1.57-.34 2.07-1.02a4.2 4.2 0 00.73-2.63zm2.74 0a6.46 6.46 0 01-1.52 4.23c-.49.53-1.07.94-1.76 1.22-.68.29-1.73.45-2.26.45a6.6 6.6 0 01-2.25-.45 5.1 5.1 0 01-2.88-3.13 7.3 7.3 0 01-.01-4.84 5.13 5.13 0 012.9-3.1 5.67 5.67 0 012.22-.42c.81 0 1.56.14 2.24.42.69.29 1.28.69 1.75 1.22.49.52.87 1.15 1.14 1.89a7 7 0 01.43 2.5zm-20.14 0c0 1.11.25 2.36.74 2.88.5.52 1.13.78 1.91.78a4.07 4.07 0 002.12-.6V9.33c-.19-.04-.99-.2-1.76-.23a2.67 2.67 0 00-2.23 1 4.73 4.73 0 00-.78 2.8zm7.44 5.27c0 1.82-.46 3.16-1.4 4-.94.85-2.37 1.27-4.3 1.27-.7 0-2.17-.13-3.34-.4l.43-2.11c.98.2 2.27.26 2.95.26 1.08 0 1.84-.22 2.3-.66.46-.43.68-1.08.68-1.94v-.44a5.2 5.2 0 01-2.54.6 5.6 5.6 0 01-2.01-.36 4.2 4.2 0 01-2.58-2.71 9.88 9.88 0 01.02-5.35 4.92 4.92 0 012.93-2.96 6.6 6.6 0 012.43-.46 19.64 19.64 0 014.43.66v10.6z"}))))}
12479function us(e){var t=e.cssClasses,n=e.templates,r=e.items;return Kn(ki,{templateKey:"default",templates:n,rootProps:{className:t.root},data:{items:r}})}var ls=st({name:"panel"}),ds=Ft("Panel"),hs=Kn("path",{fill:"#5468FF",d:"M78.99.94h16.6a2.97 2.97 0 012.96 2.96v16.6a2.97 2.97 0 01-2.97 2.96h-16.6a2.97 2.97 0 01-2.96-2.96V3.9A2.96 2.96 0 0179 .94"}),fs=Kn("path",{fill:"#FFF",d:"M89.63 5.97v-.78a.98.98 0 00-.98-.97h-2.28a.98.98 0 00-.97.97V6c0 .09.08.15.17.13a7.13 7.13 0 013.9-.02c.08.02.16-.04.16-.13m-6.25 1L83 6.6a.98.98 0 00-1.38 0l-.46.46a.97.97 0 000 1.38l.38.39c.06.06.15.04.2-.02a7.49 7.49 0 011.63-1.62c.07-.04.08-.14.02-.2m4.16 2.45v3.34c0 .1.1.17.2.12l2.97-1.54c.06-.03.08-.12.05-.18a3.7 3.7 0 00-3.08-1.87c-.07 0-.14.06-.14.13m0 8.05a4.49 4.49 0 110-8.98 4.49 4.49 0 010 8.98m0-10.85a6.37 6.37 0 100 12.74 6.37 6.37 0 000-12.74"}),ms=Ft("PoweredBy"),ps=st({name:"powered-by"}),gs=st({name:"query-rule-context"}),vs={default:function(e){var t=e.items;return JSON.stringify(t,null,2)}},ys=st({name:"query-rule-custom-data"}),bs=Ft("QueryRuleCustomData"),Ss=function(){L(a,Yn);var i=O(a);function a(){var r;C(this,a);for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return k(M(r=i.call.apply(i,[this].concat(t))),"state",{min:r.props.values.min,max:r.props.values.max}),k(M(r),"onInput",function(n){return function(e){var t=e.currentTarget.value;r.setState(k({},n,Number(t)))}}),k(M(r),"onSubmit",function(e){e.preventDefault(),r.props.refine([r.state.min,r.state.max])}),r}return E(a,[{key:"componentWillReceiveProps",value:function(e){this.setState({min:e.values.min,max:e.values.max})}},{key:"render",value:function(){var e=this.state,t=e.min,n=e.max,r=this.props,i=r.min,a=r.max,s=r.step,o=r.cssClasses,c=r.templateProps,u=!(!i||!a)&&a<=i,l=Boolean(t||n);return Kn("div",{className:Ei(o.root,k({},o.noRefinement,!l))},Kn("form",{className:o.form,onSubmit:this.onSubmit},Kn("label",{className:o.label},Kn("input",{className:Ei(o.input,o.inputMin),type:"number",min:i,max:a,step:s,value:null!=t?t:"",onInput:this.onInput("min"),placeholder:null==i?void 0:i.toString(),disabled:u})),Kn(ki,h({},c,{templateKey:"separatorText",rootTagName:"span",rootProps:{className:o.separator}})),Kn("label",{className:o.label},Kn("input",{className:Ei(o.input,o.inputMax),type:"number",min:i,max:a,step:s,value:null!=n?n:"",onInput:this.onInput("max"),placeholder:null==a?void 0:a.toString(),disabled:u})),Kn(ki,h({},c,{templateKey:"submitText",rootTagName:"button",rootProps:{type:"submit",className:o.submit,disabled:u}}))))}}]),a}(),Rs=st({name:"range-input"}),ws=Ft("RangeInput"),_s={separatorText:"to",submitText:"Go"},Ps=40,xs=35,Ns=27,Is=36,Fs=37,Ts=34,Cs=33,Es=39,ks=38,Ls=100;function js(e,t,n){return(e-t)/(n-t)*100}function Ms(e,t,n){var r=e/100;return 0===e?t:100===e?n:Math.round((n-t)*r+t)}function Os(e){return["rheostat","vertical"===e.orientation?"rheostat-vertical":"rheostat-horizontal"].concat(e.className.split(" ")).join(" ")}function As(e){return Number(e.currentTarget.getAttribute("data-handle-key"))}function Hs(e){e.stopPropagation(),e.preventDefault()}var Ws=Kn("div",{className:"rheostat-background"}),Ds=function(){L(r,Yn);var n=O(r);function r(e){var t;return C(this,r),k(M(t=n.call(this,e)),"state",{className:Os(t.props),handlePos:t.props.values.map(function(e){return js(e,t.props.min,t.props.max)}
12479),handleDimensions:0,mousePos:null,sliderBox:{},slidingIndex:null,values:t.props.values}),k(M(t),"rheostat",{current:null}),t.getPublicState=t.getPublicState.bind(M(t)),t.getSliderBoundingBox=t.getSliderBoundingBox.bind(M(t)),t.getProgressStyle=t.getProgressStyle.bind(M(t)),t.getMinValue=t.getMinValue.bind(M(t)),t.getMaxValue=t.getMaxValue.bind(M(t)),t.getHandleDimensions=t.getHandleDimensions.bind(M(t)),t.getClosestSnapPoint=t.getClosestSnapPoint.bind(M(t)),t.getSnapPosition=t.getSnapPosition.bind(M(t)),t.getNextPositionForKey=t.getNextPositionForKey.bind(M(t)),t.getNextState=t.getNextState.bind(M(t)),t.handleClick=t.handleClick.bind(M(t)),t.getClosestHandle=t.getClosestHandle.bind(M(t)),t.setStartSlide=t.setStartSlide.bind(M(t)),t.startMouseSlide=t.startMouseSlide.bind(M(t)),t.startTouchSlide=t.startTouchSlide.bind(M(t)),t.handleMouseSlide=t.handleMouseSlide.bind(M(t)),t.handleTouchSlide=t.handleTouchSlide.bind(M(t)),t.handleSlide=t.handleSlide.bind(M(t)),t.endSlide=t.endSlide.bind(M(t)),t.handleKeydown=t.handleKeydown.bind(M(t)),t.validatePosition=t.validatePosition.bind(M(t)),t.validateValues=t.validateValues.bind(M(t)),t.canMove=t.canMove.bind(M(t)),t.fireChangeEvent=t.fireChangeEvent.bind(M(t)),t.slideTo=t.slideTo.bind(M(t)),t.updateNewValues=t.updateNewValues.bind(M(t)),t}return E(r,[{key:"componentWillReceiveProps",value:function(n){var e=this.props,t=e.className,r=e.disabled,i=e.min,a=e.max,s=e.orientation,o=this.state,c=o.values,u=o.slidingIndex,l=n.min!==i||n.max!==a,d=c.length!==n.values.length||c.some(function(e,t){return n.values[t]!==e}),h=n.className!==t||n.orientation!==s,f=n.disabled&&!r;h&&this.setState({className:Os(n)}),(l||d)&&this.updateNewValues(n),f&&null!==u&&this.endSlide()}},{key:"getPublicState",value:function(){var e=this.props,t=e.min;return{max:e.max,min:t,values:this.state.values}}},{key:"getSliderBoundingBox",value:function(){var e=this.rheostat.current,t=e.getBoundingClientRect();return{height:t.height||e.clientHeight,left:t.left,top:t.top,width:t.width||e.clientWidth}}},{key:"getProgressStyle",value:function(e){var t=this.state.handlePos,n=t[e];if(0===e)return"vertical"===this.props.orientation?{height:"".concat(n,"%"),top:0}:{left:0,width:"".concat(n,"%")};var r=t[e-1],i=n-r;return"vertical"===this.props.orientation?{height:"".concat(i,"%"),top:"".concat(r,"%")}:{left:"".concat(r,"%"),width:"".concat(i,"%")}}},{key:"getMinValue",value:function(e){return this.state.values[e-1]?Math.max(this.props.min,this.state.values[e-1]):this.props.min}},{key:"getMaxValue",value:function(e){return this.state.values[e+1]?Math.min(this.props.max,this.state.values[e+1]):this.props.max}},{key:"getHandleDimensions",value:function(e,t){var n=e.currentTarget||null;return n?"vertical"===this.props.orientation?n.clientHeight/t.height*Ls/2:n.clientWidth/t.width*Ls/2:0}},{key:"getClosestSnapPoint",value:function(n){return this.props.snapPoints.length?this.props.snapPoints.reduce(function(e,t){return Math.abs(e-n)<Math.abs(t-n)?e:t}):n}},{key:"getSnapPosition",value:function(e){if(!this.props.snap)return e;var t=this.props,n=t.max,r=t.min,i=Ms(e,r,n);return js(this.getClosestSnapPoint(i),r,n)}},{key:"getNextPositionForKey",value:function(e,t){var n,r=this.state,i=r.handlePos,a=r.values,s=this.props,o=s.max,c=s.min,u=s.snapPoints,l=this.props.snap,d=a[e],h=i[e],f=h,m=1;100<=o?h=Math.round(h):m=100/(o-c);var p=null;l&&(p=u.indexOf(this.getClosestSnapPoint(a[e])));var g=(k(n={},Fs,function(e){return-1*e}),k(n,Es,function(e){return e}),k(n,ks,function(e){return e}),k(n,Ps,function(e){return-1*e}),k(n,Ts,function(e){return 1<e?-e:-10*e}),k(n,Cs,function(e){return 1<e?e:10*e}),n);if(Object.prototype.hasOwnProperty.call(g,t))h+=g[t](m),l&&p&&(f<h?p<u.length-1&&(d=u[p+1]):0<p&&(d=u[p-1]));else if(t===Is)h=0,l&&(d=u[0]);else{if(t!==xs)return null;h=Ls,l&&(d=u[u.length-1])}return l?js(d,c,o):h}},{key:"getNextState",value:function(n,e){var t=this.state.handlePos,r=this.props,i=r.max,a=r.min,s=this.validatePosition(n,e),o=t.map(function(e,t){return t===n?s:e});return{handlePos:o,values:o.map(function(e){return Ms(e,a,i)})}}},{key:"getClosestHandle",value:function(r){var i=this.state.handlePos;return i.reduce(function(e,t,n){return Math.abs(i[n]-r)<Math.abs(i[e]-r)?n:e},0)}},{key:"setStartSlide",value:function(e,t,n){var r=this.getSliderBoundingBox();this.setState({handleDimensions:this.getHandleDimensions(e,r),mousePos:{x:t,y:n},sliderBox:r,slidingIndex:As(e)})}},{key:"startMouseSlide",value:function(e){this.setStartSlide(e,e.clientX,e.clientY),document.addEventListener("mousemove",this.handleMouseSlide,!1),document.addEventListener("mouseup",this.endSlide,!1),Hs(e)}},{key:"startTouchSlide",value:function(e){if(!(1<e.changedTouches.length)){var t=e.changedTouches[0];this.setStartSlide(e,t.clientX,t.clientY),document.addEventListener("touchmove",this.handleTouchSlide,!1),document.addEventListener("touchend",this.endSlide,!1),this.props.onSliderDragStart&&this.props.onSliderDragStart(),Hs(e)}}},{key:"handleMouseSlide",value:function(e){null!==this.state.slidingIndex&&(this.handleSlide(e.clientX,e.clientY),Hs(e))}},{key:"handleTouchSlide",value:function(e){if(null!==this.state.slidingIndex)if(1<e.changedTouches.length)this.endSlide();else{var t=e.changedTouches[0];this.handleSlide(t.clientX,t.clientY),Hs(e)}}},{key:"handleSlide",value:function(e,t){var n=this.state,r=n.slidingIndex,i=n.sliderBox,a="vertical"===this.props.orientation?(t-i.top)/i.height*Ls:(e-i.left)/i.width*Ls;this.slideTo(r,a),this.canMove(r,a)&&(this.setState({mousePos:{x:e,y:t}}),this.props.onSliderDragMove&&this.props.onSliderDragMove())}},{key:"endSlide",value:function(){var e=this,t=this.state.slidingIndex;if(this.setState({slidingIndex:null}),document.removeEventListener("mouseup",this.endSlide,!1),document.removeEventListener("touchend",this.endSlide,!1),document.removeEventListener("touchmove",this.handleTouchSlide,!1),document.removeEventListener("mousemove",this.handleMouseSlide,!1),this.props.onSliderDragEnd&&this.props.onSliderDragEnd(),this.props.snap){var n=this.getSnapPosition(this.state.handlePos[t]);this.slideTo(t,n,function(){return e.fireChangeEvent()})}else this.fireChangeEvent()}},{key:"handleClick",value:function(e){var t=this;if(!e.target.getAttribute("data-handle-key")){var n=this.getSliderBoundingBox(),r=("vertical"===this.props.orientation?(e.clientY-n.top)/n.height:(e.clientX-n.left)/n.width)*Ls,i=this.getClosestHandle(r),a=this.getSnapPosition(r);this.slideTo(i,a,function(){return t.fireChangeEvent()}),this.props.onClick&&this.props.onClick()}}},{key:"handleKeydown",value:function(e){var t=this,n=As(e);if(e.keyCode!==Ns){var r=this.getNextPositionForKey(n,e.keyCode);null!==r&&(this.canMove(n,r)&&(this.slideTo(n,r,function(){return t.fireChangeEvent()}),this.props.onKeyPress&&this.props.onKeyPress()),Hs(e))}else e.currentTarget.blur()}},{key:"validatePosition",value:function(e,t){var n=this.state,r=n.handlePos,i=n.handleDimensions;return Math.max(Math.min(t,void 0!==r[e+1]?r[e+1]-i:Ls),void 0!==r[e-1]?r[e-1]+i:0)}},{key:"validateValues",value:function(e,t){var n=t||this.props,i=n.max,a=n.min;return e.map(function(e,t,n){var r=Math.max(Math.min(e,i),a);return n.length&&r<n[t-1]?n[t-1]:r})}},{key:"canMove",value:function(e,t){var n=this.state,r=n.handlePos,i=n.handleDimensions;return!(t<0)&&(!(Ls<t)&&(!((void 0!==r[e+1]?r[e+1]-i:1/0)<t)&&!(t<(void 0!==r[e-1]?r[e-1]+i:-1/0))))}},{key:"fireChangeEvent",value:function(){var e=this.props.onChange;e&&e(this.getPublicState())}},{key:"slideTo",value:function(e,t,n){var r=this,i=this.getNextState(e,t);this.setState(i,function(){var e=r.props.onValuesUpdated;e&&e(r.getPublicState()),n&&n()})}},{key:"updateNewValues",value:function(e){var t=this;if(null===this.state.slidingIndex){var n=e.max,r=e.min,i=e.values,a=this.validateValues(i,e);this.setState({handlePos:a.map(function(e){return js(e,r,n)}),values:a},function(){return t.fireChangeEvent()})}}},{key:"render",value:function(){var r=this,e=this.props,t=e.children,i=e.disabled,a=e.handle,s=e.max,o=e.min,c=e.orientation,u=e.pitComponent,n=e.pitPoints,l=e.progressBar,d=this.state,h=d.className,f=d.handlePos,m=d.values;return Kn("div",{className:h,ref:this.rheostat,onClick:i?void 0:this.handleClick,style:{position:"relative"}}
12479,Ws,f.map(function(e,t){var n="vertical"===c?{top:"".concat(e,"%"),position:"absolute"}:{left:"".concat(e,"%"),position:"absolute"};return Kn(a,{"aria-valuemax":r.getMaxValue(t),"aria-valuemin":r.getMinValue(t),"aria-valuenow":m[t],"aria-disabled":i,"data-handle-key":t,className:"rheostat-handle",key:"handle-".concat(t),onClick:Hs,onKeyDown:i?void 0:r.handleKeydown,onMouseDown:i?void 0:r.startMouseSlide,onTouchStart:i?void 0:r.startTouchSlide,role:"slider",style:n,tabIndex:0})}),f.map(function(e,t,n){return 0===t&&1<n.length?null:Kn(l,{className:"rheostat-progress",key:"progress-bar-".concat(t),style:r.getProgressStyle(t)})}),u&&n.map(function(e){var t=js(e,o,s),n="vertical"===c?{top:"".concat(t,"%"),position:"absolute"}:{left:"".concat(t,"%"),position:"absolute"};return Kn(u,{key:"pit-".concat(e),style:n},e)}),t)}}]),r}();k(Ds,"defaultProps",{className:"",children:null,disabled:!1,handle:function(e){return Kn("button",h({},e,{type:"button"}))},max:Ls,min:0,onClick:null,onChange:null,onKeyPress:null,onSliderDragEnd:null,onSliderDragMove:null,onSliderDragStart:null,onValuesUpdated:null,orientation:"horizontal",pitComponent:null,pitPoints:[],progressBar:"div",snap:!1,snapPoints:[],values:[0]});function Bs(e){var t=e.style,n=e.children,r=Math.round(parseFloat(t.left)),i=[0,50,100].includes(r),a=n,s=Math.round(100*parseInt(a,10))/100;return Kn("div",{style:W(W({},t),{},{marginLeft:100===r?"-2px":0}),className:Ei("rheostat-marker","rheostat-marker-horizontal",{"rheostat-marker-large":i})},i&&Kn("div",{className:"rheostat-value"},s))}function Us(e){var t=e.cssClasses,n=e.templates,r=e.isRelevantSorted,i=e.isVirtualReplica,a=e.refine;return i?Kn("div",{className:t.root},Kn(ki,{templateKey:"text",templates:n,rootProps:{className:t.text},data:{isRelevantSorted:r}}),Kn("button",{type:"button",className:t.button,onClick:function(){a(r?0:void 0)}},Kn(ki,{rootTagName:"span",templateKey:"button",templates:n,data:{isRelevantSorted:r}}))):null}function qs(e){var t=e.nbHits,n=e.nbSortedHits,r=e.cssClasses,i=e.templateProps,a=j(e,["nbHits","nbSortedHits","cssClasses","templateProps"]);return Kn("div",{className:Ei(r.root)},Kn(ki,h({},i,{templateKey:"text",rootTagName:"span",rootProps:{className:r.text},data:W({hasManySortedResults:n&&1<n,hasNoSortedResults:0===n,hasOneSortedResults:1===n,hasManyResults:1<t,hasNoResults:0===t,hasOneResult:1===t,nbHits:t,nbSortedHits:n,cssClasses:r},a)})))}function Qs(e){var t=e.currentRefinement,n=e.refine,r=e.cssClasses,i=e.templateProps;return Kn("div",{className:r.root},Kn("label",{className:r.label},Kn("input",{className:r.checkbox,type:"checkbox",checked:t.isRefined,onChange:function(e){return n({isRefined:!e.target.checked})}}),Kn(ki,h({},i,{rootTagName:"span",rootProps:{className:r.labelText},templateKey:"labelText",data:t}))))}function Vs(e){var t=e.cssClasses,n=e.isBrowserSupported,r=e.isListening,i=e.toggleListening,a=e.voiceListeningState,s=e.templates,o=a.status,c=a.transcript,u=a.isSpeechFinal,l=a.errorCode;return Kn("div",{className:t.root},Kn(ki,{templateKey:"buttonText",rootTagName:"button",rootProps:{className:t.button,type:"button",title:"Search by voice".concat(n?"":" (not supported on this browser)"),onClick:function(e){e.currentTarget instanceof HTMLElement&&e.currentTarget.blur(),i()},disabled:!n},data:{status:o,errorCode:l,isListening:r,transcript:c,isSpeechFinal:u,isBrowserSupported:n},templates:s}),Kn(ki,{templateKey:"status",rootProps:{className:t.status},data:{status:o,errorCode:l,isListening:r,transcript:c,isSpeechFinal:u,isBrowserSupported:n},templates:s}))}var $s=function(){L(a,Yn);var i=O(a);function a(){var n;C(this,a);for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];return k(M(n=i.call.apply(i,[this].concat(t))),"handleChange",function(e){var t=e.values;n.isDisabled||n.props.refine(t)}),k(M(n),"createHandleComponent",function(r){return function(e){var t=Math.round(100*parseFloat(e["aria-valuenow"]))/100,n="object"===f(r)&&r.format?r.format(t):t;return Kn("div",h({},e,{className:Ei(e.className,{"rheostat-handle-lower":0===e["data-handle-key"],"rheostat-handle-upper":1===e["data-handle-key"]})}),r&&Kn("div",{className:"rheostat-tooltip"},n))}}),n}return E(a,[{key:"isDisabled",get:function(){return this.props.min>=this.props.max}},{key:"computeDefaultPitPoints",value:function(e){var t=e.min,n=e.max,r=(n-t)/34;return[t].concat(P(He({end:33}).map(function(e){return t+r*(e+1)})),[n])}},{key:"computeSnapPoints",value:function(e){var t=e.min,n=e.max,r=e.step;if(r)return[].concat(P(He({start:t,end:n,step:r})),[n])}},{key:"render",value:function(){var e=this.props,t=e.tooltips,n=e.step,r=e.pips,i=e.values,a=e.cssClasse
12479s,s=this.isDisabled?{min:this.props.min,max:this.props.max+.001}:this.props,o=s.min,c=s.max,u=this.computeSnapPoints({min:o,max:c,step:n}),l=!1===r?[]:this.computeDefaultPitPoints({min:o,max:c});return Kn("div",{className:Ei(a.root,k({},a.disabledRoot,this.isDisabled))},Kn(Ds,{handle:this.createHandleComponent(t),onChange:this.handleChange,min:o,max:c,pitComponent:Bs,pitPoints:l,snap:!0,snapPoints:u,values:this.isDisabled?[o,c]:i,disabled:this.isDisabled}))}}]),a}(),Ks=st({name:"range-slider"}),zs=Ft("RangeSlider"),Js={item:'{{#count}}<a class="{{cssClasses.link}}" aria-label="{{value}} & up" href="{{url}}">{{/count}}{{^count}}<div class="{{cssClasses.link}}" aria-label="{{value}} & up" disabled>{{/count}}\n {{#stars}}<svg class="{{cssClasses.starIcon}} {{#.}}{{cssClasses.fullStarIcon}}{{/.}}{{^.}}{{cssClasses.emptyStarIcon}}{{/.}}" aria-hidden="true" width="24" height="24">\n {{#.}}<use xlink:href="#ais-RatingMenu-starSymbol"></use>{{/.}}{{^.}}<use xlink:href="#ais-RatingMenu-starEmptySymbol"></use>{{/.}}\n </svg>{{/stars}}\n <span class="{{cssClasses.label}}">& Up</span>\n {{#count}}<span class="{{cssClasses.count}}">{{#helpers.formatNumber}}{{count}}{{/helpers.formatNumber}}</span>{{/count}}\n{{#count}}</a>{{/count}}{{^count}}</div>{{/count}}'},Ys=st({name:"rating-menu"}),Xs=Ft("RatingMenu"),Gs=Kn("path",{d:"M12 .288l2.833 8.718h9.167l-7.417 5.389 2.833 8.718-7.416-5.388-7.417 5.388 2.833-8.718-7.416-5.389h9.167z"}),Zs=Kn("path",{d:"M12 6.76l1.379 4.246h4.465l-3.612 2.625 1.379 4.246-3.611-2.625-3.612 2.625 1.379-4.246-3.612-2.625h4.465l1.38-4.246zm0-6.472l-2.833 8.718h-9.167l7.416 5.389-2.833 8.718 7.417-5.388 7.416 5.388-2.833-8.718 7.417-5.389h-9.167l-2.833-8.718z"}),eo={reset:'\n<svg class="{{cssClasses.resetIcon}}" viewBox="0 0 20 20" width="10" height="10">\n <path d="M8.114 10L.944 2.83 0 1.885 1.886 0l.943.943L10 8.113l7.17-7.17.944-.943L20 1.886l-.943.943-7.17 7.17 7.17 7.17.943.944L18.114 20l-.943-.943-7.17-7.17-7.17 7.17-.944.943L0 18.114l.943-.943L8.113 10z"></path>\n</svg>\n ',submit:'\n<svg class="{{cssClasses.submitIcon}}" width="10" height="10" viewBox="0 0 40 40">\n <path d="M26.804 29.01c-2.832 2.34-6.465 3.746-10.426 3.746C7.333 32.756 0 25.424 0 16.378 0 7.333 7.333 0 16.378 0c9.046 0 16.378 7.333 16.378 16.378 0 3.96-1.406 7.594-3.746 10.426l10.534 10.534c.607.607.61 1.59-.004 2.202-.61.61-1.597.61-2.202.004L26.804 29.01zm-10.426.627c7.323 0 13.26-5.936 13.26-13.26 0-7.32-5.937-13.257-13.26-13.257C9.056 3.12 3.12 9.056 3.12 16.378c0 7.323 5.936 13.26 13.258 13.26z"></path>\n</svg>\n ',loadingIndicator:'\n<svg class="{{cssClasses.loadingIcon}}" width="16" height="16" viewBox="0 0 38 38" stroke="#444">\n <g fill="none" fillRule="evenodd">\n <g transform="translate(1 1)" strokeWidth="2">\n <circle strokeOpacity=".5" cx="18" cy="18" r="18" />\n <path d="M36 18c0-9.94-8.06-18-18-18">\n <animateTransform\n attributeName="transform"\n type="rotate"\n from="0 18 18"\n to="360 18 18"\n dur="1s"\n repeatCount="indefinite"\n />\n </path>\n </g>\n </g>\n</svg>\n '},to={item:'<label class="{{cssClasses.label}}">\n <input type="checkbox"\n class="{{cssClasses.checkbox}}"\n value="{{value}}"\n {{#isRefined}}checked{{/isRefined}} />\n <span class="{{cssClasses.labelText}}">{{#isFromSearch}}{{{highlighted}}}{{/isFromSearch}}{{^isFromSearch}}{{highlighted}}{{/isFromSearch}}</span>\n <span class="{{cssClasses.count}}">{{#helpers.formatNumber}}{{count}}{{/helpers.formatNumber}}</span>\n</label>',showMoreText:"\n {{#isShowingMore}}\n Show less\n {{/isShowingMore}}\n {{^isShowingMore}}\n Show more\n {{/isShowingMore}}\n ",searchableNoResults:"No results"},no=st({name:"refinement-list"}),ro=Ft("RefinementList"),io=Ft("SearchBox"),ao={text:"",button:function(e){return e.isRelevantSorted?"See all results":"See relevant results"}},so=st({name:"relevant-sort"}),oo=Ft("RelevantSort"),co=st({name:"search-box"}),uo=Ft("SearchBox"),lo=st({name:"sort-by"}),ho=Ft("SortBy"),fo=st({name:"stats"}),mo=Ft("Stats"),po={text:"\n {{#areHitsSorted}}\n {{#hasNoSortedResults}}No relevant results{{/hasNoSortedResults}}\n {{#hasOneSortedResults}}1 relevant result{{/hasOneSortedResults}}\n {{#hasManySortedResults}}{{#helpers.formatNumber}}{{nbSortedHits}}{{/helpers.formatNumber}} relevant results{{/hasManySortedResults}}\n sorted out of {{#helpers.formatNumber}}{{nbHits}}{{/helpers.formatNumber}}\n {{/areHitsSorted}}\n {{^areHitsSorted}}\n {{#hasNoResults}}No results{{/hasNoResults}}\n {{#hasOneResult}}1 result{{/hasOneResult}}\n {{#hasManyResults}}{{#helpers.formatNumber}}{{nbHits}}{{/helpers.formatNumber}} results{{/hasManyResults}}\n {{/areHitsSorted}}\n found in {{processingTimeMS}}ms"},go={labelText:"{{name}}"},vo=st({name:"toggle-refinement"}),yo=Ft("ToggleRefinement"),bo={buttonText:function(e){var t=e.status,n=e.errorCode,r=e.isListening;return'<svg\n width="16"\n height="16"\n viewB
12479ox="0 0 24 24"\n fill="none"\n stroke="currentColor"\n stroke-width="2"\n stroke-linecap="round"\n stroke-linejoin="round"\n >\n '.concat(function(e,t,n){return"error"===e&&"not-allowed"===t?'<line x1="1" y1="1" x2="23" y2="23"></line>\n <path d="M9 9v3a3 3 0 0 0 5.12 2.12M15 9.34V4a3 3 0 0 0-5.94-.6"></path>\n <path d="M17 16.95A7 7 0 0 1 5 12v-2m14 0v2a7 7 0 0 1-.11 1.23"></path>\n <line x1="12" y1="19" x2="12" y2="23"></line>\n <line x1="8" y1="23" x2="16" y2="23"></line>':'<path\n d="M12 1a3 3 0 0 0-3 3v8a3 3 0 0 0 6 0V4a3 3 0 0 0-3-3z"\n fill="'.concat(n?"currentColor":"none",'">\n </path>\n <path d="M19 10v2a7 7 0 0 1-14 0v-2"></path>\n <line x1="12" y1="19" x2="12" y2="23"></line>\n <line x1="8" y1="23" x2="16" y2="23"></line>')}(t,n,r),"\n </svg>")},status:"<p>{{transcript}}</p>"},So=st({name:"voice-search"}),Ro=Ft("VoiceSearch"),wo=je(Gi),_o=Object.freeze({__proto__:null,dynamicWidgets:Gi,EXPERIMENTAL_dynamicWidgets:wo,analytics:function(e){var t=e||{},s=t.pushFunction,n=t.delay,r=void 0===n?3e3:n,i=t.triggerOnUIInteraction,a=void 0!==i&&i,o=t.pushInitialSearch,c=void 0===o||o,u=t.pushPagination,l=void 0!==u&&u;if(!s)throw new Error(Ci("The `pushFunction` option is required."));function d(e){if(null!==e){var t=[],n=function(e){var t=[];for(var n in e)if(e.hasOwnProperty(n)){var r=e[n].join("+");t.push("".concat(encodeURIComponent(n),"=").concat(encodeURIComponent(n),"_").concat(encodeURIComponent(r)))}return t.join("&")}(W(W(W({},e.state.disjunctiveFacetsRefinements),e.state.facetsRefinements),e.state.hierarchicalFacetsRefinements)),r=function(e){var t=[];for(var n in e)if(e.hasOwnProperty(n)){var r=e[n];if(r.hasOwnProperty(">=")&&r.hasOwnProperty("<="))r[">="]&&r[">="][0]===r["<="]&&r["<="][0]?t.push("".concat(n,"=").concat(n,"_").concat(r[">="])):t.push("".concat(n,"=").concat(n,"_").concat(r[">="],"to").concat(r["<="]));else if(r.hasOwnProperty(">="))t.push("".concat(n,"=").concat(n,"_from").concat(r[">="]));else if(r.hasOwnProperty("<="))t.push("".concat(n,"=").concat(n,"_to").concat(r["<="]));else if(r.hasOwnProperty("=")){var i=[];for(var a in r["="])r["="].hasOwnProperty(a)&&i.push(r["="][a]);t.push("".concat(n,"=").concat(n,"_").concat(i.join("-")))}}return t.join("&")}(e.state.numericRefinements);""!==n&&t.push(n),""!==r&&t.push(r);var i=t.join("&"),a="Query: ".concat(e.state.query||"",", ").concat(i);!0===l&&(a+=", Page: ".concat(e.state.page||0)),m!==a&&(s(i,e.state,e.results),m=a)}}var h,f=null,m="",p=!0;!0===c&&(p=!1);function g(){d(f)}function v(){d(f)}return{$$type:"ais.analytics",$$widgetType:"ais.analytics",init:function(){!0===a&&(document.addEventListener("click",g),window.addEventListener("beforeunload",v))},render:function(e){var t=e.results,n=e.state;!0!==p?(f={results:t,state:n},h&&clearTimeout(h),h=window.setTimeout(function(){return d(f)},r)):p=!1},dispose:function(){!0===a&&(document.removeEventListener("click",g),window.removeEventListener("beforeunload",v))},getRenderState:function(e,t){return W(W({},e),{},{analytics:this.getWidgetRenderState(t)})},getWidgetRenderState:function(){return{widgetParams:e}}}},breadcrumb:function(e){var t=e||{},n=t.container,r=t.attributes,i=t.separator,a=t.rootPath,s=t.transformItems,o=t.templates,c=void 0===o?{}:o,u=t.cssClasses,l=void 0===u?{}:u;if(!n)throw new Error(Wi("The `container` option is required."));var d=ye(n),h={root:Ei(Di(),l.root),noRefinementRoot:Ei(Di({modifierName:"noRefinement"}),l.noRefinementRoot),list:Ei(Di({descendantName:"list"}),l.list),item:Ei(Di({descendantName:"item"}),l.item),selectedItem:Ei(Di({descendantName:"item",modifierName:"selected"}),l.selectedItem),separator:Ei(Di({descendantName:"separator"}),l.separator),link:Ei(Di({descendantName:"link"}),l.link)},f=function(e){var o=e.containerNode,c=e.cssClasses,u=e.renderState,l=e.templates;return function(e,t){var n=e.canRefine,r=e.createURL,i=e.instantSearchInstance,a=e.items,s=e.refine;t?u.templateProps=Re({defaultTemplates:Hi,templatesConfig:i.templatesConfig,templates:l}
vendor: 4,184 bytes, line 12479
12479):fr(Kn(Li,{canRefine:n,cssClasses:c,createURL:r,items:a,refine:s,templateProps:u.templateProps}),o)}}({containerNode:d,cssClasses:h,renderState:{},templates:c});return W(W({},$r(f,function(){return fr(null,d)})({attributes:r,separator:i,rootPath:a,transformItems:s})),{},{$$widgetType:"ais.breadcrumb"})},clearRefinements:function(e){var t=e||{},n=t.container,r=t.templates,i=void 0===r?{}:r,a=t.includedAttributes,s=t.excludedAttributes,o=t.transformItems,c=t.cssClasses,u=void 0===c?{}:c;if(!n)throw new Error(Ui("The `container` option is required."));var l=ye(n),d={root:Ei(qi(),u.root),button:Ei(qi({descendantName:"button"}),u.button),disabledButton:Ei(qi({descendantName:"button",modifierName:"disabled"}),u.disabledButton)},h=function(e){var a=e.containerNode,s=e.cssClasses,o=e.renderState,c=e.templates;return function(e,t){var n=e.refine,r=e.hasRefinements,i=e.instantSearchInstance;t?o.templateProps=Re({defaultTemplates:Bi,templatesConfig:i.templatesConfig,templates:c}):fr(Kn(ji,{refine:n,cssClasses:s,hasRefinements:r,templateProps:o.templateProps}),a)}}({containerNode:l,cssClasses:d,renderState:{},templates:i});return W(W({},Sn(h,function(){return fr(null,l)})({includedAttributes:a,excludedAttributes:s,transformItems:o})),{},{$$widgetType:"ais.clearRefinements"})},configure:function(e){return W(W({},hi(Le)({searchParameters:e})),{},{$$widgetType:"ais.configure"})},currentRefinements:function(e){var t=e||{},n=t.container,r=t.includedAttributes,i=t.excludedAttributes,a=t.cssClasses,s=void 0===a?{}:a,o=t.transformItems;if(!n)throw new Error(Qi("The `container` option is required."));var c=ye(n),u={root:Ei(Vi(),s.root),list:Ei(Vi({descendantName:"list"}),s.list),item:Ei(Vi({descendantName:"item"}),s.item),label:Ei(Vi({descendantName:"label"}),s.label),category:Ei(Vi({descendantName:"category"}),s.category),categoryLabel:Ei(Vi({descendantName:"categoryLabel"}),s.categoryLabel),delete:Ei(Vi({descendantName:"delete"}),s.delete)};return W(W({},_n(Oi,function(){return fr(null,c)})({container:c,cssClasses:u,includedAttributes:r,excludedAttributes:i,transformItems:o})),{},{$$widgetType:"ais.currentRefinements"})},EXPERIMENTAL_answers:function(e){var t=e||{},n=t.container,r=t.attributesForPrediction,i=t.queryLanguages,a=t.nbHits,s=t.searchDebounceTime,o=t.renderDebounceTime,c=t.escapeHTML,u=t.extraParameters,l=t.templates,d=void 0===l?{}:l,h=t.cssClasses,f=void 0===h?{}:h;if(!n)throw new Error(Ki("The `container` option is required."));var m=ye(n),p={root:Ei(zi(),f.root),emptyRoot:Ei(zi({modifierName:"empty"}),f.emptyRoot),header:Ei(zi({descendantName:"header"}),f.header),loader:Ei(zi({descendantName:"loader"}),f.loader),list:Ei(zi({descendantName:"list"}),f.list),item:Ei(zi({descendantName:"item"}),f.item)},g=function(e){var a=e.containerNode,s=e.cssClasses,o=e.renderState,c=e.templates;return function(e,t){var n=e.hits,r=e.isLoading,i=e.instantSearchInstance;t?o.templateProps=Re({defaultTemplates:$i,templatesConfig:i.templatesConfig,templates:c}):fr(Kn(Ai,{cssClasses:s,hits:n,isLoading:r,templateProps:o.templateProps}),a)}}({containerNode:m,cssClasses:p,templates:d,renderState:{}});return W(W({},_i(g,function(){return fr(null,m)})({attributesForPrediction:r,queryLanguages:i,nbHits:a,searchDebounceTime:s,renderDebounceTime:o,escapeHTML:c,extraParameters:u})),{},{$$widgetType:"ais.answers"})},EXPERIMENTAL_configureRelatedItems:function(e){return W(W({},pi(Le)(e)),{},{$$widgetType:"ais.configureRelatedItems"})},geoSearch:function(e){var t=e||{},n=t.initialZoom,r=void 0===n?1:n,i=t.initialPosition,a=void 0===i?{lat:0,lng:0}:i,s=t.templates,o=void 0===s?{}:s,c=t.cssClasses,u=void 0===c?{}:c,l=t.builtInMarker,d=void 0===l?{}:l,h=t.customHTMLMarker,f=t.enableRefine,m=void 0===f||f,p=t.enableClearMapRefinement,g=void 0===p||p,v=t.enableRefineControl,y=void 0===v||v,b=t.container,S=t.googleReference,R=j(t,["initialZoom","initialPosition","templates","cssClasses","builtInMarker","customHTMLMarker","enableRefine","enableClearMapRefinement","enableRefineControl","container","googleReference"]);if(!b)throw new Error(sa("The `container` option is required."));if(!S)throw new Error(sa("The `googleReference` option is required."));
12479var w=ye(b),_={root:Ei(oa(),u.root),tree:oa({descendantName:"tree"}),map:Ei(oa({descendantName:"map"}),u.map),control:Ei(oa({descendantName:"control"}),u.control),label:Ei(oa({descendantName:"label"}),u.label),selectedLabel:Ei(oa({descendantName:"label",modifierName:"selected"}),u.selectedLabel),input:Ei(oa({descendantName:"input"}),u.input),redo:Ei(oa({descendantName:"redo"}),u.redo),disabledRedo:Ei(oa({descendantName:"redo",modifierName:"disabled"}),u.disabledRedo),reset:Ei(oa({descendantName:"reset"}),u.reset)},P=W(W({},aa),o),x=W(W({},{createOptions:function(){return{}},events:{}}),d),N=(Boolean(h)||Boolean(o.HTMLMarker))&&W(W({},{createOptions:function(){return{}},events:{}}),h),I=function(d){return function(){L(l,d.maps.OverlayView);var u=O(l);function l(e){var t,n=e.__id,r=e.position,i=e.map,a=e.template,s=e.className,o=e.anchor,c=void 0===o?{x:0,y:0}:o;return C(this,l),k(M(t=u.call(this)),"__id",void 0),k(M(t),"anchor",void 0),k(M(t),"offset",void 0),k(M(t),"listeners",void 0),k(M(t),"latLng",void 0),k(M(t),"element",void 0),t.__id=n,t.anchor=c,t.listeners={},t.latLng=new d.maps.LatLng(r),t.element=document.createElement("div"),t.element.className=s,t.element.style.position="absolute",t.element.innerHTML=a,t.setMap(i),t}return E(l,[{key:"onAdd",value:function(){this.getPanes().overlayMouseTarget.appendChild(this.element);var e=this.element.getBoundingClientRect();this.offset={x:this.anchor.x+e.width/2,y:this.anchor.y+e.height},this.element.style.width="".concat(e.width,"px")}},{key:"draw",value:function(){var e=this.getProjection().fromLatLngToDivPixel(this.latLng);this.element.style.left="".concat(Math.round(e.x-this.offset.x),"px"),this.element.style.top="".concat(Math.round(e.y-this.offset.y),"px"),this.element.style.zIndex=String(parseInt(this.element.style.top,10))}},{key:"onRemove",value:function(){var t=this;this.element&&(this.element.parentNode.removeChild(this.element),Object.keys(this.listeners).forEach(function(e){t.element.removeEventListener(e,t.listeners[e])}),delete this.element,delete this.listeners)}},{key:"addListener",value:function(e,t){this.listeners[e]=t;var n=this.element;return n.addEventListener(e,t),{remove:function(){return n.removeEventListener(e,t)}}}},{key:"getPosition",value:function(){return this.latLng}}]),l}()}(S),F=N?function(e){var t=e.item,n=j(e,["item"]);return new I(W(W(W({},N.createOptions(t)),n),{},{__id:t.objectID,position:t._geoloc,className:Ei(oa({descendantName:"marker"})),template:Ne({templateKey:"HTMLMarker",templates:P,data:t})}))}:function(e){var t=e.item,n=j(e,["item"]);return new S.maps.Marker(W(W(W({},x.createOptions(t)),n),{},{__id:t.objectID,position:t._geoloc}))},T=N||x;return W(W({},si(ia,function(){return fr(null,w)})(W(W({},R),{},{renderState:{},container:w,googleReference:S,initialZoom:r,initialPosition:a,templates:P,cssClasses:_,createMarker:F,markerOptions:T,enableRefine:m,enableClearMapRefinement:g,enableRefineControl:y}))),{},{$$widgetType:"ais.geoSearch"})},hierarchicalMenu:function(e){var t=e||{},n=t.container,r=t.attributes,i=t.separator,a=t.rootPath,s=t.showParentLevel,o=t.limit,c=t.showMore,u=void 0!==c&&c,l=t.showMoreLimit,d=t.sortBy,h=t.transformItems,f=t.templates,m=void 0===f?{}:f,p=t.cssClasses,g=void 0===p?{}:p;if(!n)throw new Error(ma("The `container` option is required."));var v=ye(n),y=function(e){var u=e.cssClasses,l=e.containerNode,d=e.showMore,h=e.templates,f=e.renderState;return function(e,t){var n=e.createURL,r=e.items,i=e.refine,a=e.instantSearchInstance,s=e.isShowingMore,o=e.toggleShowMore,c=e.canToggleShowMore;t?f.templateProps=Re({defaultTemplates:fa,templatesConfig:a.templatesConfig,templates:h}):fr(Kn(ha,{createURL:n,cssClasses:u,facetValues:r,templateProps:f.templateProps,toggleRefinement:i,showMore:d,toggleShowMore:o,isShowingMore:s,canToggleShowMore:c}),l)}}({cssClasses:{root:Ei(pa(),g.root),noRefinementRoot:Ei(pa({modifierName:"noRefinement"}),g.noRefinementRoot),list:Ei(pa({descendantName:"list"}),g.list),childList:Ei(pa({descendantName:"list",modifierName:"child"}),g.childList),item:Ei(pa({descendantName:"item"}
vendor: 11,282 bytes, line 12479
12479),g.item),selectedItem:Ei(pa({descendantName:"item",modifierName:"selected"}),g.selectedItem),parentItem:Ei(pa({descendantName:"item",modifierName:"parent"}),g.parentItem),link:Ei(pa({descendantName:"link"}),g.link),label:Ei(pa({descendantName:"label"}),g.label),count:Ei(pa({descendantName:"count"}),g.count),showMore:Ei(pa({descendantName:"showMore"}),g.showMore),disabledShowMore:Ei(pa({descendantName:"showMore",modifierName:"disabled"}),g.disabledShowMore)},containerNode:v,templates:m,showMore:u,renderState:{}});return W(W({},Tn(y,function(){return fr(null,v)})({attributes:r,separator:i,rootPath:a,showParentLevel:s,limit:o,showMore:u,showMoreLimit:l,sortBy:d,transformItems:h})),{},{$$widgetType:"ais.hierarchicalMenu"})},hits:function(e){var t=e||{},n=t.container,r=t.escapeHTML,i=t.transformItems,a=t.templates,s=void 0===a?{}:a,o=t.cssClasses,c=void 0===o?{}:o;if(!n)throw new Error(va("The `container` option is required."));var u=ye(n),l={root:Ei(ya(),c.root),emptyRoot:Ei(ya({modifierName:"empty"}),c.emptyRoot),list:Ei(ya({descendantName:"list"}),c.list),item:Ei(ya({descendantName:"item"}),c.item)},d=function(e){var o=e.renderState,c=e.cssClasses,u=e.containerNode,l=e.templates;return function(e,t){var n=e.hits,r=e.results,i=e.instantSearchInstance,a=e.insights,s=e.bindEvent;t?o.templateProps=Re({defaultTemplates:ga,templatesConfig:i.templatesConfig,templates:l}):fr(Kn(ba,{cssClasses:c,hits:n,results:r,templateProps:o.templateProps,insights:a,sendEvent:function(e){i.sendEventToInsights(e)},bindEvent:s}),u)}}({containerNode:u,cssClasses:l,renderState:{},templates:s});return W(W({},Mn(Cn)(d,function(){return fr(null,u)})({escapeHTML:r,transformItems:i})),{},{$$widgetType:"ais.hits"})},hitsPerPage:function(e){var t=e||{},n=t.container,r=t.items,i=t.cssClasses,a=void 0===i?{}:i,s=t.transformItems;if(!n)throw new Error(Ra("The `container` option is required."));var o=ye(n),c={root:Ei(wa(),a.root),select:Ei(wa({descendantName:"select"}),a.select),option:Ei(wa({descendantName:"option"}),a.option)},u=function(e){var a=e.containerNode,s=e.cssClasses;return function(e,t){var n=e.items,r=e.refine;if(!t){var i=(Ie(n,function(e){return e.isRefined})||{}).value;fr(Kn("div",{className:s.root},Kn(Sa,{cssClasses:s,currentValue:i,options:n,setValue:r})),a)}}}({containerNode:o,cssClasses:c});return W(W({},gr(u,function(){return fr(null,o)})({items:r,transformItems:s})),{},{$$widgetType:"ais.hitsPerPage"})},index:Nt,infiniteHits:function(e){var t=e||{},n=t.container,r=t.escapeHTML,i=t.transformItems,a=t.templates,s=void 0===a?{}:a,o=t.cssClasses,c=void 0===o?{}:o,u=t.showPrevious,l=t.cache;if(!n)throw new Error(Pa("The `container` option is required."));var d=ye(n),h={root:Ei(xa(),c.root),emptyRoot:Ei(xa({modifierName:"empty"}),c.emptyRoot),item:Ei(xa({descendantName:"item"}),c.item),list:Ei(xa({descendantName:"list"}),c.list),loadPrevious:Ei(xa({descendantName:"loadPrevious"}),c.loadPrevious),disabledLoadPrevious:Ei(xa({descendantName:"loadPrevious",modifierName:"disabled"}),c.disabledLoadPrevious),loadMore:Ei(xa({descendantName:"loadMore"}),c.loadMore),disabledLoadMore:Ei(xa({descendantName:"loadMore",modifierName:"disabled"}),c.disabledLoadMore)},f=function(e){var d=e.containerNode,h=e.cssClasses,f=e.renderState,m=e.templates,p=e.showPrevious;return function(e,t){var n=e.hits,r=e.results,i=e.showMore,a=e.showPrevious,s=e.isFirstPage,o=e.isLastPage,c=e.instantSearchInstance,u=e.insights,l=e.bindEvent;t?f.templateProps=Re({defaultTemplates:_a,templatesConfig:c.templatesConfig,templates:m}):fr(Kn(Na,{cssClasses:h,hits:n,results:r,hasShowPrevious:p,showPrevious:a,showMore:i,templateProps:f.templateProps,isFirstPage:s,isLastPage:o,insights:u,sendEvent:function(e){c.sendEventToInsights(e)},bindEvent:l}),d)}}({containerNode:d,cssClasses:h,templates:s,showPrevious:u,renderState:{}});return W(W({},Mn(Rr)(f,function(){return fr(null,d)})({escapeHTML:r,transformItems:i,showPrevious:u,cache:l})),{},{$$widgetType:"ais.infiniteHits"})},menu:function(e){var t=e||{},n=t.container,r=t.attribute,i=t.sortBy,a=t.limit,s=t.showMore,o=t.showMoreLimit,c=t.cssClasses,u=void 0===c?{}:c,l=t.templates,d=void 0===l?{}:l,h=t.transformItems;if(!n)throw new Error(Fa("The `container` option is required."));var f=ye(n),m={root:Ei(Ta(),u.root),noRefinementRoot:Ei(Ta({modifierName:"noRefinement"}),u.noRefinementRoot),list:Ei(Ta({descendantName:"list"}),u.list),item:Ei(Ta({descendantName:"item"}),u.item),selectedItem:Ei(Ta({descendantName:"item",modifierName:"selected"}),u.selectedItem),link:Ei(Ta({descendantName:"link"}),u.link),label:Ei(Ta({descendantName:"label"}),u.label),count:Ei(Ta({descendantName:"count"}),u.count),showMore:Ei(Ta({descendantName:"showMore"}),u.showMore),disabledShowMore:Ei(Ta({descendantName:"showMore",modifierName:"disabled"}),u.disabledShowMore)},p=function(e){var l=e.containerNode,d=e.cssClasses,h=e.renderState,f=e.templates,m=e.showMore;return function(e,t){var n=e.refine,r=e.items,i=e.createURL,a=e.instantSearchInstance,s=e.isShowingMore,o=e.toggleShowMore,c=e.canToggleShowMore;if(t)h.templateProps=Re({defaultTemplates:Ia,templatesConfig:a.templatesConfig,templates:f});else{var u=r.map(function(e){return W(W({},e),{},{url:i(e.value)})});fr(Kn(ha,{createURL:i,cssClasses:d,facetValues:u,showMore:m,templateProps:h.templateProps,toggleRefinement:n,toggleShowMore:o,isShowingMore:s,canToggleShowMore:c}),l)}}}({containerNode:f,cssClasses:m,renderState:{},templates:d,showMore:s});return W(W({},wr(p,function(){return fr(null,f)})({attribute:r,limit:a,showMore:s,showMoreLimit:o,sortBy:i,transformItems:h})),{},{$$widgetType:"ais.menu"})},menuSelect:function(e){var t=e||{},n=t.container,r=t.attribute,i=t.sortBy,a=void 0===i?["name:asc"]:i,s=t.limit,o=void 0===s?10:s,c=t.cssClasses,u=void 0===c?{}:c,l=t.templates,d=void 0===l?{}:l,h=t.transformItems;if(!n)throw new Error(ka("The `container` option is required."));var f=ye(n),m={root:Ei(La(),u.root),noRefinementRoot:Ei(La({modifierName:"noRefinement"}),u.noRefinementRoot),select:Ei(La({descendantName:"select"}),u.select),option:Ei(La({descendantName:"option"}),u.option)},p=function(e){var a=e.containerNode,s=e.cssClasses,o=e.renderState,c=e.templates;return function(e,t){var n=e.refine,r=e.items,i=e.instantSearchInstance;t?o.templateProps=Re({defaultTemplates:Ea,templatesConfig:i.templatesConfig,templates:c}):fr(Kn(Ca,{cssClasses:s,items:r,refine:n,templateProps:o.templateProps}),a)}}({containerNode:f,cssClasses:m,renderState:{},templates:d});return W(W({},wr(p,function(){return fr(null,f)})({attribute:r,limit:o,sortBy:a,transformItems:h})),{},{$$widgetType:"ais.menuSelect"})},numericMenu:function(e){var t=e||{},n=t.container,r=t.attribute,i=t.items,a=t.cssClasses,s=void 0===a?{}:a,o=t.templates,c=void 0===o?{}:o,u=t.transformItems;if(!n)throw new Error(Ma("The `container` option is required."));var l=ye(n),d={root:Ei(Oa(),s.root),noRefinementRoot:Ei(Oa({modifierName:"noRefinement"}),s.noRefinementRoot),list:Ei(Oa({descendantName:"list"}),s.list),item:Ei(Oa({descendantName:"item"}),s.item),selectedItem:Ei(Oa({descendantName:"item",modifierName:"selected"}),s.selectedItem),label:Ei(Oa({descendantName:"label"}),s.label),radio:Ei(Oa({descendantName:"radio"}),s.radio),labelText:Ei(Oa({descendantName:"labelText"}),s.labelText)},h=function(e){var s=e.containerNode,o=e.attribute,c=e.cssClasses,u=e.renderState,l=e.templates;return function(e,t){var n=e.createURL,r=e.instantSearchInstance,i=e.refine,a=e.items;t?u.templateProps=Re({defaultTemplates:ja,templatesConfig:r.templatesConfig,templates:l}):fr(Kn(ha,{createURL:n,cssClasses:c,facetValues:a,templateProps:u.templateProps,toggleRefinement:i,attribute:o}),s)}}({containerNode:l,attribute:r,cssClasses:d,renderState:{},templates:c});return W(W({},_r(h,function(){return fr(null,l)})({attribute:r,items:i,transformItems:u})),{},{$$widgetType:"ais.numericMenu"})},pagination:function(e){var t=e||{},n=t.container,r=t.templates,i=void 0===r?{}:r,a=t.cssClasses,s=void 0===a?{}:a,o=t.totalPages,c=t.padding,u=t.showFirst,l=void 0===u||u,d=t.showLast,h=void 0===d||d,f=t.showPrevious,m=void 0===f||f,p=t.showNext,g=void 0===p||p,v=t.scrollTo,y=void 0===v?"body":v;if(!n)throw new Error(qa("The `container` option is required."));var b=ye(n),S=!0===y?"body":y,R=!1!==S&&ye(S),w={root:Ei(Ua(),s.root),noRefinementRoot:Ei(Ua({modifierName:"noRefinement"}),s.noRefinementRoot),list:Ei(Ua({descendantName:"list"}),s.list),item:Ei(Ua({descendantName:"item"}),s.item),firstPageItem:Ei(Ua({descendantName:"item",modifierName:"firstPage"}),s.firstPageItem),lastPageItem:Ei(Ua({descendantName:"item",modifierName:"lastPage"}),s.lastPageItem),previousPageItem:Ei(Ua({descendantName:"item",modifierName:"previousPage"}),s.previousPageItem),nextPageItem:Ei(Ua({descendantName:"item",modifierName:"nextPage"}),s.nextPageItem),pageItem:Ei(Ua({descendantName:"item",modifierName:"page"}),s.pageItem),selectedItem:Ei(Ua({descendantName:"item",modifierName:"selected"}),s.selectedItem),disabledItem:Ei(Ua({descendantName:"item",modifierName:"disabled"}),s.disabledItem),link:Ei(Ua({descendantName:"link"}),s.link)},_=W(W({},Qa),i),P=function(e){var u=e.containerNode,l=e.cssClasses,d=e.templates,h=e.showFirst,f=e.showLast,m=e.showPrevious,p=e.showNext,g=e.scrollToNode;return function(e,t){var n=e.createURL,r=e.currentRefinement,i=e.nbPages,a=e.pages,s=e.isFirstPage,o=e.isLastPage,c=e.refine;if(!t){fr(Kn(Aa,{createURL:n,cssClasses:l,currentPage:r,templates:d,nbPages:i,pages:a,isFirstPage:s,isLastPage:o,setCurrentPage:function(e){c(e),!1!==g&&g.scrollIntoView()},showFirst:h,showLast:f,showPrevious:m,showNext:p}),u)}}}({containerNode:b,cssClasses:w,templates:_,showFirst:l,showLast:h,showPrevious:m,showNext:g,scrollToNode:R});return W(W({},kr(P,function(){return fr(null,b)})({totalPages:o,padding:c})),{},{$$widgetType:"ais.pagination"})},panel:function(e){var t=e||{},n=t.templates,r=void 0===n?{}:n,i=t.hidden,c=void 0===i?function(){return!1}:i,a=t.collapsed,s=t.cssClasses,o=void 0===s?{}:s,u=document.createElement("div"),l=Boolean(a),d="function"==typeof a?a:function(){return!1},h={root:Ei(ds(),o.root),noRefinementRoot:Ei(ds({modifierName:"noRefinement"}),o.noRefinementRoot),collapsibleRoot:Ei(ds({modifierName:"collapsible"}),o.collapsibleRoot),collapsedRoot:Ei(ds({modifierName:"collapsed"}),o.collapsedRoot),collapseButton:Ei(ds({descendantName:"collapseButton"}),o.collapseButton),collapseIcon:Ei(ds({descendantName:"collapseIcon"}),o.collapseIcon),body:Ei(ds({descendantName:"body"}),o.body),header:Ei(ds({descendantName:"header"}),o.header),footer:Ei(ds({descendantName:"footer"}),o.footer)};return function(t){return function(e){if(!e||!e.container)throw new Error(ls("The `container` option is required in the widget within the panel."));var i=ye(e.container),s=function(e){var a=e.containerNode,s=e.bodyContainerNode,o=e.cssClasses,c=e.templates;return function(e){var t=e.options,n=e.hidden,r=e.collapsible,i=e.collapsed;fr(Kn(os,{cssClasses:o,hidden:n,collapsible:r,isCollapsed:i,templates:c,data:t,bodyElement:s}),a)}}({containerNode:i,bodyContainerNode:u,cssClasses:h,templates:W(W({},{header:"",footer:"",collapseButtonText:function(e){var t=e.collapsed;return'<svg\n class="'.concat(h.collapseIcon,'"\n width="1em"\n height="1em"\n viewB
12479ox="0 0 500 500"\n >\n <path d="').concat(t?"M100 250l300-150v300z":"M250 400l150-300H100z",'" fill="currentColor" />\n </svg>')}}),r)}),o=t(W(W({},e),{},{container:u}));return W(W({},o),{},{init:function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];var r,i=t[0],a=W(W({},o.getWidgetRenderState?o.getWidgetRenderState(i):{}),i);s({options:a,hidden:!0,collapsible:l,collapsed:!1}),"function"==typeof o.init&&(r=o.init).call.apply(r,[this].concat(t))},render:function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];var r,i=t[0],a=W(W({},o.getWidgetRenderState?o.getWidgetRenderState(i):{}),i);s({options:a,hidden:Boolean(c(a)),collapsible:l,collapsed:Boolean(d(a))}),"function"==typeof o.render&&(r=o.render).call.apply(r,[this].concat(t))},dispose:function(){if(fr(null,i),"function"==typeof o.dispose){for(var e,t=arguments.length,n=new Array(t),r=0;r<t;r++)n[r]=arguments[r];return(e=o.dispose).call.apply(e,[this].concat(n))}}})}}},places:function(e){var t=e||{},n=t.placesReference,r=t.defaultPosition,o=void 0===r?[]:r,i=j(t,["placesReference","defaultPosition"]);if("function"!=typeof n)throw new Error("The `placesReference` option requires a valid Places.js reference.");var c=n(i),u={query:"",initialLatLngViaIP:void 0,isInitialLatLngViaIPSet:!1};return{$$type:"ais.places",$$widgetType:"ais.places",init:function(e){var s=e.helper;c.on("change",function(e){var t=e.suggestion,n=t.value,r=t.latlng,i=r.lat,a=r.lng;u.query=n,s.setQueryParameter("insideBoundingBox",void 0).setQueryParameter("aroundLatLngViaIP",!1).setQueryParameter("aroundLatLng","".concat(i,",").concat(a)).search()}),c.on("clear",function(){u.query="",s.setQueryParameter("insideBoundingBox",void 0),1<o.length?s.setQueryParameter("aroundLatLngViaIP",!1).setQueryParameter("aroundLatLng",o.join(",")):s.setQueryParameter("aroundLatLngViaIP",u.initialLatLngViaIP).setQueryParameter("aroundLatLng",void 0),s.search()})},getWidgetUiState:function(e,t){var n=t.searchParameters.aroundLatLng||o.join(",");if(n!==o.join(",")||u.query)return W(W({},e),{},{places:{query:u.query,position:n}});e.places;return j(e,["places"])},getWidgetSearchParameters:function(e,t){var n=t.uiState.places||{},r=n.query,i=void 0===r?"":r,a=n.position,s=void 0===a?o.join(","):a;return u.query=i,u.isInitialLatLngViaIPSet||(u.isInitialLatLngViaIPSet=!0,u.initialLatLngViaIP=e.aroundLatLngViaIP),c.setVal(i),c.close(),e.setQueryParameter("insideBoundingBox",void 0).setQueryParameter("aroundLatLngViaIP",!1).setQueryParameter("aroundLatLng",s||void 0)},getRenderState:function(e,t){return W(W({},e),{},{places:this.getWidgetRenderState(t)})},getWidgetRenderState:function(){return{widgetParams:e}}}},poweredBy:function(e){var t=e||{},n=t.container,r=t.cssClasses,i=void 0===r?{}:r,a=t.theme,s=void 0===a?"light":a;if(!n)throw new Error(ps("The `container` option is required."));var o=ye(n),c={root:Ei(ms(),ms({modifierName:"dark"===s?"dark":"light"}),i.root),link:Ei(ms({descendantName:"link"}),i.link),logo:Ei(ms({descendantName:"logo"}),i.logo)},u=function(e){var a=e.containerNode,s=e.cssClasses;return function(e,t){var n=e.url,r=e.widgetParams;if(t){var i=r.theme;fr(Kn(cs,{cssClasses:s,url:n,theme:void 0===i?"light":i}),a)}else;}}
vendor: 8,349 bytes, line 12479
12479({containerNode:o,cssClasses:c});return W(W({},oi(u,function(){return fr(null,o)})({theme:s})),{},{$$widgetType:"ais.poweredBy"})},queryRuleContext:function(e){var t=0<arguments.length&&void 0!==e?e:{};if(!t.trackedFilters)throw new Error(gs("The `trackedFilters` option is required."));return W(W({},bi(Le)(t)),{},{$$widgetType:"ais.queryRuleContext"})},queryRuleCustomData:function(e){var t=e||{},n=t.container,r=t.cssClasses,i=void 0===r?{}:r,a=t.templates,s=void 0===a?{}:a,o=t.transformItems,c=void 0===o?function(e){return e}:o;if(!n)throw new Error(ys("The `container` option is required."));var u={root:Ei(bs(),i.root)},l=ye(n),d=W(W({},vs),s),h=function(e){var n=e.containerNode,r=e.cssClasses,i=e.templates;return function(e){var t=e.items;fr(Kn(us,{cssClasses:r,templates:i,items:t}),n)}}({containerNode:l,cssClasses:u,renderState:{},templates:d});return W(W({},bi(h,function(){fr(null,l)})({transformItems:c})),{},{$$widgetType:"ais.queryRuleCustomData"})},rangeInput:function(e){var t=e||{},n=t.container,r=t.attribute,i=t.min,a=t.max,s=t.precision,o=void 0===s?0:s,c=t.cssClasses,u=void 0===c?{}:c,l=t.templates,d=void 0===l?{}:l;if(!n)throw new Error(Rs("The `container` option is required."));var h=ye(n),f={root:Ei(ws(),u.root),noRefinement:Ei(ws({modifierName:"noRefinement"})),form:Ei(ws({descendantName:"form"}),u.form),label:Ei(ws({descendantName:"label"}),u.label),input:Ei(ws({descendantName:"input"}),u.input),inputMin:Ei(ws({descendantName:"input",modifierName:"min"}),u.inputMin),inputMax:Ei(ws({descendantName:"input",modifierName:"max"}),u.inputMax),separator:Ei(ws({descendantName:"separator"}),u.separator),submit:Ei(ws({descendantName:"submit"}),u.submit)},m=function(e){var f=e.containerNode,m=e.cssClasses,p=e.renderState,g=e.templates;return function(e,t){var n=e.refine,r=e.range,i=e.start,a=e.widgetParams,s=e.instantSearchInstance;if(t)p.templateProps=Re({defaultTemplates:_s,templatesConfig:s.templatesConfig,templates:g});else{var o=r.min,c=r.max,u=D(i,2),l=u[0],d=u[1],h=1/Math.pow(10,a.precision||0);fr(Kn(Ss,{min:o,max:c,step:h,values:{min:l!==-1/0&&l!==o?l:void 0,max:d!==1/0&&d!==c?d:void 0},cssClasses:m,refine:n,templateProps:p.templateProps}),f)}}}({containerNode:h,cssClasses:f,templates:d,renderState:{}});return W(W({},Hr(m,function(){return fr(null,h)})({attribute:r,min:i,max:a,precision:o})),{},{$$type:"ais.rangeInput",$$widgetType:"ais.rangeInput"})},rangeSlider:function(e){var t=e||{},n=t.container,r=t.attribute,i=t.min,a=t.max,s=t.cssClasses,o=void 0===s?{}:s,c=t.step,u=t.pips,l=void 0===u||u,d=t.precision,h=void 0===d?0:d,f=t.tooltips,m=void 0===f||f;if(!n)throw new Error(Ks("The `container` option is required."));var p=ye(n),g={root:Ei(zs(),o.root),disabledRoot:Ei(zs({modifierName:"disabled"}),o.disabledRoot)},v=function(e){var h=e.containerNode,f=e.cssClasses,m=e.pips,p=e.step,g=e.tooltips;return function(e,t){var n=e.refine,r=e.range,i=e.start;if(!t){var a=r.min,s=r.max,o=D(i,2),c=o[0],u=o[1],l=c===-1/0?a:c,d=u===1/0?s:u;fr(Kn($s,{cssClasses:f,refine:n,min:a,max:s,values:[s<l?s:l,d<a?a:d],tooltips:g,step:p,pips:m}),h)}}}({containerNode:p,step:c,pips:l,tooltips:m,cssClasses:g});return W(W({},Hr(v,function(){return fr(null,p)})({attribute:r,min:i,max:a,precision:h})),{},{$$type:"ais.rangeSlider",$$widgetType:"ais.rangeSlider"})},ratingMenu:function(e){var t=e||{},n=t.container,r=t.attribute,i=t.max,a=void 0===i?5:i,s=t.cssClasses,o=void 0===s?{}:s,c=t.templates,u=void 0===c?{}:c;if(!n)throw new Error(Ys("The `container` option is required."));var l=ye(n),d={root:Ei(Xs(),o.root),noRefinementRoot:Ei(Xs({modifierName:"noRefinement"}),o.noRefinementRoot),list:Ei(Xs({descendantName:"list"}),o.list),item:Ei(Xs({descendantName:"item"}),o.item),selectedItem:Ei(Xs({descendantName:"item",modifierName:"selected"}),o.selectedItem),disabledItem:Ei(Xs({descendantName:"item",modifierName:"disabled"}),o.disabledItem),link:Ei(Xs({descendantName:"link"}),o.link),starIcon:Ei(Xs({descendantName:"starIcon"}),o.starIcon),fullStarIcon:Ei(Xs({descendantName:"starIcon",modifierName:"full"}),o.fullStarIcon),emptyStarIcon:Ei(Xs({descendantName:"starIcon",modifierName:"empty"}),o.emptyStarIcon),label:Ei(Xs({descendantName:"label"}),o.label),count:Ei(Xs({descendantName:"count"}),o.count)},h=function(e){var s=e.containerNode,o=e.cssClasses,c=e.templates,u=e.renderState;return function(e,t){var n=e.refine,r=e.items,i=e.createURL,a=e.instantSearchInstance;t?u.templateProps=Re({defaultTemplates:Js,templatesConfig:a.templatesConfig,templates:c}):fr(Kn(ha,{createURL:i,cssClasses:o,facetValues:r,templateProps:u.templateProps,toggleRefinement:n},Kn("svg",{style:"display:none;"},Kn("symbol",{id:Xs({descendantName:"starSymbol"}),viewBox:"0 0 24 24"},Gs),Kn("symbol",{id:Xs({descendantName:"starEmptySymbol"}),viewBox:"0 0 24 24"},Zs))),s)}}({containerNode:l,cssClasses:d,renderState:{},templates:u});return W(W({},qr(h,function(){return fr(null,l)})({attribute:r,max:a})),{},{$$widgetType:"ais.ratingMenu"})},refinementList:function(e){var t=e||{},n=t.container,r=t.attribute,i=t.operator,a=t.sortBy,s=t.limit,o=t.showMore,c=t.showMoreLimit,u=t.searchable,l=void 0!==u&&u,d=t.searchablePlaceholder,h=void 0===d?"Search...":d,f=t.searchableEscapeFacetValues,m=void 0===f||f,p=t.searchableIsAlwaysActive,g=void 0===p||p,v=t.cssClasses,y=void 0===v?{}:v,b=t.templates,S=void 0===b?{}:b,R=t.transformItems;if(!n)throw new Error(no("The `container` option is required."));var w=!!l&&Boolean(m),_=ye(n),P={root:Ei(ro(),y.root),noRefinementRoot:Ei(ro({modifierName:"noRefinement"}),y.noRefinementRoot),list:Ei(ro({descendantName:"list"}),y.list),item:Ei(ro({descendantName:"item"}),y.item),selectedItem:Ei(ro({descendantName:"item",modifierName:"selected"}),y.selectedItem),searchBox:Ei(ro({descendantName:"searchBox"}),y.searchBox),label:Ei(ro({descendantName:"label"}),y.label),checkbox:Ei(ro({descendantName:"checkbox"}),y.checkbox),labelText:Ei(ro({descendantName:"labelText"}),y.labelText),count:Ei(ro({descendantName:"count"}),y.count),noResults:Ei(ro({descendantName:"noResults"}),y.noResults),showMore:Ei(ro({descendantName:"showMore"}),y.showMore),disabledShowMore:Ei(ro({descendantName:"showMore",modifierName:"disabled"}),y.disabledShowMore),searchable:{root:Ei(io(),y.searchableRoot),form:Ei(io({descendantName:"form"}),y.searchableForm),input:Ei(io({descendantName:"input"}),y.searchableInput),submit:Ei(io({descendantName:"submit"}),y.searchableSubmit),submitIcon:Ei(io({descendantName:"submitIcon"}),y.searchableSubmitIcon),reset:Ei(io({descendantName:"reset"}),y.searchableReset),resetIcon:Ei(io({descendantName:"resetIcon"}),y.searchableResetIcon),loadingIndicator:Ei(io({descendantName:"loadingIndicator"}),y.searchableLoadingIndicator),loadingIcon:Ei(io({descendantName:"loadingIcon"}),y.searchableLoadingIcon)}},x=function(e){var h=e.containerNode,f=e.cssClasses,m=e.templates,p=e.searchBoxTemplates,g=e.renderState,v=e.showMore,y=e.searchable,b=e.searchablePlaceholder,S=e.searchableIsAlwaysActive;return function(e,t){var n=e.refine,r=e.items,i=e.createURL,a=e.searchForItems,s=e.isFromSearch,o=e.instantSearchInstance,c=e.toggleShowMore,u=e.isShowingMore,l=e.hasExhaustiveItems,d=e.canToggleShowMore;if(t)return g.templateProps=Re({defaultTemplates:to,templatesConfig:o.templatesConfig,templates:m}),void(g.searchBoxTemplateProps=Re({defaultTemplates:eo,templatesConfig:o.templatesConfig,templates:p}));fr(Kn(ha,{createURL:i,cssClasses:f,facetValues:r,templateProps:g.templateProps,searchBoxTemplateProps:g.searchBoxTemplateProps,toggleRefinement:n,searchFacetValues:y?a:void 0,searchPlaceholder:b,searchIsAlwaysActive:S,isFromSearch:s,showMore:v&&!s&&0<r.length,toggleShowMore:c,isShowingMore:u,hasExhaustiveItems:l,canToggleShowMore:d}),h)}}({containerNode:_,cssClasses:P,templates:S,searchBoxTemplates:{submit:S.searchableSubmit,reset:S.searchableReset,loadingIndicator:S.searchableLoadingIndicator},renderState:{},searchable:l,searchablePlaceholder:h,searchableIsAlwaysActive:g,showMore:o});return W(W({},Wr(x,function(){return fr(null,_)})({attribute:r,operator:i,limit:s,showMore:o,showMoreLimit:c,sortBy:a,escapeFacetValues:w,transformItems:R})),{},{$$widgetType:"ais.refinementList"})},relevantSort:function(e){var t=e.container,n=e.templates,r=void 0===n?{}:n,i=e.cssClasses,a=void 0===i?{}:i;if(!t)throw new Error(so("The `container` option is required."));
12479var s=ye(t),o={root:Ei(oo(),a.root),text:Ei(oo({descendantName:"text"}),a.text),button:Ei(oo({descendantName:"button"}),a.button)},c=W(W({},ao),r),u=function(e){var i=e.containerNode,a=e.cssClasses,s=e.templates;return function(e){var t=e.isRelevantSorted,n=e.isVirtualReplica,r=e.refine;fr(Kn(Us,{cssClasses:a,templates:s,isRelevantSorted:t,isVirtualReplica:n,refine:r}),i)}}({containerNode:s,cssClasses:o,renderState:{},templates:c});return W(W({},Pi(u,function(){fr(null,s)})({})),{},{$$widgetType:"ais.relevantSort"})},searchBox:function(e){var t=e||{},n=t.container,r=t.placeholder,i=void 0===r?"":r,a=t.cssClasses,s=void 0===a?{}:a,o=t.autofocus,c=void 0!==o&&o,u=t.searchAsYouType,l=void 0===u||u,d=t.showReset,h=void 0===d||d,f=t.showSubmit,m=void 0===f||f,p=t.showLoadingIndicator,g=void 0===p||p,v=t.queryHook,y=t.templates,b=void 0===y?{}:y;if(!n)throw new Error(co("The `container` option is required."));var S=ye(n),R={root:Ei(uo(),s.root),form:Ei(uo({descendantName:"form"}),s.form),input:Ei(uo({descendantName:"input"}),s.input),submit:Ei(uo({descendantName:"submit"}),s.submit),submitIcon:Ei(uo({descendantName:"submitIcon"}),s.submitIcon),reset:Ei(uo({descendantName:"reset"}),s.reset),resetIcon:Ei(uo({descendantName:"resetIcon"}),s.resetIcon),loadingIndicator:Ei(uo({descendantName:"loadingIndicator"}),s.loadingIndicator),loadingIcon:Ei(uo({descendantName:"loadingIcon"}),s.loadingIcon)},w=W(W({},eo),b),_=function(e){var i=e.containerNode,a=e.cssClasses,s=e.placeholder,o=e.templates,c=e.autofocus,u=e.searchAsYouType,l=e.showReset,d=e.showSubmit,h=e.showLoadingIndicator;return function(e){var t=e.refine,n=e.query,r=e.isSearchStalled;fr(Kn(la,{query:n,placeholder:s,autofocus:c,refine:t,searchAsYouType:u,templates:o,showSubmit:d,showReset:l,showLoadingIndicator:h,isSearchStalled:r,cssClasses:a}),i)}}({containerNode:S,cssClasses:R,placeholder:i,templates:w,autofocus:c,searchAsYouType:l,showReset:h,showSubmit:m,showLoadingIndicator:g});return W(W({},Br(_,function(){return fr(null,S)})({queryHook:v})),{},{$$widgetType:"ais.searchBox"})},sortBy:function(e){var t=e||{},n=t.container,r=t.items,i=t.cssClasses,a=void 0===i?{}:i,s=t.transformItems;if(!n)throw new Error(lo("The `container` option is required."));var o=ye(n),c={root:Ei(ho(),a.root),select:Ei(ho({descendantName:"select"}),a.select),option:Ei(ho({descendantName:"option"}),a.option)},u=function(e){var a=e.containerNode,s=e.cssClasses;return function(e,t){var n=e.currentRefinement,r=e.options,i=e.refine;t||fr(Kn("div",{className:s.root},Kn(Sa,{cssClasses:s,currentValue:n,options:r,setValue:i})),a)}}
vendor: 1,812 bytes, line 12479
12479({containerNode:o,cssClasses:c});return W(W({},Ur(u,function(){return fr(null,o)})({container:o,items:r,transformItems:s})),{},{$$widgetType:"ais.sortBy"})},stats:function(e){var t=e||{},n=t.container,r=t.cssClasses,i=void 0===r?{}:r,a=t.templates,s=void 0===a?{}:a;if(!n)throw new Error(fo("The `container` option is required."));var o=ye(n),c={root:Ei(mo(),i.root),text:Ei(mo({descendantName:"text"}),i.text)},u=function(e){var d=e.renderState,h=e.cssClasses,f=e.containerNode,m=e.templates;return function(e,t){var n=e.hitsPerPage,r=e.nbHits,i=e.nbSortedHits,a=e.areHitsSorted,s=e.nbPages,o=e.page,c=e.processingTimeMS,u=e.query,l=e.instantSearchInstance;t?d.templateProps=Re({defaultTemplates:po,templatesConfig:l.templatesConfig,templates:m}):fr(Kn(qs,{cssClasses:h,hitsPerPage:n,nbHits:r,nbSortedHits:i,areHitsSorted:a,nbPages:s,page:o,processingTimeMS:c,query:u,templateProps:d.templateProps}),f)}}({containerNode:o,cssClasses:c,templates:s,renderState:{}});return W(W({},Qr(u,function(){return fr(null,o)})({})),{},{$$widgetType:"ais.stats"})},toggleRefinement:function(e){var t=e||{},n=t.container,r=t.attribute,i=t.cssClasses,a=void 0===i?{}:i,s=t.templates,o=void 0===s?{}:s,c=t.on,u=void 0===c||c,l=t.off;if(!n)throw new Error(vo("The `container` option is required."));var d=ye(n),h={root:Ei(yo(),a.root),label:Ei(yo({descendantName:"label"}),a.label),checkbox:Ei(yo({descendantName:"checkbox"}),a.checkbox),labelText:Ei(yo({descendantName:"labelText"}),a.labelText)},f=function(e){var a=e.containerNode,s=e.cssClasses,o=e.renderState,c=e.templates;return function(e,t){var n=e.value,r=e.refine,i=e.instantSearchInstance;t?o.templateProps=Re({defaultTemplates:go,templatesConfig:i.templatesConfig,templates:c}):fr(Kn(Qs,{cssClasses:s,currentRefinement:n,templateProps:o.templateProps,refine:r}),a)}}
12479({containerNode:d,cssClasses:h,renderState:{},templates:o});return W(W({},Vr(f,function(){return fr(null,d)})({attribute:r,on:u,off:l})),{},{$$widgetType:"ais.toggleRefinement"})},voiceSearch:function(e){var t=e||{},n=t.container,r=t.cssClasses,i=void 0===r?{}:r,a=t.templates,s=void 0===a?{}:a,o=t.searchAsYouSpeak,c=void 0!==o&&o,u=t.language,l=t.additionalQueryParameters,d=t.createVoiceSearchHelper;if(!n)throw new Error(So("The `container` option is required."));var h=ye(n),f={root:Ei(Ro(),i.root),button:Ei(Ro({descendantName:"button"}),i.button),status:Ei(Ro({descendantName:"status"}),i.status)},m=W(W({},bo),s),p=function(e){var a=e.containerNode,s=e.cssClasses,o=e.templates;return function(e){var t=e.isBrowserSupported,n=e.isListening,r=e.toggleListening,i=e.voiceListeningState;fr(Kn(Vs,{cssClasses:s,templates:o,isBrowserSupported:t,isListening:n,toggleListening:r,voiceListeningState:i}),a)}}({containerNode:h,cssClasses:f,templates:m});return W(W({},Ri(p,function(){return fr(null,h)})({container:h,cssClasses:f,templates:m,searchAsYouSpeak:c,language:u,additionalQueryParameters:l,createVoiceSearchHelper:d})),{},{$$widgetType:"ais.voiceSearch"})}}),Po=Object.freeze({__proto__:null,createInsightsMiddleware:function(e){var t=e||{},d=t.insightsClient,h=t.insightsInitParams,f=t.onEvent;if(null!==d&&!d)throw new Error("The `insightsClient` option is required. To disable, set it to `null`.");var m=Boolean(d),p=null===d?Le:d;return function(e){var n=e.instantSearchInstance,t=D(function(e){if(e.transporter){var t=e.transporter,n=t.headers,r=t.queryParameters,i="x-algolia-application-id",a="x-algolia-api-key";return[n[i]||r[i],n[a]||r[a]]}return[e.applicationID,e.apiKey]}(n.client),2),r=t[0],i=t[1],a=void 0,s=void 0;if(Array.isArray(p.queue)){var o=D(Ie(p.queue.slice().reverse(),function(e){return"setUserToken"===D(e,1)[0]})||[],2);a=o[1]}p("getUserToken",null,function(e,t){s=t}),p("init",W({appId:r,apiKey:i},h));var c,u,l=hi(Le);return{onStateChange:function(){},subscribe:function(){p("addAlgoliaAgent","insights-middleware"),c=l({searchParameters:{clickAnalytics:!0}}),n.addWidgets([c]);function e(e){u&&n.removeWidgets([u]),u=l({searchParameters:{userToken:e}}),n.addWidgets([u])}var t=Ht();m&&t&&e(t),s?p("setUserToken",s):a&&p("setUserToken",a),p("onUserTokenChange",e,{immediate:!0}),n.sendEventToInsights=function(e){if(f)f(e,d);else if(e.insightsMethod){Boolean(n.renderState[n.indexName].configure.widgetParams.searchParameters.userToken)&&p(e.insightsMethod,e.payload)}}},unsubscribe:function(){p("onUserTokenChange",void 0),n.removeWidgets([c,u]),u=c=void 0,n.sendEventToInsights=Le}}}},createRouterMiddleware:pn,isMetadataEnabled:gn,createMetadataMiddleware:vn}),xo=Object.freeze({__proto__:null,history:mn});function No(e){e.configure;return j(e,["configure"])}var Io=Object.freeze({__proto__:null,simple:Dt,singleIndex:function(t){return{stateToRoute:function(e){return No(e[t]||{})},routeToState:function(e){return k({},t,No(0<arguments.length&&void 0!==e?e:{}))}}}});function Fo(e){var t=e||{};t.page;return j(t,["page"])}var To="ais.infiniteHits";function Co(e){return new Rn(e)}return Co.version="4.43.0",Co.connectors=Ti,Co.widgets=_o,Co.middlewares=Po,Co.routers=xo,Co.stateMappings=Io,Co.createInfiniteHitsSessionStorageCache=function(){return{read:function(e){var t=e.state,n=St(function(e){return e.window.sessionStorage});if(!n)return null;try{var r=JSON.parse(n.getItem(To));return r&&De(r.state,Fo(t))?r.hits:null}catch(e){if(e instanceof SyntaxError)try{n.removeItem(To)}catch(e){}return null}},write:function(e){var t=e.state,n=e.hits,r=St(function(e){return e.window.sessionStorage});if(r)try{r.setItem(To,JSON.stringify({state:Fo(t),hits:n}))}catch(e){}}}},Co.highlight=Ct,Co.reverseHighlight=kt,Co.snippet=jt,Co.reverseSnippet=Ot,Co.insights=At,Co}); 12480 12481 12482// ãµã¤ããã¼ã®è¿½å¾ 12483//ããè¦åºã(h3, h4)ãç»é¢ã®ä¸çªä¸ãè¶ ããã â ãã®è¦åºããtextã«ãªã£ã¦ããaã¿ã°ããã¤ã©ã¤ããã 12484$(function(){ 12485 let contentsArr = new Array(); 12486 let chapters = $("#subCol .chapters li a"); 12487 let headerHeight = $("#header").outerHeight(true); 12488 $("#mainCol").find("h3, h4").each(function(index) { 12489 let targetContents = $(this).attr('id'); 12490 let targetContentsTop = $(this).offset().top - $(this).outerHeight(true) - headerHeight; 12491 let targetA = chapters[index - 1]; 12492 contentsArr.push([targetContentsTop, targetA]); 12493 }); 12494 $(window).scroll(function(){ 12495 let windowScrolltop = $(window).scrollTop(); 12496 $.each(contentsArr, function(index, value) { 12497 if(value[0] >= windowScrolltop && index > 0) { 12498 if(contentsArr[index - 1][0] <= windowScrolltop){
12499 $(chapters).removeClass("chapters-focus"); 12500 $(value[1]).addClass("chapters-focus"); 12501 return false; 12502 } 12503 }; 12504 }); 12505 }); 12506}); 12507//ã¬ã¹ãã³ã·ã対å¿ã®ãããæ¨ªå¹ ãå®ç¾© 12508const mediaQuery = window.matchMedia("(min-width: 920px)"); 12509hundle(mediaQuery); 12510mediaQuery.addListener(hundle); 12511// ãµã¤ããã¼ã®è¿½å¾ 12512function hundle(mq) { 12513 var pathName = location.pathname; 12514 if (pathName == '/' || pathName == '/ebook' || pathName == '/my' || pathName == '/users/payment_method/edit' || pathName == '/users/payment_method/new'){ 12515 $("#subCol").css('position', ''); 12516 } else if (mq.matches) { 12517 $("#subCol").css('position', 'fixed'); 12518 sidebarFollow(); 12519 } else { 12520 $("#subCol").css('position', ''); 12521 }; 12522 12523 function sidebarFollow() { 12524 window.onload = function () { 12525 var response = $.ajax({ 12526 type: "GET", 12527 url: "/pro_plan_available", 12528 headers: { 12529 'X-CSRF-Token': $('meta[name="csrf-token"]').attr('content') 12530 }, 12531 async: false 12532 }).responseText; 12533 var isProPlanAvaible = JSON.parse(response).available; 12534 var target = $("#subCol"); 12535 var footer = $("footer"); 12536 var header = $("#header"); 12537 var chapters = $("#subCol .chapters"); 12538 if (target.children('.ebook').length > 0) { return; } 12539 if (!target.length) { return; } 12540 if (!footer.length) { return; } 12541 var targetHeight = target.outerHeight(true); 12542 var headerHeight = header.outerHeight(true) + 10; 12543 var targetTop = target.offset().top - headerHeight; 12544 var scrollTargetHeight = isProPlanAvaible ? 'calc(100% - 85px - 1em)' : "calc(" + $(window).height() + "px - 190px + 4em)"; 12545 var chapterFitHeight = chapters.scrollHeight > chapters.height() ? "calc(" + $(window).height() + "px - 570px - 1em)" : 'auto'; 12546 var scrollChaptersHeight = isProPlanAvaible ? 'auto' : chapterFitHeight; 12547 target.css({ position: "fixed", top: (headerHeight + 39) + "px", right: "calc((100vw - (640px + 26em))/2)", display: "grid", gridTemplateRows: "auto auto auto 1fr", height: scrollTargetHeight }); 12548 chapters.css({ position: "static", height: scrollChaptersHeight, marginBottom: "1em" }); 12549 12550 $(window).scroll(function () { 12551 var scrollTop = $(this).scrollTop(); 12552 targetHeight = target.outerHeight(true); 12553 if (scrollTop > targetTop && mq.matches) { 12554 var footerTop = footer.offset().top; 12555 if (scrollTop + targetHeight + headerHeight > footerTop) { 12556 customTopPosition = footerTop - (scrollTop + targetHeight); 12557 target.css({ position: "fixed", top: customTopPosition + "px" }); 12558 } else { 12559 target.css({ position: "fixed", top: headerHeight + "px", right: "calc((100vw - (640px + 26em))/2)", display: "grid", gridTemplateRows: "auto auto auto 1fr", height: scrollTargetHeight }); 12560 chapters.css({ position: "static", height: scrollChaptersHeight, marginBottom: "1em" }); 12561 } 12562 }; 12563 }); 12564 }; 12565 }; 12566}; 12567$(function () { 12568 var sponsor = 'RailsGuidesJP'; 12569 var imageName = ''; 12570 var requestSponsor = getRequestSponsor(); 12571 12572 function notifyError(payload) { 12573 $.ajax({ 12574 type: 'POST', 12575 url: '/sponsor_banner_error', 12576 headers: { 12577 'X-CSRF-Token': $('meta[name="csrf-token"]').attr('content') 12578 }, 12579 contentType: 'application/json', 12580 data: JSON.stringify(payload) 12581 }); 12582 } 12583 12584 function handleError(jqXHR, textStatus, errorThrown) { 12585 notifyError({ 12586 status: jqXHR?.status || 'invalid_response', 12587 error: errorThrown || textStatus || 'unknown error', 12588 path: location.href, 12589 sponsor: sponsor 12590 }); 12591 } 12592 12593 // MEMO: sponsor ãã©ã¡ã¼ã¿æå®ã®ãªãé常表示ã ãã表示ã¤ãã³ãã¨ãã¦è¨æ¸¬ãã 12594 function shouldTrackSponsorView() { 12595 return !requestSponsor && typeof dataLayer !== 'undefined'; 12596 } 12597 12598 // MEMO: ããããã¼ã¸ã®åè³é¨åã®åãæ¿ããè¡ã 12599 if($('#top-sponsor').length) { 12600 $.ajax({ 12601 type: 'GET', 12602 url: '/sponsor_banner_top', 12603 data: { sponsor: requestSponsor }, 12604 headers: { 12605 'X-CSRF-Token' : $('meta[name="csrf-token"]').attr('content') 12606 } 12607 }).done(function(data){ 12608 if(data.sponsor && data.sponsor.top) { 12609 sponsor_data = data['sponsor']['top'] 12610 $('#top-sponsor').html('<a href=' + sponsor_data['link'] + ' target="_blank" rel="noopener"><img src=' + sponsor_data['image'] + ' alt=' + sponsor_data['name'] + ' class="bnr-proplan" /></a>'); 12611 sponsor = data['sponsor']['name'] 12612 imageName = sponsor_data['image_name'] 12613 12614 if(shouldTrackSponsorView()) { 12615 dataLayer.push({ 12616 event: 'top-sponsor', 12617 sponsorName: sponsor, 12618 sponsorImage: imageName 12619 }); 12620 } 12621 12622 $('#top-sponsor').on('click', function() { 12623 if(typeof dataLayer !== 'undefined') { 12624 dataLayer.push({ 12625 event: 'top-sponsor-click', 12626 sponsorName: sponsor, 12627 sponsorImage: imageName 12628 }); 12629 } 12630 }); 12631 } else { 12632 // 空ãã¼ã¿ã¯failã¨ãã¦æ±ã 12633 handleError({ status: 204 }, 'empty_data', 'top sponsor data is empty'); 12634 } 12635 }) 12636 .fail(handleError); 12637 } 12638 12639 // MEMO: åãã¼ã¸ã®ãããã«åè³ã®ããã¼ã表示ãããµã³ãã«ã³ã¼ã 12640 // if(!(location.pathname =='/' || location.pathname == 'index.html') && $('#mainCol').length && !$('#guidesLogout').length) { 12641 // $('#mainCol').prepend('<a href="https://engineer-recruit.coincheck.com/" target="_blank" rel="noopener"><img src="/images/bnr-top-sample.png" alt="GuideSample" class="bnr-proplan" /></a>'); 12642 // } 12643 12644 // MEMO: ãµã¤ããã¼ã®åè³é¨åã®åãæ¿ããè¡ã 12645 if($('#sponsor').length) { 12646 $.ajax({ 12647 type: 'GET', 12648 url: '/sponsor_banner_sidebar', 12649 data: { sponsor: requestSponsor }, 12650 headers: { 12651 'X-CSRF-Token': $('meta[name="csrf-token"]').attr('content') 12652 } 12653 }).done(function(data){ 12654 if(data.sponsor && data.sponsor.sidebar) { 12655 sponsor_data = data['sponsor']['sidebar'] 12656 $('#sponsor').html('<a href=' + sponsor_data['link'] + ' target="_blank" rel="noopener"><img src=' + sponsor_data['image'] + ' alt=' + sponsor_data['name'] + ' class="bnr-proplan" /></a>'); 12657 sponsor = data['sponsor']['name'] 12658 imageName = sponsor_data['image_name'] 12659 12660 if(shouldTrackSponsorView()) { 12661 dataLayer.push({ 12662 event: 'sponsor', 12663 sponsorName: sponsor, 12664 sponsorImage: imageName 12665 }); 12666 } 12667 12668 $('#sponsor').on('click', function() { 12669 if(typeof dataLayer !== 'undefined') { 12670 dataLayer.push({ 12671 event: 'sponsor-sidebar', 12672 sponsorName: sponsor, 12673 sponsorImage: imageName 12674 }); 12675 } 12676 }); 12677 } else { 12678 // 空ãã¼ã¿ã¯failã¨ãã¦æ±ã 12679 handleError({ status: 204 }, 'empty_data', 'sidebar sponsor data is empty'); 12680 } 12681 }) 12682 .fail(handleError); 12683 } 12684 12685 // ããã¿ã¼ã«ããåè³ãã©ã³ãã ã§è¡¨ç¤ºãã 12686 if($('#footer-bnrs').length) { 12687 $.ajax({ 12688 type: 'GET', 12689 url: '/sponsor_footer', 12690 headers: { 12691 'X-CSRF-Token': $('meta[name="csrf-token"]').attr('content') 12692 } 12693 }).done(function(data){ 12694 $('#footer-bnrs').html(data['footer']) 12695
12696 $('.bnr-item').on('click', function() { 12697 if(typeof dataLayer !== 'undefined' && !!this.id) { 12698 dataLayer.push({ 12699 event: 'sponsor-footer', 12700 sponsorName: this.id 12701 }); 12702 } 12703 }); 12704 $('.bnr-item-text a').on('click', function() { 12705 if(typeof dataLayer !== 'undefined' && !!this.href) { 12706 dataLayer.push({ 12707 event: 'sponsor-footer', 12708 sponsorName: this.parentElement.parentElement.id, 12709 sponsorClickedLink: this.href 12710 }); 12711 } 12712 }); 12713 }) 12714 } 12715}); 12716 12717function getRequestSponsor() { 12718 let params = new URLSearchParams(document.location.search.substring(1)); 12719 return params.get("sponsor"); 12720}; 12721$(function () { 12722 $(document).mousedown(function(event) { 12723 if(!$(event.target).closest('#deleteAdsMessage').length && $('#deleteAdsMessage').css('display') == 'block') { 12724 $('#deleteAdsMessage').css('display','none'); 12725 $('#deleteAds').html('<i class="fas fa-times"></i>'); 12726 } 12727 }); 12728 let deletebutton = '<span id="deleteAds"><i class="fas fa-times"></i></span>'; 12729 let proplan = '<div id="deleteAdsMessage">Proãã©ã³ã§ã¯ããã¼é表示ã<br>å ¨ææ¤ç´¢ãªã©ã«å¯¾å¿ãã¦ãã¾ã<a href="/pro" class="deleteAdsMessageButton" target="_blank">15æ¥éãã©ã¤ã¢ã«</a></div>'; 12730 $('#toppage').append(proplan); 12731 $('#toppage').prepend( 12732 $(deletebutton).click(function(){ 12733 $('#deleteAdsMessage').css('display','block'); 12734 $('#deleteAds').html('<i class="fas fa-minus"></i>'); 12735 }) 12736 ); 12737}); 12738$(function() { 12739 var appear = false; 12740 var pagetop = $('#page_top'); 12741 $(window).scroll(function () { 12742 if ($(this).scrollTop() > 100) { //100pxã¹ã¯ãã¼ã«ããã 12743 if (appear == false) { 12744 appear = true; 12745 pagetop.stop().animate({ 12746 'bottom': '60px' //ä¸ãã30pxã®ä½ç½®ã« 12747 }, 300); //0.3ç§ããã¦ç¾ãã 12748 } 12749 } else { 12750 if (appear) { 12751 appear = false; 12752 pagetop.stop().animate({ 12753 'bottom': '-50px' //ä¸ãã-50pxã®ä½ç½®ã« 12754 }, 300); //0.3ç§ããã¦é ãã 12755 } 12756 } 12757 }); 12758 pagetop.click(function () { 12759 $('body, html').animate({ scrollTop: 0 }, 500); //0.5ç§ããã¦ãããã¸æ»ã 12760 return false; 12761 }); 12762 }); 12763$(function () { 12764 if($(".work-in-progress").length){ 12765 let firstWip = $(".work-in-progress").first() 12766 let wip = $(".work-in-progress").not(firstWip) 12767 wip.css('display', 'block') 12768 wip.before('<div class="work-in-progress-tooltip tooltip" data-tooltip="ãã®ã¢ã¤ã³ã³ãä»ãã¦ããã¬ã¤ãã¯ç¾å¨ä½æ¥ä¸ (WIP: Work In Progress) ã§ãã使¥ä¸ã®ã¬ã¤ãã¯ãããªãã«æç¨ã§ã¯ããã¾ãããä¸å®å ¨ãªæ å ±ãã¨ã©ã¼ãå«ã¾ãã¦ããå¯è½æ§ãããã¾ãã"></div>'); 12769 } 12770}); 12771/*! 12772 * jQuery JavaScript Library v3.7.0 12773 * https://jquery.com/ 12774 * 12775 * Copyright OpenJS Foundation and other contributors 12776 * Released under the MIT license 12777 * https://jquery.org/license 12778 * 12779 * Date: 2023-05-11T18:29Z 12780 */ 12781( function( global, factory ) { 12782 12783 "use strict"; 12784 12785 if ( typeof module === "object" && typeof module.exports === "object" ) { 12786 12787 // For CommonJS and CommonJS-like environments where a proper `window` 12788 // is present, execute the factory and get jQuery. 12789 // For environments that do not have a `window` with a `document` 12790 // (such as Node.js), expose a factory as module.exports. 12791 // This accentuates the need for the creation of a real `window`. 12792 // e.g. var jQuery = require("jquery")(window); 12793 // See ticket trac-14549 for more info. 12794 module.exports = global.document ? 12795 factory( global, true ) : 12796 function( w ) { 12797 if ( !w.document ) { 12798 throw new Error( "jQuery requires a window with a document" ); 12799 } 12800 return factory( w ); 12801 }; 12802 } else { 12803 factory( global ); 12804 } 12805 12806// Pass this if window is not defined yet 12807} )( typeof window !== "undefined" ? window : this, function( window, noGlobal ) { 12808 12809// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1 12810// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode 12811// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), str
vendor: 9,010 bytes, lines 12811-13186
12811ict mode should be common 12812// enough that all such attempts are guarded in a try block. 12813"use strict"; 12814 12815var arr = []; 12816 12817var getProto = Object.getPrototypeOf; 12818 12819var slice = arr.slice; 12820 12821var flat = arr.flat ? function( array ) { 12822 return arr.flat.call( array ); 12823} : function( array ) { 12824 return arr.concat.apply( [], array ); 12825}; 12826 12827 12828var push = arr.push; 12829 12830var indexOf = arr.indexOf; 12831 12832var class2type = {}; 12833 12834var toString = class2type.toString; 12835 12836var hasOwn = class2type.hasOwnProperty; 12837 12838var fnToString = hasOwn.toString; 12839 12840var ObjectFunctionString = fnToString.call( Object ); 12841 12842var support = {}; 12843 12844var isFunction = function isFunction( obj ) { 12845 12846 // Support: Chrome <=57, Firefox <=52 12847 // In some browsers, typeof returns "function" for HTML <object> elements 12848 // (i.e., `typeof document.createElement( "object" ) === "function"`). 12849 // We don't want to classify *any* DOM node as a function. 12850 // Support: QtWeb <=3.8.5, WebKit <=534.34, wkhtmltopdf tool <=0.12.5 12851 // Plus for old WebKit, typeof returns "function" for HTML collections 12852 // (e.g., `typeof document.getElementsByTagName("div") === "function"`). (gh-4756) 12853 return typeof obj === "function" && typeof obj.nodeType !== "number" && 12854 typeof obj.item !== "function"; 12855 }; 12856 12857 12858var isWindow = function isWindow( obj ) { 12859 return obj != null && obj === obj.window; 12860 }; 12861 12862 12863var document = window.document; 12864 12865 12866 12867 var preservedScriptAttributes = { 12868 type: true, 12869 src: true, 12870 nonce: true, 12871 noModule: true 12872 }; 12873 12874 function DOMEval( code, node, doc ) { 12875 doc = doc || document; 12876 12877 var i, val, 12878 script = doc.createElement( "script" ); 12879 12880 script.text = code; 12881 if ( node ) { 12882 for ( i in preservedScriptAttributes ) { 12883 12884 // Support: Firefox 64+, Edge 18+ 12885 // Some browsers don't support the "nonce" property on scripts. 12886 // On the other hand, just using `getAttribute` is not enough as 12887 // the `nonce` attribute is reset to an empty string whenever it 12888 // becomes browsing-context connected. 12889 // See https://github.com/whatwg/html/issues/2369 12890 // See https://html.spec.whatwg.org/#nonce-attributes 12891 // The `node.getAttribute` check was added for the sake of 12892 // `jQuery.globalEval` so that it can fake a nonce-containing node 12893 // via an object. 12894 val = node[ i ] || node.getAttribute && node.getAttribute( i ); 12895 if ( val ) { 12896 script.setAttribute( i, val ); 12897 } 12898 } 12899 } 12900 doc.head.appendChild( script ).parentNode.removeChild( script ); 12901 } 12902 12903 12904function toType( obj ) { 12905 if ( obj == null ) { 12906 return obj + ""; 12907 } 12908 12909 // Support: Android <=2.3 only (functionish RegExp) 12910 return typeof obj === "object" || typeof obj === "function" ? 12911 class2type[ toString.call( obj ) ] || "object" : 12912 typeof obj; 12913} 12914/* global Symbol */ 12915// Defining this global in .eslintrc.json would create a danger of using the global 12916// unguarded in another place, it seems safer to define global only for this module 12917 12918 12919 12920var version = "3.7.0", 12921 12922 rhtmlSuffix = /HTML$/i, 12923 12924 // Define a local copy of jQuery 12925 jQuery = function( selector, context ) { 12926 12927 // The jQuery object is actually just the init constructor 'enhanced' 12928 // Need init if jQuery is called (just allow error to be thrown if not included) 12929 return new jQuery.fn.init( selector, context ); 12930 }; 12931 12932jQuery.fn = jQuery.prototype = { 12933 12934 // The current version of jQuery being used 12935 jquery: version, 12936 12937 constructor: jQuery, 12938 12939 // The default length of a jQuery object is 0 12940 length: 0, 12941 12942 toArray: function() { 12943 return slice.call( this ); 12944 }, 12945 12946 // Get the Nth element in the matched element set OR 12947 // Get the whole matched element set as a clean array 12948 get: function( num ) { 12949 12950 // Return all the elements in a clean array 12951 if ( num == null ) { 12952 return slice.call( this ); 12953 } 12954 12955 // Return just the one element from the set 12956 return num < 0 ? this[ num + this.length ] : this[ num ]; 12957 }, 12958 12959 // Take an array of elements and push it onto the stack 12960 // (returning the new matched element set) 12961 pushStack: function( elems ) { 12962 12963 // Build a new jQuery matched element set 12964 var ret = jQuery.merge( this.constructor(), elems ); 12965 12966 // Add the old object onto the stack (as a reference) 12967 ret.prevObject = this; 12968 12969 // Return the newly-formed element set 12970 return ret; 12971 }, 12972 12973 // Execute a callback for every element in the matched set. 12974 each: function( callback ) { 12975 return jQuery.each( this, callback ); 12976 }, 12977 12978 map: function( callback ) { 12979 return this.pushStack( jQuery.map( this, function( elem, i ) { 12980 return callback.call( elem, i, elem ); 12981 } ) ); 12982 }, 12983 12984 slice: function() { 12985 return this.pushStack( slice.apply( this, arguments ) ); 12986 }, 12987 12988 first: function() { 12989 return this.eq( 0 ); 12990 }, 12991 12992 last: function() { 12993 return this.eq( -1 ); 12994 }, 12995 12996 even: function() { 12997 return this.pushStack( jQuery.grep( this, function( _elem, i ) { 12998 return ( i + 1 ) % 2; 12999 } ) ); 13000 }, 13001 13002 odd: function() { 13003 return this.pushStack( jQuery.grep( this, function( _elem, i ) { 13004 return i % 2; 13005 } ) ); 13006 }, 13007 13008 eq: function( i ) { 13009 var len = this.length, 13010 j = +i + ( i < 0 ? len : 0 ); 13011 return this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] ); 13012 }, 13013 13014 end: function() { 13015 return this.prevObject || this.constructor(); 13016 }, 13017 13018 // For internal use only. 13019 // Behaves like an Array's method, not like a jQuery method. 13020 push: push, 13021 sort: arr.sort, 13022 splice: arr.splice 13023}; 13024 13025jQuery.extend = jQuery.fn.extend = function() { 13026 var options, name, src, copy, copyIsArray, clone, 13027 target = arguments[ 0 ] || {}, 13028 i = 1, 13029 length = arguments.length, 13030 deep = false; 13031 13032 // Handle a deep copy situation 13033 if ( typeof target === "boolean" ) { 13034 deep = target; 13035 13036 // Skip the boolean and the target 13037 target = arguments[ i ] || {}; 13038 i++; 13039 } 13040 13041 // Handle case when target is a string or something (possible in deep copy) 13042 if ( typeof target !== "object" && !isFunction( target ) ) { 13043 target = {}; 13044 } 13045 13046 // Extend jQuery itself if only one argument is passed 13047 if ( i === length ) { 13048 target = this; 13049 i--; 13050 } 13051 13052 for ( ; i < length; i++ ) { 13053 13054 // Only deal with non-null/undefined values 13055 if ( ( options = arguments[ i ] ) != null ) { 13056 13057 // Extend the base object 13058 for ( name in options ) { 13059 copy = options[ name ]; 13060 13061 // Prevent Object.prototype pollution 13062 // Prevent never-ending loop 13063 if ( name === "__proto__" || target === copy ) { 13064 continue; 13065 } 13066 13067 // Recurse if we're merging plain objects or arrays 13068 if ( deep && copy && ( jQuery.isPlainObject( copy ) || 13069 ( copyIsArray = Array.isArray( copy ) ) ) ) { 13070 src = target[ name ]; 13071 13072 // Ensure proper type for the source value 13073 if ( copyIsArray && !Array.isArray( src ) ) { 13074 clone = []; 13075 } else if ( !copyIsArray && !jQuery.isPlainObject( src ) ) { 13076 clone = {}; 13077 } else { 13078 clone = src; 13079 } 13080 copyIsArray = false; 13081 13082 // Never move original objects, clone them 13083 target[ name ] = jQuery.extend( deep, clone, copy ); 13084 13085 // Don't bring in undefined values 13086 } else if ( copy !== undefined ) { 13087 target[ name ] = copy; 13088 } 13089 } 13090 } 13091 } 13092 13093 // Return the modified object 13094 return target; 13095}; 13096 13097jQuery.extend( { 13098 13099 // Unique for each copy of jQuery on the page 13100 expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ), 13101 13102 // Assume jQuery is ready without the ready module 13103 isReady: true, 13104 13105 error: function( msg ) { 13106 throw new Error( msg ); 13107 }, 13108 13109 noop: function() {}, 13110 13111 isPlainObject: function( obj ) { 13112 var proto, Ctor; 13113 13114 // Detect obvious negatives 13115 // Use toString instead of jQuery.type to catch host objects 13116 if ( !obj || toString.call( obj ) !== "[object Object]" ) { 13117 return false; 13118 } 13119 13120 proto = getProto( obj ); 13121 13122 // Objects with no prototype (e.g., `Object.create( null )`) are plain 13123 if ( !proto ) { 13124 return true; 13125 } 13126 13127 // Objects with prototype are plain iff they were constructed by a global Object function 13128 Ctor = hasOwn.call( proto, "constructor" ) && proto.constructor; 13129 return typeof Ctor === "function" && fnToString.call( Ctor ) === ObjectFunctionString; 13130 }, 13131 13132 isEmptyObject: function( obj ) { 13133 var name; 13134 13135 for ( name in obj ) { 13136 return false; 13137 } 13138 return true; 13139 }, 13140 13141 // Evaluates a script in a provided context; falls back to the global one 13142 // if not specified. 13143 globalEval: function( code, options, doc ) { 13144 DOMEval( code, { nonce: options && options.nonce }, doc ); 13145 }, 13146 13147 each: function( obj, callback ) { 13148 var length, i = 0; 13149 13150 if ( isArrayLike( obj ) ) { 13151 length = obj.length; 13152 for ( ; i < length; i++ ) { 13153 if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { 13154 break; 13155 } 13156 } 13157 } else { 13158 for ( i in obj ) { 13159 if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { 13160 break; 13161 } 13162 } 13163 } 13164 13165 return obj; 13166 }, 13167 13168 13169 // Retrieve the text value of an array of DOM nodes 13170 text: function( elem ) { 13171 var node, 13172 ret = "", 13173 i = 0, 13174 nodeType = elem.nodeType; 13175 13176 if ( !nodeType ) { 13177 13178 // If no nodeType, this is expected to be an array 13179 while ( ( node = elem[ i++ ] ) ) { 13180 13181 // Do not traverse comment nodes 13182 ret += jQuery.text( node ); 13183 } 13184 } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) { 13185 return elem.textContent; 13186 } else
vendor: 19,662 bytes, lines 13186-13899
13186if ( nodeType === 3 || nodeType === 4 ) { 13187 return elem.nodeValue; 13188 } 13189 13190 // Do not include comment or processing instruction nodes 13191 13192 return ret; 13193 }, 13194 13195 // results is for internal usage only 13196 makeArray: function( arr, results ) { 13197 var ret = results || []; 13198 13199 if ( arr != null ) { 13200 if ( isArrayLike( Object( arr ) ) ) { 13201 jQuery.merge( ret, 13202 typeof arr === "string" ? 13203 [ arr ] : arr 13204 ); 13205 } else { 13206 push.call( ret, arr ); 13207 } 13208 } 13209 13210 return ret; 13211 }, 13212 13213 inArray: function( elem, arr, i ) { 13214 return arr == null ? -1 : indexOf.call( arr, elem, i ); 13215 }, 13216 13217 isXMLDoc: function( elem ) { 13218 var namespace = elem && elem.namespaceURI, 13219 docElem = elem && ( elem.ownerDocument || elem ).documentElement; 13220 13221 // Assume HTML when documentElement doesn't yet exist, such as inside 13222 // document fragments. 13223 return !rhtmlSuffix.test( namespace || docElem && docElem.nodeName || "HTML" ); 13224 }, 13225 13226 // Support: Android <=4.0 only, PhantomJS 1 only 13227 // push.apply(_, arraylike) throws on ancient WebKit 13228 merge: function( first, second ) { 13229 var len = +second.length, 13230 j = 0, 13231 i = first.length; 13232 13233 for ( ; j < len; j++ ) { 13234 first[ i++ ] = second[ j ]; 13235 } 13236 13237 first.length = i; 13238 13239 return first; 13240 }, 13241 13242 grep: function( elems, callback, invert ) { 13243 var callbackInverse, 13244 matches = [], 13245 i = 0, 13246 length = elems.length, 13247 callbackExpect = !invert; 13248 13249 // Go through the array, only saving the items 13250 // that pass the validator function 13251 for ( ; i < length; i++ ) { 13252 callbackInverse = !callback( elems[ i ], i ); 13253 if ( callbackInverse !== callbackExpect ) { 13254 matches.push( elems[ i ] ); 13255 } 13256 } 13257 13258 return matches; 13259 }, 13260 13261 // arg is for internal usage only 13262 map: function( elems, callback, arg ) { 13263 var length, value, 13264 i = 0, 13265 ret = []; 13266 13267 // Go through the array, translating each of the items to their new values 13268 if ( isArrayLike( elems ) ) { 13269 length = elems.length; 13270 for ( ; i < length; i++ ) { 13271 value = callback( elems[ i ], i, arg ); 13272 13273 if ( value != null ) { 13274 ret.push( value ); 13275 } 13276 } 13277 13278 // Go through every key on the object, 13279 } else { 13280 for ( i in elems ) { 13281 value = callback( elems[ i ], i, arg ); 13282 13283 if ( value != null ) { 13284 ret.push( value ); 13285 } 13286 } 13287 } 13288 13289 // Flatten any nested arrays 13290 return flat( ret ); 13291 }, 13292 13293 // A global GUID counter for objects 13294 guid: 1, 13295 13296 // jQuery.support is not used in Core but other projects attach their 13297 // properties to it so it needs to exist. 13298 support: support 13299} ); 13300 13301if ( typeof Symbol === "function" ) { 13302 jQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ]; 13303} 13304 13305// Populate the class2type map 13306jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ), 13307 function( _i, name ) { 13308 class2type[ "[object " + name + "]" ] = name.toLowerCase(); 13309 } ); 13310 13311function isArrayLike( obj ) { 13312 13313 // Support: real iOS 8.2 only (not reproducible in simulator) 13314 // `in` check used to prevent JIT error (gh-2145) 13315 // hasOwn isn't used here due to false negatives 13316 // regarding Nodelist length in IE 13317 var length = !!obj && "length" in obj && obj.length, 13318 type = toType( obj ); 13319 13320 if ( isFunction( obj ) || isWindow( obj ) ) { 13321 return false; 13322 } 13323 13324 return type === "array" || length === 0 || 13325 typeof length === "number" && length > 0 && ( length - 1 ) in obj; 13326} 13327 13328 13329function nodeName( elem, name ) { 13330 13331 return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); 13332 13333} 13334var pop = arr.pop; 13335 13336 13337var sort = arr.sort; 13338 13339 13340var splice = arr.splice; 13341 13342 13343var whitespace = "[\\x20\\t\\r\\n\\f]"; 13344 13345 13346var rtrimCSS = new RegExp( 13347 "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", 13348 "g" 13349); 13350 13351 13352 13353 13354// Note: an element does not contain itself 13355jQuery.contains = function( a, b ) { 13356 var bup = b && b.parentNode; 13357 13358 return a === bup || !!( bup && bup.nodeType === 1 && ( 13359 13360 // Support: IE 9 - 11+ 13361 // IE doesn't have `contains` on SVG. 13362 a.contains ? 13363 a.contains( bup ) : 13364 a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16 13365 ) ); 13366}; 13367 13368 13369 13370 13371// CSS string/identifier serialization 13372// https://drafts.csswg.org/cssom/#common-serializing-idioms 13373var rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\x80-\uFFFF\w-]/g; 13374 13375function fcssescape( ch, asCodePoint ) { 13376 if ( asCodePoint ) { 13377 13378 // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER 13379 if ( ch === "\0" ) { 13380 return "\uFFFD"; 13381 } 13382 13383 // Control characters and (dependent upon position) numbers get escaped as code points 13384 return ch.slice( 0, -1 ) + "\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " "; 13385 } 13386 13387 // Other potentially-special ASCII characters get backslash-escaped 13388 return "\\" + ch; 13389} 13390 13391jQuery.escapeSelector = function( sel ) { 13392 return ( sel + "" ).replace( rcssescape, fcssescape ); 13393}; 13394 13395 13396 13397 13398var preferredDoc = document, 13399 pushNative = push; 13400 13401( function() { 13402 13403var i, 13404 Expr, 13405 outermostContext, 13406 sortInput, 13407 hasDuplicate, 13408 push = pushNative, 13409 13410 // Local document vars 13411 document, 13412 documentElement, 13413 documentIsHTML, 13414 rbuggyQSA, 13415 matches, 13416 13417 // Instance-specific data 13418 expando = jQuery.expando, 13419 dirruns = 0, 13420 done = 0, 13421 classCache = createCache(), 13422 tokenCache = createCache(), 13423 compilerCache = createCache(), 13424 nonnativeSelectorCache = createCache(), 13425 sortOrder = function( a, b ) { 13426 if ( a === b ) { 13427 hasDuplicate = true; 13428 } 13429 return 0; 13430 }, 13431 13432 booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|" + 13433 "loop|multiple|open|readonly|required|scoped", 13434 13435 // Regular expressions 13436 13437 // https://www.w3.org/TR/css-syntax-3/#ident-token-diagram 13438 identifier = "(?:\\\\[\\da-fA-F]{1,6}" + whitespace + 13439 "?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+", 13440 13441 // Attribute selectors: https://www.w3.org/TR/selectors/#attribute-selectors 13442 attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace + 13443 13444 // Operator (capture 2) 13445 "*([*^$|!~]?=)" + whitespace + 13446 13447 // "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]" 13448 "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + 13449 whitespace + "*\\]", 13450 13451 pseudos = ":(" + identifier + ")(?:\\((" + 13452 13453 // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments: 13454 // 1. quoted (capture 3; capture 4 or capture 5) 13455 "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" + 13456 13457 // 2. simple (capture 6) 13458 "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" + 13459 13460 // 3. anything else (capture 2) 13461 ".*" + 13462 ")\\)|)", 13463 13464 // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter 13465 rwhitespace = new RegExp( whitespace + "+", "g" ), 13466 13467 rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ), 13468 rleadingCombinator = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + 13469 whitespace + "*" ), 13470 rdescend = new RegExp( whitespace + "|>" ), 13471 13472 rpseudo = new RegExp( pseudos ), 13473 ridentifier = new RegExp( "^" + identifier + "$" ), 13474 13475 matchExpr = { 13476 ID: new RegExp( "^#(" + identifier + ")" ), 13477 CLASS: new RegExp( "^\\.(" + identifier + ")" ), 13478 TAG: new RegExp( "^(" + identifier + "|[*])" ), 13479 ATTR: new RegExp( "^" + attributes ), 13480 PSEUDO: new RegExp( "^" + pseudos ), 13481 CHILD: new RegExp( 13482 "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + 13483 whitespace + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + 13484 whitespace + "*(\\d+)|))" + whitespace + "*\\)|)", "i" ), 13485 bool: new RegExp( "^(?:" + booleans + ")$", "i" ), 13486 13487 // For use in libraries implementing .is() 13488 // We use this for POS matching in `select` 13489 needsContext: new RegExp( "^" + whitespace + 13490 "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + whitespace + 13491 "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" ) 13492 }, 13493 13494 rinputs = /^(?:input|select|textarea|button)$/i, 13495 rheader = /^h\d$/i, 13496 13497 // Easily-parseable/retrievable ID or TAG or CLASS selectors 13498 rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, 13499 13500 rsibling = /[+~]/, 13501 13502 // CSS escapes 13503 // https://www.w3.org/TR/CSS21/syndata.html#escaped-characters 13504 runescape = new RegExp( "\\\\[\\da-fA-F]{1,6}" + whitespace + 13505 "?|\\\\([^\\r\\n\\f])", "g" ), 13506 funescape = function( escape, nonHex ) { 13507 var high = "0x" + escape.slice( 1 ) - 0x10000; 13508 13509 if ( nonHex ) { 13510 13511 // Strip the backslash prefix from a non-hex escape sequence 13512 return nonHex; 13513 } 13514 13515 // Replace a hexadecimal escape sequence with the encoded Unicode code point 13516 // Support: IE <=11+ 13517 // For values outside the Basic Multilingual Plane (BMP), manually construct a 13518 // surrogate pair 13519 return high < 0 ? 13520 String.fromCharCode( high + 0x10000 ) : 13521 String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 ); 13522 }, 13523 13524 // Used for iframes; see `setDocument`. 13525 // Support: IE 9 - 11+, Edge 12 - 18+ 13526 // Removing the function wrapper causes a "Permission Denied" 13527 // error in IE/Edge. 13528 unloadHandler = function() { 13529 setDocument(); 13530 }, 13531 13532 inDisabledFieldset = addCombinator( 13533 function( elem ) { 13534 return elem.disabled === true && nodeName( elem, "fieldset" ); 13535 }, 13536 { dir: "parentNode", next: "legend" } 13537 ); 13538 13539// Support: IE <=9 only 13540// Accessing document.activeElement can throw unexpectedly 13541// https://bugs.jquery.com/ticket/13393 13542function safeActiveElement() { 13543 try { 13544 return document.activeElement; 13545 } catch ( err ) { } 13546} 13547 13548// Optimize for push.apply( _, NodeList ) 13549try { 13550 push.apply( 13551 ( arr = slice.call( preferredDoc.childNodes ) ), 13552 preferredDoc.childNodes 13553 ); 13554 13555 // Support: Android <=4.0 13556 // Detect silently failing push.apply 13557 // eslint-disable-next-line no-unused-expressions 13558 arr[ preferredDoc.childNodes.length ].nodeType; 13559} catch ( e ) { 13560 push = { 13561 apply: function( target, els ) { 13562 pushNative.apply( target, slice.call( els ) ); 13563 }, 13564 call: function( target ) { 13565 pushNative.apply( target, slice.call( arguments, 1 ) ); 13566 } 13567 }; 13568} 13569 13570function find( selector, context, results, seed ) { 13571 var m, i, elem, nid, match, groups, newSelector, 13572 newContext = context && context.ownerDocument, 13573 13574 // nodeType defaults to 9, since context defaults to document 13575 nodeType = context ? context.nodeType : 9; 13576 13577 results = results || []; 13578 13579 // Return early from calls with invalid selector or context 13580 if ( typeof selector !== "string" || !selector || 13581 nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) { 13582 13583 return results; 13584 } 13585 13586 // Try to shortcut find operations (as opposed to filters) in HTML documents 13587 if ( !seed ) { 13588 setDocument( context ); 13589 context = context || document; 13590 13591 if ( documentIsHTML ) { 13592 13593 // If the selector is sufficiently simple, try using a "get*By*" DOM method 13594 // (excepting DocumentFragment context, where the methods don't exist) 13595 if ( nodeType !== 11 && ( match = rquickExpr.exec( selector ) ) ) { 13596 13597 // ID selector 13598 if ( ( m = match[ 1 ] ) ) { 13599 13600 // Document context 13601 if ( nodeType === 9 ) { 13602 if ( ( elem = context.getElementById( m ) ) ) { 13603 13604 // Support: IE 9 only 13605 // getElementById can match elements by name instead of ID 13606 if ( elem.id === m ) { 13607 push.call( results, elem ); 13608 return results; 13609 } 13610 } else { 13611 return results; 13612 } 13613 13614 // Element context 13615 } else { 13616 13617 // Support: IE 9 only 13618 // getElementById can match elements by name instead of ID 13619 if ( newContext && ( elem = newContext.getElementById( m ) ) && 13620 find.contains( context, elem ) && 13621 elem.id === m ) { 13622 13623 push.call( results, elem ); 13624 return results; 13625 } 13626 } 13627 13628 // Type selector 13629 } else if ( match[ 2 ] ) { 13630 push.apply( results, context.getElementsByTagName( selector ) ); 13631 return results; 13632 13633 // Class selector 13634 } else if ( ( m = match[ 3 ] ) && context.getElementsByClassName ) { 13635 push.apply( results, context.getElementsByClassName( m ) ); 13636 return results; 13637 } 13638 } 13639 13640 // Take advantage of querySelectorAll 13641 if ( !nonnativeSelectorCache[ selector + " " ] && 13642 ( !rbuggyQSA || !rbuggyQSA.test( selector ) ) ) { 13643 13644 newSelector = selector; 13645 newContext = context; 13646 13647 // qSA considers elements outside a scoping root when evaluating child or 13648 // descendant combinators, which is not what we want. 13649 // In such cases, we work around the behavior by prefixing every selector in the 13650 // list with an ID selector referencing the scope context. 13651 // The technique has to be used as well when a leading combinator is used 13652 // as such selectors are not recognized by querySelectorAll. 13653 // Thanks to Andrew Dupont for this technique. 13654 if ( nodeType === 1 && 13655 ( rdescend.test( selector ) || rleadingCombinator.test( selector ) ) ) { 13656 13657 // Expand context for sibling selectors 13658 newContext = rsibling.test( selector ) && testContext( context.parentNode ) || 13659 context; 13660 13661 // We can use :scope instead of the ID hack if the browser 13662 // supports it & if we're not changing the context. 13663 // Support: IE 11+, Edge 17 - 18+ 13664 // IE/Edge sometimes throw a "Permission denied" error when 13665 // strict-comparing two documents; shallow comparisons work. 13666 // eslint-disable-next-line eqeqeq 13667 if ( newContext != context || !support.scope ) { 13668 13669 // Capture the context ID, setting it first if necessary 13670 if ( ( nid = context.getAttribute( "id" ) ) ) { 13671 nid = jQuery.escapeSelector( nid ); 13672 } else { 13673 context.setAttribute( "id", ( nid = expando ) ); 13674 } 13675 } 13676 13677 // Prefix every selector in the list 13678 groups = tokenize( selector ); 13679 i = groups.length; 13680 while ( i-- ) { 13681 groups[ i ] = ( nid ? "#" + nid : ":scope" ) + " " + 13682 toSelector( groups[ i ] ); 13683 } 13684 newSelector = groups.join( "," ); 13685 } 13686 13687 try { 13688 push.apply( results, 13689 newContext.querySelectorAll( newSelector ) 13690 ); 13691 return results; 13692 } catch ( qsaError ) { 13693 nonnativeSelectorCache( selector, true ); 13694 } finally { 13695 if ( nid === expando ) { 13696 context.removeAttribute( "id" ); 13697 } 13698 } 13699 } 13700 } 13701 } 13702 13703 // All others 13704 return select( selector.replace( rtrimCSS, "$1" ), context, results, seed ); 13705} 13706 13707/** 13708 * Create key-value caches of limited size 13709 * @returns {function(string, object)} Returns the Object data after storing it on itself with 13710 * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength) 13711 * deleting the oldest entry 13712 */ 13713function createCache() { 13714 var keys = []; 13715 13716 function cache( key, value ) { 13717 13718 // Use (key + " ") to avoid collision with native prototype properties 13719 // (see https://github.com/jquery/sizzle/issues/157) 13720 if ( keys.push( key + " " ) > Expr.cacheLength ) { 13721 13722 // Only keep the most recent entries 13723 delete cache[ keys.shift() ]; 13724 } 13725 return ( cache[ key + " " ] = value ); 13726 } 13727 return cache; 13728} 13729 13730/** 13731 * Mark a function for special use by jQuery selector module 13732 * @param {Function} fn The function to mark 13733 */ 13734function markFunction( fn ) { 13735 fn[ expando ] = true; 13736 return fn; 13737} 13738 13739/** 13740 * Support testing using an element 13741 * @param {Function} fn Passed the created element and returns a boolean result 13742 */ 13743function assert( fn ) { 13744 var el = document.createElement( "fieldset" ); 13745 13746 try { 13747 return !!fn( el ); 13748 } catch ( e ) { 13749 return false; 13750 } finally { 13751 13752 // Remove from its parent by default 13753 if ( el.parentNode ) { 13754 el.parentNode.removeChild( el ); 13755 } 13756 13757 // release memory in IE 13758 el = null; 13759 } 13760} 13761 13762/** 13763 * Returns a function to use in pseudos for input types 13764 * @param {String} type 13765 */ 13766function createInputPseudo( type ) { 13767 return function( elem ) { 13768 return nodeName( elem, "input" ) && elem.type === type; 13769 }; 13770} 13771 13772/** 13773 * Returns a function to use in pseudos for buttons 13774 * @param {String} type 13775 */ 13776function createButtonPseudo( type ) { 13777 return function( elem ) { 13778 return ( nodeName( elem, "input" ) || nodeName( elem, "button" ) ) && 13779 elem.type === type; 13780 }; 13781} 13782 13783/** 13784 * Returns a function to use in pseudos for :enabled/:disabled 13785 * @param {Boolean} disabled true for :disabled; false for :enabled 13786 */ 13787function createDisabledPseudo( disabled ) { 13788 13789 // Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable 13790 return function( elem ) { 13791 13792 // Only certain elements can match :enabled or :disabled 13793 // https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled 13794 // https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled 13795 if ( "form" in elem ) { 13796 13797 // Check for inherited disabledness on relevant non-disabled elements: 13798 // * listed form-associated elements in a disabled fieldset 13799 // https://html.spec.whatwg.org/multipage/forms.html#category-listed 13800 // https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled 13801 // * option elements in a disabled optgroup 13802 // https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled 13803 // All such elements have a "form" property. 13804 if ( elem.parentNode && elem.disabled === false ) { 13805 13806 // Option elements defer to a parent optgroup if present 13807 if ( "label" in elem ) { 13808 if ( "label" in elem.parentNode ) { 13809 return elem.parentNode.disabled === disabled; 13810 } else { 13811 return elem.disabled === disabled; 13812 } 13813 } 13814 13815 // Support: IE 6 - 11+ 13816 // Use the isDisabled shortcut property to check for disabled fieldset ancestors 13817 return elem.isDisabled === disabled || 13818 13819 // Where there is no isDisabled, check manually 13820 elem.isDisabled !== !disabled && 13821 inDisabledFieldset( elem ) === disabled; 13822 } 13823 13824 return elem.disabled === disabled; 13825 13826 // Try to winnow out elements that can't be disabled before trusting the disabled property. 13827 // Some victims get caught in our net (label, legend, menu, track), but it shouldn't 13828 // even exist on them, let alone have a boolean value. 13829 } else if ( "label" in elem ) { 13830 return elem.disabled === disabled; 13831 } 13832 13833 // Remaining elements are neither :enabled nor :disabled 13834 return false; 13835 }; 13836} 13837 13838/** 13839 * Returns a function to use in pseudos for positionals 13840 * @param {Function} fn 13841 */ 13842function createPositionalPseudo( fn ) { 13843 return markFunction( function( argument ) { 13844 argument = +argument; 13845 return markFunction( function( seed, matches ) { 13846 var j, 13847 matchIndexes = fn( [], seed.length, argument ), 13848 i = matchIndexes.length; 13849 13850 // Match elements found at the specified indexes 13851 while ( i-- ) { 13852 if ( seed[ ( j = matchIndexes[ i ] ) ] ) { 13853 seed[ j ] = !( matches[ j ] = seed[ j ] ); 13854 } 13855 } 13856 } ); 13857 } ); 13858} 13859 13860/** 13861 * Checks a node for validity as a jQuery selector context 13862 * @param {Element|Object=} context 13863 * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value 13864 */ 13865function testContext( context ) { 13866 return context && typeof context.getElementsByTagName !== "undefined" && context; 13867} 13868 13869/** 13870 * Sets document-related variables once based on the current document 13871 * @param {Element|Object} [node] An element or document object to use to set the document 13872 * @returns {Object} Returns the current document 13873 */ 13874function setDocument( node ) { 13875 var subWindow, 13876 doc = node ? node.ownerDocument || node : preferredDoc; 13877 13878 // Return early if doc is invalid or already selected 13879 // Support: IE 11+, Edge 17 - 18+ 13880 // IE/Edge sometimes throw a "Permission denied" error when strict-comparing 13881 // two documents; shallow comparisons work. 13882 // eslint-disable-next-line eqeqeq 13883 if ( doc == document || doc.nodeType !== 9 || !doc.documentElement ) { 13884 return document; 13885 } 13886 13887 // Update global variables 13888 document = doc; 13889 documentElement = document.documentElement; 13890 documentIsHTML = !jQuery.isXMLDoc( document ); 13891 13892 // Support: iOS 7 only, IE 9 - 11+ 13893 // Older browsers didn't support unprefixed `matches`. 13894 matches = documentElement.matches || 13895 documentElement.webkitMatchesSelector || 13896 documentElement.msMatchesSelector; 13897 13898 // Support: IE 9 - 11+, Edge 12 - 18+ 13899 // Accessing iframe documents after unload throws "permission denied" errors
13899 (see trac-13936) 13900 // Support: IE 11+, Edge 17 - 18+ 13901 // IE/Edge sometimes throw a "Permission denied" error when strict-comparing 13902 // two documents; shallow comparisons work. 13903 // eslint-disable-next-line eqeqeq 13904 if (
vendor: 44,049 bytes, lines 13904-15467
13904preferredDoc != document && 13905 ( subWindow = document.defaultView ) && subWindow.top !== subWindow ) { 13906 13907 // Support: IE 9 - 11+, Edge 12 - 18+ 13908 subWindow.addEventListener( "unload", unloadHandler ); 13909 } 13910 13911 // Support: IE <10 13912 // Check if getElementById returns elements by name 13913 // The broken getElementById methods don't pick up programmatically-set names, 13914 // so use a roundabout getElementsByName test 13915 support.getById = assert( function( el ) { 13916 documentElement.appendChild( el ).id = jQuery.expando; 13917 return !document.getElementsByName || 13918 !document.getElementsByName( jQuery.expando ).length; 13919 } ); 13920 13921 // Support: IE 9 only 13922 // Check to see if it's possible to do matchesSelector 13923 // on a disconnected node. 13924 support.disconnectedMatch = assert( function( el ) { 13925 return matches.call( el, "*" ); 13926 } ); 13927 13928 // Support: IE 9 - 11+, Edge 12 - 18+ 13929 // IE/Edge don't support the :scope pseudo-class. 13930 support.scope = assert( function() { 13931 return document.querySelectorAll( ":scope" ); 13932 } ); 13933 13934 // Support: Chrome 105 - 111 only, Safari 15.4 - 16.3 only 13935 // Make sure the `:has()` argument is parsed unforgivingly. 13936 // We include `*` in the test to detect buggy implementations that are 13937 // _selectively_ forgiving (specifically when the list includes at least 13938 // one valid selector). 13939 // Note that we treat complete lack of support for `:has()` as if it were 13940 // spec-compliant support, which is fine because use of `:has()` in such 13941 // environments will fail in the qSA path and fall back to jQuery traversal 13942 // anyway. 13943 support.cssHas = assert( function() { 13944 try { 13945 document.querySelector( ":has(*,:jqfake)" ); 13946 return false; 13947 } catch ( e ) { 13948 return true; 13949 } 13950 } ); 13951 13952 // ID filter and find 13953 if ( support.getById ) { 13954 Expr.filter.ID = function( id ) { 13955 var attrId = id.replace( runescape, funescape ); 13956 return function( elem ) { 13957 return elem.getAttribute( "id" ) === attrId; 13958 }; 13959 }; 13960 Expr.find.ID = function( id, context ) { 13961 if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { 13962 var elem = context.getElementById( id ); 13963 return elem ? [ elem ] : []; 13964 } 13965 }; 13966 } else { 13967 Expr.filter.ID = function( id ) { 13968 var attrId = id.replace( runescape, funescape ); 13969 return function( elem ) { 13970 var node = typeof elem.getAttributeNode !== "undefined" && 13971 elem.getAttributeNode( "id" ); 13972 return node && node.value === attrId; 13973 }; 13974 }; 13975 13976 // Support: IE 6 - 7 only 13977 // getElementById is not reliable as a find shortcut 13978 Expr.find.ID = function( id, context ) { 13979 if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { 13980 var node, i, elems, 13981 elem = context.getElementById( id ); 13982 13983 if ( elem ) { 13984 13985 // Verify the id attribute 13986 node = elem.getAttributeNode( "id" ); 13987 if ( node && node.value === id ) { 13988 return [ elem ]; 13989 } 13990 13991 // Fall back on getElementsByName 13992 elems = context.getElementsByName( id ); 13993 i = 0; 13994 while ( ( elem = elems[ i++ ] ) ) { 13995 node = elem.getAttributeNode( "id" ); 13996 if ( node && node.value === id ) { 13997 return [ elem ]; 13998 } 13999 } 14000 } 14001 14002 return []; 14003 } 14004 }; 14005 } 14006 14007 // Tag 14008 Expr.find.TAG = function( tag, context ) { 14009 if ( typeof context.getElementsByTagName !== "undefined" ) { 14010 return context.getElementsByTagName( tag ); 14011 14012 // DocumentFragment nodes don't have gEBTN 14013 } else { 14014 return context.querySelectorAll( tag ); 14015 } 14016 }; 14017 14018 // Class 14019 Expr.find.CLASS = function( className, context ) { 14020 if ( typeof context.getElementsByClassName !== "undefined" && documentIsHTML ) { 14021 return context.getElementsByClassName( className ); 14022 } 14023 }; 14024 14025 /* QSA/matchesSelector 14026 ---------------------------------------------------------------------- */ 14027 14028 // QSA and matchesSelector support 14029 14030 rbuggyQSA = []; 14031 14032 // Build QSA regex 14033 // Regex strategy adopted from Diego Perini 14034 assert( function( el ) { 14035 14036 var input; 14037 14038 documentElement.appendChild( el ).innerHTML = 14039 "<a id='" + expando + "' href='' disabled='disabled'></a>" + 14040 "<select id='" + expando + "-\r\\' disabled='disabled'>" + 14041 "<option selected=''></option></select>"; 14042 14043 // Support: iOS <=7 - 8 only 14044 // Boolean attributes and "value" are not treated correctly in some XML documents 14045 if ( !el.querySelectorAll( "[selected]" ).length ) { 14046 rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" ); 14047 } 14048 14049 // Support: iOS <=7 - 8 only 14050 if ( !el.querySelectorAll( "[id~=" + expando + "-]" ).length ) { 14051 rbuggyQSA.push( "~=" ); 14052 } 14053 14054 // Support: iOS 8 only 14055 // https://bugs.webkit.org/show_bug.cgi?id=136851 14056 // In-page `selector#id sibling-combinator selector` fails 14057 if ( !el.querySelectorAll( "a#" + expando + "+*" ).length ) { 14058 rbuggyQSA.push( ".#.+[+~]" ); 14059 } 14060 14061 // Support: Chrome <=105+, Firefox <=104+, Safari <=15.4+ 14062 // In some of the document kinds, these selectors wouldn't work natively. 14063 // This is probably OK but for backwards compatibility we want to maintain 14064 // handling them through jQuery traversal in jQuery 3.x. 14065 if ( !el.querySelectorAll( ":checked" ).length ) { 14066 rbuggyQSA.push( ":checked" ); 14067 } 14068 14069 // Support: Windows 8 Native Apps 14070 // The type and name attributes are restricted during .innerHTML assignment 14071 input = document.createElement( "input" ); 14072 input.setAttribute( "type", "hidden" ); 14073 el.appendChild( input ).setAttribute( "name", "D" ); 14074 14075 // Support: IE 9 - 11+ 14076 // IE's :disabled selector does not pick up the children of disabled fieldsets 14077 // Support: Chrome <=105+, Firefox <=104+, Safari <=15.4+ 14078 // In some of the document kinds, these selectors wouldn't work natively. 14079 // This is probably OK but for backwards compatibility we want to maintain 14080 // handling them through jQuery traversal in jQuery 3.x. 14081 documentElement.appendChild( el ).disabled = true; 14082 if ( el.querySelectorAll( ":disabled" ).length !== 2 ) { 14083 rbuggyQSA.push( ":enabled", ":disabled" ); 14084 } 14085 14086 // Support: IE 11+, Edge 15 - 18+ 14087 // IE 11/Edge don't find elements on a `[name='']` query in some cases. 14088 // Adding a temporary attribute to the document before the selection works 14089 // around the issue. 14090 // Interestingly, IE 10 & older don't seem to have the issue. 14091 input = document.createElement( "input" ); 14092 input.setAttribute( "name", "" ); 14093 el.appendChild( input ); 14094 if ( !el.querySelectorAll( "[name='']" ).length ) { 14095 rbuggyQSA.push( "\\[" + whitespace + "*name" + whitespace + "*=" + 14096 whitespace + "*(?:''|\"\")" ); 14097 } 14098 } ); 14099 14100 if ( !support.cssHas ) { 14101 14102 // Support: Chrome 105 - 110+, Safari 15.4 - 16.3+ 14103 // Our regular `try-catch` mechanism fails to detect natively-unsupported 14104 // pseudo-classes inside `:has()` (such as `:has(:contains("Foo"))`) 14105 // in browsers that parse the `:has()` argument as a forgiving selector list. 14106 // https://drafts.csswg.org/selectors/#relational now requires the argument 14107 // to be parsed unforgivingly, but browsers have not yet fully adjusted. 14108 rbuggyQSA.push( ":has" ); 14109 } 14110 14111 rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join( "|" ) ); 14112 14113 /* Sorting 14114 ---------------------------------------------------------------------- */ 14115 14116 // Document order sorting 14117 sortOrder = function( a, b ) { 14118 14119 // Flag for duplicate removal 14120 if ( a === b ) { 14121 hasDuplicate = true; 14122 return 0; 14123 } 14124 14125 // Sort on method existence if only one input has compareDocumentPosition 14126 var compare = !a.compareDocumentPosition - !b.compareDocumentPosition; 14127 if ( compare ) { 14128 return compare; 14129 } 14130 14131 // Calculate position if both inputs belong to the same document 14132 // Support: IE 11+, Edge 17 - 18+ 14133 // IE/Edge sometimes throw a "Permission denied" error when strict-comparing 14134 // two documents; shallow comparisons work. 14135 // eslint-disable-next-line eqeqeq 14136 compare = ( a.ownerDocument || a ) == ( b.ownerDocument || b ) ? 14137 a.compareDocumentPosition( b ) : 14138 14139 // Otherwise we know they are disconnected 14140 1; 14141 14142 // Disconnected nodes 14143 if ( compare & 1 || 14144 ( !support.sortDetached && b.compareDocumentPosition( a ) === compare ) ) { 14145 14146 // Choose the first element that is related to our preferred document 14147 // Support: IE 11+, Edge 17 - 18+ 14148 // IE/Edge sometimes throw a "Permission denied" error when strict-comparing 14149 // two documents; shallow comparisons work. 14150 // eslint-disable-next-line eqeqeq 14151 if ( a === document || a.ownerDocument == preferredDoc && 14152 find.contains( preferredDoc, a ) ) { 14153 return -1; 14154 } 14155 14156 // Support: IE 11+, Edge 17 - 18+ 14157 // IE/Edge sometimes throw a "Permission denied" error when strict-comparing 14158 // two documents; shallow comparisons work. 14159 // eslint-disable-next-line eqeqeq 14160 if ( b === document || b.ownerDocument == preferredDoc && 14161 find.contains( preferredDoc, b ) ) { 14162 return 1; 14163 } 14164 14165 // Maintain original order 14166 return sortInput ? 14167 ( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) : 14168 0; 14169 } 14170 14171 return compare & 4 ? -1 : 1; 14172 }; 14173 14174 return document; 14175} 14176 14177find.matches = function( expr, elements ) { 14178 return find( expr, null, null, elements ); 14179}; 14180 14181find.matchesSelector = function( elem, expr ) { 14182 setDocument( elem ); 14183 14184 if ( documentIsHTML && 14185 !nonnativeSelectorCache[ expr + " " ] && 14186 ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) { 14187 14188 try { 14189 var ret = matches.call( elem, expr ); 14190 14191 // IE 9's matchesSelector returns false on disconnected nodes 14192 if ( ret || support.disconnectedMatch || 14193 14194 // As well, disconnected nodes are said to be in a document 14195 // fragment in IE 9 14196 elem.document && elem.document.nodeType !== 11 ) { 14197 return ret; 14198 } 14199 } catch ( e ) { 14200 nonnativeSelectorCache( expr, true ); 14201 } 14202 } 14203 14204 return find( expr, document, null, [ elem ] ).length > 0; 14205}; 14206 14207find.contains = function( context, elem ) { 14208 14209 // Set document vars if needed 14210 // Support: IE 11+, Edge 17 - 18+ 14211 // IE/Edge sometimes throw a "Permission denied" error when strict-comparing 14212 // two documents; shallow comparisons work. 14213 // eslint-disable-next-line eqeqeq 14214 if ( ( context.ownerDocument || context ) != document ) { 14215 setDocument( context ); 14216 } 14217 return jQuery.contains( context, elem ); 14218}; 14219 14220 14221find.attr = function( elem, name ) { 14222 14223 // Set document vars if needed 14224 // Support: IE 11+, Edge 17 - 18+ 14225 // IE/Edge sometimes throw a "Permission denied" error when strict-comparing 14226 // two documents; shallow comparisons work. 14227 // eslint-disable-next-line eqeqeq 14228 if ( ( elem.ownerDocument || elem ) != document ) { 14229 setDocument( elem ); 14230 } 14231 14232 var fn = Expr.attrHandle[ name.toLowerCase() ], 14233 14234 // Don't get fooled by Object.prototype properties (see trac-13807) 14235 val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ? 14236 fn( elem, name, !documentIsHTML ) : 14237 undefined; 14238 14239 if ( val !== undefined ) { 14240 return val; 14241 } 14242 14243 return elem.getAttribute( name ); 14244}; 14245 14246find.error = function( msg ) { 14247 throw new Error( "Syntax error, unrecognized expression: " + msg ); 14248}; 14249 14250/** 14251 * Document sorting and removing duplicates 14252 * @param {ArrayLike} results 14253 */ 14254jQuery.uniqueSort = function( results ) { 14255 var elem, 14256 duplicates = [], 14257 j = 0, 14258 i = 0; 14259 14260 // Unless we *know* we can detect duplicates, assume their presence 14261 // 14262 // Support: Android <=4.0+ 14263 // Testing for detecting duplicates is unpredictable so instead assume we can't 14264 // depend on duplicate detection in all browsers without a stable sort. 14265 hasDuplicate = !support.sortStable; 14266 sortInput = !support.sortStable && slice.call( results, 0 ); 14267 sort.call( results, sortOrder ); 14268 14269 if ( hasDuplicate ) { 14270 while ( ( elem = results[ i++ ] ) ) { 14271 if ( elem === results[ i ] ) { 14272 j = duplicates.push( i ); 14273 } 14274 } 14275 while ( j-- ) { 14276 splice.call( results, duplicates[ j ], 1 ); 14277 } 14278 } 14279 14280 // Clear input after sorting to release objects 14281 // See https://github.com/jquery/sizzle/pull/225 14282 sortInput = null; 14283 14284 return results; 14285}; 14286 14287jQuery.fn.uniqueSort = function() { 14288 return this.pushStack( jQuery.uniqueSort( slice.apply( this ) ) ); 14289}; 14290 14291Expr = jQuery.expr = { 14292 14293 // Can be adjusted by the user 14294 cacheLength: 50, 14295 14296 createPseudo: markFunction, 14297 14298 match: matchExpr, 14299 14300 attrHandle: {}, 14301 14302 find: {}, 14303 14304 relative: { 14305 ">": { dir: "parentNode", first: true }, 14306 " ": { dir: "parentNode" }, 14307 "+": { dir: "previousSibling", first: true }, 14308 "~": { dir: "previousSibling" } 14309 }, 14310 14311 preFilter: { 14312 ATTR: function( match ) { 14313 match[ 1 ] = match[ 1 ].replace( runescape, funescape ); 14314 14315 // Move the given value to match[3] whether quoted or unquoted 14316 match[ 3 ] = ( match[ 3 ] || match[ 4 ] || match[ 5 ] || "" ) 14317 .replace( runescape, funescape ); 14318 14319 if ( match[ 2 ] === "~=" ) { 14320 match[ 3 ] = " " + match[ 3 ] + " "; 14321 } 14322 14323 return match.slice( 0, 4 ); 14324 }, 14325 14326 CHILD: function( match ) { 14327 14328 /* matches from matchExpr["CHILD"] 14329 1 type (only|nth|...) 14330 2 what (child|of-type) 14331 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...) 14332 4 xn-component of xn+y argument ([+-]?\d*n|) 14333 5 sign of xn-component 14334 6 x of xn-component 14335 7 sign of y-component 14336 8 y of y-component 14337 */ 14338 match[ 1 ] = match[ 1 ].toLowerCase(); 14339 14340 if ( match[ 1 ].slice( 0, 3 ) === "nth" ) { 14341 14342 // nth-* requires argument 14343 if ( !match[ 3 ] ) { 14344 find.error( match[ 0 ] ); 14345 } 14346 14347 // numeric x and y parameters for Expr.filter.CHILD 14348 // remember that false/true cast respectively to 0/1 14349 match[ 4 ] = +( match[ 4 ] ? 14350 match[ 5 ] + ( match[ 6 ] || 1 ) : 14351 2 * ( match[ 3 ] === "even" || match[ 3 ] === "odd" ) 14352 ); 14353 match[ 5 ] = +( ( match[ 7 ] + match[ 8 ] ) || match[ 3 ] === "odd" ); 14354 14355 // other types prohibit arguments 14356 } else if ( match[ 3 ] ) { 14357 find.error( match[ 0 ] ); 14358 } 14359 14360 return match; 14361 }, 14362 14363 PSEUDO: function( match ) { 14364 var excess, 14365 unquoted = !match[ 6 ] && match[ 2 ]; 14366 14367 if ( matchExpr.CHILD.test( match[ 0 ] ) ) { 14368 return null; 14369 } 14370 14371 // Accept quoted arguments as-is 14372 if ( match[ 3 ] ) { 14373 match[ 2 ] = match[ 4 ] || match[ 5 ] || ""; 14374 14375 // Strip excess characters from unquoted arguments 14376 } else if ( unquoted && rpseudo.test( unquoted ) && 14377 14378 // Get excess from tokenize (recursively) 14379 ( excess = tokenize( unquoted, true ) ) && 14380 14381 // advance to the next closing parenthesis 14382 ( excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length ) ) { 14383 14384 // excess is a negative index 14385 match[ 0 ] = match[ 0 ].slice( 0, excess ); 14386 match[ 2 ] = unquoted.slice( 0, excess ); 14387 } 14388 14389 // Return only captures needed by the pseudo filter method (type and argument) 14390 return match.slice( 0, 3 ); 14391 } 14392 }, 14393 14394 filter: { 14395 14396 TAG: function( nodeNameSelector ) { 14397 var expectedNodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase(); 14398 return nodeNameSelector === "*" ? 14399 function() { 14400 return true; 14401 } : 14402 function( elem ) { 14403 return nodeName( elem, expectedNodeName ); 14404 }; 14405 }, 14406 14407 CLASS: function( className ) { 14408 var pattern = classCache[ className + " " ]; 14409 14410 return pattern || 14411 ( pattern = new RegExp( "(^|" + whitespace + ")" + className + 14412 "(" + whitespace + "|$)" ) ) && 14413 classCache( className, function( elem ) { 14414 return pattern.test( 14415 typeof elem.className === "string" && elem.className || 14416 typeof elem.getAttribute !== "undefined" && 14417 elem.getAttribute( "class" ) || 14418 "" 14419 ); 14420 } ); 14421 }, 14422 14423 ATTR: function( name, operator, check ) { 14424 return function( elem ) { 14425 var result = find.attr( elem, name ); 14426 14427 if ( result == null ) { 14428 return operator === "!="; 14429 } 14430 if ( !operator ) { 14431 return true; 14432 } 14433 14434 result += ""; 14435 14436 if ( operator === "=" ) { 14437 return result === check; 14438 } 14439 if ( operator === "!=" ) { 14440 return result !== check; 14441 } 14442 if ( operator === "^=" ) { 14443 return check && result.indexOf( check ) === 0; 14444 } 14445 if ( operator === "*=" ) { 14446 return check && result.indexOf( check ) > -1; 14447 } 14448 if ( operator === "$=" ) { 14449 return check && result.slice( -check.length ) === check; 14450 } 14451 if ( operator === "~=" ) { 14452 return ( " " + result.replace( rwhitespace, " " ) + " " ) 14453 .indexOf( check ) > -1; 14454 } 14455 if ( operator === "|=" ) { 14456 return result === check || result.slice( 0, check.length + 1 ) === check + "-"; 14457 } 14458 14459 return false; 14460 }; 14461 }, 14462 14463 CHILD: function( type, what, _argument, first, last ) { 14464 var simple = type.slice( 0, 3 ) !== "nth", 14465 forward = type.slice( -4 ) !== "last", 14466 ofType = what === "of-type"; 14467 14468 return first === 1 && last === 0 ? 14469 14470 // Shortcut for :nth-*(n) 14471 function( elem ) { 14472 return !!elem.parentNode; 14473 } : 14474 14475 function( elem, _context, xml ) { 14476 var cache, outerCache, node, nodeIndex, start, 14477 dir = simple !== forward ? "nextSibling" : "previousSibling", 14478 parent = elem.parentNode, 14479 name = ofType && elem.nodeName.toLowerCase(), 14480 useCache = !xml && !ofType, 14481 diff = false; 14482 14483 if ( parent ) { 14484 14485 // :(first|last|only)-(child|of-type) 14486 if ( simple ) { 14487 while ( dir ) { 14488 node = elem; 14489 while ( ( node = node[ dir ] ) ) { 14490 if ( ofType ? 14491 nodeName( node, name ) : 14492 node.nodeType === 1 ) { 14493 14494 return false; 14495 } 14496 } 14497 14498 // Reverse direction for :only-* (if we haven't yet done so) 14499 start = dir = type === "only" && !start && "nextSibling"; 14500 } 14501 return true; 14502 } 14503 14504 start = [ forward ? parent.firstChild : parent.lastChild ]; 14505 14506 // non-xml :nth-child(...) stores cache data on `parent` 14507 if ( forward && useCache ) { 14508 14509 // Seek `elem` from a previously-cached index 14510 outerCache = parent[ expando ] || ( parent[ expando ] = {} ); 14511 cache = outerCache[ type ] || []; 14512 nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; 14513 diff = nodeIndex && cache[ 2 ]; 14514 node = nodeIndex && parent.childNodes[ nodeIndex ]; 14515 14516 while ( ( node = ++nodeIndex && node && node[ dir ] || 14517 14518 // Fallback to seeking `elem` from the start 14519 ( diff = nodeIndex = 0 ) || start.pop() ) ) { 14520 14521 // When found, cache indexes on `parent` and break 14522 if ( node.nodeType === 1 && ++diff && node === elem ) { 14523 outerCache[ type ] = [ dirruns, nodeIndex, diff ]; 14524 break; 14525 } 14526 } 14527 14528 } else { 14529 14530 // Use previously-cached element index if available 14531 if ( useCache ) { 14532 outerCache = elem[ expando ] || ( elem[ expando ] = {} ); 14533 cache = outerCache[ type ] || []; 14534 nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; 14535 diff = nodeIndex; 14536 } 14537 14538 // xml :nth-child(...) 14539 // or :nth-last-child(...) or :nth(-last)?-of-type(...) 14540 if ( diff === false ) { 14541 14542 // Use the same loop as above to seek `elem` from the start 14543 while ( ( node = ++nodeIndex && node && node[ dir ] || 14544 ( diff = nodeIndex = 0 ) || start.pop() ) ) { 14545 14546 if ( ( ofType ? 14547 nodeName( node, name ) : 14548 node.nodeType === 1 ) && 14549 ++diff ) { 14550 14551 // Cache the index of each encountered element 14552 if ( useCache ) { 14553 outerCache = node[ expando ] || 14554 ( node[ expando ] = {} ); 14555 outerCache[ type ] = [ dirruns, diff ]; 14556 } 14557 14558 if ( node === elem ) { 14559 break; 14560 } 14561 } 14562 } 14563 } 14564 } 14565 14566 // Incorporate the offset, then check against cycle size 14567 diff -= last; 14568 return diff === first || ( diff % first === 0 && diff / first >= 0 ); 14569 } 14570 }; 14571 }, 14572 14573 PSEUDO: function( pseudo, argument ) { 14574 14575 // pseudo-class names are case-insensitive 14576 // https://www.w3.org/TR/selectors/#pseudo-classes 14577 // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters 14578 // Remember that setFilters inherits from pseudos 14579 var args, 14580 fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] || 14581 find.error( "unsupported pseudo: " + pseudo ); 14582 14583 // The user may use createPseudo to indicate that 14584 // arguments are needed to create the filter function 14585 // just as jQuery does 14586 if ( fn[ expando ] ) { 14587 return fn( argument ); 14588 } 14589 14590 // But maintain support for old signatures 14591 if ( fn.length > 1 ) { 14592 args = [ pseudo, pseudo, "", argument ]; 14593 return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ? 14594 markFunction( function( seed, matches ) { 14595 var idx, 14596 matched = fn( seed, argument ), 14597 i = matched.length; 14598 while ( i-- ) { 14599 idx = indexOf.call( seed, matched[ i ] ); 14600 seed[ idx ] = !( matches[ idx ] = matched[ i ] ); 14601 } 14602 } ) : 14603 function( elem ) { 14604 return fn( elem, 0, args ); 14605 }; 14606 } 14607 14608 return fn; 14609 } 14610 }, 14611 14612 pseudos: { 14613 14614 // Potentially complex pseudos 14615 not: markFunction( function( selector ) { 14616 14617 // Trim the selector passed to compile 14618 // to avoid treating leading and trailing 14619 // spaces as combinators 14620 var input = [], 14621 results = [], 14622 matcher = compile( selector.replace( rtrimCSS, "$1" ) ); 14623 14624 return matcher[ expando ] ? 14625 markFunction( function( seed, matches, _context, xml ) { 14626 var elem, 14627 unmatched = matcher( seed, null, xml, [] ), 14628 i = seed.length; 14629 14630 // Match elements unmatched by `matcher` 14631 while ( i-- ) { 14632 if ( ( elem = unmatched[ i ] ) ) { 14633 seed[ i ] = !( matches[ i ] = elem ); 14634 } 14635 } 14636 } ) : 14637 function( elem, _context, xml ) { 14638 input[ 0 ] = elem; 14639 matcher( input, null, xml, results ); 14640 14641 // Don't keep the element 14642 // (see https://github.com/jquery/sizzle/issues/299) 14643 input[ 0 ] = null; 14644 return !results.pop(); 14645 }; 14646 } ), 14647 14648 has: markFunction( function( selector ) { 14649 return function( elem ) { 14650 return find( selector, elem ).length > 0; 14651 }; 14652 } ), 14653 14654 contains: markFunction( function( text ) { 14655 text = text.replace( runescape, funescape ); 14656 return function( elem ) { 14657 return ( elem.textContent || jQuery.text( elem ) ).indexOf( text ) > -1; 14658 }; 14659 } ), 14660 14661 // "Whether an element is represented by a :lang() selector 14662 // is based solely on the element's language value 14663 // being equal to the identifier C, 14664 // or beginning with the identifier C immediately followed by "-". 14665 // The matching of C against the element's language value is performed case-insensitively. 14666 // The identifier C does not have to be a valid language name." 14667 // https://www.w3.org/TR/selectors/#lang-pseudo 14668 lang: markFunction( function( lang ) { 14669 14670 // lang value must be a valid identifier 14671 if ( !ridentifier.test( lang || "" ) ) { 14672 find.error( "unsupported lang: " + lang ); 14673 } 14674 lang = lang.replace( runescape, funescape ).toLowerCase(); 14675 return function( elem ) { 14676 var elemLang; 14677 do { 14678 if ( ( elemLang = documentIsHTML ? 14679 elem.lang : 14680 elem.getAttribute( "xml:lang" ) || elem.getAttribute( "lang" ) ) ) { 14681 14682 elemLang = elemLang.toLowerCase(); 14683 return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0; 14684 } 14685 } while ( ( elem = elem.parentNode ) && elem.nodeType === 1 ); 14686 return false; 14687 }; 14688 } ), 14689 14690 // Miscellaneous 14691 target: function( elem ) { 14692 var hash = window.location && window.location.hash; 14693 return hash && hash.slice( 1 ) === elem.id; 14694 }, 14695 14696 root: function( elem ) { 14697 return elem === documentElement; 14698 }, 14699 14700 focus: function( elem ) { 14701 return elem === safeActiveElement() && 14702 document.hasFocus() && 14703 !!( elem.type || elem.href || ~elem.tabIndex ); 14704 }, 14705 14706 // Boolean properties 14707 enabled: createDisabledPseudo( false ), 14708 disabled: createDisabledPseudo( true ), 14709 14710 checked: function( elem ) { 14711 14712 // In CSS3, :checked should return both checked and selected elements 14713 // https://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked 14714 return ( nodeName( elem, "input" ) && !!elem.checked ) || 14715 ( nodeName( elem, "option" ) && !!elem.selected ); 14716 }, 14717 14718 selected: function( elem ) { 14719 14720 // Support: IE <=11+ 14721 // Accessing the selectedIndex property 14722 // forces the browser to treat the default option as 14723 // selected when in an optgroup. 14724 if ( elem.parentNode ) { 14725 // eslint-disable-next-line no-unused-expressions 14726 elem.parentNode.selectedIndex; 14727 } 14728 14729 return elem.selected === true; 14730 }, 14731 14732 // Contents 14733 empty: function( elem ) { 14734 14735 // https://www.w3.org/TR/selectors/#empty-pseudo 14736 // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5), 14737 // but not by others (comment: 8; processing instruction: 7; etc.) 14738 // nodeType < 6 works because attributes (2) do not appear as children 14739 for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { 14740 if ( elem.nodeType < 6 ) { 14741 return false; 14742 } 14743 } 14744 return true; 14745 }, 14746 14747 parent: function( elem ) { 14748 return !Expr.pseudos.empty( elem ); 14749 }, 14750 14751 // Element/input types 14752 header: function( elem ) { 14753 return rheader.test( elem.nodeName ); 14754 }, 14755 14756 input: function( elem ) { 14757 return rinputs.test( elem.nodeName ); 14758 }, 14759 14760 button: function( elem ) { 14761 return nodeName( elem, "input" ) && elem.type === "button" || 14762 nodeName( elem, "button" ); 14763 }, 14764 14765 text: function( elem ) { 14766 var attr; 14767 return nodeName( elem, "input" ) && elem.type === "text" && 14768 14769 // Support: IE <10 only 14770 // New HTML5 attribute values (e.g., "search") appear 14771 // with elem.type === "text" 14772 ( ( attr = elem.getAttribute( "type" ) ) == null || 14773 attr.toLowerCase() === "text" ); 14774 }, 14775 14776 // Position-in-collection 14777 first: createPositionalPseudo( function() { 14778 return [ 0 ]; 14779 } ), 14780 14781 last: createPositionalPseudo( function( _matchIndexes, length ) { 14782 return [ length - 1 ]; 14783 } ), 14784 14785 eq: createPositionalPseudo( function( _matchIndexes, length, argument ) { 14786 return [ argument < 0 ? argument + length : argument ]; 14787 } ), 14788 14789 even: createPositionalPseudo( function( matchIndexes, length ) { 14790 var i = 0; 14791 for ( ; i < length; i += 2 ) { 14792 matchIndexes.push( i ); 14793 } 14794 return matchIndexes; 14795 } ), 14796 14797 odd: createPositionalPseudo( function( matchIndexes, length ) { 14798 var i = 1; 14799 for ( ; i < length; i += 2 ) { 14800 matchIndexes.push( i ); 14801 } 14802 return matchIndexes; 14803 } ), 14804 14805 lt: createPositionalPseudo( function( matchIndexes, length, argument ) { 14806 var i; 14807 14808 if ( argument < 0 ) { 14809 i = argument + length; 14810 } else if ( argument > length ) { 14811 i = length; 14812 } else { 14813 i = argument; 14814 } 14815 14816 for ( ; --i >= 0; ) { 14817 matchIndexes.push( i ); 14818 } 14819 return matchIndexes; 14820 } ), 14821 14822 gt: createPositionalPseudo( function( matchIndexes, length, argument ) { 14823 var i = argument < 0 ? argument + length : argument; 14824 for ( ; ++i < length; ) { 14825 matchIndexes.push( i ); 14826 } 14827 return matchIndexes; 14828 } ) 14829 } 14830}; 14831 14832Expr.pseudos.nth = Expr.pseudos.eq; 14833 14834// Add button/input type pseudos 14835for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) { 14836 Expr.pseudos[ i ] = createInputPseudo( i ); 14837} 14838for ( i in { submit: true, reset: true } ) { 14839 Expr.pseudos[ i ] = createButtonPseudo( i ); 14840} 14841 14842// Easy API for creating new setFilters 14843function setFilters() {} 14844setFilters.prototype = Expr.filters = Expr.pseudos; 14845Expr.setFilters = new setFilters(); 14846 14847function tokenize( selector, parseOnly ) { 14848 var matched, match, tokens, type, 14849 soFar, groups, preFilters, 14850 cached = tokenCache[ selector + " " ]; 14851 14852 if ( cached ) { 14853 return parseOnly ? 0 : cached.slice( 0 ); 14854 } 14855 14856 soFar = selector; 14857 groups = []; 14858 preFilters = Expr.preFilter; 14859 14860 while ( soFar ) { 14861 14862 // Comma and first run 14863 if ( !matched || ( match = rcomma.exec( soFar ) ) ) { 14864 if ( match ) { 14865 14866 // Don't consume trailing commas as valid 14867 soFar = soFar.slice( match[ 0 ].length ) || soFar; 14868 } 14869 groups.push( ( tokens = [] ) ); 14870 } 14871 14872 matched = false; 14873 14874 // Combinators 14875 if ( ( match = rleadingCombinator.exec( soFar ) ) ) { 14876 matched = match.shift(); 14877 tokens.push( { 14878 value: matched, 14879 14880 // Cast descendant combinators to space 14881 type: match[ 0 ].replace( rtrimCSS, " " ) 14882 } ); 14883 soFar = soFar.slice( matched.length ); 14884 } 14885 14886 // Filters 14887 for ( type in Expr.filter ) { 14888 if ( ( match = matchExpr[ type ].exec( soFar ) ) && ( !preFilters[ type ] || 14889 ( match = preFilters[ type ]( match ) ) ) ) { 14890 matched = match.shift(); 14891 tokens.push( { 14892 value: matched, 14893 type: type, 14894 matches: match 14895 } ); 14896 soFar = soFar.slice( matched.length ); 14897 } 14898 } 14899 14900 if ( !matched ) { 14901 break; 14902 } 14903 } 14904 14905 // Return the length of the invalid excess 14906 // if we're just parsing 14907 // Otherwise, throw an error or return tokens 14908 if ( parseOnly ) { 14909 return soFar.length; 14910 } 14911 14912 return soFar ? 14913 find.error( selector ) : 14914 14915 // Cache the tokens 14916 tokenCache( selector, groups ).slice( 0 ); 14917} 14918 14919function toSelector( tokens ) { 14920 var i = 0, 14921 len = tokens.length, 14922 selector = ""; 14923 for ( ; i < len; i++ ) { 14924 selector += tokens[ i ].value; 14925 } 14926 return selector; 14927} 14928 14929function addCombinator( matcher, combinator, base ) { 14930 var dir = combinator.dir, 14931 skip = combinator.next, 14932 key = skip || dir, 14933 checkNonElements = base && key === "parentNode", 14934 doneName = done++; 14935 14936 return combinator.first ? 14937 14938 // Check against closest ancestor/preceding element 14939 function( elem, context, xml ) { 14940 while ( ( elem = elem[ dir ] ) ) { 14941 if ( elem.nodeType === 1 || checkNonElements ) { 14942 return matcher( elem, context, xml ); 14943 } 14944 } 14945 return false; 14946 } : 14947 14948 // Check against all ancestor/preceding elements 14949 function( elem, context, xml ) { 14950 var oldCache, outerCache, 14951 newCache = [ dirruns, doneName ]; 14952 14953 // We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching 14954 if ( xml ) { 14955 while ( ( elem = elem[ dir ] ) ) { 14956 if ( elem.nodeType === 1 || checkNonElements ) { 14957 if ( matcher( elem, context, xml ) ) { 14958 return true; 14959 } 14960 } 14961 } 14962 } else { 14963 while ( ( elem = elem[ dir ] ) ) { 14964 if ( elem.nodeType === 1 || checkNonElements ) { 14965 outerCache = elem[ expando ] || ( elem[ expando ] = {} ); 14966 14967 if ( skip && nodeName( elem, skip ) ) { 14968 elem = elem[ dir ] || elem; 14969 } else if ( ( oldCache = outerCache[ key ] ) && 14970 oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) { 14971 14972 // Assign to newCache so results back-propagate to previous elements 14973 return ( newCache[ 2 ] = oldCache[ 2 ] ); 14974 } else { 14975 14976 // Reuse newcache so results back-propagate to previous elements 14977 outerCache[ key ] = newCache; 14978 14979 // A match means we're done; a fail means we have to keep checking 14980 if ( ( newCache[ 2 ] = matcher( elem, context, xml ) ) ) { 14981 return true; 14982 } 14983 } 14984 } 14985 } 14986 } 14987 return false; 14988 }; 14989} 14990 14991function elementMatcher( matchers ) { 14992 return matchers.length > 1 ? 14993 function( elem, context, xml ) { 14994 var i = matchers.length; 14995 while ( i-- ) { 14996 if ( !matchers[ i ]( elem, context, xml ) ) { 14997 return false; 14998 } 14999 } 15000 return true; 15001 } : 15002 matchers[ 0 ]; 15003} 15004 15005function multipleContexts( selector, contexts, results ) { 15006 var i = 0, 15007 len = contexts.length; 15008 for ( ; i < len; i++ ) { 15009 find( selector, contexts[ i ], results ); 15010 } 15011 return results; 15012} 15013 15014function condense( unmatched, map, filter, context, xml ) { 15015 var elem, 15016 newUnmatched = [], 15017 i = 0, 15018 len = unmatched.length, 15019 mapped = map != null; 15020 15021 for ( ; i < len; i++ ) { 15022 if ( ( elem = unmatched[ i ] ) ) { 15023 if ( !filter || filter( elem, context, xml ) ) { 15024 newUnmatched.push( elem ); 15025 if ( mapped ) { 15026 map.push( i ); 15027 } 15028 } 15029 } 15030 } 15031 15032 return newUnmatched; 15033} 15034 15035function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) { 15036 if ( postFilter && !postFilter[ expando ] ) { 15037 postFilter = setMatcher( postFilter ); 15038 } 15039 if ( postFinder && !postFinder[ expando ] ) { 15040 postFinder = setMatcher( postFinder, postSelector ); 15041 } 15042 return markFunction( function( seed, results, context, xml ) { 15043 var temp, i, elem, matcherOut, 15044 preMap = [], 15045 postMap = [], 15046 preexisting = results.length, 15047 15048 // Get initial elements from seed or context 15049 elems = seed || 15050 multipleContexts( selector || "*", 15051 context.nodeType ? [ context ] : context, [] ), 15052 15053 // Prefilter to get matcher input, preserving a map for seed-results synchronization 15054 matcherIn = preFilter && ( seed || !selector ) ? 15055 condense( elems, preMap, preFilter, context, xml ) : 15056 elems; 15057 15058 if ( matcher ) { 15059 15060 // If we have a postFinder, or filtered seed, or non-seed postFilter 15061 // or preexisting results, 15062 matcherOut = postFinder || ( seed ? preFilter : preexisting || postFilter ) ? 15063 15064 // ...intermediate processing is necessary 15065 [] : 15066 15067 // ...otherwise use results directly 15068 results; 15069 15070 // Find primary matches 15071 matcher( matcherIn, matcherOut, context, xml ); 15072 } else { 15073 matcherOut = matcherIn; 15074 } 15075 15076 // Apply postFilter 15077 if ( postFilter ) { 15078 temp = condense( matcherOut, postMap ); 15079 postFilter( temp, [], context, xml ); 15080 15081 // Un-match failing elements by moving them back to matcherIn 15082 i = temp.length; 15083 while ( i-- ) { 15084 if ( ( elem = temp[ i ] ) ) { 15085 matcherOut[ postMap[ i ] ] = !( matcherIn[ postMap[ i ] ] = elem ); 15086 } 15087 } 15088 } 15089 15090 if ( seed ) { 15091 if ( postFinder || preFilter ) { 15092 if ( postFinder ) { 15093 15094 // Get the final matcherOut by condensing this intermediate into postFinder contexts 15095 temp = []; 15096 i = matcherOut.length; 15097 while ( i-- ) { 15098 if ( ( elem = matcherOut[ i ] ) ) { 15099 15100 // Restore matcherIn since elem is not yet a final match 15101 temp.push( ( matcherIn[ i ] = elem ) ); 15102 } 15103 } 15104 postFinder( null, ( matcherOut = [] ), temp, xml ); 15105 } 15106 15107 // Move matched elements from seed to results to keep them synchronized 15108 i = matcherOut.length; 15109 while ( i-- ) { 15110 if ( ( elem = matcherOut[ i ] ) && 15111 ( temp = postFinder ? indexOf.call( seed, elem ) : preMap[ i ] ) > -1 ) { 15112 15113 seed[ temp ] = !( results[ temp ] = elem ); 15114 } 15115 } 15116 } 15117 15118 // Add elements to results, through postFinder if defined 15119 } else { 15120 matcherOut = condense( 15121 matcherOut === results ? 15122 matcherOut.splice( preexisting, matcherOut.length ) : 15123 matcherOut 15124 ); 15125 if ( postFinder ) { 15126 postFinder( null, results, matcherOut, xml ); 15127 } else { 15128 push.apply( results, matcherOut ); 15129 } 15130 } 15131 } ); 15132} 15133 15134function matcherFromTokens( tokens ) { 15135 var checkContext, matcher, j, 15136 len = tokens.length, 15137 leadingRelative = Expr.relative[ tokens[ 0 ].type ], 15138 implicitRelative = leadingRelative || Expr.relative[ " " ], 15139 i = leadingRelative ? 1 : 0, 15140 15141 // The foundational matcher ensures that elements are reachable from top-level context(s) 15142 matchContext = addCombinator( function( elem ) { 15143 return elem === checkContext; 15144 }, implicitRelative, true ), 15145 matchAnyContext = addCombinator( function( elem ) { 15146 return indexOf.call( checkContext, elem ) > -1; 15147 }, implicitRelative, true ), 15148 matchers = [ function( elem, context, xml ) { 15149 15150 // Support: IE 11+, Edge 17 - 18+ 15151 // IE/Edge sometimes throw a "Permission denied" error when strict-comparing 15152 // two documents; shallow comparisons work. 15153 // eslint-disable-next-line eqeqeq 15154 var ret = ( !leadingRelative && ( xml || context != outermostContext ) ) || ( 15155 ( checkContext = context ).nodeType ? 15156 matchContext( elem, context, xml ) : 15157 matchAnyContext( elem, context, xml ) ); 15158 15159 // Avoid hanging onto element 15160 // (see https://github.com/jquery/sizzle/issues/299) 15161 checkContext = null; 15162 return ret; 15163 } ]; 15164 15165 for ( ; i < len; i++ ) { 15166 if ( ( matcher = Expr.relative[ tokens[ i ].type ] ) ) { 15167 matchers = [ addCombinator( elementMatcher( matchers ), matcher ) ]; 15168 } else { 15169 matcher = Expr.filter[ tokens[ i ].type ].apply( null, tokens[ i ].matches ); 15170 15171 // Return special upon seeing a positional matcher 15172 if ( matcher[ expando ] ) { 15173 15174 // Find the next relative operator (if any) for proper handling 15175 j = ++i; 15176 for ( ; j < len; j++ ) { 15177 if ( Expr.relative[ tokens[ j ].type ] ) { 15178 break; 15179 } 15180 } 15181 return setMatcher( 15182 i > 1 && elementMatcher( matchers ), 15183 i > 1 && toSelector( 15184 15185 // If the preceding token was a descendant combinator, insert an implicit any-element `*` 15186 tokens.slice( 0, i - 1 ) 15187 .concat( { value: tokens[ i - 2 ].type === " " ? "*" : "" } ) 15188 ).replace( rtrimCSS, "$1" ), 15189 matcher, 15190 i < j && matcherFromTokens( tokens.slice( i, j ) ), 15191 j < len && matcherFromTokens( ( tokens = tokens.slice( j ) ) ), 15192 j < len && toSelector( tokens ) 15193 ); 15194 } 15195 matchers.push( matcher ); 15196 } 15197 } 15198 15199 return elementMatcher( matchers ); 15200} 15201 15202function matcherFromGroupMatchers( elementMatchers, setMatchers ) { 15203 var bySet = setMatchers.length > 0, 15204 byElement = elementMatchers.length > 0, 15205 superMatcher = function( seed, context, xml, results, outermost ) { 15206 var elem, j, matcher, 15207 matchedCount = 0, 15208 i = "0", 15209 unmatched = seed && [], 15210 setMatched = [], 15211 contextBackup = outermostContext, 15212 15213 // We must always have either seed elements or outermost context 15214 elems = seed || byElement && Expr.find.TAG( "*", outermost ), 15215 15216 // Use integer dirruns iff this is the outermost matcher 15217 dirrunsUnique = ( dirruns += contextBackup == null ? 1 : Math.random() || 0.1 ), 15218 len = elems.length; 15219 15220 if ( outermost ) { 15221 15222 // Support: IE 11+, Edge 17 - 18+ 15223 // IE/Edge sometimes throw a "Permission denied" error when strict-comparing 15224 // two documents; shallow comparisons work. 15225 // eslint-disable-next-line eqeqeq 15226 outermostContext = context == document || context || outermost; 15227 } 15228 15229 // Add elements passing elementMatchers directly to results 15230 // Support: iOS <=7 - 9 only 15231 // Tolerate NodeList properties (IE: "length"; Safari: <number>) matching 15232 // elements by id. (see trac-14142) 15233 for ( ; i !== len && ( elem = elems[ i ] ) != null; i++ ) { 15234 if ( byElement && elem ) { 15235 j = 0; 15236 15237 // Support: IE 11+, Edge 17 - 18+ 15238 // IE/Edge sometimes throw a "Permission denied" error when strict-comparing 15239 // two documents; shallow comparisons work. 15240 // eslint-disable-next-line eqeqeq 15241 if ( !context && elem.ownerDocument != document ) { 15242 setDocument( elem ); 15243 xml = !documentIsHTML; 15244 } 15245 while ( ( matcher = elementMatchers[ j++ ] ) ) { 15246 if ( matcher( elem, context || document, xml ) ) { 15247 push.call( results, elem ); 15248 break; 15249 } 15250 } 15251 if ( outermost ) { 15252 dirruns = dirrunsUnique; 15253 } 15254 } 15255 15256 // Track unmatched elements for set filters 15257 if ( bySet ) { 15258 15259 // They will have gone through all possible matchers 15260 if ( ( elem = !matcher && elem ) ) { 15261 matchedCount--; 15262 } 15263 15264 // Lengthen the array for every element, matched or not 15265 if ( seed ) { 15266 unmatched.push( elem ); 15267 } 15268 } 15269 } 15270 15271 // `i` is now the count of elements visited above, and adding it to `matchedCount` 15272 // makes the latter nonnegative. 15273 matchedCount += i; 15274 15275 // Apply set filters to unmatched elements 15276 // NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount` 15277 // equals `i`), unless we didn't visit _any_ elements in the above loop because we have 15278 // no element matchers and no seed. 15279 // Incrementing an initially-string "0" `i` allows `i` to remain a string only in that 15280 // case, which will result in a "00" `matchedCount` that differs from `i` but is also 15281 // numerically zero. 15282 if ( bySet && i !== matchedCount ) { 15283 j = 0; 15284 while ( ( matcher = setMatchers[ j++ ] ) ) { 15285 matcher( unmatched, setMatched, context, xml ); 15286 } 15287 15288 if ( seed ) { 15289 15290 // Reintegrate element matches to eliminate the need for sorting 15291 if ( matchedCount > 0 ) { 15292 while ( i-- ) { 15293 if ( !( unmatched[ i ] || setMatched[ i ] ) ) { 15294 setMatched[ i ] = pop.call( results ); 15295 } 15296 } 15297 } 15298 15299 // Discard index placeholder values to get only actual matches 15300 setMatched = condense( setMatched ); 15301 } 15302 15303 // Add matches to results 15304 push.apply( results, setMatched ); 15305 15306 // Seedless set matches succeeding multiple successful matchers stipulate sorting 15307 if ( outermost && !seed && setMatched.length > 0 && 15308 ( matchedCount + setMatchers.length ) > 1 ) { 15309 15310 jQuery.uniqueSort( results ); 15311 } 15312 } 15313 15314 // Override manipulation of globals by nested matchers 15315 if ( outermost ) { 15316 dirruns = dirrunsUnique; 15317 outermostContext = contextBackup; 15318 } 15319 15320 return unmatched; 15321 }; 15322 15323 return bySet ? 15324 markFunction( superMatcher ) : 15325 superMatcher; 15326} 15327 15328function compile( selector, match /* Internal Use Only */ ) { 15329 var i, 15330 setMatchers = [], 15331 elementMatchers = [], 15332 cached = compilerCache[ selector + " " ]; 15333 15334 if ( !cached ) { 15335 15336 // Generate a function of recursive functions that can be used to check each element 15337 if ( !match ) { 15338 match = tokenize( selector ); 15339 } 15340 i = match.length; 15341 while ( i-- ) { 15342 cached = matcherFromTokens( match[ i ] ); 15343 if ( cached[ expando ] ) { 15344 setMatchers.push( cached ); 15345 } else { 15346 elementMatchers.push( cached ); 15347 } 15348 } 15349 15350 // Cache the compiled function 15351 cached = compilerCache( selector, 15352 matcherFromGroupMatchers( elementMatchers, setMatchers ) ); 15353 15354 // Save selector and tokenization 15355 cached.selector = selector; 15356 } 15357 return cached; 15358} 15359 15360/** 15361 * A low-level selection function that works with jQuery's compiled 15362 * selector functions 15363 * @param {String|Function} selector A selector or a pre-compiled 15364 * selector function built with jQuery selector compile 15365 * @param {Element} context 15366 * @param {Array} [results] 15367 * @param {Array} [seed] A set of elements to match against 15368 */ 15369function select( selector, context, results, seed ) { 15370 var i, tokens, token, type, find, 15371 compiled = typeof selector === "function" && selector, 15372 match = !seed && tokenize( ( selector = compiled.selector || selector ) ); 15373 15374 results = results || []; 15375 15376 // Try to minimize operations if there is only one selector in the list and no seed 15377 // (the latter of which guarantees us context) 15378 if ( match.length === 1 ) { 15379 15380 // Reduce context if the leading compound selector is an ID 15381 tokens = match[ 0 ] = match[ 0 ].slice( 0 ); 15382 if ( tokens.length > 2 && ( token = tokens[ 0 ] ).type === "ID" && 15383 context.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[ 1 ].type ] ) { 15384 15385 context = ( Expr.find.ID( 15386 token.matches[ 0 ].replace( runescape, funescape ), 15387 context 15388 ) || [] )[ 0 ]; 15389 if ( !context ) { 15390 return results; 15391 15392 // Precompiled matchers will still verify ancestry, so step up a level 15393 } else if ( compiled ) { 15394 context = context.parentNode; 15395 } 15396 15397 selector = selector.slice( tokens.shift().value.length ); 15398 } 15399 15400 // Fetch a seed set for right-to-left matching 15401 i = matchExpr.needsContext.test( selector ) ? 0 : tokens.length; 15402 while ( i-- ) { 15403 token = tokens[ i ]; 15404 15405 // Abort if we hit a combinator 15406 if ( Expr.relative[ ( type = token.type ) ] ) { 15407 break; 15408 } 15409 if ( ( find = Expr.find[ type ] ) ) { 15410 15411 // Search, expanding context for leading sibling combinators 15412 if ( ( seed = find( 15413 token.matches[ 0 ].replace( runescape, funescape ), 15414 rsibling.test( tokens[ 0 ].type ) && 15415 testContext( context.parentNode ) || context 15416 ) ) ) { 15417 15418 // If seed is empty or no tokens remain, we can return early 15419 tokens.splice( i, 1 ); 15420 selector = seed.length && toSelector( tokens ); 15421 if ( !selector ) { 15422 push.apply( results, seed ); 15423 return results; 15424 } 15425 15426 break; 15427 } 15428 } 15429 } 15430 } 15431 15432 // Compile and execute a filtering function if one is not provided 15433 // Provide `match` to avoid retokenization if we modified the selector above 15434 ( compiled || compile( selector, match ) )( 15435 seed, 15436 context, 15437 !documentIsHTML, 15438 results, 15439 !context || rsibling.test( selector ) && testContext( context.parentNode ) || context 15440 ); 15441 return results; 15442} 15443 15444// One-time assignments 15445 15446// Support: Android <=4.0 - 4.1+ 15447// Sort stability 15448support.sortStable = expando.split( "" ).sort( sortOrder ).join( "" ) === expando; 15449 15450// Initialize against the default document 15451setDocument(); 15452 15453// Support: Android <=4.0 - 4.1+ 15454// Detached nodes confoundingly follow *each other* 15455support.sortDetached = assert( function( el ) { 15456 15457 // Should return 1, but returns 4 (following) 15458 return el.compareDocumentPosition( document.createElement( "fieldset" ) ) & 1; 15459} ); 15460 15461jQuery.find = find; 15462 15463// Deprecated 15464jQuery.expr[ ":" ] = jQuery.expr.pseudos; 15465jQuery.unique = jQuery.uniqueSort; 15466 15467// These have always been private, but they used to be documented
15467 15468// as part of Sizzle so let's maintain them in the 3.x line 15469// for backwards compatibility purposes. 15470find.compile = compile; 15471find.select = select; 15472find.setDocument = setDocument
vendor: 12,898 bytes, lines 15472-15988
15472; 15473 15474find.escape = jQuery.escapeSelector; 15475find.getText = jQuery.text; 15476find.isXML = jQuery.isXMLDoc; 15477find.selectors = jQuery.expr; 15478find.support = jQuery.support; 15479find.uniqueSort = jQuery.uniqueSort; 15480 15481 /* eslint-enable */ 15482 15483} )(); 15484 15485 15486var dir = function( elem, dir, until ) { 15487 var matched = [], 15488 truncate = until !== undefined; 15489 15490 while ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) { 15491 if ( elem.nodeType === 1 ) { 15492 if ( truncate && jQuery( elem ).is( until ) ) { 15493 break; 15494 } 15495 matched.push( elem ); 15496 } 15497 } 15498 return matched; 15499}; 15500 15501 15502var siblings = function( n, elem ) { 15503 var matched = []; 15504 15505 for ( ; n; n = n.nextSibling ) { 15506 if ( n.nodeType === 1 && n !== elem ) { 15507 matched.push( n ); 15508 } 15509 } 15510 15511 return matched; 15512}; 15513 15514 15515var rneedsContext = jQuery.expr.match.needsContext; 15516 15517var rsingleTag = ( /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i ); 15518 15519 15520 15521// Implement the identical functionality for filter and not 15522function winnow( elements, qualifier, not ) { 15523 if ( isFunction( qualifier ) ) { 15524 return jQuery.grep( elements, function( elem, i ) { 15525 return !!qualifier.call( elem, i, elem ) !== not; 15526 } ); 15527 } 15528 15529 // Single element 15530 if ( qualifier.nodeType ) { 15531 return jQuery.grep( elements, function( elem ) { 15532 return ( elem === qualifier ) !== not; 15533 } ); 15534 } 15535 15536 // Arraylike of elements (jQuery, arguments, Array) 15537 if ( typeof qualifier !== "string" ) { 15538 return jQuery.grep( elements, function( elem ) { 15539 return ( indexOf.call( qualifier, elem ) > -1 ) !== not; 15540 } ); 15541 } 15542 15543 // Filtered directly for both simple and complex selectors 15544 return jQuery.filter( qualifier, elements, not ); 15545} 15546 15547jQuery.filter = function( expr, elems, not ) { 15548 var elem = elems[ 0 ]; 15549 15550 if ( not ) { 15551 expr = ":not(" + expr + ")"; 15552 } 15553 15554 if ( elems.length === 1 && elem.nodeType === 1 ) { 15555 return jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : []; 15556 } 15557 15558 return jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) { 15559 return elem.nodeType === 1; 15560 } ) ); 15561}; 15562 15563jQuery.fn.extend( { 15564 find: function( selector ) { 15565 var i, ret, 15566 len = this.length, 15567 self = this; 15568 15569 if ( typeof selector !== "string" ) { 15570 return this.pushStack( jQuery( selector ).filter( function() { 15571 for ( i = 0; i < len; i++ ) { 15572 if ( jQuery.contains( self[ i ], this ) ) { 15573 return true; 15574 } 15575 } 15576 } ) ); 15577 } 15578 15579 ret = this.pushStack( [] ); 15580 15581 for ( i = 0; i < len; i++ ) { 15582 jQuery.find( selector, self[ i ], ret ); 15583 } 15584 15585 return len > 1 ? jQuery.uniqueSort( ret ) : ret; 15586 }, 15587 filter: function( selector ) { 15588 return this.pushStack( winnow( this, selector || [], false ) ); 15589 }, 15590 not: function( selector ) { 15591 return this.pushStack( winnow( this, selector || [], true ) ); 15592 }, 15593 is: function( selector ) { 15594 return !!winnow( 15595 this, 15596 15597 // If this is a positional/relative selector, check membership in the returned set 15598 // so $("p:first").is("p:last") won't return true for a doc with two "p". 15599 typeof selector === "string" && rneedsContext.test( selector ) ? 15600 jQuery( selector ) : 15601 selector || [], 15602 false 15603 ).length; 15604 } 15605} ); 15606 15607 15608// Initialize a jQuery object 15609 15610 15611// A central reference to the root jQuery(document) 15612var rootjQuery, 15613 15614 // A simple way to check for HTML strings 15615 // Prioritize #id over <tag> to avoid XSS via location.hash (trac-9521) 15616 // Strict HTML recognition (trac-11290: must start with <) 15617 // Shortcut simple #id case for speed 15618 rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/, 15619 15620 init = jQuery.fn.init = function( selector, context, root ) { 15621 var match, elem; 15622 15623 // HANDLE: $(""), $(null), $(undefined), $(false) 15624 if ( !selector ) { 15625 return this; 15626 } 15627 15628 // Method init() accepts an alternate rootjQuery 15629 // so migrate can support jQuery.sub (gh-2101) 15630 root = root || rootjQuery; 15631 15632 // Handle HTML strings 15633 if ( typeof selector === "string" ) { 15634 if ( selector[ 0 ] === "<" && 15635 selector[ selector.length - 1 ] === ">" && 15636 selector.length >= 3 ) { 15637 15638 // Assume that strings that start and end with <> are HTML and skip the regex check 15639 match = [ null, selector, null ]; 15640 15641 } else { 15642 match = rquickExpr.exec( selector ); 15643 } 15644 15645 // Match html or make sure no context is specified for #id 15646 if ( match && ( match[ 1 ] || !context ) ) { 15647 15648 // HANDLE: $(html) -> $(array) 15649 if ( match[ 1 ] ) { 15650 context = context instanceof jQuery ? context[ 0 ] : context; 15651 15652 // Option to run scripts is true for back-compat 15653 // Intentionally let the error be thrown if parseHTML is not present 15654 jQuery.merge( this, jQuery.parseHTML( 15655 match[ 1 ], 15656 context && context.nodeType ? context.ownerDocument || context : document, 15657 true 15658 ) ); 15659 15660 // HANDLE: $(html, props) 15661 if ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) { 15662 for ( match in context ) { 15663 15664 // Properties of context are called as methods if possible 15665 if ( isFunction( this[ match ] ) ) { 15666 this[ match ]( context[ match ] ); 15667 15668 // ...and otherwise set as attributes 15669 } else { 15670 this.attr( match, context[ match ] ); 15671 } 15672 } 15673 } 15674 15675 return this; 15676 15677 // HANDLE: $(#id) 15678 } else { 15679 elem = document.getElementById( match[ 2 ] ); 15680 15681 if ( elem ) { 15682 15683 // Inject the element directly into the jQuery object 15684 this[ 0 ] = elem; 15685 this.length = 1; 15686 } 15687 return this; 15688 } 15689 15690 // HANDLE: $(expr, $(...)) 15691 } else if ( !context || context.jquery ) { 15692 return ( context || root ).find( selector ); 15693 15694 // HANDLE: $(expr, context) 15695 // (which is just equivalent to: $(context).find(expr) 15696 } else { 15697 return this.constructor( context ).find( selector ); 15698 } 15699 15700 // HANDLE: $(DOMElement) 15701 } else if ( selector.nodeType ) { 15702 this[ 0 ] = selector; 15703 this.length = 1; 15704 return this; 15705 15706 // HANDLE: $(function) 15707 // Shortcut for document ready 15708 } else if ( isFunction( selector ) ) { 15709 return root.ready !== undefined ? 15710 root.ready( selector ) : 15711 15712 // Execute immediately if ready is not present 15713 selector( jQuery ); 15714 } 15715 15716 return jQuery.makeArray( selector, this ); 15717 }; 15718 15719// Give the init function the jQuery prototype for later instantiation 15720init.prototype = jQuery.fn; 15721 15722// Initialize central reference 15723rootjQuery = jQuery( document ); 15724 15725 15726var rparentsprev = /^(?:parents|prev(?:Until|All))/, 15727 15728 // Methods guaranteed to produce a unique set when starting from a unique set 15729 guaranteedUnique = { 15730 children: true, 15731 contents: true, 15732 next: true, 15733 prev: true 15734 }; 15735 15736jQuery.fn.extend( { 15737 has: function( target ) { 15738 var targets = jQuery( target, this ), 15739 l = targets.length; 15740 15741 return this.filter( function() { 15742 var i = 0; 15743 for ( ; i < l; i++ ) { 15744 if ( jQuery.contains( this, targets[ i ] ) ) { 15745 return true; 15746 } 15747 } 15748 } ); 15749 }, 15750 15751 closest: function( selectors, context ) { 15752 var cur, 15753 i = 0, 15754 l = this.length, 15755 matched = [], 15756 targets = typeof selectors !== "string" && jQuery( selectors ); 15757 15758 // Positional selectors never match, since there's no _selection_ context 15759 if ( !rneedsContext.test( selectors ) ) { 15760 for ( ; i < l; i++ ) { 15761 for ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) { 15762 15763 // Always skip document fragments 15764 if ( cur.nodeType < 11 && ( targets ? 15765 targets.index( cur ) > -1 : 15766 15767 // Don't pass non-elements to jQuery#find 15768 cur.nodeType === 1 && 15769 jQuery.find.matchesSelector( cur, selectors ) ) ) { 15770 15771 matched.push( cur ); 15772 break; 15773 } 15774 } 15775 } 15776 } 15777 15778 return this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched ); 15779 }, 15780 15781 // Determine the position of an element within the set 15782 index: function( elem ) { 15783 15784 // No argument, return index in parent 15785 if ( !elem ) { 15786 return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1; 15787 } 15788 15789 // Index in selector 15790 if ( typeof elem === "string" ) { 15791 return indexOf.call( jQuery( elem ), this[ 0 ] ); 15792 } 15793 15794 // Locate the position of the desired element 15795 return indexOf.call( this, 15796 15797 // If it receives a jQuery object, the first element is used 15798 elem.jquery ? elem[ 0 ] : elem 15799 ); 15800 }, 15801 15802 add: function( selector, context ) { 15803 return this.pushStack( 15804 jQuery.uniqueSort( 15805 jQuery.merge( this.get(), jQuery( selector, context ) ) 15806 ) 15807 ); 15808 }, 15809 15810 addBack: function( selector ) { 15811 return this.add( selector == null ? 15812 this.prevObject : this.prevObject.filter( selector ) 15813 ); 15814 } 15815} ); 15816 15817function sibling( cur, dir ) { 15818 while ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {} 15819 return cur; 15820} 15821 15822jQuery.each( { 15823 parent: function( elem ) { 15824 var parent = elem.parentNode; 15825 return parent && parent.nodeType !== 11 ? parent : null; 15826 }, 15827 parents: function( elem ) { 15828 return dir( elem, "parentNode" ); 15829 }, 15830 parentsUntil: function( elem, _i, until ) { 15831 return dir( elem, "parentNode", until ); 15832 }, 15833 next: function( elem ) { 15834 return sibling( elem, "nextSibling" ); 15835 }, 15836 prev: function( elem ) { 15837 return sibling( elem, "previousSibling" ); 15838 }, 15839 nextAll: function( elem ) { 15840 return dir( elem, "nextSibling" ); 15841 }, 15842 prevAll: function( elem ) { 15843 return dir( elem, "previousSibling" ); 15844 }, 15845 nextUntil: function( elem, _i, until ) { 15846 return dir( elem, "nextSibling", until ); 15847 }, 15848 prevUntil: function( elem, _i, until ) { 15849 return dir( elem, "previousSibling", until ); 15850 }, 15851 siblings: function( elem ) { 15852 return siblings( ( elem.parentNode || {} ).firstChild, elem ); 15853 }, 15854 children: function( elem ) { 15855 return siblings( elem.firstChild ); 15856 }, 15857 contents: function( elem ) { 15858 if ( elem.contentDocument != null && 15859 15860 // Support: IE 11+ 15861 // <object> elements with no `data` attribute has an object 15862 // `contentDocument` with a `null` prototype. 15863 getProto( elem.contentDocument ) ) { 15864 15865 return elem.contentDocument; 15866 } 15867 15868 // Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only 15869 // Treat the template element as a regular one in browsers that 15870 // don't support it. 15871 if ( nodeName( elem, "template" ) ) { 15872 elem = elem.content || elem; 15873 } 15874 15875 return jQuery.merge( [], elem.childNodes ); 15876 } 15877}, function( name, fn ) { 15878 jQuery.fn[ name ] = function( until, selector ) { 15879 var matched = jQuery.map( this, fn, until ); 15880 15881 if ( name.slice( -5 ) !== "Until" ) { 15882 selector = until; 15883 } 15884 15885 if ( selector && typeof selector === "string" ) { 15886 matched = jQuery.filter( selector, matched ); 15887 } 15888 15889 if ( this.length > 1 ) { 15890 15891 // Remove duplicates 15892 if ( !guaranteedUnique[ name ] ) { 15893 jQuery.uniqueSort( matched ); 15894 } 15895 15896 // Reverse order for parents* and prev-derivatives 15897 if ( rparentsprev.test( name ) ) { 15898 matched.reverse(); 15899 } 15900 } 15901 15902 return this.pushStack( matched ); 15903 }; 15904} ); 15905var rnothtmlwhite = ( /[^\x20\t\r\n\f]+/g ); 15906 15907 15908 15909// Convert String-formatted options into Object-formatted ones 15910function createOptions( options ) { 15911 var object = {}; 15912 jQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) { 15913 object[ flag ] = true; 15914 } ); 15915 return object; 15916} 15917 15918/* 15919 * Create a callback list using the following parameters: 15920 * 15921 * options: an optional list of space-separated options that will change how 15922 * the callback list behaves or a more traditional option object 15923 * 15924 * By default a callback list will act like an event callback list and can be 15925 * "fired" multiple times. 15926 * 15927 * Possible options: 15928 * 15929 * once: will ensure the callback list can only be fired once (like a Deferred) 15930 * 15931 * memory: will keep track of previous values and will call any callback added 15932 * after the list has been fired right away with the latest "memorized" 15933 * values (like a Deferred) 15934 * 15935 * unique: will ensure a callback can only be added once (no duplicate in the list) 15936 * 15937 * stopOnFalse: interrupt callings when a callback returns false 15938 * 15939 */ 15940jQuery.Callbacks = function( options ) { 15941 15942 // Convert options from String-formatted to Object-formatted if needed 15943 // (we check in cache first) 15944 options = typeof options === "string" ? 15945 createOptions( options ) : 15946 jQuery.extend( {}, options ); 15947 15948 var // Flag to know if list is currently firing 15949 firing, 15950 15951 // Last fire value for non-forgettable lists 15952 memory, 15953 15954 // Flag to know if list was already fired 15955 fired, 15956 15957 // Flag to prevent firing 15958 locked, 15959 15960 // Actual callback list 15961 list = [], 15962 15963 // Queue of execution data for repeatable lists 15964 queue = [], 15965 15966 // Index of currently firing callback (modified by add/remove as needed) 15967 firingIndex = -1, 15968 15969 // Fire callbacks 15970 fire = function() { 15971 15972 // Enforce single-firing 15973 locked = locked || options.once; 15974 15975 // Execute callbacks for all pending executions, 15976 // respecting firingIndex overrides and runtime changes 15977 fired = firing = true; 15978 for ( ; queue.length; firingIndex = -1 ) { 15979 memory = queue.shift(); 15980 while ( ++firingIndex < list.length ) { 15981 15982 // Run callback and check for early termination 15983 if ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false && 15984 options.stopOnFalse ) { 15985 15986 // Jump to end and forget the data so .add doesn't re-fire 15987 firingIndex = list.length; 15988 memory = false;
vendor: 4,918 bytes, lines 15989-16198
15989 } 15990 } 15991 } 15992 15993 // Forget the data if we're done with it 15994 if ( !options.memory ) { 15995 memory = false; 15996 } 15997 15998 firing = false; 15999 16000 // Clean up if we're done firing for good 16001 if ( locked ) { 16002 16003 // Keep an empty list if we have data for future add calls 16004 if ( memory ) { 16005 list = []; 16006 16007 // Otherwise, this object is spent 16008 } else { 16009 list = ""; 16010 } 16011 } 16012 }, 16013 16014 // Actual Callbacks object 16015 self = { 16016 16017 // Add a callback or a collection of callbacks to the list 16018 add: function() { 16019 if ( list ) { 16020 16021 // If we have memory from a past run, we should fire after adding 16022 if ( memory && !firing ) { 16023 firingIndex = list.length - 1; 16024 queue.push( memory ); 16025 } 16026 16027 ( function add( args ) { 16028 jQuery.each( args, function( _, arg ) { 16029 if ( isFunction( arg ) ) { 16030 if ( !options.unique || !self.has( arg ) ) { 16031 list.push( arg ); 16032 } 16033 } else if ( arg && arg.length && toType( arg ) !== "string" ) { 16034 16035 // Inspect recursively 16036 add( arg ); 16037 } 16038 } ); 16039 } )( arguments ); 16040 16041 if ( memory && !firing ) { 16042 fire(); 16043 } 16044 } 16045 return this; 16046 }, 16047 16048 // Remove a callback from the list 16049 remove: function() { 16050 jQuery.each( arguments, function( _, arg ) { 16051 var index; 16052 while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) { 16053 list.splice( index, 1 ); 16054 16055 // Handle firing indexes 16056 if ( index <= firingIndex ) { 16057 firingIndex--; 16058 } 16059 } 16060 } ); 16061 return this; 16062 }, 16063 16064 // Check if a given callback is in the list. 16065 // If no argument is given, return whether or not list has callbacks attached. 16066 has: function( fn ) { 16067 return fn ? 16068 jQuery.inArray( fn, list ) > -1 : 16069 list.length > 0; 16070 }, 16071 16072 // Remove all callbacks from the list 16073 empty: function() { 16074 if ( list ) { 16075 list = []; 16076 } 16077 return this; 16078 }, 16079 16080 // Disable .fire and .add 16081 // Abort any current/pending executions 16082 // Clear all callbacks and values 16083 disable: function() { 16084 locked = queue = []; 16085 list = memory = ""; 16086 return this; 16087 }, 16088 disabled: function() { 16089 return !list; 16090 }, 16091 16092 // Disable .fire 16093 // Also disable .add unless we have memory (since it would have no effect) 16094 // Abort any pending executions 16095 lock: function() { 16096 locked = queue = []; 16097 if ( !memory && !firing ) { 16098 list = memory = ""; 16099 } 16100 return this; 16101 }, 16102 locked: function() { 16103 return !!locked; 16104 }, 16105 16106 // Call all callbacks with the given context and arguments 16107 fireWith: function( context, args ) { 16108 if ( !locked ) { 16109 args = args || []; 16110 args = [ context, args.slice ? args.slice() : args ]; 16111 queue.push( args ); 16112 if ( !firing ) { 16113 fire(); 16114 } 16115 } 16116 return this; 16117 }, 16118 16119 // Call all the callbacks with the given arguments 16120 fire: function() { 16121 self.fireWith( this, arguments ); 16122 return this; 16123 }, 16124 16125 // To know if the callbacks have already been called at least once 16126 fired: function() { 16127 return !!fired; 16128 } 16129 }; 16130 16131 return self; 16132}; 16133 16134 16135function Identity( v ) { 16136 return v; 16137} 16138function Thrower( ex ) { 16139 throw ex; 16140} 16141 16142function adoptValue( value, resolve, reject, noValue ) { 16143 var method; 16144 16145 try { 16146 16147 // Check for promise aspect first to privilege synchronous behavior 16148 if ( value && isFunction( ( method = value.promise ) ) ) { 16149 method.call( value ).done( resolve ).fail( reject ); 16150 16151 // Other thenables 16152 } else if ( value && isFunction( ( method = value.then ) ) ) { 16153 method.call( value, resolve, reject ); 16154 16155 // Other non-thenables 16156 } else { 16157 16158 // Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer: 16159 // * false: [ value ].slice( 0 ) => resolve( value ) 16160 // * true: [ value ].slice( 1 ) => resolve() 16161 resolve.apply( undefined, [ value ].slice( noValue ) ); 16162 } 16163 16164 // For Promises/A+, convert exceptions into rejections 16165 // Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in 16166 // Deferred#then to conditionally suppress rejection. 16167 } catch ( value ) { 16168 16169 // Support: Android 4.0 only 16170 // Strict mode functions invoked without .call/.apply get global-object context 16171 reject.apply( undefined, [ value ] ); 16172 } 16173} 16174 16175jQuery.extend( { 16176 16177 Deferred: function( func ) { 16178 var tuples = [ 16179 16180 // action, add listener, callbacks, 16181 // ... .then handlers, argument index, [final state] 16182 [ "notify", "progress", jQuery.Callbacks( "memory" ), 16183 jQuery.Callbacks( "memory" ), 2 ], 16184 [ "resolve", "done", jQuery.Callbacks( "once memory" ), 16185 jQuery.Callbacks( "once memory" ), 0, "resolved" ], 16186 [ "reject", "fail", jQuery.Callbacks( "once memory" ), 16187 jQuery.Callbacks( "once memory" ), 1, "rejected" ] 16188 ], 16189 state = "pending", 16190 promise = { 16191 state: function() { 16192 return state; 16193 }, 16194 always: function() { 16195 deferred.done( arguments ).fail( arguments ); 16196 return this; 16197 }, 16198 "catch": function( fn ) {
vendor: 67,037 bytes, lines 16199-18686
16199 return promise.then( null, fn ); 16200 }, 16201 16202 // Keep pipe for back-compat 16203 pipe: function( /* fnDone, fnFail, fnProgress */ ) { 16204 var fns = arguments; 16205 16206 return jQuery.Deferred( function( newDefer ) { 16207 jQuery.each( tuples, function( _i, tuple ) { 16208 16209 // Map tuples (progress, done, fail) to arguments (done, fail, progress) 16210 var fn = isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ]; 16211 16212 // deferred.progress(function() { bind to newDefer or newDefer.notify }) 16213 // deferred.done(function() { bind to newDefer or newDefer.resolve }) 16214 // deferred.fail(function() { bind to newDefer or newDefer.reject }) 16215 deferred[ tuple[ 1 ] ]( function() { 16216 var returned = fn && fn.apply( this, arguments ); 16217 if ( returned && isFunction( returned.promise ) ) { 16218 returned.promise() 16219 .progress( newDefer.notify ) 16220 .done( newDefer.resolve ) 16221 .fail( newDefer.reject ); 16222 } else { 16223 newDefer[ tuple[ 0 ] + "With" ]( 16224 this, 16225 fn ? [ returned ] : arguments 16226 ); 16227 } 16228 } ); 16229 } ); 16230 fns = null; 16231 } ).promise(); 16232 }, 16233 then: function( onFulfilled, onRejected, onProgress ) { 16234 var maxDepth = 0; 16235 function resolve( depth, deferred, handler, special ) { 16236 return function() { 16237 var that = this, 16238 args = arguments, 16239 mightThrow = function() { 16240 var returned, then; 16241 16242 // Support: Promises/A+ section 2.3.3.3.3 16243 // https://promisesaplus.com/#point-59 16244 // Ignore double-resolution attempts 16245 if ( depth < maxDepth ) { 16246 return; 16247 } 16248 16249 returned = handler.apply( that, args ); 16250 16251 // Support: Promises/A+ section 2.3.1 16252 // https://promisesaplus.com/#point-48 16253 if ( returned === deferred.promise() ) { 16254 throw new TypeError( "Thenable self-resolution" ); 16255 } 16256 16257 // Support: Promises/A+ sections 2.3.3.1, 3.5 16258 // https://promisesaplus.com/#point-54 16259 // https://promisesaplus.com/#point-75 16260 // Retrieve `then` only once 16261 then = returned && 16262 16263 // Support: Promises/A+ section 2.3.4 16264 // https://promisesaplus.com/#point-64 16265 // Only check objects and functions for thenability 16266 ( typeof returned === "object" || 16267 typeof returned === "function" ) && 16268 returned.then; 16269 16270 // Handle a returned thenable 16271 if ( isFunction( then ) ) { 16272 16273 // Special processors (notify) just wait for resolution 16274 if ( special ) { 16275 then.call( 16276 returned, 16277 resolve( maxDepth, deferred, Identity, special ), 16278 resolve( maxDepth, deferred, Thrower, special ) 16279 ); 16280 16281 // Normal processors (resolve) also hook into progress 16282 } else { 16283 16284 // ...and disregard older resolution values 16285 maxDepth++; 16286 16287 then.call( 16288 returned, 16289 resolve( maxDepth, deferred, Identity, special ), 16290 resolve( maxDepth, deferred, Thrower, special ), 16291 resolve( maxDepth, deferred, Identity, 16292 deferred.notifyWith ) 16293 ); 16294 } 16295 16296 // Handle all other returned values 16297 } else { 16298 16299 // Only substitute handlers pass on context 16300 // and multiple values (non-spec behavior) 16301 if ( handler !== Identity ) { 16302 that = undefined; 16303 args = [ returned ]; 16304 } 16305 16306 // Process the value(s) 16307 // Default process is resolve 16308 ( special || deferred.resolveWith )( that, args ); 16309 } 16310 }, 16311 16312 // Only normal processors (resolve) catch and reject exceptions 16313 process = special ? 16314 mightThrow : 16315 function() { 16316 try { 16317 mightThrow(); 16318 } catch ( e ) { 16319 16320 if ( jQuery.Deferred.exceptionHook ) { 16321 jQuery.Deferred.exceptionHook( e, 16322 process.error ); 16323 } 16324 16325 // Support: Promises/A+ section 2.3.3.3.4.1 16326 // https://promisesaplus.com/#point-61 16327 // Ignore post-resolution exceptions 16328 if ( depth + 1 >= maxDepth ) { 16329 16330 // Only substitute handlers pass on context 16331 // and multiple values (non-spec behavior) 16332 if ( handler !== Thrower ) { 16333 that = undefined; 16334 args = [ e ]; 16335 } 16336 16337 deferred.rejectWith( that, args ); 16338 } 16339 } 16340 }; 16341 16342 // Support: Promises/A+ section 2.3.3.3.1 16343 // https://promisesaplus.com/#point-57 16344 // Re-resolve promises immediately to dodge false rejection from 16345 // subsequent errors 16346 if ( depth ) { 16347 process(); 16348 } else { 16349 16350 // Call an optional hook to record the error, in case of exception 16351 // since it's otherwise lost when execution goes async 16352 if ( jQuery.Deferred.getErrorHook ) { 16353 process.error = jQuery.Deferred.getErrorHook(); 16354 16355 // The deprecated alias of the above. While the name suggests 16356 // returning the stack, not an error instance, jQuery just passes 16357 // it directly to `console.warn` so both will work; an instance 16358 // just better cooperates with source maps. 16359 } else if ( jQuery.Deferred.getStackHook ) { 16360 process.error = jQuery.Deferred.getStackHook(); 16361 } 16362 window.setTimeout( process ); 16363 } 16364 }; 16365 } 16366 16367 return jQuery.Deferred( function( newDefer ) { 16368 16369 // progress_handlers.add( ... ) 16370 tuples[ 0 ][ 3 ].add( 16371 resolve( 16372 0, 16373 newDefer, 16374 isFunction( onProgress ) ? 16375 onProgress : 16376 Identity, 16377 newDefer.notifyWith 16378 ) 16379 ); 16380 16381 // fulfilled_handlers.add( ... ) 16382 tuples[ 1 ][ 3 ].add( 16383 resolve( 16384 0, 16385 newDefer, 16386 isFunction( onFulfilled ) ? 16387 onFulfilled : 16388 Identity 16389 ) 16390 ); 16391 16392 // rejected_handlers.add( ... ) 16393 tuples[ 2 ][ 3 ].add( 16394 resolve( 16395 0, 16396 newDefer, 16397 isFunction( onRejected ) ? 16398 onRejected : 16399 Thrower 16400 ) 16401 ); 16402 } ).promise(); 16403 }, 16404 16405 // Get a promise for this deferred 16406 // If obj is provided, the promise aspect is added to the object 16407 promise: function( obj ) { 16408 return obj != null ? jQuery.extend( obj, promise ) : promise; 16409 } 16410 }, 16411 deferred = {}; 16412 16413 // Add list-specific methods 16414 jQuery.each( tuples, function( i, tuple ) { 16415 var list = tuple[ 2 ], 16416 stateString = tuple[ 5 ]; 16417 16418 // promise.progress = list.add 16419 // promise.done = list.add 16420 // promise.fail = list.add 16421 promise[ tuple[ 1 ] ] = list.add; 16422 16423 // Handle state 16424 if ( stateString ) { 16425 list.add( 16426 function() { 16427 16428 // state = "resolved" (i.e., fulfilled) 16429 // state = "rejected" 16430 state = stateString; 16431 }, 16432 16433 // rejected_callbacks.disable 16434 // fulfilled_callbacks.disable 16435 tuples[ 3 - i ][ 2 ].disable, 16436 16437 // rejected_handlers.disable 16438 // fulfilled_handlers.disable 16439 tuples[ 3 - i ][ 3 ].disable, 16440 16441 // progress_callbacks.lock 16442 tuples[ 0 ][ 2 ].lock, 16443 16444 // progress_handlers.lock 16445 tuples[ 0 ][ 3 ].lock 16446 ); 16447 } 16448 16449 // progress_handlers.fire 16450 // fulfilled_handlers.fire 16451 // rejected_handlers.fire 16452 list.add( tuple[ 3 ].fire ); 16453 16454 // deferred.notify = function() { deferred.notifyWith(...) } 16455 // deferred.resolve = function() { deferred.resolveWith(...) } 16456 // deferred.reject = function() { deferred.rejectWith(...) } 16457 deferred[ tuple[ 0 ] ] = function() { 16458 deferred[ tuple[ 0 ] + "With" ]( this === deferred ? undefined : this, arguments ); 16459 return this; 16460 }; 16461 16462 // deferred.notifyWith = list.fireWith 16463 // deferred.resolveWith = list.fireWith 16464 // deferred.rejectWith = list.fireWith 16465 deferred[ tuple[ 0 ] + "With" ] = list.fireWith; 16466 } ); 16467 16468 // Make the deferred a promise 16469 promise.promise( deferred ); 16470 16471 // Call given func if any 16472 if ( func ) { 16473 func.call( deferred, deferred ); 16474 } 16475 16476 // All done! 16477 return deferred; 16478 }, 16479 16480 // Deferred helper 16481 when: function( singleValue ) { 16482 var 16483 16484 // count of uncompleted subordinates 16485 remaining = arguments.length, 16486 16487 // count of unprocessed arguments 16488 i = remaining, 16489 16490 // subordinate fulfillment data 16491 resolveContexts = Array( i ), 16492 resolveValues = slice.call( arguments ), 16493 16494 // the primary Deferred 16495 primary = jQuery.Deferred(), 16496 16497 // subordinate callback factory 16498 updateFunc = function( i ) { 16499 return function( value ) { 16500 resolveContexts[ i ] = this; 16501 resolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value; 16502 if ( !( --remaining ) ) { 16503 primary.resolveWith( resolveContexts, resolveValues ); 16504 } 16505 }; 16506 }; 16507 16508 // Single- and empty arguments are adopted like Promise.resolve 16509 if ( remaining <= 1 ) { 16510 adoptValue( singleValue, primary.done( updateFunc( i ) ).resolve, primary.reject, 16511 !remaining ); 16512 16513 // Use .then() to unwrap secondary thenables (cf. gh-3000) 16514 if ( primary.state() === "pending" || 16515 isFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) { 16516 16517 return primary.then(); 16518 } 16519 } 16520 16521 // Multiple arguments are aggregated like Promise.all array elements 16522 while ( i-- ) { 16523 adoptValue( resolveValues[ i ], updateFunc( i ), primary.reject ); 16524 } 16525 16526 return primary.promise(); 16527 } 16528} ); 16529 16530 16531// These usually indicate a programmer mistake during development, 16532// warn about them ASAP rather than swallowing them by default. 16533var rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/; 16534 16535// If `jQuery.Deferred.getErrorHook` is defined, `asyncError` is an error 16536// captured before the async barrier to get the original error cause 16537// which may otherwise be hidden. 16538jQuery.Deferred.exceptionHook = function( error, asyncError ) { 16539 16540 // Support: IE 8 - 9 only 16541 // Console exists when dev tools are open, which can happen at any time 16542 if ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) { 16543 window.console.warn( "jQuery.Deferred exception: " + error.message, 16544 error.stack, asyncError ); 16545 } 16546}; 16547 16548 16549 16550 16551jQuery.readyException = function( error ) { 16552 window.setTimeout( function() { 16553 throw error; 16554 } ); 16555}; 16556 16557 16558 16559 16560// The deferred used on DOM ready 16561var readyList = jQuery.Deferred(); 16562 16563jQuery.fn.ready = function( fn ) { 16564 16565 readyList 16566 .then( fn ) 16567 16568 // Wrap jQuery.readyException in a function so that the lookup 16569 // happens at the time of error handling instead of callback 16570 // registration. 16571 .catch( function( error ) { 16572 jQuery.readyException( error ); 16573 } ); 16574 16575 return this; 16576}; 16577 16578jQuery.extend( { 16579 16580 // Is the DOM ready to be used? Set to true once it occurs. 16581 isReady: false, 16582 16583 // A counter to track how many items to wait for before 16584 // the ready event fires. See trac-6781 16585 readyWait: 1, 16586 16587 // Handle when the DOM is ready 16588 ready: function( wait ) { 16589 16590 // Abort if there are pending holds or we're already ready 16591 if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) { 16592 return; 16593 } 16594 16595 // Remember that the DOM is ready 16596 jQuery.isReady = true; 16597 16598 // If a normal DOM Ready event fired, decrement, and wait if need be 16599 if ( wait !== true && --jQuery.readyWait > 0 ) { 16600 return; 16601 } 16602 16603 // If there are functions bound, to execute 16604 readyList.resolveWith( document, [ jQuery ] ); 16605 } 16606} ); 16607 16608jQuery.ready.then = readyList.then; 16609 16610// The ready event handler and self cleanup method 16611function completed() { 16612 document.removeEventListener( "DOMContentLoaded", completed ); 16613 window.removeEventListener( "load", completed ); 16614 jQuery.ready(); 16615} 16616 16617// Catch cases where $(document).ready() is called 16618// after the browser event has already occurred. 16619// Support: IE <=9 - 10 only 16620// Older IE sometimes signals "interactive" too soon 16621if ( document.readyState === "complete" || 16622 ( document.readyState !== "loading" && !document.documentElement.doScroll ) ) { 16623 16624 // Handle it asynchronously to allow scripts the opportunity to delay ready 16625 window.setTimeout( jQuery.ready ); 16626 16627} else { 16628 16629 // Use the handy event callback 16630 document.addEventListener( "DOMContentLoaded", completed ); 16631 16632 // A fallback to window.onload, that will always work 16633 window.addEventListener( "load", completed ); 16634} 16635 16636 16637 16638 16639// Multifunctional method to get and set values of a collection 16640// The value/s can optionally be executed if it's a function 16641var access = function( elems, fn, key, value, chainable, emptyGet, raw ) { 16642 var i = 0, 16643 len = elems.length, 16644 bulk = key == null; 16645 16646 // Sets many values 16647 if ( toType( key ) === "object" ) { 16648 chainable = true; 16649 for ( i in key ) { 16650 access( elems, fn, i, key[ i ], true, emptyGet, raw ); 16651 } 16652 16653 // Sets one value 16654 } else if ( value !== undefined ) { 16655 chainable = true; 16656 16657 if ( !isFunction( value ) ) { 16658 raw = true; 16659 } 16660 16661 if ( bulk ) { 16662 16663 // Bulk operations run against the entire set 16664 if ( raw ) { 16665 fn.call( elems, value ); 16666 fn = null; 16667 16668 // ...except when executing function values 16669 } else { 16670 bulk = fn; 16671 fn = function( elem, _key, value ) { 16672 return bulk.call( jQuery( elem ), value ); 16673 }; 16674 } 16675 } 16676 16677 if ( fn ) { 16678 for ( ; i < len; i++ ) { 16679 fn( 16680 elems[ i ], key, raw ? 16681 value : 16682 value.call( elems[ i ], i, fn( elems[ i ], key ) ) 16683 ); 16684 } 16685 } 16686 } 16687 16688 if ( chainable ) { 16689 return elems; 16690 } 16691 16692 // Gets 16693 if ( bulk ) { 16694 return fn.call( elems ); 16695 } 16696 16697 return len ? fn( elems[ 0 ], key ) : emptyGet; 16698}; 16699 16700 16701// Matches dashed string for camelizing 16702var rmsPrefix = /^-ms-/, 16703 rdashAlpha = /-([a-z])/g; 16704 16705// Used by camelCase as callback to replace() 16706function fcamelCase( _all, letter ) { 16707 return letter.toUpperCase(); 16708} 16709 16710// Convert dashed to camelCase; used by the css and data modules 16711// Support: IE <=9 - 11, Edge 12 - 15 16712// Microsoft forgot to hump their vendor prefix (trac-9572) 16713function camelCase( string ) { 16714 return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); 16715} 16716var acceptData = function( owner ) { 16717 16718 // Accepts only: 16719 // - Node 16720 // - Node.ELEMENT_NODE 16721 // - Node.DOCUMENT_NODE 16722 // - Object 16723 // - Any 16724 return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType ); 16725}; 16726 16727 16728 16729 16730function Data() { 16731 this.expando = jQuery.expando + Data.uid++; 16732} 16733 16734Data.uid = 1; 16735 16736Data.prototype = { 16737 16738 cache: function( owner ) { 16739 16740 // Check if the owner object already has a cache 16741 var value = owner[ this.expando ]; 16742 16743 // If not, create one 16744 if ( !value ) { 16745 value = {}; 16746 16747 // We can accept data for non-element nodes in modern browsers, 16748 // but we should not, see trac-8335. 16749 // Always return an empty object. 16750 if ( acceptData( owner ) ) { 16751 16752 // If it is a node unlikely to be stringify-ed or looped over 16753 // use plain assignment 16754 if ( owner.nodeType ) { 16755 owner[ this.expando ] = value; 16756 16757 // Otherwise secure it in a non-enumerable property 16758 // configurable must be true to allow the property to be 16759 // deleted when data is removed 16760 } else { 16761 Object.defineProperty( owner, this.expando, { 16762 value: value, 16763 configurable: true 16764 } ); 16765 } 16766 } 16767 } 16768 16769 return value; 16770 }, 16771 set: function( owner, data, value ) { 16772 var prop, 16773 cache = this.cache( owner ); 16774 16775 // Handle: [ owner, key, value ] args 16776 // Always use camelCase key (gh-2257) 16777 if ( typeof data === "string" ) { 16778 cache[ camelCase( data ) ] = value; 16779 16780 // Handle: [ owner, { properties } ] args 16781 } else { 16782 16783 // Copy the properties one-by-one to the cache object 16784 for ( prop in data ) { 16785 cache[ camelCase( prop ) ] = data[ prop ]; 16786 } 16787 } 16788 return cache; 16789 }, 16790 get: function( owner, key ) { 16791 return key === undefined ? 16792 this.cache( owner ) : 16793 16794 // Always use camelCase key (gh-2257) 16795 owner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ]; 16796 }, 16797 access: function( owner, key, value ) { 16798 16799 // In cases where either: 16800 // 16801 // 1. No key was specified 16802 // 2. A string key was specified, but no value provided 16803 // 16804 // Take the "read" path and allow the get method to determine 16805 // which value to return, respectively either: 16806 // 16807 // 1. The entire cache object 16808 // 2. The data stored at the key 16809 // 16810 if ( key === undefined || 16811 ( ( key && typeof key === "string" ) && value === undefined ) ) { 16812 16813 return this.get( owner, key ); 16814 } 16815 16816 // When the key is not a string, or both a key and value 16817 // are specified, set or extend (existing objects) with either: 16818 // 16819 // 1. An object of properties 16820 // 2. A key and value 16821 // 16822 this.set( owner, key, value ); 16823 16824 // Since the "set" path can have two possible entry points 16825 // return the expected data based on which path was taken[*] 16826 return value !== undefined ? value : key; 16827 }, 16828 remove: function( owner, key ) { 16829 var i, 16830 cache = owner[ this.expando ]; 16831 16832 if ( cache === undefined ) { 16833 return; 16834 } 16835 16836 if ( key !== undefined ) { 16837 16838 // Support array or space separated string of keys 16839 if ( Array.isArray( key ) ) { 16840 16841 // If key is an array of keys... 16842 // We always set camelCase keys, so remove that. 16843 key = key.map( camelCase ); 16844 } else { 16845 key = camelCase( key ); 16846 16847 // If a key with the spaces exists, use it. 16848 // Otherwise, create an array by matching non-whitespace 16849 key = key in cache ? 16850 [ key ] : 16851 ( key.match( rnothtmlwhite ) || [] ); 16852 } 16853 16854 i = key.length; 16855 16856 while ( i-- ) { 16857 delete cache[ key[ i ] ]; 16858 } 16859 } 16860 16861 // Remove the expando if there's no more data 16862 if ( key === undefined || jQuery.isEmptyObject( cache ) ) { 16863 16864 // Support: Chrome <=35 - 45 16865 // Webkit & Blink performance suffers when deleting properties 16866 // from DOM nodes, so set to undefined instead 16867 // https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted) 16868 if ( owner.nodeType ) { 16869 owner[ this.expando ] = undefined; 16870 } else { 16871 delete owner[ this.expando ]; 16872 } 16873 } 16874 }, 16875 hasData: function( owner ) { 16876 var cache = owner[ this.expando ]; 16877 return cache !== undefined && !jQuery.isEmptyObject( cache ); 16878 } 16879}; 16880var dataPriv = new Data(); 16881 16882var dataUser = new Data(); 16883 16884 16885 16886// Implementation Summary 16887// 16888// 1. Enforce API surface and semantic compatibility with 1.9.x branch 16889// 2. Improve the module's maintainability by reducing the storage 16890// paths to a single mechanism. 16891// 3. Use the same single mechanism to support "private" and "user" data. 16892// 4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData) 16893// 5. Avoid exposing implementation details on user objects (eg. expando properties) 16894// 6. Provide a clear path for implementation upgrade to WeakMap in 2014 16895 16896var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/, 16897 rmultiDash = /[A-Z]/g; 16898 16899function getData( data ) { 16900 if ( data === "true" ) { 16901 return true; 16902 } 16903 16904 if ( data === "false" ) { 16905 return false; 16906 } 16907 16908 if ( data === "null" ) { 16909 return null; 16910 } 16911 16912 // Only convert to a number if it doesn't change the string 16913 if ( data === +data + "" ) { 16914 return +data; 16915 } 16916 16917 if ( rbrace.test( data ) ) { 16918 return JSON.parse( data ); 16919 } 16920 16921 return data; 16922} 16923 16924function dataAttr( elem, key, data ) { 16925 var name; 16926 16927 // If nothing was found internally, try to fetch any 16928 // data from the HTML5 data-* attribute 16929 if ( data === undefined && elem.nodeType === 1 ) { 16930 name = "data-" + key.replace( rmultiDash, "-$&" ).toLowerCase(); 16931 data = elem.getAttribute( name ); 16932 16933 if ( typeof data === "string" ) { 16934 try { 16935 data = getData( data ); 16936 } catch ( e ) {} 16937 16938 // Make sure we set the data so it isn't changed later 16939 dataUser.set( elem, key, data ); 16940 } else { 16941 data = undefined; 16942 } 16943 } 16944 return data; 16945} 16946 16947jQuery.extend( { 16948 hasData: function( elem ) { 16949 return dataUser.hasData( elem ) || dataPriv.hasData( elem ); 16950 }, 16951 16952 data: function( elem, name, data ) { 16953 return dataUser.access( elem, name, data ); 16954 }, 16955 16956 removeData: function( elem, name ) { 16957 dataUser.remove( elem, name ); 16958 }, 16959 16960 // TODO: Now that all calls to _data and _removeData have been replaced 16961 // with direct calls to dataPriv methods, these can be deprecated. 16962 _data: function( elem, name, data ) { 16963 return dataPriv.access( elem, name, data ); 16964 }, 16965 16966 _removeData: function( elem, name ) { 16967 dataPriv.remove( elem, name ); 16968 } 16969} ); 16970 16971jQuery.fn.extend( { 16972 data: function( key, value ) { 16973 var i, name, data, 16974 elem = this[ 0 ], 16975 attrs = elem && elem.attributes; 16976 16977 // Gets all values 16978 if ( key === undefined ) { 16979 if ( this.length ) { 16980 data = dataUser.get( elem ); 16981 16982 if ( elem.nodeType === 1 && !dataPriv.get( elem, "hasDataAttrs" ) ) { 16983 i = attrs.length; 16984 while ( i-- ) { 16985 16986 // Support: IE 11 only 16987 // The attrs elements can be null (trac-14894) 16988 if ( attrs[ i ] ) { 16989 name = attrs[ i ].name; 16990 if ( name.indexOf( "data-" ) === 0 ) { 16991 name = camelCase( name.slice( 5 ) ); 16992 dataAttr( elem, name, data[ name ] ); 16993 } 16994 } 16995 } 16996 dataPriv.set( elem, "hasDataAttrs", true ); 16997 } 16998 } 16999 17000 return data; 17001 } 17002 17003 // Sets multiple values 17004 if ( typeof key === "object" ) { 17005 return this.each( function() { 17006 dataUser.set( this, key ); 17007 } ); 17008 } 17009 17010 return access( this, function( value ) { 17011 var data; 17012 17013 // The calling jQuery object (element matches) is not empty 17014 // (and therefore has an element appears at this[ 0 ]) and the 17015 // `value` parameter was not undefined. An empty jQuery object 17016 // will result in `undefined` for elem = this[ 0 ] which will 17017 // throw an exception if an attempt to read a data cache is made. 17018 if ( elem && value === undefined ) { 17019 17020 // Attempt to get data from the cache 17021 // The key will always be camelCased in Data 17022 data = dataUser.get( elem, key ); 17023 if ( data !== undefined ) { 17024 return data; 17025 } 17026 17027 // Attempt to "discover" the data in 17028 // HTML5 custom data-* attrs 17029 data = dataAttr( elem, key ); 17030 if ( data !== undefined ) { 17031 return data; 17032 } 17033 17034 // We tried really hard, but the data doesn't exist. 17035 return; 17036 } 17037 17038 // Set the data... 17039 this.each( function() { 17040 17041 // We always store the camelCased key 17042 dataUser.set( this, key, value ); 17043 } ); 17044 }, null, value, arguments.length > 1, null, true ); 17045 }, 17046 17047 removeData: function( key ) { 17048 return this.each( function() { 17049 dataUser.remove( this, key ); 17050 } ); 17051 } 17052} ); 17053 17054 17055jQuery.extend( { 17056 queue: function( elem, type, data ) { 17057 var queue; 17058 17059 if ( elem ) { 17060 type = ( type || "fx" ) + "queue"; 17061 queue = dataPriv.get( elem, type ); 17062 17063 // Speed up dequeue by getting out quickly if this is just a lookup 17064 if ( data ) { 17065 if ( !queue || Array.isArray( data ) ) { 17066 queue = dataPriv.access( elem, type, jQuery.makeArray( data ) ); 17067 } else { 17068 queue.push( data ); 17069 } 17070 } 17071 return queue || []; 17072 } 17073 }, 17074 17075 dequeue: function( elem, type ) { 17076 type = type || "fx"; 17077 17078 var queue = jQuery.queue( elem, type ), 17079 startLength = queue.length, 17080 fn = queue.shift(), 17081 hooks = jQuery._queueHooks( elem, type ), 17082 next = function() { 17083 jQuery.dequeue( elem, type ); 17084 }; 17085 17086 // If the fx queue is dequeued, always remove the progress sentinel 17087 if ( fn === "inprogress" ) { 17088 fn = queue.shift(); 17089 startLength--; 17090 } 17091 17092 if ( fn ) { 17093 17094 // Add a progress sentinel to prevent the fx queue from being 17095 // automatically dequeued 17096 if ( type === "fx" ) { 17097 queue.unshift( "inprogress" ); 17098 } 17099 17100 // Clear up the last queue stop function 17101 delete hooks.stop; 17102 fn.call( elem, next, hooks ); 17103 } 17104 17105 if ( !startLength && hooks ) { 17106 hooks.empty.fire(); 17107 } 17108 }, 17109 17110 // Not public - generate a queueHooks object, or return the current one 17111 _queueHooks: function( elem, type ) { 17112 var key = type + "queueHooks"; 17113 return dataPriv.get( elem, key ) || dataPriv.access( elem, key, { 17114 empty: jQuery.Callbacks( "once memory" ).add( function() { 17115 dataPriv.remove( elem, [ type + "queue", key ] ); 17116 } ) 17117 } ); 17118 } 17119} ); 17120 17121jQuery.fn.extend( { 17122 queue: function( type, data ) { 17123 var setter = 2; 17124 17125 if ( typeof type !== "string" ) { 17126 data = type; 17127 type = "fx"; 17128 setter--; 17129 } 17130 17131 if ( arguments.length < setter ) { 17132 return jQuery.queue( this[ 0 ], type ); 17133 } 17134 17135 return data === undefined ? 17136 this : 17137 this.each( function() { 17138 var queue = jQuery.queue( this, type, data ); 17139 17140 // Ensure a hooks for this queue 17141 jQuery._queueHooks( this, type ); 17142 17143 if ( type === "fx" && queue[ 0 ] !== "inprogress" ) { 17144 jQuery.dequeue( this, type ); 17145 } 17146 } ); 17147 }, 17148 dequeue: function( type ) { 17149 return this.each( function() { 17150 jQuery.dequeue( this, type ); 17151 } ); 17152 }, 17153 clearQueue: function( type ) { 17154 return this.queue( type || "fx", [] ); 17155 }, 17156 17157 // Get a promise resolved when queues of a certain type 17158 // are emptied (fx is the type by default) 17159 promise: function( type, obj ) { 17160 var tmp, 17161 count = 1, 17162 defer = jQuery.Deferred(), 17163 elements = this, 17164 i = this.length, 17165 resolve = function() { 17166 if ( !( --count ) ) { 17167 defer.resolveWith( elements, [ elements ] ); 17168 } 17169 }; 17170 17171 if ( typeof type !== "string" ) { 17172 obj = type; 17173 type = undefined; 17174 } 17175 type = type || "fx"; 17176 17177 while ( i-- ) { 17178 tmp = dataPriv.get( elements[ i ], type + "queueHooks" ); 17179 if ( tmp && tmp.empty ) { 17180 count++; 17181 tmp.empty.add( resolve ); 17182 } 17183 } 17184 resolve(); 17185 return defer.promise( obj ); 17186 } 17187} ); 17188var pnum = ( /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/ ).source; 17189 17190var rcssNum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" ); 17191 17192 17193var cssExpand = [ "Top", "Right", "Bottom", "Left" ]; 17194 17195var documentElement = document.documentElement; 17196 17197 17198 17199 var isAttached = function( elem ) { 17200 return jQuery.contains( elem.ownerDocument, elem ); 17201 }, 17202 composed = { composed: true }; 17203 17204 // Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only 17205 // Check attachment across shadow DOM boundaries when possible (gh-3504) 17206 // Support: iOS 10.0-10.2 only 17207 // Early iOS 10 versions support `attachShadow` but not `getRootNode`, 17208 // leading to errors. We need to check for `getRootNode`. 17209 if ( documentElement.getRootNode ) { 17210 isAttached = function( elem ) { 17211 return jQuery.contains( elem.ownerDocument, elem ) || 17212 elem.getRootNode( composed ) === elem.ownerDocument; 17213 }; 17214 } 17215var isHiddenWithinTree = function( elem, el ) { 17216 17217 // isHiddenWithinTree might be called from jQuery#filter function; 17218 // in that case, element will be second argument 17219 elem = el || elem; 17220 17221 // Inline style trumps all 17222 return elem.style.display === "none" || 17223 elem.style.display === "" && 17224 17225 // Otherwise, check computed style 17226 // Support: Firefox <=43 - 45 17227 // Disconnected elements can have computed display: none, so first confirm that elem is 17228 // in the document. 17229 isAttached( elem ) && 17230 17231 jQuery.css( elem, "display" ) === "none"; 17232 }; 17233 17234 17235 17236function adjustCSS( elem, prop, valueParts, tween ) { 17237 var adjusted, scale, 17238 maxIterations = 20, 17239 currentValue = tween ? 17240 function() { 17241 return tween.cur(); 17242 } : 17243 function() { 17244 return jQuery.css( elem, prop, "" ); 17245 }, 17246 initial = currentValue(), 17247 unit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ), 17248 17249 // Starting value computation is required for potential unit mismatches 17250 initialInUnit = elem.nodeType && 17251 ( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) && 17252 rcssNum.exec( jQuery.css( elem, prop ) ); 17253 17254 if ( initialInUnit && initialInUnit[ 3 ] !== unit ) { 17255 17256 // Support: Firefox <=54 17257 // Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144) 17258 initial = initial / 2; 17259 17260 // Trust units reported by jQuery.css 17261 unit = unit || initialInUnit[ 3 ]; 17262 17263 // Iteratively approximate from a nonzero starting point 17264 initialInUnit = +initial || 1; 17265 17266 while ( maxIterations-- ) { 17267 17268 // Evaluate and update our best guess (doubling guesses that zero out). 17269 // Finish if the scale equals or crosses 1 (making the old*new product non-positive). 17270 jQuery.style( elem, prop, initialInUnit + unit ); 17271 if ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) { 17272 maxIterations = 0; 17273 } 17274 initialInUnit = initialInUnit / scale; 17275 17276 } 17277 17278 initialInUnit = initialInUnit * 2; 17279 jQuery.style( elem, prop, initialInUnit + unit ); 17280 17281 // Make sure we update the tween properties later on 17282 valueParts = valueParts || []; 17283 } 17284 17285 if ( valueParts ) { 17286 initialInUnit = +initialInUnit || +initial || 0; 17287 17288 // Apply relative offset (+=/-=) if specified 17289 adjusted = valueParts[ 1 ] ? 17290 initialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] : 17291 +valueParts[ 2 ]; 17292 if ( tween ) { 17293 tween.unit = unit; 17294 tween.start = initialInUnit; 17295 tween.end = adjusted; 17296 } 17297 } 17298 return adjusted; 17299} 17300 17301 17302var defaultDisplayMap = {}; 17303 17304function getDefaultDisplay( elem ) { 17305 var temp, 17306 doc = elem.ownerDocument, 17307 nodeName = elem.nodeName, 17308 display = defaultDisplayMap[ nodeName ]; 17309 17310 if ( display ) { 17311 return display; 17312 } 17313 17314 temp = doc.body.appendChild( doc.createElement( nodeName ) ); 17315 display = jQuery.css( temp, "display" ); 17316 17317 temp.parentNode.removeChild( temp ); 17318 17319 if ( display === "none" ) { 17320 display = "block"; 17321 } 17322 defaultDisplayMap[ nodeName ] = display; 17323 17324 return display; 17325} 17326 17327function showHide( elements, show ) { 17328 var display, elem, 17329 values = [], 17330 index = 0, 17331 length = elements.length; 17332 17333 // Determine new display value for elements that need to change 17334 for ( ; index < length; index++ ) { 17335 elem = elements[ index ]; 17336 if ( !elem.style ) { 17337 continue; 17338 } 17339 17340 display = elem.style.display; 17341 if ( show ) { 17342 17343 // Since we force visibility upon cascade-hidden elements, an immediate (and slow) 17344 // check is required in this first loop unless we have a nonempty display value (either 17345 // inline or about-to-be-restored) 17346 if ( display === "none" ) { 17347 values[ index ] = dataPriv.get( elem, "display" ) || null; 17348 if ( !values[ index ] ) { 17349 elem.style.display = ""; 17350 } 17351 } 17352 if ( elem.style.display === "" && isHiddenWithinTree( elem ) ) { 17353 values[ index ] = getDefaultDisplay( elem ); 17354 } 17355 } else { 17356 if ( display !== "none" ) { 17357 values[ index ] = "none"; 17358 17359 // Remember what we're overwriting 17360 dataPriv.set( elem, "display", display ); 17361 } 17362 } 17363 } 17364 17365 // Set the display of the elements in a second loop to avoid constant reflow 17366 for ( index = 0; index < length; index++ ) { 17367 if ( values[ index ] != null ) { 17368 elements[ index ].style.display = values[ index ]; 17369 } 17370 } 17371 17372 return elements; 17373} 17374 17375jQuery.fn.extend( { 17376 show: function() { 17377 return showHide( this, true ); 17378 }, 17379 hide: function() { 17380 return showHide( this ); 17381 }, 17382 toggle: function( state ) { 17383 if ( typeof state === "boolean" ) { 17384 return state ? this.show() : this.hide(); 17385 } 17386 17387 return this.each( function() { 17388 if ( isHiddenWithinTree( this ) ) { 17389 jQuery( this ).show(); 17390 } else { 17391 jQuery( this ).hide(); 17392 } 17393 } ); 17394 } 17395} ); 17396var rcheckableType = ( /^(?:checkbox|radio)$/i ); 17397 17398var rtagName = ( /<([a-z][^\/\0>\x20\t\r\n\f]*)/i ); 17399 17400var rscriptType = ( /^$|^module$|\/(?:java|ecma)script/i ); 17401 17402 17403 17404( function() { 17405 var fragment = document.createDocumentFragment(), 17406 div = fragment.appendChild( document.createElement( "div" ) ), 17407 input = document.createElement( "input" ); 17408 17409 // Support: Android 4.0 - 4.3 only 17410 // Check state lost if the name is set (trac-11217) 17411 // Support: Windows Web Apps (WWA) 17412 // `name` and `type` must use .setAttribute for WWA (trac-14901) 17413 input.setAttribute( "type", "radio" ); 17414 input.setAttribute( "checked", "checked" ); 17415 input.setAttribute( "name", "t" ); 17416 17417 div.appendChild( input ); 17418 17419 // Support: Android <=4.1 only 17420 // Older WebKit doesn't clone checked state correctly in fragments 17421 support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked; 17422 17423 // Support: IE <=11 only 17424 // Make sure textarea (and checkbox) defaultValue is properly cloned 17425 div.innerHTML = "<textarea>x</textarea>"; 17426 support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue; 17427 17428 // Support: IE <=9 only 17429 // IE <=9 replaces <option> tags with their contents when inserted outside of 17430 // the select element. 17431 div.innerHTML = "<option></option>"; 17432 support.option = !!div.lastChild; 17433} )(); 17434 17435 17436// We have to close these tags to support XHTML (trac-13200) 17437var wrapMap = { 17438 17439 // XHTML parsers do not magically insert elements in the 17440 // same way that tag soup parsers do. So we cannot shorten 17441 // this by omitting <tbody> or other required elements. 17442 thead: [ 1, "<table>", "</table>" ], 17443 col: [ 2, "<table><colgroup>", "</colgroup></table>" ], 17444 tr: [ 2, "<table><tbody>", "</tbody></table>" ], 17445 td: [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ], 17446 17447 _default: [ 0, "", "" ] 17448}; 17449 17450wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; 17451wrapMap.th = wrapMap.td; 17452 17453// Support: IE <=9 only 17454if ( !support.option ) { 17455 wrapMap.optgroup = wrapMap.option = [ 1, "<select multiple='multiple'>", "</select>" ]; 17456} 17457 17458 17459function getAll( context, tag ) { 17460 17461 // Support: IE <=9 - 11 only 17462 // Use typeof to avoid zero-argument method invocation on host objects (trac-15151) 17463 var ret; 17464 17465 if ( typeof context.getElementsByTagName !== "undefined" ) { 17466 ret = context.getElementsByTagName( tag || "*" ); 17467 17468 } else if ( typeof context.querySelectorAll !== "undefined" ) { 17469 ret = context.querySelectorAll( tag || "*" ); 17470 17471 } else { 17472 ret = []; 17473 } 17474 17475 if ( tag === undefined || tag && nodeName( context, tag ) ) { 17476 return jQuery.merge( [ context ], ret ); 17477 } 17478 17479 return ret; 17480} 17481 17482 17483// Mark scripts as having already been evaluated 17484function setGlobalEval( elems, refElements ) { 17485 var i = 0, 17486 l = elems.length; 17487 17488 for ( ; i < l; i++ ) { 17489 dataPriv.set( 17490 elems[ i ], 17491 "globalEval", 17492 !refElements || dataPriv.get( refElements[ i ], "globalEval" ) 17493 ); 17494 } 17495} 17496 17497 17498var rhtml = /<|&#?\w+;/; 17499 17500function buildFragment( elems, context, scripts, selection, ignored ) { 17501 var elem, tmp, tag, wrap, attached, j, 17502 fragment = context.createDocumentFragment(), 17503 nodes = [], 17504 i = 0, 17505 l = elems.length; 17506 17507 for ( ; i < l; i++ ) { 17508 elem = elems[ i ]; 17509 17510 if ( elem || elem === 0 ) { 17511 17512 // Add nodes directly 17513 if ( toType( elem ) === "object" ) { 17514 17515 // Support: Android <=4.0 only, PhantomJS 1 only 17516 // push.apply(_, arraylike) throws on ancient WebKit 17517 jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem ); 17518 17519 // Convert non-html into a text node 17520 } else if ( !rhtml.test( elem ) ) { 17521 nodes.push( context.createTextNode( elem ) ); 17522 17523 // Convert html into DOM nodes 17524 } else { 17525 tmp = tmp || fragment.appendChild( context.createElement( "div" ) ); 17526 17527 // Deserialize a standard representation 17528 tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase(); 17529 wrap = wrapMap[ tag ] || wrapMap._default; 17530 tmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ]; 17531 17532 // Descend through wrappers to the right content 17533 j = wrap[ 0 ]; 17534 while ( j-- ) { 17535 tmp = tmp.lastChild; 17536 } 17537 17538 // Support: Android <=4.0 only, PhantomJS 1 only 17539 // push.apply(_, arraylike) throws on ancient WebKit 17540 jQuery.merge( nodes, tmp.childNodes ); 17541 17542 // Remember the top-level container 17543 tmp = fragment.firstChild; 17544 17545 // Ensure the created nodes are orphaned (trac-12392) 17546 tmp.textContent = ""; 17547 } 17548 } 17549 } 17550 17551 // Remove wrapper from fragment 17552 fragment.textContent = ""; 17553 17554 i = 0; 17555 while ( ( elem = nodes[ i++ ] ) ) { 17556 17557 // Skip elements already in the context collection (trac-4087) 17558 if ( selection && jQuery.inArray( elem, selection ) > -1 ) { 17559 if ( ignored ) { 17560 ignored.push( elem ); 17561 } 17562 continue; 17563 } 17564 17565 attached = isAttached( elem ); 17566 17567 // Append to fragment 17568 tmp = getAll( fragment.appendChild( elem ), "script" ); 17569 17570 // Preserve script evaluation history 17571 if ( attached ) { 17572 setGlobalEval( tmp ); 17573 } 17574 17575 // Capture executables 17576 if ( scripts ) { 17577 j = 0; 17578 while ( ( elem = tmp[ j++ ] ) ) { 17579 if ( rscriptType.test( elem.type || "" ) ) { 17580 scripts.push( elem ); 17581 } 17582 } 17583 } 17584 } 17585 17586 return fragment; 17587} 17588 17589 17590var rtypenamespace = /^([^.]*)(?:\.(.+)|)/; 17591 17592function returnTrue() { 17593 return true; 17594} 17595 17596function returnFalse() { 17597 return false; 17598} 17599 17600function on( elem, types, selector, data, fn, one ) { 17601 var origFn, type; 17602 17603 // Types can be a map of types/handlers 17604 if ( typeof types === "object" ) { 17605 17606 // ( types-Object, selector, data ) 17607 if ( typeof selector !== "string" ) { 17608 17609 // ( types-Object, data ) 17610 data = data || selector; 17611 selector = undefined; 17612 } 17613 for ( type in types ) { 17614 on( elem, type, selector, data, types[ type ], one ); 17615 } 17616 return elem; 17617 } 17618 17619 if ( data == null && fn == null ) { 17620 17621 // ( types, fn ) 17622 fn = selector; 17623 data = selector = undefined; 17624 } else if ( fn == null ) { 17625 if ( typeof selector === "string" ) { 17626 17627 // ( types, selector, fn ) 17628 fn = data; 17629 data = undefined; 17630 } else { 17631 17632 // ( types, data, fn ) 17633 fn = data; 17634 data = selector; 17635 selector = undefined; 17636 } 17637 } 17638 if ( fn === false ) { 17639 fn = returnFalse; 17640 } else if ( !fn ) { 17641 return elem; 17642 } 17643 17644 if ( one === 1 ) { 17645 origFn = fn; 17646 fn = function( event ) { 17647 17648 // Can use an empty set, since event contains the info 17649 jQuery().off( event ); 17650 return origFn.apply( this, arguments ); 17651 }; 17652 17653 // Use same guid so caller can remove using origFn 17654 fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ ); 17655 } 17656 return elem.each( function() { 17657 jQuery.event.add( this, types, fn, data, selector ); 17658 } ); 17659} 17660 17661/* 17662 * Helper functions for managing events -- not part of the public interface. 17663 * Props to Dean Edwards' addEvent library for many of the ideas. 17664 */ 17665jQuery.event = { 17666 17667 global: {}, 17668 17669 add: function( elem, types, handler, data, selector ) { 17670 17671 var handleObjIn, eventHandle, tmp, 17672 events, t, handleObj, 17673 special, handlers, type, namespaces, origType, 17674 elemData = dataPriv.get( elem ); 17675 17676 // Only attach events to objects that accept data 17677 if ( !acceptData( elem ) ) { 17678 return; 17679 } 17680 17681 // Caller can pass in an object of custom data in lieu of the handler 17682 if ( handler.handler ) { 17683 handleObjIn = handler; 17684 handler = handleObjIn.handler; 17685 selector = handleObjIn.selector; 17686 } 17687 17688 // Ensure that invalid selectors throw exceptions at attach time 17689 // Evaluate against documentElement in case elem is a non-element node (e.g., document) 17690 if ( selector ) { 17691 jQuery.find.matchesSelector( documentElement, selector ); 17692 } 17693 17694 // Make sure that the handler has a unique ID, used to find/remove it later 17695 if ( !handler.guid ) { 17696 handler.guid = jQuery.guid++; 17697 } 17698 17699 // Init the element's event structure and main handler, if this is the first 17700 if ( !( events = elemData.events ) ) { 17701 events = elemData.events = Object.create( null ); 17702 } 17703 if ( !( eventHandle = elemData.handle ) ) { 17704 eventHandle = elemData.handle = function( e ) { 17705 17706 // Discard the second event of a jQuery.event.trigger() and 17707 // when an event is called after a page has unloaded 17708 return typeof jQuery !== "undefined" && jQuery.event.triggered !== e.type ? 17709 jQuery.event.dispatch.apply( elem, arguments ) : undefined; 17710 }; 17711 } 17712 17713 // Handle multiple events separated by a space 17714 types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; 17715 t = types.length; 17716 while ( t-- ) { 17717 tmp = rtypenamespace.exec( types[ t ] ) || []; 17718 type = origType = tmp[ 1 ]; 17719 namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); 17720 17721 // There *must* be a type, no attaching namespace-only handlers 17722 if ( !type ) { 17723 continue; 17724 } 17725 17726 // If event changes its type, use the special event handlers for the changed type 17727 special = jQuery.event.special[ type ] || {}; 17728 17729 // If selector defined, determine special event api type, otherwise given type 17730 type = ( selector ? special.delegateType : special.bindType ) || type; 17731 17732 // Update special based on newly reset type 17733 special = jQuery.event.special[ type ] || {}; 17734 17735 // handleObj is passed to all event handlers 17736 handleObj = jQuery.extend( { 17737 type: type, 17738 origType: origType, 17739 data: data, 17740 handler: handler, 17741 guid: handler.guid, 17742 selector: selector, 17743 needsContext: selector && jQuery.expr.match.needsContext.test( selector ), 17744 namespace: namespaces.join( "." ) 17745 }, handleObjIn ); 17746 17747 // Init the event handler queue if we're the first 17748 if ( !( handlers = events[ type ] ) ) { 17749 handlers = events[ type ] = []; 17750 handlers.delegateCount = 0; 17751 17752 // Only use addEventListener if the special events handler returns false 17753 if ( !special.setup || 17754 special.setup.call( elem, data, namespaces, eventHandle ) === false ) { 17755 17756 if ( elem.addEventListener ) { 17757 elem.addEventListener( type, eventHandle ); 17758 } 17759 } 17760 } 17761 17762 if ( special.add ) { 17763 special.add.call( elem, handleObj ); 17764 17765 if ( !handleObj.handler.guid ) { 17766 handleObj.handler.guid = handler.guid; 17767 } 17768 } 17769 17770 // Add to the element's handler list, delegates in front 17771 if ( selector ) { 17772 handlers.splice( handlers.delegateCount++, 0, handleObj ); 17773 } else { 17774 handlers.push( handleObj ); 17775 } 17776 17777 // Keep track of which events have ever been used, for event optimization 17778 jQuery.event.global[ type ] = true; 17779 } 17780 17781 }, 17782 17783 // Detach an event or set of events from an element 17784 remove: function( elem, types, handler, selector, mappedTypes ) { 17785 17786 var j, origCount, tmp, 17787 events, t, handleObj, 17788 special, handlers, type, namespaces, origType, 17789 elemData = dataPriv.hasData( elem ) && dataPriv.get( elem ); 17790 17791 if ( !elemData || !( events = elemData.events ) ) { 17792 return; 17793 } 17794 17795 // Once for each type.namespace in types; type may be omitted 17796 types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; 17797 t = types.length; 17798 while ( t-- ) { 17799 tmp = rtypenamespace.exec( types[ t ] ) || []; 17800 type = origType = tmp[ 1 ]; 17801 namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); 17802 17803 // Unbind all events (on this namespace, if provided) for the element 17804 if ( !type ) { 17805 for ( type in events ) { 17806 jQuery.event.remove( elem, type + types[ t ], handler, selector, true ); 17807 } 17808 continue; 17809 } 17810 17811 special = jQuery.event.special[ type ] || {}; 17812 type = ( selector ? special.delegateType : special.bindType ) || type; 17813 handlers = events[ type ] || []; 17814 tmp = tmp[ 2 ] && 17815 new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ); 17816 17817 // Remove matching events 17818 origCount = j = handlers.length; 17819 while ( j-- ) { 17820 handleObj = handlers[ j ]; 17821 17822 if ( ( mappedTypes || origType === handleObj.origType ) && 17823 ( !handler || handler.guid === handleObj.guid ) && 17824 ( !tmp || tmp.test( handleObj.namespace ) ) && 17825 ( !selector || selector === handleObj.selector || 17826 selector === "**" && handleObj.selector ) ) { 17827 handlers.splice( j, 1 ); 17828 17829 if ( handleObj.selector ) { 17830 handlers.delegateCount--; 17831 } 17832 if ( special.remove ) { 17833 special.remove.call( elem, handleObj ); 17834 } 17835 } 17836 } 17837 17838 // Remove generic event handler if we removed something and no more handlers exist 17839 // (avoids potential for endless recursion during removal of special event handlers) 17840 if ( origCount && !handlers.length ) { 17841 if ( !special.teardown || 17842 special.teardown.call( elem, namespaces, elemData.handle ) === false ) { 17843 17844 jQuery.removeEvent( elem, type, elemData.handle ); 17845 } 17846 17847 delete events[ type ]; 17848 } 17849 } 17850 17851 // Remove data and the expando if it's no longer used 17852 if ( jQuery.isEmptyObject( events ) ) { 17853 dataPriv.remove( elem, "handle events" ); 17854 } 17855 }, 17856 17857 dispatch: function( nativeEvent ) { 17858 17859 var i, j, ret, matched, handleObj, handlerQueue, 17860 args = new Array( arguments.length ), 17861 17862 // Make a writable jQuery.Event from the native event object 17863 event = jQuery.event.fix( nativeEvent ), 17864 17865 handlers = ( 17866 dataPriv.get( this, "events" ) || Object.create( null ) 17867 )[ event.type ] || [], 17868 special = jQuery.event.special[ event.type ] || {}; 17869 17870 // Use the fix-ed jQuery.Event rather than the (read-only) native event 17871 args[ 0 ] = event; 17872 17873 for ( i = 1; i < arguments.length; i++ ) { 17874 args[ i ] = arguments[ i ]; 17875 } 17876 17877 event.delegateTarget = this; 17878 17879 // Call the preDispatch hook for the mapped type, and let it bail if desired 17880 if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) { 17881 return; 17882 } 17883 17884 // Determine handlers 17885 handlerQueue = jQuery.event.handlers.call( this, event, handlers ); 17886 17887 // Run delegates first; they may want to stop propagation beneath us 17888 i = 0; 17889 while ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) { 17890 event.currentTarget = matched.elem; 17891 17892 j = 0; 17893 while ( ( handleObj = matched.handlers[ j++ ] ) && 17894 !event.isImmediatePropagationStopped() ) { 17895 17896 // If the event is namespaced, then each handler is only invoked if it is 17897 // specially universal or its namespaces are a superset of the event's. 17898 if ( !event.rnamespace || handleObj.namespace === false || 17899 event.rnamespace.test( handleObj.namespace ) ) { 17900 17901 event.handleObj = handleObj; 17902 event.data = handleObj.data; 17903 17904 ret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle || 17905 handleObj.handler ).apply( matched.elem, args ); 17906 17907 if ( ret !== undefined ) { 17908 if ( ( event.result = ret ) === false ) { 17909 event.preventDefault(); 17910 event.stopPropagation(); 17911 } 17912 } 17913 } 17914 } 17915 } 17916 17917 // Call the postDispatch hook for the mapped type 17918 if ( special.postDispatch ) { 17919 special.postDispatch.call( this, event ); 17920 } 17921 17922 return event.result; 17923 }, 17924 17925 handlers: function( event, handlers ) { 17926 var i, handleObj, sel, matchedHandlers, matchedSelectors, 17927 handlerQueue = [], 17928 delegateCount = handlers.delegateCount, 17929 cur = event.target; 17930 17931 // Find delegate handlers 17932 if ( delegateCount && 17933 17934 // Support: IE <=9 17935 // Black-hole SVG <use> instance trees (trac-13180) 17936 cur.nodeType && 17937 17938 // Support: Firefox <=42 17939 // Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861) 17940 // https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click 17941 // Support: IE 11 only 17942 // ...but not arrow key "clicks" of radio inputs, which can have `button` -1 (gh-2343) 17943 !( event.type === "click" && event.button >= 1 ) ) { 17944 17945 for ( ; cur !== this; cur = cur.parentNode || this ) { 17946 17947 // Don't check non-elements (trac-13208) 17948 // Don't process clicks on disabled elements (trac-6911, trac-8165, trac-11382, trac-11764) 17949 if ( cur.nodeType === 1 && !( event.type === "click" && cur.disabled === true ) ) { 17950 matchedHandlers = []; 17951 matchedSelectors = {}; 17952 for ( i = 0; i < delegateCount; i++ ) { 17953 handleObj = handlers[ i ]; 17954 17955 // Don't conflict with Object.prototype properties (trac-13203) 17956 sel = handleObj.selector + " "; 17957 17958 if ( matchedSelectors[ sel ] === undefined ) { 17959 matchedSelectors[ sel ] = handleObj.needsContext ? 17960 jQuery( sel, this ).index( cur ) > -1 : 17961 jQuery.find( sel, this, null, [ cur ] ).length; 17962 } 17963 if ( matchedSelectors[ sel ] ) { 17964 matchedHandlers.push( handleObj ); 17965 } 17966 } 17967 if ( matchedHandlers.length ) { 17968 handlerQueue.push( { elem: cur, handlers: matchedHandlers } ); 17969 } 17970 } 17971 } 17972 } 17973 17974 // Add the remaining (directly-bound) handlers 17975 cur = this; 17976 if ( delegateCount < handlers.length ) { 17977 handlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } ); 17978 } 17979 17980 return handlerQueue; 17981 }, 17982 17983 addProp: function( name, hook ) { 17984 Object.defineProperty( jQuery.Event.prototype, name, { 17985 enumerable: true, 17986 configurable: true, 17987 17988 get: isFunction( hook ) ? 17989 function() { 17990 if ( this.originalEvent ) { 17991 return hook( this.originalEvent ); 17992 } 17993 } : 17994 function() { 17995 if ( this.originalEvent ) { 17996 return this.originalEvent[ name ]; 17997 } 17998 }, 17999 18000 set: function( value ) { 18001 Object.defineProperty( this, name, { 18002 enumerable: true, 18003 configurable: true, 18004 writable: true, 18005 value: value 18006 } ); 18007 } 18008 } ); 18009 }, 18010 18011 fix: function( originalEvent ) { 18012 return originalEvent[ jQuery.expando ] ? 18013 originalEvent : 18014 new jQuery.Event( originalEvent ); 18015 }, 18016 18017 special: { 18018 load: { 18019 18020 // Prevent triggered image.load events from bubbling to window.load 18021 noBubble: true 18022 }, 18023 click: { 18024 18025 // Utilize native event to ensure correct state for checkable inputs 18026 setup: function( data ) { 18027 18028 // For mutual compressibility with _default, replace `this` access with a local var. 18029 // `|| data` is dead code meant only to preserve the variable through minification. 18030 var el = this || data; 18031 18032 // Claim the first handler 18033 if ( rcheckableType.test( el.type ) && 18034 el.click && nodeName( el, "input" ) ) { 18035 18036 // dataPriv.set( el, "click", ... ) 18037 leverageNative( el, "click", true ); 18038 } 18039 18040 // Return false to allow normal processing in the caller 18041 return false; 18042 }, 18043 trigger: function( data ) { 18044 18045 // For mutual compressibility with _default, replace `this` access with a local var. 18046 // `|| data` is dead code meant only to preserve the variable through minification. 18047 var el = this || data; 18048 18049 // Force setup before triggering a click 18050 if ( rcheckableType.test( el.type ) && 18051 el.click && nodeName( el, "input" ) ) { 18052 18053 leverageNative( el, "click" ); 18054 } 18055 18056 // Return non-false to allow normal event-path propagation 18057 return true; 18058 }, 18059 18060 // For cross-browser consistency, suppress native .click() on links 18061 // Also prevent it if we're currently inside a leveraged native-event stack 18062 _default: function( event ) { 18063 var target = event.target; 18064 return rcheckableType.test( target.type ) && 18065 target.click && nodeName( target, "input" ) && 18066 dataPriv.get( target, "click" ) || 18067 nodeName( target, "a" ); 18068 } 18069 }, 18070 18071 beforeunload: { 18072 postDispatch: function( event ) { 18073 18074 // Support: Firefox 20+ 18075 // Firefox doesn't alert if the returnValue field is not set. 18076 if ( event.result !== undefined && event.originalEvent ) { 18077 event.originalEvent.returnValue = event.result; 18078 } 18079 } 18080 } 18081 } 18082}; 18083 18084// Ensure the presence of an event listener that handles manually-triggered 18085// synthetic events by interrupting progress until reinvoked in response to 18086// *native* events that it fires directly, ensuring that state changes have 18087// already occurred before other listeners are invoked. 18088function leverageNative( el, type, isSetup ) { 18089 18090 // Missing `isSetup` indicates a trigger call, which must force setup through jQuery.event.add 18091 if ( !isSetup ) { 18092 if ( dataPriv.get( el, type ) === undefined ) { 18093 jQuery.event.add( el, type, returnTrue ); 18094 } 18095 return; 18096 } 18097 18098 // Register the controller as a special universal handler for all event namespaces 18099 dataPriv.set( el, type, false ); 18100 jQuery.event.add( el, type, { 18101 namespace: false, 18102 handler: function( event ) { 18103 var result, 18104 saved = dataPriv.get( this, type ); 18105 18106 if ( ( event.isTrigger & 1 ) && this[ type ] ) { 18107 18108 // Interrupt processing of the outer synthetic .trigger()ed event 18109 if ( !saved ) { 18110 18111 // Store arguments for use when handling the inner native event 18112 // There will always be at least one argument (an event object), so this array 18113 // will not be confused with a leftover capture object. 18114 saved = slice.call( arguments ); 18115 dataPriv.set( this, type, saved ); 18116 18117 // Trigger the native event and capture its result 18118 this[ type ](); 18119 result = dataPriv.get( this, type ); 18120 dataPriv.set( this, type, false ); 18121 18122 if ( saved !== result ) { 18123 18124 // Cancel the outer synthetic event 18125 event.stopImmediatePropagation(); 18126 event.preventDefault(); 18127 18128 return result; 18129 } 18130 18131 // If this is an inner synthetic event for an event with a bubbling surrogate 18132 // (focus or blur), assume that the surrogate already propagated from triggering 18133 // the native event and prevent that from happening again here. 18134 // This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the 18135 // bubbling surrogate propagates *after* the non-bubbling base), but that seems 18136 // less bad than duplication. 18137 } else if ( ( jQuery.event.special[ type ] || {} ).delegateType ) { 18138 event.stopPropagation(); 18139 } 18140 18141 // If this is a native event triggered above, everything is now in order 18142 // Fire an inner synthetic event with the original arguments 18143 } else if ( saved ) { 18144 18145 // ...and capture the result 18146 dataPriv.set( this, type, jQuery.event.trigger( 18147 saved[ 0 ], 18148 saved.slice( 1 ), 18149 this 18150 ) ); 18151 18152 // Abort handling of the native event by all jQuery handlers while allowing 18153 // native handlers on the same element to run. On target, this is achieved 18154 // by stopping immediate propagation just on the jQuery event. However, 18155 // the native event is re-wrapped by a jQuery one on each level of the 18156 // propagation so the only way to stop it for jQuery is to stop it for 18157 // everyone via native `stopPropagation()`. This is not a problem for 18158 // focus/blur which don't bubble, but it does also stop click on checkboxes 18159 // and radios. We accept this limitation. 18160 event.stopPropagation(); 18161 event.isImmediatePropagationStopped = returnTrue; 18162 } 18163 } 18164 } ); 18165} 18166 18167jQuery.removeEvent = function( elem, type, handle ) { 18168 18169 // This "if" is needed for plain objects 18170 if ( elem.removeEventListener ) { 18171 elem.removeEventListener( type, handle ); 18172 } 18173}; 18174 18175jQuery.Event = function( src, props ) { 18176 18177 // Allow instantiation without the 'new' keyword 18178 if ( !( this instanceof jQuery.Event ) ) { 18179 return new jQuery.Event( src, props ); 18180 } 18181 18182 // Event object 18183 if ( src && src.type ) { 18184 this.originalEvent = src; 18185 this.type = src.type; 18186 18187 // Events bubbling up the document may have been marked as prevented 18188 // by a handler lower down the tree; reflect the correct value. 18189 this.isDefaultPrevented = src.defaultPrevented || 18190 src.defaultPrevented === undefined && 18191 18192 // Support: Android <=2.3 only 18193 src.returnValue === false ? 18194 returnTrue : 18195 returnFalse; 18196 18197 // Create target properties 18198 // Support: Safari <=6 - 7 only 18199 // Target should not be a text node (trac-504, trac-13143) 18200 this.target = ( src.target && src.target.nodeType === 3 ) ? 18201 src.target.parentNode : 18202 src.target; 18203 18204 this.currentTarget = src.currentTarget; 18205 this.relatedTarget = src.relatedTarget; 18206 18207 // Event type 18208 } else { 18209 this.type = src; 18210 } 18211 18212 // Put explicitly provided properties onto the event object 18213 if ( props ) { 18214 jQuery.extend( this, props ); 18215 } 18216 18217 // Create a timestamp if incoming event doesn't have one 18218 this.timeStamp = src && src.timeStamp || Date.now(); 18219 18220 // Mark it as fixed 18221 this[ jQuery.expando ] = true; 18222}; 18223 18224// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding 18225// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html 18226jQuery.Event.prototype = { 18227 constructor: jQuery.Event, 18228 isDefaultPrevented: returnFalse, 18229 isPropagationStopped: returnFalse, 18230 isImmediatePropagationStopped: returnFalse, 18231 isSimulated: false, 18232 18233 preventDefault: function() { 18234 var e = this.originalEvent; 18235 18236 this.isDefaultPrevented = returnTrue; 18237 18238 if ( e && !this.isSimulated ) { 18239 e.preventDefault(); 18240 } 18241 }, 18242 stopPropagation: function() { 18243 var e = this.originalEvent; 18244 18245 this.isPropagationStopped = returnTrue; 18246 18247 if ( e && !this.isSimulated ) { 18248 e.stopPropagation(); 18249 } 18250 }, 18251 stopImmediatePropagation: function() { 18252 var e = this.originalEvent; 18253 18254 this.isImmediatePropagationStopped = returnTrue; 18255 18256 if ( e && !this.isSimulated ) { 18257 e.stopImmediatePropagation(); 18258 } 18259 18260 this.stopPropagation(); 18261 } 18262}; 18263 18264// Includes all common event props including KeyEvent and MouseEvent specific props 18265jQuery.each( { 18266 altKey: true, 18267 bubbles: true, 18268 cancelable: true, 18269 changedTouches: true, 18270 ctrlKey: true, 18271 detail: true, 18272 eventPhase: true, 18273 metaKey: true, 18274 pageX: true, 18275 pageY: true, 18276 shiftKey: true, 18277 view: true, 18278 "char": true, 18279 code: true, 18280 charCode: true, 18281 key: true, 18282 keyCode: true, 18283 button: true, 18284 buttons: true, 18285 clientX: true, 18286 clientY: true, 18287 offsetX: true, 18288 offsetY: true, 18289 pointerId: true, 18290 pointerType: true, 18291 screenX: true, 18292 screenY: true, 18293 targetTouches: true, 18294 toElement: true, 18295 touches: true, 18296 which: true 18297}, jQuery.event.addProp ); 18298 18299jQuery.each( { focus: "focusin", blur: "focusout" }, function( type, delegateType ) { 18300 18301 function focusMappedHandler( nativeEvent ) { 18302 if ( document.documentMode ) { 18303 18304 // Support: IE 11+ 18305 // Attach a single focusin/focusout handler on the document while someone wants 18306 // focus/blur. This is because the former are synchronous in IE while the latter 18307 // are async. In other browsers, all those handlers are invoked synchronously. 18308 18309 // `handle` from private data would already wrap the event, but we need 18310 // to change the `type` here. 18311 var handle = dataPriv.get( this, "handle" ), 18312 event = jQuery.event.fix( nativeEvent ); 18313 event.type = nativeEvent.type === "focusin" ? "focus" : "blur"; 18314 event.isSimulated = true; 18315 18316 // First, handle focusin/focusout 18317 handle( nativeEvent ); 18318 18319 // ...then, handle focus/blur 18320 // 18321 // focus/blur don't bubble while focusin/focusout do; simulate the former by only 18322 // invoking the handler at the lower level. 18323 if ( event.target === event.currentTarget ) { 18324 18325 // The setup part calls `leverageNative`, which, in turn, calls 18326 // `jQuery.event.add`, so event handle will already have been set 18327 // by this point. 18328 handle( event ); 18329 } 18330 } else { 18331 18332 // For non-IE browsers, attach a single capturing handler on the document 18333 // while someone wants focusin/focusout. 18334 jQuery.event.simulate( delegateType, nativeEvent.target, 18335 jQuery.event.fix( nativeEvent ) ); 18336 } 18337 } 18338 18339 jQuery.event.special[ type ] = { 18340 18341 // Utilize native event if possible so blur/focus sequence is correct 18342 setup: function() { 18343 18344 var attaches; 18345 18346 // Claim the first handler 18347 // dataPriv.set( this, "focus", ... ) 18348 // dataPriv.set( this, "blur", ... ) 18349 leverageNative( this, type, true ); 18350 18351 if ( document.documentMode ) { 18352 18353 // Support: IE 9 - 11+ 18354 // We use the same native handler for focusin & focus (and focusout & blur) 18355 // so we need to coordinate setup & teardown parts between those events. 18356 // Use `delegateType` as the key as `type` is already used by `leverageNative`. 18357 attaches = dataPriv.get( this, delegateType ); 18358 if ( !attaches ) { 18359 this.addEventListener( delegateType, focusMappedHandler ); 18360 } 18361 dataPriv.set( this, delegateType, ( attaches || 0 ) + 1 ); 18362 } else { 18363 18364 // Return false to allow normal processing in the caller 18365 return false; 18366 } 18367 }, 18368 trigger: function() { 18369 18370 // Force setup before trigger 18371 leverageNative( this, type ); 18372 18373 // Return non-false to allow normal event-path propagation 18374 return true; 18375 }, 18376 18377 teardown: function() { 18378 var attaches; 18379 18380 if ( document.documentMode ) { 18381 attaches = dataPriv.get( this, delegateType ) - 1; 18382 if ( !attaches ) { 18383 this.removeEventListener( delegateType, focusMappedHandler ); 18384 dataPriv.remove( this, delegateType ); 18385 } else { 18386 dataPriv.set( this, delegateType, attaches ); 18387 } 18388 } else { 18389 18390 // Return false to indicate standard teardown should be applied 18391 return false; 18392 } 18393 }, 18394 18395 // Suppress native focus or blur if we're currently inside 18396 // a leveraged native-event stack 18397 _default: function( event ) { 18398 return dataPriv.get( event.target, type ); 18399 }, 18400 18401 delegateType: delegateType 18402 }; 18403 18404 // Support: Firefox <=44 18405 // Firefox doesn't have focus(in | out) events 18406 // Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787 18407 // 18408 // Support: Chrome <=48 - 49, Safari <=9.0 - 9.1 18409 // focus(in | out) events fire after focus & blur events, 18410 // which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order 18411 // Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857 18412 // 18413 // Support: IE 9 - 11+ 18414 // To preserve relative focusin/focus & focusout/blur event order guaranteed on the 3.x branch, 18415 // attach a single handler for both events in IE. 18416 jQuery.event.special[ delegateType ] = { 18417 setup: function() { 18418 18419 // Handle: regular nodes (via `this.ownerDocument`), window 18420 // (via `this.document`) & document (via `this`). 18421 var doc = this.ownerDocument || this.document || this, 18422 dataHolder = document.documentMode ? this : doc, 18423 attaches = dataPriv.get( dataHolder, delegateType ); 18424 18425 // Support: IE 9 - 11+ 18426 // We use the same native handler for focusin & focus (and focusout & blur) 18427 // so we need to coordinate setup & teardown parts between those events. 18428 // Use `delegateType` as the key as `type` is already used by `leverageNative`. 18429 if ( !attaches ) { 18430 if ( document.documentMode ) { 18431 this.addEventListener( delegateType, focusMappedHandler ); 18432 } else { 18433 doc.addEventListener( type, focusMappedHandler, true ); 18434 } 18435 } 18436 dataPriv.set( dataHolder, delegateType, ( attaches || 0 ) + 1 ); 18437 }, 18438 teardown: function() { 18439 var doc = this.ownerDocument || this.document || this, 18440 dataHolder = document.documentMode ? this : doc, 18441 attaches = dataPriv.get( dataHolder, delegateType ) - 1; 18442 18443 if ( !attaches ) { 18444 if ( document.documentMode ) { 18445 this.removeEventListener( delegateType, focusMappedHandler ); 18446 } else { 18447 doc.removeEventListener( type, focusMappedHandler, true ); 18448 } 18449 dataPriv.remove( dataHolder, delegateType ); 18450 } else { 18451 dataPriv.set( dataHolder, delegateType, attaches ); 18452 } 18453 } 18454 }; 18455} ); 18456 18457// Create mouseenter/leave events using mouseover/out and event-time checks 18458// so that event delegation works in jQuery. 18459// Do the same for pointerenter/pointerleave and pointerover/pointerout 18460// 18461// Support: Safari 7 only 18462// Safari sends mouseenter too often; see: 18463// https://bugs.chromium.org/p/chromium/issues/detail?id=470258 18464// for the description of the bug (it existed in older Chrome versions as well). 18465jQuery.each( { 18466 mouseenter: "mouseover", 18467 mouseleave: "mouseout", 18468 pointerenter: "pointerover", 18469 pointerleave: "pointerout" 18470}, function( orig, fix ) { 18471 jQuery.event.special[ orig ] = { 18472 delegateType: fix, 18473 bindType: fix, 18474 18475 handle: function( event ) { 18476 var ret, 18477 target = this, 18478 related = event.relatedTarget, 18479 handleObj = event.handleObj; 18480 18481 // For mouseenter/leave call the handler if related is outside the target. 18482 // NB: No relatedTarget if the mouse left/entered the browser window 18483 if ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) { 18484 event.type = handleObj.origType; 18485 ret = handleObj.handler.apply( this, arguments ); 18486 event.type = fix; 18487 } 18488 return ret; 18489 } 18490 }; 18491} ); 18492 18493jQuery.fn.extend( { 18494 18495 on: function( types, selector, data, fn ) { 18496 return on( this, types, selector, data, fn ); 18497 }, 18498 one: function( types, selector, data, fn ) { 18499 return on( this, types, selector, data, fn, 1 ); 18500 }, 18501 off: function( types, selector, fn ) { 18502 var handleObj, type; 18503 if ( types && types.preventDefault && types.handleObj ) { 18504 18505 // ( event ) dispatched jQuery.Event 18506 handleObj = types.handleObj; 18507 jQuery( types.delegateTarget ).off( 18508 handleObj.namespace ? 18509 handleObj.origType + "." + handleObj.namespace : 18510 handleObj.origType, 18511 handleObj.selector, 18512 handleObj.handler 18513 ); 18514 return this; 18515 } 18516 if ( typeof types === "object" ) { 18517 18518 // ( types-object [, selector] ) 18519 for ( type in types ) { 18520 this.off( type, selector, types[ type ] ); 18521 } 18522 return this; 18523 } 18524 if ( selector === false || typeof selector === "function" ) { 18525 18526 // ( types [, fn] ) 18527 fn = selector; 18528 selector = undefined; 18529 } 18530 if ( fn === false ) { 18531 fn = returnFalse; 18532 } 18533 return this.each( function() { 18534 jQuery.event.remove( this, types, fn, selector ); 18535 } ); 18536 } 18537} ); 18538 18539 18540var 18541 18542 // Support: IE <=10 - 11, Edge 12 - 13 only 18543 // In IE/Edge using regex groups here causes severe slowdowns. 18544 // See https://connect.microsoft.com/IE/feedback/details/1736512/ 18545 rnoInnerhtml = /<script|<style|<link/i, 18546 18547 // checked="checked" or checked 18548 rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i, 18549 18550 rcleanScript = /^\s*<!\[CDATA\[|\]\]>\s*$/g; 18551 18552// Prefer a tbody over its parent table for containing new rows 18553function manipulationTarget( elem, content ) { 18554 if ( nodeName( elem, "table" ) && 18555 nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ) { 18556 18557 return jQuery( elem ).children( "tbody" )[ 0 ] || elem; 18558 } 18559 18560 return elem; 18561} 18562 18563// Replace/restore the type attribute of script elements for safe DOM manipulation 18564function disableScript( elem ) { 18565 elem.type = ( elem.getAttribute( "type" ) !== null ) + "/" + elem.type; 18566 return elem; 18567} 18568function restoreScript( elem ) { 18569 if ( ( elem.type || "" ).slice( 0, 5 ) === "true/" ) { 18570 elem.type = elem.type.slice( 5 ); 18571 } else { 18572 elem.removeAttribute( "type" ); 18573 } 18574 18575 return elem; 18576} 18577 18578function cloneCopyEvent( src, dest ) { 18579 var i, l, type, pdataOld, udataOld, udataCur, events; 18580 18581 if ( dest.nodeType !== 1 ) { 18582 return; 18583 } 18584 18585 // 1. Copy private data: events, handlers, etc. 18586 if ( dataPriv.hasData( src ) ) { 18587 pdataOld = dataPriv.get( src ); 18588 events = pdataOld.events; 18589 18590 if ( events ) { 18591 dataPriv.remove( dest, "handle events" ); 18592 18593 for ( type in events ) { 18594 for ( i = 0, l = events[ type ].length; i < l; i++ ) { 18595 jQuery.event.add( dest, type, events[ type ][ i ] ); 18596 } 18597 } 18598 } 18599 } 18600 18601 // 2. Copy user data 18602 if ( dataUser.hasData( src ) ) { 18603 udataOld = dataUser.access( src ); 18604 udataCur = jQuery.extend( {}, udataOld ); 18605 18606 dataUser.set( dest, udataCur ); 18607 } 18608} 18609 18610// Fix IE bugs, see support tests 18611function fixInput( src, dest ) { 18612 var nodeName = dest.nodeName.toLowerCase(); 18613 18614 // Fails to persist the checked state of a cloned checkbox or radio button. 18615 if ( nodeName === "input" && rcheckableType.test( src.type ) ) { 18616 dest.checked = src.checked; 18617 18618 // Fails to return the selected option to the default selected state when cloning options 18619 } else if ( nodeName === "input" || nodeName === "textarea" ) { 18620 dest.defaultValue = src.defaultValue; 18621 } 18622} 18623 18624function domManip( collection, args, callback, ignored ) { 18625 18626 // Flatten any nested arrays 18627 args = flat( args ); 18628 18629 var fragment, first, scripts, hasScripts, node, doc, 18630 i = 0, 18631 l = collection.length, 18632 iNoClone = l - 1, 18633 value = args[ 0 ], 18634 valueIsFunction = isFunction( value ); 18635 18636 // We can't cloneNode fragments that contain checked, in WebKit 18637 if ( valueIsFunction || 18638 ( l > 1 && typeof value === "string" && 18639 !support.checkClone && rchecked.test( value ) ) ) { 18640 return collection.each( function( index ) { 18641 var self = collection.eq( index ); 18642 if ( valueIsFunction ) { 18643 args[ 0 ] = value.call( this, index, self.html() ); 18644 } 18645 domManip( self, args, callback, ignored ); 18646 } ); 18647 } 18648 18649 if ( l ) { 18650 fragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored ); 18651 first = fragment.firstChild; 18652 18653 if ( fragment.childNodes.length === 1 ) { 18654 fragment = first; 18655 } 18656 18657 // Require either new content or an interest in ignored elements to invoke the callback 18658 if ( first || ignored ) { 18659 scripts = jQuery.map( getAll( fragment, "script" ), disableScript ); 18660 hasScripts = scripts.length; 18661 18662 // Use the original fragment for the last item 18663 // instead of the first because it can end up 18664 // being emptied incorrectly in certain situations (trac-8070). 18665 for ( ; i < l; i++ ) { 18666 node = fragment; 18667 18668 if ( i !== iNoClone ) { 18669 node = jQuery.clone( node, true, true ); 18670 18671 // Keep references to cloned scripts for later restoration 18672 if ( hasScripts ) { 18673 18674 // Support: Android <=4.0 only, PhantomJS 1 only 18675 // push.apply(_, arraylike) throws on ancient WebKit 18676 jQuery.merge( scripts, getAll( node, "script" ) ); 18677 } 18678 } 18679 18680 callback.call( collection[ i ], node, i ); 18681 } 18682 18683 if ( hasScripts ) { 18684 doc = scripts[ scripts.length - 1 ].ownerDocument; 18685 18686 // Re
vendor: 2,059 bytes, lines 18686-18758
18686enable scripts 18687 jQuery.map( scripts, restoreScript ); 18688 18689 // Evaluate executable scripts on first document insertion 18690 for ( i = 0; i < hasScripts; i++ ) { 18691 node = scripts[ i ]; 18692 if ( rscriptType.test( node.type || "" ) && 18693 !dataPriv.access( node, "globalEval" ) && 18694 jQuery.contains( doc, node ) ) { 18695 18696 if ( node.src && ( node.type || "" ).toLowerCase() !== "module" ) { 18697 18698 // Optional AJAX dependency, but won't run scripts if not present 18699 if ( jQuery._evalUrl && !node.noModule ) { 18700 jQuery._evalUrl( node.src, { 18701 nonce: node.nonce || node.getAttribute( "nonce" ) 18702 }, doc ); 18703 } 18704 } else { 18705 18706 // Unwrap a CDATA section containing script contents. This shouldn't be 18707 // needed as in XML documents they're already not visible when 18708 // inspecting element contents and in HTML documents they have no 18709 // meaning but we're preserving that logic for backwards compatibility. 18710 // This will be removed completely in 4.0. See gh-4904. 18711 DOMEval( node.textContent.replace( rcleanScript, "" ), node, doc ); 18712 } 18713 } 18714 } 18715 } 18716 } 18717 } 18718 18719 return collection; 18720} 18721 18722function remove( elem, selector, keepData ) { 18723 var node, 18724 nodes = selector ? jQuery.filter( selector, elem ) : elem, 18725 i = 0; 18726 18727 for ( ; ( node = nodes[ i ] ) != null; i++ ) { 18728 if ( !keepData && node.nodeType === 1 ) { 18729 jQuery.cleanData( getAll( node ) ); 18730 } 18731 18732 if ( node.parentNode ) { 18733 if ( keepData && isAttached( node ) ) { 18734 setGlobalEval( getAll( node, "script" ) ); 18735 } 18736 node.parentNode.removeChild( node ); 18737 } 18738 } 18739 18740 return elem; 18741} 18742 18743jQuery.extend( { 18744 htmlPrefilter: function( html ) { 18745 return html; 18746 }, 18747 18748 clone: function( elem, dataAndEvents, deepDataAndEvents ) { 18749 var i, l, srcElements, destElements, 18750 clone = elem.cloneNode( true ), 18751 inPage = isAttached( elem ); 18752 18753 // Fix IE cloning issues 18754 if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) && 18755 !jQuery.isXMLDoc( elem ) ) { 18756 18757 // We eschew jQuery#find here for performance reasons: 18758 //
vendor: 2,516 bytes, lines 18758-18855
18758 https://jsperf.com/getall-vs-sizzle/2 18759 destElements = getAll( clone ); 18760 srcElements = getAll( elem ); 18761 18762 for ( i = 0, l = srcElements.length; i < l; i++ ) { 18763 fixInput( srcElements[ i ], destElements[ i ] ); 18764 } 18765 } 18766 18767 // Copy the events from the original to the clone 18768 if ( dataAndEvents ) { 18769 if ( deepDataAndEvents ) { 18770 srcElements = srcElements || getAll( elem ); 18771 destElements = destElements || getAll( clone ); 18772 18773 for ( i = 0, l = srcElements.length; i < l; i++ ) { 18774 cloneCopyEvent( srcElements[ i ], destElements[ i ] ); 18775 } 18776 } else { 18777 cloneCopyEvent( elem, clone ); 18778 } 18779 } 18780 18781 // Preserve script evaluation history 18782 destElements = getAll( clone, "script" ); 18783 if ( destElements.length > 0 ) { 18784 setGlobalEval( destElements, !inPage && getAll( elem, "script" ) ); 18785 } 18786 18787 // Return the cloned set 18788 return clone; 18789 }, 18790 18791 cleanData: function( elems ) { 18792 var data, elem, type, 18793 special = jQuery.event.special, 18794 i = 0; 18795 18796 for ( ; ( elem = elems[ i ] ) !== undefined; i++ ) { 18797 if ( acceptData( elem ) ) { 18798 if ( ( data = elem[ dataPriv.expando ] ) ) { 18799 if ( data.events ) { 18800 for ( type in data.events ) { 18801 if ( special[ type ] ) { 18802 jQuery.event.remove( elem, type ); 18803 18804 // This is a shortcut to avoid jQuery.event.remove's overhead 18805 } else { 18806 jQuery.removeEvent( elem, type, data.handle ); 18807 } 18808 } 18809 } 18810 18811 // Support: Chrome <=35 - 45+ 18812 // Assign undefined instead of using delete, see Data#remove 18813 elem[ dataPriv.expando ] = undefined; 18814 } 18815 if ( elem[ dataUser.expando ] ) { 18816 18817 // Support: Chrome <=35 - 45+ 18818 // Assign undefined instead of using delete, see Data#remove 18819 elem[ dataUser.expando ] = undefined; 18820 } 18821 } 18822 } 18823 } 18824} ); 18825 18826jQuery.fn.extend( { 18827 detach: function( selector ) { 18828 return remove( this, selector, true ); 18829 }, 18830 18831 remove: function( selector ) { 18832 return remove( this, selector ); 18833 }, 18834 18835 text: function( value ) { 18836 return access( this, function( value ) { 18837 return value === undefined ? 18838 jQuery.text( this ) : 18839 this.empty().each( function() { 18840 if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { 18841 this.textContent = value; 18842 } 18843 } ); 18844 }, null, value, arguments.length ); 18845 }, 18846 18847 append: function() { 18848 return domManip( this, arguments, function( elem ) { 18849 if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { 18850 var target = manipulationTarget( this, elem ); 18851 target.appendChild( elem ); 18852 } 18853 } ); 18854 }, 18855
vendor: 7,872 bytes, lines 18856-19143
18856 prepend: function() { 18857 return domManip( this, arguments, function( elem ) { 18858 if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { 18859 var target = manipulationTarget( this, elem ); 18860 target.insertBefore( elem, target.firstChild ); 18861 } 18862 } ); 18863 }, 18864 18865 before: function() { 18866 return domManip( this, arguments, function( elem ) { 18867 if ( this.parentNode ) { 18868 this.parentNode.insertBefore( elem, this ); 18869 } 18870 } ); 18871 }, 18872 18873 after: function() { 18874 return domManip( this, arguments, function( elem ) { 18875 if ( this.parentNode ) { 18876 this.parentNode.insertBefore( elem, this.nextSibling ); 18877 } 18878 } ); 18879 }, 18880 18881 empty: function() { 18882 var elem, 18883 i = 0; 18884 18885 for ( ; ( elem = this[ i ] ) != null; i++ ) { 18886 if ( elem.nodeType === 1 ) { 18887 18888 // Prevent memory leaks 18889 jQuery.cleanData( getAll( elem, false ) ); 18890 18891 // Remove any remaining nodes 18892 elem.textContent = ""; 18893 } 18894 } 18895 18896 return this; 18897 }, 18898 18899 clone: function( dataAndEvents, deepDataAndEvents ) { 18900 dataAndEvents = dataAndEvents == null ? false : dataAndEvents; 18901 deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents; 18902 18903 return this.map( function() { 18904 return jQuery.clone( this, dataAndEvents, deepDataAndEvents ); 18905 } ); 18906 }, 18907 18908 html: function( value ) { 18909 return access( this, function( value ) { 18910 var elem = this[ 0 ] || {}, 18911 i = 0, 18912 l = this.length; 18913 18914 if ( value === undefined && elem.nodeType === 1 ) { 18915 return elem.innerHTML; 18916 } 18917 18918 // See if we can take a shortcut and just use innerHTML 18919 if ( typeof value === "string" && !rnoInnerhtml.test( value ) && 18920 !wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) { 18921 18922 value = jQuery.htmlPrefilter( value ); 18923 18924 try { 18925 for ( ; i < l; i++ ) { 18926 elem = this[ i ] || {}; 18927 18928 // Remove element nodes and prevent memory leaks 18929 if ( elem.nodeType === 1 ) { 18930 jQuery.cleanData( getAll( elem, false ) ); 18931 elem.innerHTML = value; 18932 } 18933 } 18934 18935 elem = 0; 18936 18937 // If using innerHTML throws an exception, use the fallback method 18938 } catch ( e ) {} 18939 } 18940 18941 if ( elem ) { 18942 this.empty().append( value ); 18943 } 18944 }, null, value, arguments.length ); 18945 }, 18946 18947 replaceWith: function() { 18948 var ignored = []; 18949 18950 // Make the changes, replacing each non-ignored context element with the new content 18951 return domManip( this, arguments, function( elem ) { 18952 var parent = this.parentNode; 18953 18954 if ( jQuery.inArray( this, ignored ) < 0 ) { 18955 jQuery.cleanData( getAll( this ) ); 18956 if ( parent ) { 18957 parent.replaceChild( elem, this ); 18958 } 18959 } 18960 18961 // Force callback invocation 18962 }, ignored ); 18963 } 18964} ); 18965 18966jQuery.each( { 18967 appendTo: "append", 18968 prependTo: "prepend", 18969 insertBefore: "before", 18970 insertAfter: "after", 18971 replaceAll: "replaceWith" 18972}, function( name, original ) { 18973 jQuery.fn[ name ] = function( selector ) { 18974 var elems, 18975 ret = [], 18976 insert = jQuery( selector ), 18977 last = insert.length - 1, 18978 i = 0; 18979 18980 for ( ; i <= last; i++ ) { 18981 elems = i === last ? this : this.clone( true ); 18982 jQuery( insert[ i ] )[ original ]( elems ); 18983 18984 // Support: Android <=4.0 only, PhantomJS 1 only 18985 // .get() because push.apply(_, arraylike) throws on ancient WebKit 18986 push.apply( ret, elems.get() ); 18987 } 18988 18989 return this.pushStack( ret ); 18990 }; 18991} ); 18992var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" ); 18993 18994var rcustomProp = /^--/; 18995 18996 18997var getStyles = function( elem ) { 18998 18999 // Support: IE <=11 only, Firefox <=30 (trac-15098, trac-14150) 19000 // IE throws on elements created in popups 19001 // FF meanwhile throws on frame elements through "defaultView.getComputedStyle" 19002 var view = elem.ownerDocument.defaultView; 19003 19004 if ( !view || !view.opener ) { 19005 view = window; 19006 } 19007 19008 return view.getComputedStyle( elem ); 19009 }; 19010 19011var swap = function( elem, options, callback ) { 19012 var ret, name, 19013 old = {}; 19014 19015 // Remember the old values, and insert the new ones 19016 for ( name in options ) { 19017 old[ name ] = elem.style[ name ]; 19018 elem.style[ name ] = options[ name ]; 19019 } 19020 19021 ret = callback.call( elem ); 19022 19023 // Revert the old values 19024 for ( name in options ) { 19025 elem.style[ name ] = old[ name ]; 19026 } 19027 19028 return ret; 19029}; 19030 19031 19032var rboxStyle = new RegExp( cssExpand.join( "|" ), "i" ); 19033 19034 19035 19036( function() { 19037 19038 // Executing both pixelPosition & boxSizingReliable tests require only one layout 19039 // so they're executed at the same time to save the second computation. 19040 function computeStyleTests() { 19041 19042 // This is a singleton, we need to execute it only once 19043 if ( !div ) { 19044 return; 19045 } 19046 19047 container.style.cssText = "position:absolute;left:-11111px;width:60px;" + 19048 "margin-top:1px;padding:0;border:0"; 19049 div.style.cssText = 19050 "position:relative;display:block;box-sizing:border-box;overflow:scroll;" + 19051 "margin:auto;border:1px;padding:1px;" + 19052 "width:60%;top:1%"; 19053 documentElement.appendChild( container ).appendChild( div ); 19054 19055 var divStyle = window.getComputedStyle( div ); 19056 pixelPositionVal = divStyle.top !== "1%"; 19057 19058 // Support: Android 4.0 - 4.3 only, Firefox <=3 - 44 19059 reliableMarginLeftVal = roundPixelMeasures( divStyle.marginLeft ) === 12; 19060 19061 // Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3 19062 // Some styles come back with percentage values, even though they shouldn't 19063 div.style.right = "60%"; 19064 pixelBoxStylesVal = roundPixelMeasures( divStyle.right ) === 36; 19065 19066 // Support: IE 9 - 11 only 19067 // Detect misreporting of content dimensions for box-sizing:border-box elements 19068 boxSizingReliableVal = roundPixelMeasures( divStyle.width ) === 36; 19069 19070 // Support: IE 9 only 19071 // Detect overflow:scroll screwiness (gh-3699) 19072 // Support: Chrome <=64 19073 // Don't get tricked when zoom affects offsetWidth (gh-4029) 19074 div.style.position = "absolute"; 19075 scrollboxSizeVal = roundPixelMeasures( div.offsetWidth / 3 ) === 12; 19076 19077 documentElement.removeChild( container ); 19078 19079 // Nullify the div so it wouldn't be stored in the memory and 19080 // it will also be a sign that checks already performed 19081 div = null; 19082 } 19083 19084 function roundPixelMeasures( measure ) { 19085 return Math.round( parseFloat( measure ) ); 19086 } 19087 19088 var pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal, 19089 reliableTrDimensionsVal, reliableMarginLeftVal, 19090 container = document.createElement( "div" ), 19091 div = document.createElement( "div" ); 19092 19093 // Finish early in limited (non-browser) environments 19094 if ( !div.style ) { 19095 return; 19096 } 19097 19098 // Support: IE <=9 - 11 only 19099 // Style of cloned element affects source element cloned (trac-8908) 19100 div.style.backgroundClip = "content-box"; 19101 div.cloneNode( true ).style.backgroundClip = ""; 19102 support.clearCloneStyle = div.style.backgroundClip === "content-box"; 19103 19104 jQuery.extend( support, { 19105 boxSizingReliable: function() { 19106 computeStyleTests(); 19107 return boxSizingReliableVal; 19108 }, 19109 pixelBoxStyles: function() { 19110 computeStyleTests(); 19111 return pixelBoxStylesVal; 19112 }, 19113 pixelPosition: function() { 19114 computeStyleTests(); 19115 return pixelPositionVal; 19116 }, 19117 reliableMarginLeft: function() { 19118 computeStyleTests(); 19119 return reliableMarginLeftVal; 19120 }, 19121 scrollboxSize: function() { 19122 computeStyleTests(); 19123 return scrollboxSizeVal; 19124 }, 19125 19126 // Support: IE 9 - 11+, Edge 15 - 18+ 19127 // IE/Edge misreport `getComputedStyle` of table rows with width/height 19128 // set in CSS while `offset*` properties report correct values. 19129 // Behavior in IE 9 is more subtle than in newer versions & it passes 19130 // some versions of this test; make sure not to make it pass there! 19131 // 19132 // Support: Firefox 70+ 19133 // Only Firefox includes border widths 19134 // in computed dimensions. (gh-4529) 19135 reliableTrDimensions: function() { 19136 var table, tr, trChild, trStyle; 19137 if ( reliableTrDimensionsVal == null ) { 19138 table = document.createElement( "table" ); 19139 tr = document.createElement( "tr" ); 19140 trChild = document.createElement( "div" ); 19141 19142 table.style.cssText = "position:absolute;left:-11111px;border-collapse:separate"; 19143 tr.style.cssText = "bo
19143rder:1px solid"; 19144 19145 // Support: Chrome 86+ 19146 // Height set through cssText does not get applied. 19147 // Computed height then comes back as 0. 19148 tr.style.height = "1px"; 19149 trChild.style.height = "9px"; 19150 19151 // Support: Android 8 Chrome 86+ 19152 // In our bodyBackground.html iframe, 19153 // display for all div elements is set to "inline", 19154 // which causes a problem only in Android 8 Chrome 86. 19155 // Ensuring the div is display: block
vendor: 50,104 bytes, lines 19155-21070
19155 19156 // gets around this issue. 19157 trChild.style.display = "block"; 19158 19159 documentElement 19160 .appendChild( table ) 19161 .appendChild( tr ) 19162 .appendChild( trChild ); 19163 19164 trStyle = window.getComputedStyle( tr ); 19165 reliableTrDimensionsVal = ( parseInt( trStyle.height, 10 ) + 19166 parseInt( trStyle.borderTopWidth, 10 ) + 19167 parseInt( trStyle.borderBottomWidth, 10 ) ) === tr.offsetHeight; 19168 19169 documentElement.removeChild( table ); 19170 } 19171 return reliableTrDimensionsVal; 19172 } 19173 } ); 19174} )(); 19175 19176 19177function curCSS( elem, name, computed ) { 19178 var width, minWidth, maxWidth, ret, 19179 isCustomProp = rcustomProp.test( name ), 19180 19181 // Support: Firefox 51+ 19182 // Retrieving style before computed somehow 19183 // fixes an issue with getting wrong values 19184 // on detached elements 19185 style = elem.style; 19186 19187 computed = computed || getStyles( elem ); 19188 19189 // getPropertyValue is needed for: 19190 // .css('filter') (IE 9 only, trac-12537) 19191 // .css('--customProperty) (gh-3144) 19192 if ( computed ) { 19193 19194 // Support: IE <=9 - 11+ 19195 // IE only supports `"float"` in `getPropertyValue`; in computed styles 19196 // it's only available as `"cssFloat"`. We no longer modify properties 19197 // sent to `.css()` apart from camelCasing, so we need to check both. 19198 // Normally, this would create difference in behavior: if 19199 // `getPropertyValue` returns an empty string, the value returned 19200 // by `.css()` would be `undefined`. This is usually the case for 19201 // disconnected elements. However, in IE even disconnected elements 19202 // with no styles return `"none"` for `getPropertyValue( "float" )` 19203 ret = computed.getPropertyValue( name ) || computed[ name ]; 19204 19205 if ( isCustomProp && ret ) { 19206 19207 // Support: Firefox 105+, Chrome <=105+ 19208 // Spec requires trimming whitespace for custom properties (gh-4926). 19209 // Firefox only trims leading whitespace. Chrome just collapses 19210 // both leading & trailing whitespace to a single space. 19211 // 19212 // Fall back to `undefined` if empty string returned. 19213 // This collapses a missing definition with property defined 19214 // and set to an empty string but there's no standard API 19215 // allowing us to differentiate them without a performance penalty 19216 // and returning `undefined` aligns with older jQuery. 19217 // 19218 // rtrimCSS treats U+000D CARRIAGE RETURN and U+000C FORM FEED 19219 // as whitespace while CSS does not, but this is not a problem 19220 // because CSS preprocessing replaces them with U+000A LINE FEED 19221 // (which *is* CSS whitespace) 19222 // https://www.w3.org/TR/css-syntax-3/#input-preprocessing 19223 ret = ret.replace( rtrimCSS, "$1" ) || undefined; 19224 } 19225 19226 if ( ret === "" && !isAttached( elem ) ) { 19227 ret = jQuery.style( elem, name ); 19228 } 19229 19230 // A tribute to the "awesome hack by Dean Edwards" 19231 // Android Browser returns percentage for some values, 19232 // but width seems to be reliably pixels. 19233 // This is against the CSSOM draft spec: 19234 // https://drafts.csswg.org/cssom/#resolved-values 19235 if ( !support.pixelBoxStyles() && rnumnonpx.test( ret ) && rboxStyle.test( name ) ) { 19236 19237 // Remember the original values 19238 width = style.width; 19239 minWidth = style.minWidth; 19240 maxWidth = style.maxWidth; 19241 19242 // Put in the new values to get a computed value out 19243 style.minWidth = style.maxWidth = style.width = ret; 19244 ret = computed.width; 19245 19246 // Revert the changed values 19247 style.width = width; 19248 style.minWidth = minWidth; 19249 style.maxWidth = maxWidth; 19250 } 19251 } 19252 19253 return ret !== undefined ? 19254 19255 // Support: IE <=9 - 11 only 19256 // IE returns zIndex value as an integer. 19257 ret + "" : 19258 ret; 19259} 19260 19261 19262function addGetHookIf( conditionFn, hookFn ) { 19263 19264 // Define the hook, we'll check on the first run if it's really needed. 19265 return { 19266 get: function() { 19267 if ( conditionFn() ) { 19268 19269 // Hook not needed (or it's not possible to use it due 19270 // to missing dependency), remove it. 19271 delete this.get; 19272 return; 19273 } 19274 19275 // Hook needed; redefine it so that the support test is not executed again. 19276 return ( this.get = hookFn ).apply( this, arguments ); 19277 } 19278 }; 19279} 19280 19281 19282var cssPrefixes = [ "Webkit", "Moz", "ms" ], 19283 emptyStyle = document.createElement( "div" ).style, 19284 vendorProps = {}; 19285 19286// Return a vendor-prefixed property or undefined 19287function vendorPropName( name ) { 19288 19289 // Check for vendor prefixed names 19290 var capName = name[ 0 ].toUpperCase() + name.slice( 1 ), 19291 i = cssPrefixes.length; 19292 19293 while ( i-- ) { 19294 name = cssPrefixes[ i ] + capName; 19295 if ( name in emptyStyle ) { 19296 return name; 19297 } 19298 } 19299} 19300 19301// Return a potentially-mapped jQuery.cssProps or vendor prefixed property 19302function finalPropName( name ) { 19303 var final = jQuery.cssProps[ name ] || vendorProps[ name ]; 19304 19305 if ( final ) { 19306 return final; 19307 } 19308 if ( name in emptyStyle ) { 19309 return name; 19310 } 19311 return vendorProps[ name ] = vendorPropName( name ) || name; 19312} 19313 19314 19315var 19316 19317 // Swappable if display is none or starts with table 19318 // except "table", "table-cell", or "table-caption" 19319 // See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display 19320 rdisplayswap = /^(none|table(?!-c[ea]).+)/, 19321 cssShow = { position: "absolute", visibility: "hidden", display: "block" }, 19322 cssNormalTransform = { 19323 letterSpacing: "0", 19324 fontWeight: "400" 19325 }; 19326 19327function setPositiveNumber( _elem, value, subtract ) { 19328 19329 // Any relative (+/-) values have already been 19330 // normalized at this point 19331 var matches = rcssNum.exec( value ); 19332 return matches ? 19333 19334 // Guard against undefined "subtract", e.g., when used as in cssHooks 19335 Math.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || "px" ) : 19336 value; 19337} 19338 19339function boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) { 19340 var i = dimension === "width" ? 1 : 0, 19341 extra = 0, 19342 delta = 0, 19343 marginDelta = 0; 19344 19345 // Adjustment may not be necessary 19346 if ( box === ( isBorderBox ? "border" : "content" ) ) { 19347 return 0; 19348 } 19349 19350 for ( ; i < 4; i += 2 ) { 19351 19352 // Both box models exclude margin 19353 // Count margin delta separately to only add it after scroll gutter adjustment. 19354 // This is needed to make negative margins work with `outerHeight( true )` (gh-3982). 19355 if ( box === "margin" ) { 19356 marginDelta += jQuery.css( elem, box + cssExpand[ i ], true, styles ); 19357 } 19358 19359 // If we get here with a content-box, we're seeking "padding" or "border" or "margin" 19360 if ( !isBorderBox ) { 19361 19362 // Add padding 19363 delta += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); 19364 19365 // For "border" or "margin", add border 19366 if ( box !== "padding" ) { 19367 delta += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); 19368 19369 // But still keep track of it otherwise 19370 } else { 19371 extra += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); 19372 } 19373 19374 // If we get here with a border-box (content + padding + border), we're seeking "content" or 19375 // "padding" or "margin" 19376 } else { 19377 19378 // For "content", subtract padding 19379 if ( box === "content" ) { 19380 delta -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); 19381 } 19382 19383 // For "content" or "padding", subtract border 19384 if ( box !== "margin" ) { 19385 delta -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); 19386 } 19387 } 19388 } 19389 19390 // Account for positive content-box scroll gutter when requested by providing computedVal 19391 if ( !isBorderBox && computedVal >= 0 ) { 19392 19393 // offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border 19394 // Assuming integer scroll gutter, subtract the rest and round down 19395 delta += Math.max( 0, Math.ceil( 19396 elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] - 19397 computedVal - 19398 delta - 19399 extra - 19400 0.5 19401 19402 // If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter 19403 // Use an explicit zero to avoid NaN (gh-3964) 19404 ) ) || 0; 19405 } 19406 19407 return delta + marginDelta; 19408} 19409 19410function getWidthOrHeight( elem, dimension, extra ) { 19411 19412 // Start with computed style 19413 var styles = getStyles( elem ), 19414 19415 // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322). 19416 // Fake content-box until we know it's needed to know the true value. 19417 boxSizingNeeded = !support.boxSizingReliable() || extra, 19418 isBorderBox = boxSizingNeeded && 19419 jQuery.css( elem, "boxSizing", false, styles ) === "border-box", 19420 valueIsBorderBox = isBorderBox, 19421 19422 val = curCSS( elem, dimension, styles ), 19423 offsetProp = "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ); 19424 19425 // Support: Firefox <=54 19426 // Return a confounding non-pixel value or feign ignorance, as appropriate. 19427 if ( rnumnonpx.test( val ) ) { 19428 if ( !extra ) { 19429 return val; 19430 } 19431 val = "auto"; 19432 } 19433 19434 19435 // Support: IE 9 - 11 only 19436 // Use offsetWidth/offsetHeight for when box sizing is unreliable. 19437 // In those cases, the computed value can be trusted to be border-box. 19438 if ( ( !support.boxSizingReliable() && isBorderBox || 19439 19440 // Support: IE 10 - 11+, Edge 15 - 18+ 19441 // IE/Edge misreport `getComputedStyle` of table rows with width/height 19442 // set in CSS while `offset*` properties report correct values. 19443 // Interestingly, in some cases IE 9 doesn't suffer from this issue. 19444 !support.reliableTrDimensions() && nodeName( elem, "tr" ) || 19445 19446 // Fall back to offsetWidth/offsetHeight when value is "auto" 19447 // This happens for inline elements with no explicit setting (gh-3571) 19448 val === "auto" || 19449 19450 // Support: Android <=4.1 - 4.3 only 19451 // Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602) 19452 !parseFloat( val ) && jQuery.css( elem, "display", false, styles ) === "inline" ) && 19453 19454 // Make sure the element is visible & connected 19455 elem.getClientRects().length ) { 19456 19457 isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box"; 19458 19459 // Where available, offsetWidth/offsetHeight approximate border box dimensions. 19460 // Where not available (e.g., SVG), assume unreliable box-sizing and interpret the 19461 // retrieved value as a content box dimension. 19462 valueIsBorderBox = offsetProp in elem; 19463 if ( valueIsBorderBox ) { 19464 val = elem[ offsetProp ]; 19465 } 19466 } 19467 19468 // Normalize "" and auto 19469 val = parseFloat( val ) || 0; 19470 19471 // Adjust for the element's box model 19472 return ( val + 19473 boxModelAdjustment( 19474 elem, 19475 dimension, 19476 extra || ( isBorderBox ? "border" : "content" ), 19477 valueIsBorderBox, 19478 styles, 19479 19480 // Provide the current computed size to request scroll gutter calculation (gh-3589) 19481 val 19482 ) 19483 ) + "px"; 19484} 19485 19486jQuery.extend( { 19487 19488 // Add in style property hooks for overriding the default 19489 // behavior of getting and setting a style property 19490 cssHooks: { 19491 opacity: { 19492 get: function( elem, computed ) { 19493 if ( computed ) { 19494 19495 // We should always get a number back from opacity 19496 var ret = curCSS( elem, "opacity" ); 19497 return ret === "" ? "1" : ret; 19498 } 19499 } 19500 } 19501 }, 19502 19503 // Don't automatically add "px" to these possibly-unitless properties 19504 cssNumber: { 19505 animationIterationCount: true, 19506 aspectRatio: true, 19507 borderImageSlice: true, 19508 columnCount: true, 19509 flexGrow: true, 19510 flexShrink: true, 19511 fontWeight: true, 19512 gridArea: true, 19513 gridColumn: true, 19514 gridColumnEnd: true, 19515 gridColumnStart: true, 19516 gridRow: true, 19517 gridRowEnd: true, 19518 gridRowStart: true, 19519 lineHeight: true, 19520 opacity: true, 19521 order: true, 19522 orphans: true, 19523 scale: true, 19524 widows: true, 19525 zIndex: true, 19526 zoom: true, 19527 19528 // SVG-related 19529 fillOpacity: true, 19530 floodOpacity: true, 19531 stopOpacity: true, 19532 strokeMiterlimit: true, 19533 strokeOpacity: true 19534 }, 19535 19536 // Add in properties whose names you wish to fix before 19537 // setting or getting the value 19538 cssProps: {}, 19539 19540 // Get and set the style property on a DOM Node 19541 style: function( elem, name, value, extra ) { 19542 19543 // Don't set styles on text and comment nodes 19544 if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) { 19545 return; 19546 } 19547 19548 // Make sure that we're working with the right name 19549 var ret, type, hooks, 19550 origName = camelCase( name ), 19551 isCustomProp = rcustomProp.test( name ), 19552 style = elem.style; 19553 19554 // Make sure that we're working with the right name. We don't 19555 // want to query the value if it is a CSS custom property 19556 // since they are user-defined. 19557 if ( !isCustomProp ) { 19558 name = finalPropName( origName ); 19559 } 19560 19561 // Gets hook for the prefixed version, then unprefixed version 19562 hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; 19563 19564 // Check if we're setting a value 19565 if ( value !== undefined ) { 19566 type = typeof value; 19567 19568 // Convert "+=" or "-=" to relative numbers (trac-7345) 19569 if ( type === "string" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) { 19570 value = adjustCSS( elem, name, ret ); 19571 19572 // Fixes bug trac-9237 19573 type = "number"; 19574 } 19575 19576 // Make sure that null and NaN values aren't set (trac-7116) 19577 if ( value == null || value !== value ) { 19578 return; 19579 } 19580 19581 // If a number was passed in, add the unit (except for certain CSS properties) 19582 // The isCustomProp check can be removed in jQuery 4.0 when we only auto-append 19583 // "px" to a few hardcoded values. 19584 if ( type === "number" && !isCustomProp ) { 19585 value += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? "" : "px" ); 19586 } 19587 19588 // background-* props affect original clone's values 19589 if ( !support.clearCloneStyle && value === "" && name.indexOf( "background" ) === 0 ) { 19590 style[ name ] = "inherit"; 19591 } 19592 19593 // If a hook was provided, use that value, otherwise just set the specified value 19594 if ( !hooks || !( "set" in hooks ) || 19595 ( value = hooks.set( elem, value, extra ) ) !== undefined ) { 19596 19597 if ( isCustomProp ) { 19598 style.setProperty( name, value ); 19599 } else { 19600 style[ name ] = value; 19601 } 19602 } 19603 19604 } else { 19605 19606 // If a hook was provided get the non-computed value from there 19607 if ( hooks && "get" in hooks && 19608 ( ret = hooks.get( elem, false, extra ) ) !== undefined ) { 19609 19610 return ret; 19611 } 19612 19613 // Otherwise just get the value from the style object 19614 return style[ name ]; 19615 } 19616 }, 19617 19618 css: function( elem, name, extra, styles ) { 19619 var val, num, hooks, 19620 origName = camelCase( name ), 19621 isCustomProp = rcustomProp.test( name ); 19622 19623 // Make sure that we're working with the right name. We don't 19624 // want to modify the value if it is a CSS custom property 19625 // since they are user-defined. 19626 if ( !isCustomProp ) { 19627 name = finalPropName( origName ); 19628 } 19629 19630 // Try prefixed name followed by the unprefixed name 19631 hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; 19632 19633 // If a hook was provided get the computed value from there 19634 if ( hooks && "get" in hooks ) { 19635 val = hooks.get( elem, true, extra ); 19636 } 19637 19638 // Otherwise, if a way to get the computed value exists, use that 19639 if ( val === undefined ) { 19640 val = curCSS( elem, name, styles ); 19641 } 19642 19643 // Convert "normal" to computed value 19644 if ( val === "normal" && name in cssNormalTransform ) { 19645 val = cssNormalTransform[ name ]; 19646 } 19647 19648 // Make numeric if forced or a qualifier was provided and val looks numeric 19649 if ( extra === "" || extra ) { 19650 num = parseFloat( val ); 19651 return extra === true || isFinite( num ) ? num || 0 : val; 19652 } 19653 19654 return val; 19655 } 19656} ); 19657 19658jQuery.each( [ "height", "width" ], function( _i, dimension ) { 19659 jQuery.cssHooks[ dimension ] = { 19660 get: function( elem, computed, extra ) { 19661 if ( computed ) { 19662 19663 // Certain elements can have dimension info if we invisibly show them 19664 // but it must have a current display style that would benefit 19665 return rdisplayswap.test( jQuery.css( elem, "display" ) ) && 19666 19667 // Support: Safari 8+ 19668 // Table columns in Safari have non-zero offsetWidth & zero 19669 // getBoundingClientRect().width unless display is changed. 19670 // Support: IE <=11 only 19671 // Running getBoundingClientRect on a disconnected node 19672 // in IE throws an error. 19673 ( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ? 19674 swap( elem, cssShow, function() { 19675 return getWidthOrHeight( elem, dimension, extra ); 19676 } ) : 19677 getWidthOrHeight( elem, dimension, extra ); 19678 } 19679 }, 19680 19681 set: function( elem, value, extra ) { 19682 var matches, 19683 styles = getStyles( elem ), 19684 19685 // Only read styles.position if the test has a chance to fail 19686 // to avoid forcing a reflow. 19687 scrollboxSizeBuggy = !support.scrollboxSize() && 19688 styles.position === "absolute", 19689 19690 // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991) 19691 boxSizingNeeded = scrollboxSizeBuggy || extra, 19692 isBorderBox = boxSizingNeeded && 19693 jQuery.css( elem, "boxSizing", false, styles ) === "border-box", 19694 subtract = extra ? 19695 boxModelAdjustment( 19696 elem, 19697 dimension, 19698 extra, 19699 isBorderBox, 19700 styles 19701 ) : 19702 0; 19703 19704 // Account for unreliable border-box dimensions by comparing offset* to computed and 19705 // faking a content-box to get border and padding (gh-3699) 19706 if ( isBorderBox && scrollboxSizeBuggy ) { 19707 subtract -= Math.ceil( 19708 elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] - 19709 parseFloat( styles[ dimension ] ) - 19710 boxModelAdjustment( elem, dimension, "border", false, styles ) - 19711 0.5 19712 ); 19713 } 19714 19715 // Convert to pixels if value adjustment is needed 19716 if ( subtract && ( matches = rcssNum.exec( value ) ) && 19717 ( matches[ 3 ] || "px" ) !== "px" ) { 19718 19719 elem.style[ dimension ] = value; 19720 value = jQuery.css( elem, dimension ); 19721 } 19722 19723 return setPositiveNumber( elem, value, subtract ); 19724 } 19725 }; 19726} ); 19727 19728jQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft, 19729 function( elem, computed ) { 19730 if ( computed ) { 19731 return ( parseFloat( curCSS( elem, "marginLeft" ) ) || 19732 elem.getBoundingClientRect().left - 19733 swap( elem, { marginLeft: 0 }, function() { 19734 return elem.getBoundingClientRect().left; 19735 } ) 19736 ) + "px"; 19737 } 19738 } 19739); 19740 19741// These hooks are used by animate to expand properties 19742jQuery.each( { 19743 margin: "", 19744 padding: "", 19745 border: "Width" 19746}, function( prefix, suffix ) { 19747 jQuery.cssHooks[ prefix + suffix ] = { 19748 expand: function( value ) { 19749 var i = 0, 19750 expanded = {}, 19751 19752 // Assumes a single number if not a string 19753 parts = typeof value === "string" ? value.split( " " ) : [ value ]; 19754 19755 for ( ; i < 4; i++ ) { 19756 expanded[ prefix + cssExpand[ i ] + suffix ] = 19757 parts[ i ] || parts[ i - 2 ] || parts[ 0 ]; 19758 } 19759 19760 return expanded; 19761 } 19762 }; 19763 19764 if ( prefix !== "margin" ) { 19765 jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber; 19766 } 19767} ); 19768 19769jQuery.fn.extend( { 19770 css: function( name, value ) { 19771 return access( this, function( elem, name, value ) { 19772 var styles, len, 19773 map = {}, 19774 i = 0; 19775 19776 if ( Array.isArray( name ) ) { 19777 styles = getStyles( elem ); 19778 len = name.length; 19779 19780 for ( ; i < len; i++ ) { 19781 map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles ); 19782 } 19783 19784 return map; 19785 } 19786 19787 return value !== undefined ? 19788 jQuery.style( elem, name, value ) : 19789 jQuery.css( elem, name ); 19790 }, name, value, arguments.length > 1 ); 19791 } 19792} ); 19793 19794 19795function Tween( elem, options, prop, end, easing ) { 19796 return new Tween.prototype.init( elem, options, prop, end, easing ); 19797} 19798jQuery.Tween = Tween; 19799 19800Tween.prototype = { 19801 constructor: Tween, 19802 init: function( elem, options, prop, end, easing, unit ) { 19803 this.elem = elem; 19804 this.prop = prop; 19805 this.easing = easing || jQuery.easing._default; 19806 this.options = options; 19807 this.start = this.now = this.cur(); 19808 this.end = end; 19809 this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" ); 19810 }, 19811 cur: function() { 19812 var hooks = Tween.propHooks[ this.prop ]; 19813 19814 return hooks && hooks.get ? 19815 hooks.get( this ) : 19816 Tween.propHooks._default.get( this ); 19817 }, 19818 run: function( percent ) { 19819 var eased, 19820 hooks = Tween.propHooks[ this.prop ]; 19821 19822 if ( this.options.duration ) { 19823 this.pos = eased = jQuery.easing[ this.easing ]( 19824 percent, this.options.duration * percent, 0, 1, this.options.duration 19825 ); 19826 } else { 19827 this.pos = eased = percent; 19828 } 19829 this.now = ( this.end - this.start ) * eased + this.start; 19830 19831 if ( this.options.step ) { 19832 this.options.step.call( this.elem, this.now, this ); 19833 } 19834 19835 if ( hooks && hooks.set ) { 19836 hooks.set( this ); 19837 } else { 19838 Tween.propHooks._default.set( this ); 19839 } 19840 return this; 19841 } 19842}; 19843 19844Tween.prototype.init.prototype = Tween.prototype; 19845 19846Tween.propHooks = { 19847 _default: { 19848 get: function( tween ) { 19849 var result; 19850 19851 // Use a property on the element directly when it is not a DOM element, 19852 // or when there is no matching style property that exists. 19853 if ( tween.elem.nodeType !== 1 || 19854 tween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) { 19855 return tween.elem[ tween.prop ]; 19856 } 19857 19858 // Passing an empty string as a 3rd parameter to .css will automatically 19859 // attempt a parseFloat and fallback to a string if the parse fails. 19860 // Simple values such as "10px" are parsed to Float; 19861 // complex values such as "rotate(1rad)" are returned as-is. 19862 result = jQuery.css( tween.elem, tween.prop, "" ); 19863 19864 // Empty strings, null, undefined and "auto" are converted to 0. 19865 return !result || result === "auto" ? 0 : result; 19866 }, 19867 set: function( tween ) { 19868 19869 // Use step hook for back compat. 19870 // Use cssHook if its there. 19871 // Use .style if available and use plain properties where available. 19872 if ( jQuery.fx.step[ tween.prop ] ) { 19873 jQuery.fx.step[ tween.prop ]( tween ); 19874 } else if ( tween.elem.nodeType === 1 && ( 19875 jQuery.cssHooks[ tween.prop ] || 19876 tween.elem.style[ finalPropName( tween.prop ) ] != null ) ) { 19877 jQuery.style( tween.elem, tween.prop, tween.now + tween.unit ); 19878 } else { 19879 tween.elem[ tween.prop ] = tween.now; 19880 } 19881 } 19882 } 19883}; 19884 19885// Support: IE <=9 only 19886// Panic based approach to setting things on disconnected nodes 19887Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = { 19888 set: function( tween ) { 19889 if ( tween.elem.nodeType && tween.elem.parentNode ) { 19890 tween.elem[ tween.prop ] = tween.now; 19891 } 19892 } 19893}; 19894 19895jQuery.easing = { 19896 linear: function( p ) { 19897 return p; 19898 }, 19899 swing: function( p ) { 19900 return 0.5 - Math.cos( p * Math.PI ) / 2; 19901 }, 19902 _default: "swing" 19903}; 19904 19905jQuery.fx = Tween.prototype.init; 19906 19907// Back compat <1.8 extension point 19908jQuery.fx.step = {}; 19909 19910 19911 19912 19913var 19914 fxNow, inProgress, 19915 rfxtypes = /^(?:toggle|show|hide)$/, 19916 rrun = /queueHooks$/; 19917 19918function schedule() { 19919 if ( inProgress ) { 19920 if ( document.hidden === false && window.requestAnimationFrame ) { 19921 window.requestAnimationFrame( schedule ); 19922 } else { 19923 window.setTimeout( schedule, jQuery.fx.interval ); 19924 } 19925 19926 jQuery.fx.tick(); 19927 } 19928} 19929 19930// Animations created synchronously will run synchronously 19931function createFxNow() { 19932 window.setTimeout( function() { 19933 fxNow = undefined; 19934 } ); 19935 return ( fxNow = Date.now() ); 19936} 19937 19938// Generate parameters to create a standard animation 19939function genFx( type, includeWidth ) { 19940 var which, 19941 i = 0, 19942 attrs = { height: type }; 19943 19944 // If we include width, step value is 1 to do all cssExpand values, 19945 // otherwise step value is 2 to skip over Left and Right 19946 includeWidth = includeWidth ? 1 : 0; 19947 for ( ; i < 4; i += 2 - includeWidth ) { 19948 which = cssExpand[ i ]; 19949 attrs[ "margin" + which ] = attrs[ "padding" + which ] = type; 19950 } 19951 19952 if ( includeWidth ) { 19953 attrs.opacity = attrs.width = type; 19954 } 19955 19956 return attrs; 19957} 19958 19959function createTween( value, prop, animation ) { 19960 var tween, 19961 collection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ "*" ] ), 19962 index = 0, 19963 length = collection.length; 19964 for ( ; index < length; index++ ) { 19965 if ( ( tween = collection[ index ].call( animation, prop, value ) ) ) { 19966 19967 // We're done with this property 19968 return tween; 19969 } 19970 } 19971} 19972 19973function defaultPrefilter( elem, props, opts ) { 19974 var prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display, 19975 isBox = "width" in props || "height" in props, 19976 anim = this, 19977 orig = {}, 19978 style = elem.style, 19979 hidden = elem.nodeType && isHiddenWithinTree( elem ), 19980 dataShow = dataPriv.get( elem, "fxshow" ); 19981 19982 // Queue-skipping animations hijack the fx hooks 19983 if ( !opts.queue ) { 19984 hooks = jQuery._queueHooks( elem, "fx" ); 19985 if ( hooks.unqueued == null ) { 19986 hooks.unqueued = 0; 19987 oldfire = hooks.empty.fire; 19988 hooks.empty.fire = function() { 19989 if ( !hooks.unqueued ) { 19990 oldfire(); 19991 } 19992 }; 19993 } 19994 hooks.unqueued++; 19995 19996 anim.always( function() { 19997 19998 // Ensure the complete handler is called before this completes 19999 anim.always( function() { 20000 hooks.unqueued--; 20001 if ( !jQuery.queue( elem, "fx" ).length ) { 20002 hooks.empty.fire(); 20003 } 20004 } ); 20005 } ); 20006 } 20007 20008 // Detect show/hide animations 20009 for ( prop in props ) { 20010 value = props[ prop ]; 20011 if ( rfxtypes.test( value ) ) { 20012 delete props[ prop ]; 20013 toggle = toggle || value === "toggle"; 20014 if ( value === ( hidden ? "hide" : "show" ) ) { 20015 20016 // Pretend to be hidden if this is a "show" and 20017 // there is still data from a stopped show/hide 20018 if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) { 20019 hidden = true; 20020 20021 // Ignore all other no-op show/hide data 20022 } else { 20023 continue; 20024 } 20025 } 20026 orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop ); 20027 } 20028 } 20029 20030 // Bail out if this is a no-op like .hide().hide() 20031 propTween = !jQuery.isEmptyObject( props ); 20032 if ( !propTween && jQuery.isEmptyObject( orig ) ) { 20033 return; 20034 } 20035 20036 // Restrict "overflow" and "display" styles during box animations 20037 if ( isBox && elem.nodeType === 1 ) { 20038 20039 // Support: IE <=9 - 11, Edge 12 - 15 20040 // Record all 3 overflow attributes because IE does not infer the shorthand 20041 // from identically-valued overflowX and overflowY and Edge just mirrors 20042 // the overflowX value there. 20043 opts.overflow = [ style.overflow, style.overflowX, style.overflowY ]; 20044 20045 // Identify a display type, preferring old show/hide data over the CSS cascade 20046 restoreDisplay = dataShow && dataShow.display; 20047 if ( restoreDisplay == null ) { 20048 restoreDisplay = dataPriv.get( elem, "display" ); 20049 } 20050 display = jQuery.css( elem, "display" ); 20051 if ( display === "none" ) { 20052 if ( restoreDisplay ) { 20053 display = restoreDisplay; 20054 } else { 20055 20056 // Get nonempty value(s) by temporarily forcing visibility 20057 showHide( [ elem ], true ); 20058 restoreDisplay = elem.style.display || restoreDisplay; 20059 display = jQuery.css( elem, "display" ); 20060 showHide( [ elem ] ); 20061 } 20062 } 20063 20064 // Animate inline elements as inline-block 20065 if ( display === "inline" || display === "inline-block" && restoreDisplay != null ) { 20066 if ( jQuery.css( elem, "float" ) === "none" ) { 20067 20068 // Restore the original display value at the end of pure show/hide animations 20069 if ( !propTween ) { 20070 anim.done( function() { 20071 style.display = restoreDisplay; 20072 } ); 20073 if ( restoreDisplay == null ) { 20074 display = style.display; 20075 restoreDisplay = display === "none" ? "" : display; 20076 } 20077 } 20078 style.display = "inline-block"; 20079 } 20080 } 20081 } 20082 20083 if ( opts.overflow ) { 20084 style.overflow = "hidden"; 20085 anim.always( function() { 20086 style.overflow = opts.overflow[ 0 ]; 20087 style.overflowX = opts.overflow[ 1 ]; 20088 style.overflowY = opts.overflow[ 2 ]; 20089 } ); 20090 } 20091 20092 // Implement show/hide animations 20093 propTween = false; 20094 for ( prop in orig ) { 20095 20096 // General show/hide setup for this element animation 20097 if ( !propTween ) { 20098 if ( dataShow ) { 20099 if ( "hidden" in dataShow ) { 20100 hidden = dataShow.hidden; 20101 } 20102 } else { 20103 dataShow = dataPriv.access( elem, "fxshow", { display: restoreDisplay } ); 20104 } 20105 20106 // Store hidden/visible for toggle so `.stop().toggle()` "reverses" 20107 if ( toggle ) { 20108 dataShow.hidden = !hidden; 20109 } 20110 20111 // Show elements before animating them 20112 if ( hidden ) { 20113 showHide( [ elem ], true ); 20114 } 20115 20116 /* eslint-disable no-loop-func */ 20117 20118 anim.done( function() { 20119 20120 /* eslint-enable no-loop-func */ 20121 20122 // The final step of a "hide" animation is actually hiding the element 20123 if ( !hidden ) { 20124 showHide( [ elem ] ); 20125 } 20126 dataPriv.remove( elem, "fxshow" ); 20127 for ( prop in orig ) { 20128 jQuery.style( elem, prop, orig[ prop ] ); 20129 } 20130 } ); 20131 } 20132 20133 // Per-property setup 20134 propTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim ); 20135 if ( !( prop in dataShow ) ) { 20136 dataShow[ prop ] = propTween.start; 20137 if ( hidden ) { 20138 propTween.end = propTween.start; 20139 propTween.start = 0; 20140 } 20141 } 20142 } 20143} 20144 20145function propFilter( props, specialEasing ) { 20146 var index, name, easing, value, hooks; 20147 20148 // camelCase, specialEasing and expand cssHook pass 20149 for ( index in props ) { 20150 name = camelCase( index ); 20151 easing = specialEasing[ name ]; 20152 value = props[ index ]; 20153 if ( Array.isArray( value ) ) { 20154 easing = value[ 1 ]; 20155 value = props[ index ] = value[ 0 ]; 20156 } 20157 20158 if ( index !== name ) { 20159 props[ name ] = value; 20160 delete props[ index ]; 20161 } 20162 20163 hooks = jQuery.cssHooks[ name ]; 20164 if ( hooks && "expand" in hooks ) { 20165 value = hooks.expand( value ); 20166 delete props[ name ]; 20167 20168 // Not quite $.extend, this won't overwrite existing keys. 20169 // Reusing 'index' because we have the correct "name" 20170 for ( index in value ) { 20171 if ( !( index in props ) ) { 20172 props[ index ] = value[ index ]; 20173 specialEasing[ index ] = easing; 20174 } 20175 } 20176 } else { 20177 specialEasing[ name ] = easing; 20178 } 20179 } 20180} 20181 20182function Animation( elem, properties, options ) { 20183 var result, 20184 stopped, 20185 index = 0, 20186 length = Animation.prefilters.length, 20187 deferred = jQuery.Deferred().always( function() { 20188 20189 // Don't match elem in the :animated selector 20190 delete tick.elem; 20191 } ), 20192 tick = function() { 20193 if ( stopped ) { 20194 return false; 20195 } 20196 var currentTime = fxNow || createFxNow(), 20197 remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ), 20198 20199 // Support: Android 2.3 only 20200 // Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (trac-12497) 20201 temp = remaining / animation.duration || 0, 20202 percent = 1 - temp, 20203 index = 0, 20204 length = animation.tweens.length; 20205 20206 for ( ; index < length; index++ ) { 20207 animation.tweens[ index ].run( percent ); 20208 } 20209 20210 deferred.notifyWith( elem, [ animation, percent, remaining ] ); 20211 20212 // If there's more to do, yield 20213 if ( percent < 1 && length ) { 20214 return remaining; 20215 } 20216 20217 // If this was an empty animation, synthesize a final progress notification 20218 if ( !length ) { 20219 deferred.notifyWith( elem, [ animation, 1, 0 ] ); 20220 } 20221 20222 // Resolve the animation and report its conclusion 20223 deferred.resolveWith( elem, [ animation ] ); 20224 return false; 20225 }, 20226 animation = deferred.promise( { 20227 elem: elem, 20228 props: jQuery.extend( {}, properties ), 20229 opts: jQuery.extend( true, { 20230 specialEasing: {}, 20231 easing: jQuery.easing._default 20232 }, options ), 20233 originalProperties: properties, 20234 originalOptions: options, 20235 startTime: fxNow || createFxNow(), 20236 duration: options.duration, 20237 tweens: [], 20238 createTween: function( prop, end ) { 20239 var tween = jQuery.Tween( elem, animation.opts, prop, end, 20240 animation.opts.specialEasing[ prop ] || animation.opts.easing ); 20241 animation.tweens.push( tween ); 20242 return tween; 20243 }, 20244 stop: function( gotoEnd ) { 20245 var index = 0, 20246 20247 // If we are going to the end, we want to run all the tweens 20248 // otherwise we skip this part 20249 length = gotoEnd ? animation.tweens.length : 0; 20250 if ( stopped ) { 20251 return this; 20252 } 20253 stopped = true; 20254 for ( ; index < length; index++ ) { 20255 animation.tweens[ index ].run( 1 ); 20256 } 20257 20258 // Resolve when we played the last frame; otherwise, reject 20259 if ( gotoEnd ) { 20260 deferred.notifyWith( elem, [ animation, 1, 0 ] ); 20261 deferred.resolveWith( elem, [ animation, gotoEnd ] ); 20262 } else { 20263 deferred.rejectWith( elem, [ animation, gotoEnd ] ); 20264 } 20265 return this; 20266 } 20267 } ), 20268 props = animation.props; 20269 20270 propFilter( props, animation.opts.specialEasing ); 20271 20272 for ( ; index < length; index++ ) { 20273 result = Animation.prefilters[ index ].call( animation, elem, props, animation.opts ); 20274 if ( result ) { 20275 if ( isFunction( result.stop ) ) { 20276 jQuery._queueHooks( animation.elem, animation.opts.queue ).stop = 20277 result.stop.bind( result ); 20278 } 20279 return result; 20280 } 20281 } 20282 20283 jQuery.map( props, createTween, animation ); 20284 20285 if ( isFunction( animation.opts.start ) ) { 20286 animation.opts.start.call( elem, animation ); 20287 } 20288 20289 // Attach callbacks from options 20290 animation 20291 .progress( animation.opts.progress ) 20292 .done( animation.opts.done, animation.opts.complete ) 20293 .fail( animation.opts.fail ) 20294 .always( animation.opts.always ); 20295 20296 jQuery.fx.timer( 20297 jQuery.extend( tick, { 20298 elem: elem, 20299 anim: animation, 20300 queue: animation.opts.queue 20301 } ) 20302 ); 20303 20304 return animation; 20305} 20306 20307jQuery.Animation = jQuery.extend( Animation, { 20308 20309 tweeners: { 20310 "*": [ function( prop, value ) { 20311 var tween = this.createTween( prop, value ); 20312 adjustCSS( tween.elem, prop, rcssNum.exec( value ), tween ); 20313 return tween; 20314 } ] 20315 }, 20316 20317 tweener: function( props, callback ) { 20318 if ( isFunction( props ) ) { 20319 callback = props; 20320 props = [ "*" ]; 20321 } else { 20322 props = props.match( rnothtmlwhite ); 20323 } 20324 20325 var prop, 20326 index = 0, 20327 length = props.length; 20328 20329 for ( ; index < length; index++ ) { 20330 prop = props[ index ]; 20331 Animation.tweeners[ prop ] = Animation.tweeners[ prop ] || []; 20332 Animation.tweeners[ prop ].unshift( callback ); 20333 } 20334 }, 20335 20336 prefilters: [ defaultPrefilter ], 20337 20338 prefilter: function( callback, prepend ) { 20339 if ( prepend ) { 20340 Animation.prefilters.unshift( callback ); 20341 } else { 20342 Animation.prefilters.push( callback ); 20343 } 20344 } 20345} ); 20346 20347jQuery.speed = function( speed, easing, fn ) { 20348 var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : { 20349 complete: fn || !fn && easing || 20350 isFunction( speed ) && speed, 20351 duration: speed, 20352 easing: fn && easing || easing && !isFunction( easing ) && easing 20353 }; 20354 20355 // Go to the end state if fx are off 20356 if ( jQuery.fx.off ) { 20357 opt.duration = 0; 20358 20359 } else { 20360 if ( typeof opt.duration !== "number" ) { 20361 if ( opt.duration in jQuery.fx.speeds ) { 20362 opt.duration = jQuery.fx.speeds[ opt.duration ]; 20363 20364 } else { 20365 opt.duration = jQuery.fx.speeds._default; 20366 } 20367 } 20368 } 20369 20370 // Normalize opt.queue - true/undefined/null -> "fx" 20371 if ( opt.queue == null || opt.queue === true ) { 20372 opt.queue = "fx"; 20373 } 20374 20375 // Queueing 20376 opt.old = opt.complete; 20377 20378 opt.complete = function() { 20379 if ( isFunction( opt.old ) ) { 20380 opt.old.call( this ); 20381 } 20382 20383 if ( opt.queue ) { 20384 jQuery.dequeue( this, opt.queue ); 20385 } 20386 }; 20387 20388 return opt; 20389}; 20390 20391jQuery.fn.extend( { 20392 fadeTo: function( speed, to, easing, callback ) { 20393 20394 // Show any hidden elements after setting opacity to 0 20395 return this.filter( isHiddenWithinTree ).css( "opacity", 0 ).show() 20396 20397 // Animate to the value specified 20398 .end().animate( { opacity: to }, speed, easing, callback ); 20399 }, 20400 animate: function( prop, speed, easing, callback ) { 20401 var empty = jQuery.isEmptyObject( prop ), 20402 optall = jQuery.speed( speed, easing, callback ), 20403 doAnimation = function() { 20404 20405 // Operate on a copy of prop so per-property easing won't be lost 20406 var anim = Animation( this, jQuery.extend( {}, prop ), optall ); 20407 20408 // Empty animations, or finishing resolves immediately 20409 if ( empty || dataPriv.get( this, "finish" ) ) { 20410 anim.stop( true ); 20411 } 20412 }; 20413 20414 doAnimation.finish = doAnimation; 20415 20416 return empty || optall.queue === false ? 20417 this.each( doAnimation ) : 20418 this.queue( optall.queue, doAnimation ); 20419 }, 20420 stop: function( type, clearQueue, gotoEnd ) { 20421 var stopQueue = function( hooks ) { 20422 var stop = hooks.stop; 20423 delete hooks.stop; 20424 stop( gotoEnd ); 20425 }; 20426 20427 if ( typeof type !== "string" ) { 20428 gotoEnd = clearQueue; 20429 clearQueue = type; 20430 type = undefined; 20431 } 20432 if ( clearQueue ) { 20433 this.queue( type || "fx", [] ); 20434 } 20435 20436 return this.each( function() { 20437 var dequeue = true, 20438 index = type != null && type + "queueHooks", 20439 timers = jQuery.timers, 20440 data = dataPriv.get( this ); 20441 20442 if ( index ) { 20443 if ( data[ index ] && data[ index ].stop ) { 20444 stopQueue( data[ index ] ); 20445 } 20446 } else { 20447 for ( index in data ) { 20448 if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) { 20449 stopQueue( data[ index ] ); 20450 } 20451 } 20452 } 20453 20454 for ( index = timers.length; index--; ) { 20455 if ( timers[ index ].elem === this && 20456 ( type == null || timers[ index ].queue === type ) ) { 20457 20458 timers[ index ].anim.stop( gotoEnd ); 20459 dequeue = false; 20460 timers.splice( index, 1 ); 20461 } 20462 } 20463 20464 // Start the next in the queue if the last step wasn't forced. 20465 // Timers currently will call their complete callbacks, which 20466 // will dequeue but only if they were gotoEnd. 20467 if ( dequeue || !gotoEnd ) { 20468 jQuery.dequeue( this, type ); 20469 } 20470 } ); 20471 }, 20472 finish: function( type ) { 20473 if ( type !== false ) { 20474 type = type || "fx"; 20475 } 20476 return this.each( function() { 20477 var index, 20478 data = dataPriv.get( this ), 20479 queue = data[ type + "queue" ], 20480 hooks = data[ type + "queueHooks" ], 20481 timers = jQuery.timers, 20482 length = queue ? queue.length : 0; 20483 20484 // Enable finishing flag on private data 20485 data.finish = true; 20486 20487 // Empty the queue first 20488 jQuery.queue( this, type, [] ); 20489 20490 if ( hooks && hooks.stop ) { 20491 hooks.stop.call( this, true ); 20492 } 20493 20494 // Look for any active animations, and finish them 20495 for ( index = timers.length; index--; ) { 20496 if ( timers[ index ].elem === this && timers[ index ].queue === type ) { 20497 timers[ index ].anim.stop( true ); 20498 timers.splice( index, 1 ); 20499 } 20500 } 20501 20502 // Look for any animations in the old queue and finish them 20503 for ( index = 0; index < length; index++ ) { 20504 if ( queue[ index ] && queue[ index ].finish ) { 20505 queue[ index ].finish.call( this ); 20506 } 20507 } 20508 20509 // Turn off finishing flag 20510 delete data.finish; 20511 } ); 20512 } 20513} ); 20514 20515jQuery.each( [ "toggle", "show", "hide" ], function( _i, name ) { 20516 var cssFn = jQuery.fn[ name ]; 20517 jQuery.fn[ name ] = function( speed, easing, callback ) { 20518 return speed == null || typeof speed === "boolean" ? 20519 cssFn.apply( this, arguments ) : 20520 this.animate( genFx( name, true ), speed, easing, callback ); 20521 }; 20522} ); 20523 20524// Generate shortcuts for custom animations 20525jQuery.each( { 20526 slideDown: genFx( "show" ), 20527 slideUp: genFx( "hide" ), 20528 slideToggle: genFx( "toggle" ), 20529 fadeIn: { opacity: "show" }, 20530 fadeOut: { opacity: "hide" }, 20531 fadeToggle: { opacity: "toggle" } 20532}, function( name, props ) { 20533 jQuery.fn[ name ] = function( speed, easing, callback ) { 20534 return this.animate( props, speed, easing, callback ); 20535 }; 20536} ); 20537 20538jQuery.timers = []; 20539jQuery.fx.tick = function() { 20540 var timer, 20541 i = 0, 20542 timers = jQuery.timers; 20543 20544 fxNow = Date.now(); 20545 20546 for ( ; i < timers.length; i++ ) { 20547 timer = timers[ i ]; 20548 20549 // Run the timer and safely remove it when done (allowing for external removal) 20550 if ( !timer() && timers[ i ] === timer ) { 20551 timers.splice( i--, 1 ); 20552 } 20553 } 20554 20555 if ( !timers.length ) { 20556 jQuery.fx.stop(); 20557 } 20558 fxNow = undefined; 20559}; 20560 20561jQuery.fx.timer = function( timer ) { 20562 jQuery.timers.push( timer ); 20563 jQuery.fx.start(); 20564}; 20565 20566jQuery.fx.interval = 13; 20567jQuery.fx.start = function() { 20568 if ( inProgress ) { 20569 return; 20570 } 20571 20572 inProgress = true; 20573 schedule(); 20574}; 20575 20576jQuery.fx.stop = function() { 20577 inProgress = null; 20578}; 20579 20580jQuery.fx.speeds = { 20581 slow: 600, 20582 fast: 200, 20583 20584 // Default speed 20585 _default: 400 20586}; 20587 20588 20589// Based off of the plugin by Clint Helfers, with permission. 20590jQuery.fn.delay = function( time, type ) { 20591 time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time; 20592 type = type || "fx"; 20593 20594 return this.queue( type, function( next, hooks ) { 20595 var timeout = window.setTimeout( next, time ); 20596 hooks.stop = function() { 20597 window.clearTimeout( timeout ); 20598 }; 20599 } ); 20600}; 20601 20602 20603( function() { 20604 var input = document.createElement( "input" ), 20605 select = document.createElement( "select" ), 20606 opt = select.appendChild( document.createElement( "option" ) ); 20607 20608 input.type = "checkbox"; 20609 20610 // Support: Android <=4.3 only 20611 // Default value for a checkbox should be "on" 20612 support.checkOn = input.value !== ""; 20613 20614 // Support: IE <=11 only 20615 // Must access selectedIndex to make default options select 20616 support.optSelected = opt.selected; 20617 20618 // Support: IE <=11 only 20619 // An input loses its value after becoming a radio 20620 input = document.createElement( "input" ); 20621 input.value = "t"; 20622 input.type = "radio"; 20623 support.radioValue = input.value === "t"; 20624} )(); 20625 20626 20627var boolHook, 20628 attrHandle = jQuery.expr.attrHandle; 20629 20630jQuery.fn.extend( { 20631 attr: function( name, value ) { 20632 return access( this, jQuery.attr, name, value, arguments.length > 1 ); 20633 }, 20634 20635 removeAttr: function( name ) { 20636 return this.each( function() { 20637 jQuery.removeAttr( this, name ); 20638 } ); 20639 } 20640} ); 20641 20642jQuery.extend( { 20643 attr: function( elem, name, value ) { 20644 var ret, hooks, 20645 nType = elem.nodeType; 20646 20647 // Don't get/set attributes on text, comment and attribute nodes 20648 if ( nType === 3 || nType === 8 || nType === 2 ) { 20649 return; 20650 } 20651 20652 // Fallback to prop when attributes are not supported 20653 if ( typeof elem.getAttribute === "undefined" ) { 20654 return jQuery.prop( elem, name, value ); 20655 } 20656 20657 // Attribute hooks are determined by the lowercase version 20658 // Grab necessary hook if one is defined 20659 if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { 20660 hooks = jQuery.attrHooks[ name.toLowerCase() ] || 20661 ( jQuery.expr.match.bool.test( name ) ? boolHook : undefined ); 20662 } 20663 20664 if ( value !== undefined ) { 20665 if ( value === null ) { 20666 jQuery.removeAttr( elem, name ); 20667 return; 20668 } 20669 20670 if ( hooks && "set" in hooks && 20671 ( ret = hooks.set( elem, value, name ) ) !== undefined ) { 20672 return ret; 20673 } 20674 20675 elem.setAttribute( name, value + "" ); 20676 return value; 20677 } 20678 20679 if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { 20680 return ret; 20681 } 20682 20683 ret = jQuery.find.attr( elem, name ); 20684 20685 // Non-existent attributes return null, we normalize to undefined 20686 return ret == null ? undefined : ret; 20687 }, 20688 20689 attrHooks: { 20690 type: { 20691 set: function( elem, value ) { 20692 if ( !support.radioValue && value === "radio" && 20693 nodeName( elem, "input" ) ) { 20694 var val = elem.value; 20695 elem.setAttribute( "type", value ); 20696 if ( val ) { 20697 elem.value = val; 20698 } 20699 return value; 20700 } 20701 } 20702 } 20703 }, 20704 20705 removeAttr: function( elem, value ) { 20706 var name, 20707 i = 0, 20708 20709 // Attribute names can contain non-HTML whitespace characters 20710 // https://html.spec.whatwg.org/multipage/syntax.html#attributes-2 20711 attrNames = value && value.match( rnothtmlwhite ); 20712 20713 if ( attrNames && elem.nodeType === 1 ) { 20714 while ( ( name = attrNames[ i++ ] ) ) { 20715 elem.removeAttribute( name ); 20716 } 20717 } 20718 } 20719} ); 20720 20721// Hooks for boolean attributes 20722boolHook = { 20723 set: function( elem, value, name ) { 20724 if ( value === false ) { 20725 20726 // Remove boolean attributes when set to false 20727 jQuery.removeAttr( elem, name ); 20728 } else { 20729 elem.setAttribute( name, name ); 20730 } 20731 return name; 20732 } 20733}; 20734 20735jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( _i, name ) { 20736 var getter = attrHandle[ name ] || jQuery.find.attr; 20737 20738 attrHandle[ name ] = function( elem, name, isXML ) { 20739 var ret, handle, 20740 lowercaseName = name.toLowerCase(); 20741 20742 if ( !isXML ) { 20743 20744 // Avoid an infinite loop by temporarily removing this function from the getter 20745 handle = attrHandle[ lowercaseName ]; 20746 attrHandle[ lowercaseName ] = ret; 20747 ret = getter( elem, name, isXML ) != null ? 20748 lowercaseName : 20749 null; 20750 attrHandle[ lowercaseName ] = handle; 20751 } 20752 return ret; 20753 }; 20754} ); 20755 20756 20757 20758 20759var rfocusable = /^(?:input|select|textarea|button)$/i, 20760 rclickable = /^(?:a|area)$/i; 20761 20762jQuery.fn.extend( { 20763 prop: function( name, value ) { 20764 return access( this, jQuery.prop, name, value, arguments.length > 1 ); 20765 }, 20766 20767 removeProp: function( name ) { 20768 return this.each( function() { 20769 delete this[ jQuery.propFix[ name ] || name ]; 20770 } ); 20771 } 20772} ); 20773 20774jQuery.extend( { 20775 prop: function( elem, name, value ) { 20776 var ret, hooks, 20777 nType = elem.nodeType; 20778 20779 // Don't get/set properties on text, comment and attribute nodes 20780 if ( nType === 3 || nType === 8 || nType === 2 ) { 20781 return; 20782 } 20783 20784 if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { 20785 20786 // Fix name and attach hooks 20787 name = jQuery.propFix[ name ] || name; 20788 hooks = jQuery.propHooks[ name ]; 20789 } 20790 20791 if ( value !== undefined ) { 20792 if ( hooks && "set" in hooks && 20793 ( ret = hooks.set( elem, value, name ) ) !== undefined ) { 20794 return ret; 20795 } 20796 20797 return ( elem[ name ] = value ); 20798 } 20799 20800 if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { 20801 return ret; 20802 } 20803 20804 return elem[ name ]; 20805 }, 20806 20807 propHooks: { 20808 tabIndex: { 20809 get: function( elem ) { 20810 20811 // Support: IE <=9 - 11 only 20812 // elem.tabIndex doesn't always return the 20813 // correct value when it hasn't been explicitly set 20814 // Use proper attribute retrieval (trac-12072) 20815 var tabindex = jQuery.find.attr( elem, "tabindex" ); 20816 20817 if ( tabindex ) { 20818 return parseInt( tabindex, 10 ); 20819 } 20820 20821 if ( 20822 rfocusable.test( elem.nodeName ) || 20823 rclickable.test( elem.nodeName ) && 20824 elem.href 20825 ) { 20826 return 0; 20827 } 20828 20829 return -1; 20830 } 20831 } 20832 }, 20833 20834 propFix: { 20835 "for": "htmlFor", 20836 "class": "className" 20837 } 20838} ); 20839 20840// Support: IE <=11 only 20841// Accessing the selectedIndex property 20842// forces the browser to respect setting selected 20843// on the option 20844// The getter ensures a default option is selected 20845// when in an optgroup 20846// eslint rule "no-unused-expressions" is disabled for this code 20847// since it considers such accessions noop 20848if ( !support.optSelected ) { 20849 jQuery.propHooks.selected = { 20850 get: function( elem ) { 20851 20852 /* eslint no-unused-expressions: "off" */ 20853 20854 var parent = elem.parentNode; 20855 if ( parent && parent.parentNode ) { 20856 parent.parentNode.selectedIndex; 20857 } 20858 return null; 20859 }, 20860 set: function( elem ) { 20861 20862 /* eslint no-unused-expressions: "off" */ 20863 20864 var parent = elem.parentNode; 20865 if ( parent ) { 20866 parent.selectedIndex; 20867 20868 if ( parent.parentNode ) { 20869 parent.parentNode.selectedIndex; 20870 } 20871 } 20872 } 20873 }; 20874} 20875 20876jQuery.each( [ 20877 "tabIndex", 20878 "readOnly", 20879 "maxLength", 20880 "cellSpacing", 20881 "cellPadding", 20882 "rowSpan", 20883 "colSpan", 20884 "useMap", 20885 "frameBorder", 20886 "contentEditable" 20887], function() { 20888 jQuery.propFix[ this.toLowerCase() ] = this; 20889} ); 20890 20891 20892 20893 20894 // Strip and collapse whitespace according to HTML spec 20895 // https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace 20896 function stripAndCollapse( value ) { 20897 var tokens = value.match( rnothtmlwhite ) || []; 20898 return tokens.join( " " ); 20899 } 20900 20901 20902function getClass( elem ) { 20903 return elem.getAttribute && elem.getAttribute( "class" ) || ""; 20904} 20905 20906function classesToArray( value ) { 20907 if ( Array.isArray( value ) ) { 20908 return value; 20909 } 20910 if ( typeof value === "string" ) { 20911 return value.match( rnothtmlwhite ) || []; 20912 } 20913 return []; 20914} 20915 20916jQuery.fn.extend( { 20917 addClass: function( value ) { 20918 var classNames, cur, curValue, className, i, finalValue; 20919 20920 if ( isFunction( value ) ) { 20921 return this.each( function( j ) { 20922 jQuery( this ).addClass( value.call( this, j, getClass( this ) ) ); 20923 } ); 20924 } 20925 20926 classNames = classesToArray( value ); 20927 20928 if ( classNames.length ) { 20929 return this.each( function() { 20930 curValue = getClass( this ); 20931 cur = this.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); 20932 20933 if ( cur ) { 20934 for ( i = 0; i < classNames.length; i++ ) { 20935 className = classNames[ i ]; 20936 if ( cur.indexOf( " " + className + " " ) < 0 ) { 20937 cur += className + " "; 20938 } 20939 } 20940 20941 // Only assign if different to avoid unneeded rendering. 20942 finalValue = stripAndCollapse( cur ); 20943 if ( curValue !== finalValue ) { 20944 this.setAttribute( "class", finalValue ); 20945 } 20946 } 20947 } ); 20948 } 20949 20950 return this; 20951 }, 20952 20953 removeClass: function( value ) { 20954 var classNames, cur, curValue, className, i, finalValue; 20955 20956 if ( isFunction( value ) ) { 20957 return this.each( function( j ) { 20958 jQuery( this ).removeClass( value.call( this, j, getClass( this ) ) ); 20959 } ); 20960 } 20961 20962 if ( !arguments.length ) { 20963 return this.attr( "class", "" ); 20964 } 20965 20966 classNames = classesToArray( value ); 20967 20968 if ( classNames.length ) { 20969 return this.each( function() { 20970 curValue = getClass( this ); 20971 20972 // This expression is here for better compressibility (see addClass) 20973 cur = this.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); 20974 20975 if ( cur ) { 20976 for ( i = 0; i < classNames.length; i++ ) { 20977 className = classNames[ i ]; 20978 20979 // Remove *all* instances 20980 while ( cur.indexOf( " " + className + " " ) > -1 ) { 20981 cur = cur.replace( " " + className + " ", " " ); 20982 } 20983 } 20984 20985 // Only assign if different to avoid unneeded rendering. 20986 finalValue = stripAndCollapse( cur ); 20987 if ( curValue !== finalValue ) { 20988 this.setAttribute( "class", finalValue ); 20989 } 20990 } 20991 } ); 20992 } 20993 20994 return this; 20995 }, 20996 20997 toggleClass: function( value, stateVal ) { 20998 var classNames, className, i, self, 20999 type = typeof value, 21000 isValidValue = type === "string" || Array.isArray( value ); 21001 21002 if ( isFunction( value ) ) { 21003 return this.each( function( i ) { 21004 jQuery( this ).toggleClass( 21005 value.call( this, i, getClass( this ), stateVal ), 21006 stateVal 21007 ); 21008 } ); 21009 } 21010 21011 if ( typeof stateVal === "boolean" && isValidValue ) { 21012 return stateVal ? this.addClass( value ) : this.removeClass( value ); 21013 } 21014 21015 classNames = classesToArray( value ); 21016 21017 return this.each( function() { 21018 if ( isValidValue ) { 21019 21020 // Toggle individual class names 21021 self = jQuery( this ); 21022 21023 for ( i = 0; i < classNames.length; i++ ) { 21024 className = classNames[ i ]; 21025 21026 // Check each className given, space separated list 21027 if ( self.hasClass( className ) ) { 21028 self.removeClass( className ); 21029 } else { 21030 self.addClass( className ); 21031 } 21032 } 21033 21034 // Toggle whole class name 21035 } else if ( value === undefined || type === "boolean" ) { 21036 className = getClass( this ); 21037 if ( className ) { 21038 21039 // Store className if set 21040 dataPriv.set( this, "__className__", className ); 21041 } 21042 21043 // If the element has a class name or if we're passed `false`, 21044 // then remove the whole classname (if there was one, the above saved it). 21045 // Otherwise bring back whatever was previously saved (if anything), 21046 // falling back to the empty string if nothing was stored. 21047 if ( this.setAttribute ) { 21048 this.setAttribute( "class", 21049 className || value === false ? 21050 "" : 21051 dataPriv.get( this, "__className__" ) || "" 21052 ); 21053 } 21054 } 21055 } ); 21056 }, 21057 21058 hasClass: function( selector ) { 21059 var className, elem, 21060 i = 0; 21061 21062 className = " " + selector + " "; 21063 while ( ( elem = this[ i++ ] ) ) { 21064 if ( elem.nodeType === 1 && 21065 ( " " + stripAndCollapse( getClass( elem ) ) + " " ).indexOf( className ) > -1 ) { 21066 return true; 21067 } 21068 } 21069 21070 return false;
vendor: 1,385 bytes, lines 21071-21140
21071 } 21072} ); 21073 21074 21075 21076 21077var rreturn = /\r/g; 21078 21079jQuery.fn.extend( { 21080 val: function( value ) { 21081 var hooks, ret, valueIsFunction, 21082 elem = this[ 0 ]; 21083 21084 if ( !arguments.length ) { 21085 if ( elem ) { 21086 hooks = jQuery.valHooks[ elem.type ] || 21087 jQuery.valHooks[ elem.nodeName.toLowerCase() ]; 21088 21089 if ( hooks && 21090 "get" in hooks && 21091 ( ret = hooks.get( elem, "value" ) ) !== undefined 21092 ) { 21093 return ret; 21094 } 21095 21096 ret = elem.value; 21097 21098 // Handle most common string cases 21099 if ( typeof ret === "string" ) { 21100 return ret.replace( rreturn, "" ); 21101 } 21102 21103 // Handle cases where value is null/undef or number 21104 return ret == null ? "" : ret; 21105 } 21106 21107 return; 21108 } 21109 21110 valueIsFunction = isFunction( value ); 21111 21112 return this.each( function( i ) { 21113 var val; 21114 21115 if ( this.nodeType !== 1 ) { 21116 return; 21117 } 21118 21119 if ( valueIsFunction ) { 21120 val = value.call( this, i, jQuery( this ).val() ); 21121 } else { 21122 val = value; 21123 } 21124 21125 // Treat null/undefined as ""; convert numbers to string 21126 if ( val == null ) { 21127 val = ""; 21128 21129 } else if ( typeof val === "number" ) { 21130 val += ""; 21131 21132 } else if ( Array.isArray( val ) ) { 21133 val = jQuery.map( val, function( value ) { 21134 return value == null ? "" : value + ""; 21135 } ); 21136 } 21137 21138 hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ]; 21139 21140 // If set returns undefined, fall back to normal setting
vendor: 43,419 bytes, lines 21141-22830
21141 if ( !hooks || !( "set" in hooks ) || hooks.set( this, val, "value" ) === undefined ) { 21142 this.value = val; 21143 } 21144 } ); 21145 } 21146} ); 21147 21148jQuery.extend( { 21149 valHooks: { 21150 option: { 21151 get: function( elem ) { 21152 21153 var val = jQuery.find.attr( elem, "value" ); 21154 return val != null ? 21155 val : 21156 21157 // Support: IE <=10 - 11 only 21158 // option.text throws exceptions (trac-14686, trac-14858) 21159 // Strip and collapse whitespace 21160 // https://html.spec.whatwg.org/#strip-and-collapse-whitespace 21161 stripAndCollapse( jQuery.text( elem ) ); 21162 } 21163 }, 21164 select: { 21165 get: function( elem ) { 21166 var value, option, i, 21167 options = elem.options, 21168 index = elem.selectedIndex, 21169 one = elem.type === "select-one", 21170 values = one ? null : [], 21171 max = one ? index + 1 : options.length; 21172 21173 if ( index < 0 ) { 21174 i = max; 21175 21176 } else { 21177 i = one ? index : 0; 21178 } 21179 21180 // Loop through all the selected options 21181 for ( ; i < max; i++ ) { 21182 option = options[ i ]; 21183 21184 // Support: IE <=9 only 21185 // IE8-9 doesn't update selected after form reset (trac-2551) 21186 if ( ( option.selected || i === index ) && 21187 21188 // Don't return options that are disabled or in a disabled optgroup 21189 !option.disabled && 21190 ( !option.parentNode.disabled || 21191 !nodeName( option.parentNode, "optgroup" ) ) ) { 21192 21193 // Get the specific value for the option 21194 value = jQuery( option ).val(); 21195 21196 // We don't need an array for one selects 21197 if ( one ) { 21198 return value; 21199 } 21200 21201 // Multi-Selects return an array 21202 values.push( value ); 21203 } 21204 } 21205 21206 return values; 21207 }, 21208 21209 set: function( elem, value ) { 21210 var optionSet, option, 21211 options = elem.options, 21212 values = jQuery.makeArray( value ), 21213 i = options.length; 21214 21215 while ( i-- ) { 21216 option = options[ i ]; 21217 21218 /* eslint-disable no-cond-assign */ 21219 21220 if ( option.selected = 21221 jQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1 21222 ) { 21223 optionSet = true; 21224 } 21225 21226 /* eslint-enable no-cond-assign */ 21227 } 21228 21229 // Force browsers to behave consistently when non-matching value is set 21230 if ( !optionSet ) { 21231 elem.selectedIndex = -1; 21232 } 21233 return values; 21234 } 21235 } 21236 } 21237} ); 21238 21239// Radios and checkboxes getter/setter 21240jQuery.each( [ "radio", "checkbox" ], function() { 21241 jQuery.valHooks[ this ] = { 21242 set: function( elem, value ) { 21243 if ( Array.isArray( value ) ) { 21244 return ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 ); 21245 } 21246 } 21247 }; 21248 if ( !support.checkOn ) { 21249 jQuery.valHooks[ this ].get = function( elem ) { 21250 return elem.getAttribute( "value" ) === null ? "on" : elem.value; 21251 }; 21252 } 21253} ); 21254 21255 21256 21257 21258// Return jQuery for attributes-only inclusion 21259var location = window.location; 21260 21261var nonce = { guid: Date.now() }; 21262 21263var rquery = ( /\?/ ); 21264 21265 21266 21267// Cross-browser xml parsing 21268jQuery.parseXML = function( data ) { 21269 var xml, parserErrorElem; 21270 if ( !data || typeof data !== "string" ) { 21271 return null; 21272 } 21273 21274 // Support: IE 9 - 11 only 21275 // IE throws on parseFromString with invalid input. 21276 try { 21277 xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" ); 21278 } catch ( e ) {} 21279 21280 parserErrorElem = xml && xml.getElementsByTagName( "parsererror" )[ 0 ]; 21281 if ( !xml || parserErrorElem ) { 21282 jQuery.error( "Invalid XML: " + ( 21283 parserErrorElem ? 21284 jQuery.map( parserErrorElem.childNodes, function( el ) { 21285 return el.textContent; 21286 } ).join( "\n" ) : 21287 data 21288 ) ); 21289 } 21290 return xml; 21291}; 21292 21293 21294var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/, 21295 stopPropagationCallback = function( e ) { 21296 e.stopPropagation(); 21297 }; 21298 21299jQuery.extend( jQuery.event, { 21300 21301 trigger: function( event, data, elem, onlyHandlers ) { 21302 21303 var i, cur, tmp, bubbleType, ontype, handle, special, lastElement, 21304 eventPath = [ elem || document ], 21305 type = hasOwn.call( event, "type" ) ? event.type : event, 21306 namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split( "." ) : []; 21307 21308 cur = lastElement = tmp = elem = elem || document; 21309 21310 // Don't do events on text and comment nodes 21311 if ( elem.nodeType === 3 || elem.nodeType === 8 ) { 21312 return; 21313 } 21314 21315 // focus/blur morphs to focusin/out; ensure we're not firing them right now 21316 if ( rfocusMorph.test( type + jQuery.event.triggered ) ) { 21317 return; 21318 } 21319 21320 if ( type.indexOf( "." ) > -1 ) { 21321 21322 // Namespaced trigger; create a regexp to match event type in handle() 21323 namespaces = type.split( "." ); 21324 type = namespaces.shift(); 21325 namespaces.sort(); 21326 } 21327 ontype = type.indexOf( ":" ) < 0 && "on" + type; 21328 21329 // Caller can pass in a jQuery.Event object, Object, or just an event type string 21330 event = event[ jQuery.expando ] ? 21331 event : 21332 new jQuery.Event( type, typeof event === "object" && event ); 21333 21334 // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true) 21335 event.isTrigger = onlyHandlers ? 2 : 3; 21336 event.namespace = namespaces.join( "." ); 21337 event.rnamespace = event.namespace ? 21338 new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) : 21339 null; 21340 21341 // Clean up the event in case it is being reused 21342 event.result = undefined; 21343 if ( !event.target ) { 21344 event.target = elem; 21345 } 21346 21347 // Clone any incoming data and prepend the event, creating the handler arg list 21348 data = data == null ? 21349 [ event ] : 21350 jQuery.makeArray( data, [ event ] ); 21351 21352 // Allow special events to draw outside the lines 21353 special = jQuery.event.special[ type ] || {}; 21354 if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) { 21355 return; 21356 } 21357 21358 // Determine event propagation path in advance, per W3C events spec (trac-9951) 21359 // Bubble up to document, then to window; watch for a global ownerDocument var (trac-9724) 21360 if ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) { 21361 21362 bubbleType = special.delegateType || type; 21363 if ( !rfocusMorph.test( bubbleType + type ) ) { 21364 cur = cur.parentNode; 21365 } 21366 for ( ; cur; cur = cur.parentNode ) { 21367 eventPath.push( cur ); 21368 tmp = cur; 21369 } 21370 21371 // Only add window if we got to document (e.g., not plain obj or detached DOM) 21372 if ( tmp === ( elem.ownerDocument || document ) ) { 21373 eventPath.push( tmp.defaultView || tmp.parentWindow || window ); 21374 } 21375 } 21376 21377 // Fire handlers on the event path 21378 i = 0; 21379 while ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) { 21380 lastElement = cur; 21381 event.type = i > 1 ? 21382 bubbleType : 21383 special.bindType || type; 21384 21385 // jQuery handler 21386 handle = ( dataPriv.get( cur, "events" ) || Object.create( null ) )[ event.type ] && 21387 dataPriv.get( cur, "handle" ); 21388 if ( handle ) { 21389 handle.apply( cur, data ); 21390 } 21391 21392 // Native handler 21393 handle = ontype && cur[ ontype ]; 21394 if ( handle && handle.apply && acceptData( cur ) ) { 21395 event.result = handle.apply( cur, data ); 21396 if ( event.result === false ) { 21397 event.preventDefault(); 21398 } 21399 } 21400 } 21401 event.type = type; 21402 21403 // If nobody prevented the default action, do it now 21404 if ( !onlyHandlers && !event.isDefaultPrevented() ) { 21405 21406 if ( ( !special._default || 21407 special._default.apply( eventPath.pop(), data ) === false ) && 21408 acceptData( elem ) ) { 21409 21410 // Call a native DOM method on the target with the same name as the event. 21411 // Don't do default actions on window, that's where global variables be (trac-6170) 21412 if ( ontype && isFunction( elem[ type ] ) && !isWindow( elem ) ) { 21413 21414 // Don't re-trigger an onFOO event when we call its FOO() method 21415 tmp = elem[ ontype ]; 21416 21417 if ( tmp ) { 21418 elem[ ontype ] = null; 21419 } 21420 21421 // Prevent re-triggering of the same event, since we already bubbled it above 21422 jQuery.event.triggered = type; 21423 21424 if ( event.isPropagationStopped() ) { 21425 lastElement.addEventListener( type, stopPropagationCallback ); 21426 } 21427 21428 elem[ type ](); 21429 21430 if ( event.isPropagationStopped() ) { 21431 lastElement.removeEventListener( type, stopPropagationCallback ); 21432 } 21433 21434 jQuery.event.triggered = undefined; 21435 21436 if ( tmp ) { 21437 elem[ ontype ] = tmp; 21438 } 21439 } 21440 } 21441 } 21442 21443 return event.result; 21444 }, 21445 21446 // Piggyback on a donor event to simulate a different one 21447 // Used only for `focus(in | out)` events 21448 simulate: function( type, elem, event ) { 21449 var e = jQuery.extend( 21450 new jQuery.Event(), 21451 event, 21452 { 21453 type: type, 21454 isSimulated: true 21455 } 21456 ); 21457 21458 jQuery.event.trigger( e, null, elem ); 21459 } 21460 21461} ); 21462 21463jQuery.fn.extend( { 21464 21465 trigger: function( type, data ) { 21466 return this.each( function() { 21467 jQuery.event.trigger( type, data, this ); 21468 } ); 21469 }, 21470 triggerHandler: function( type, data ) { 21471 var elem = this[ 0 ]; 21472 if ( elem ) { 21473 return jQuery.event.trigger( type, data, elem, true ); 21474 } 21475 } 21476} ); 21477 21478 21479var 21480 rbracket = /\[\]$/, 21481 rCRLF = /\r?\n/g, 21482 rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i, 21483 rsubmittable = /^(?:input|select|textarea|keygen)/i; 21484 21485function buildParams( prefix, obj, traditional, add ) { 21486 var name; 21487 21488 if ( Array.isArray( obj ) ) { 21489 21490 // Serialize array item. 21491 jQuery.each( obj, function( i, v ) { 21492 if ( traditional || rbracket.test( prefix ) ) { 21493 21494 // Treat each array item as a scalar. 21495 add( prefix, v ); 21496 21497 } else { 21498 21499 // Item is non-scalar (array or object), encode its numeric index. 21500 buildParams( 21501 prefix + "[" + ( typeof v === "object" && v != null ? i : "" ) + "]", 21502 v, 21503 traditional, 21504 add 21505 ); 21506 } 21507 } ); 21508 21509 } else if ( !traditional && toType( obj ) === "object" ) { 21510 21511 // Serialize object item. 21512 for ( name in obj ) { 21513 buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add ); 21514 } 21515 21516 } else { 21517 21518 // Serialize scalar item. 21519 add( prefix, obj ); 21520 } 21521} 21522 21523// Serialize an array of form elements or a set of 21524// key/values into a query string 21525jQuery.param = function( a, traditional ) { 21526 var prefix, 21527 s = [], 21528 add = function( key, valueOrFunction ) { 21529 21530 // If value is a function, invoke it and use its return value 21531 var value = isFunction( valueOrFunction ) ? 21532 valueOrFunction() : 21533 valueOrFunction; 21534 21535 s[ s.length ] = encodeURIComponent( key ) + "=" + 21536 encodeURIComponent( value == null ? "" : value ); 21537 }; 21538 21539 if ( a == null ) { 21540 return ""; 21541 } 21542 21543 // If an array was passed in, assume that it is an array of form elements. 21544 if ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) { 21545 21546 // Serialize the form elements 21547 jQuery.each( a, function() { 21548 add( this.name, this.value ); 21549 } ); 21550 21551 } else { 21552 21553 // If traditional, encode the "old" way (the way 1.3.2 or older 21554 // did it), otherwise encode params recursively. 21555 for ( prefix in a ) { 21556 buildParams( prefix, a[ prefix ], traditional, add ); 21557 } 21558 } 21559 21560 // Return the resulting serialization 21561 return s.join( "&" ); 21562}; 21563 21564jQuery.fn.extend( { 21565 serialize: function() { 21566 return jQuery.param( this.serializeArray() ); 21567 }, 21568 serializeArray: function() { 21569 return this.map( function() { 21570 21571 // Can add propHook for "elements" to filter or add form elements 21572 var elements = jQuery.prop( this, "elements" ); 21573 return elements ? jQuery.makeArray( elements ) : this; 21574 } ).filter( function() { 21575 var type = this.type; 21576 21577 // Use .is( ":disabled" ) so that fieldset[disabled] works 21578 return this.name && !jQuery( this ).is( ":disabled" ) && 21579 rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) && 21580 ( this.checked || !rcheckableType.test( type ) ); 21581 } ).map( function( _i, elem ) { 21582 var val = jQuery( this ).val(); 21583 21584 if ( val == null ) { 21585 return null; 21586 } 21587 21588 if ( Array.isArray( val ) ) { 21589 return jQuery.map( val, function( val ) { 21590 return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; 21591 } ); 21592 } 21593 21594 return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; 21595 } ).get(); 21596 } 21597} ); 21598 21599 21600var 21601 r20 = /%20/g, 21602 rhash = /#.*$/, 21603 rantiCache = /([?&])_=[^&]*/, 21604 rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg, 21605 21606 // trac-7653, trac-8125, trac-8152: local protocol detection 21607 rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/, 21608 rnoContent = /^(?:GET|HEAD)$/, 21609 rprotocol = /^\/\//, 21610 21611 /* Prefilters 21612 * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example) 21613 * 2) These are called: 21614 * - BEFORE asking for a transport 21615 * - AFTER param serialization (s.data is a string if s.processData is true) 21616 * 3) key is the dataType 21617 * 4) the catchall symbol "*" can be used 21618 * 5) execution will start with transport dataType and THEN continue down to "*" if needed 21619 */ 21620 prefilters = {}, 21621 21622 /* Transports bindings 21623 * 1) key is the dataType 21624 * 2) the catchall symbol "*" can be used 21625 * 3) selection will start with transport dataType and THEN go to "*" if needed 21626 */ 21627 transports = {}, 21628 21629 // Avoid comment-prolog char sequence (trac-10098); must appease lint and evade compression 21630 allTypes = "*/".concat( "*" ), 21631 21632 // Anchor tag for parsing the document origin 21633 originAnchor = document.createElement( "a" ); 21634 21635originAnchor.href = location.href; 21636 21637// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport 21638function addToPrefiltersOrTransports( structure ) { 21639 21640 // dataTypeExpression is optional and defaults to "*" 21641 return function( dataTypeExpression, func ) { 21642 21643 if ( typeof dataTypeExpression !== "string" ) { 21644 func = dataTypeExpression; 21645 dataTypeExpression = "*"; 21646 } 21647 21648 var dataType, 21649 i = 0, 21650 dataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || []; 21651 21652 if ( isFunction( func ) ) { 21653 21654 // For each dataType in the dataTypeExpression 21655 while ( ( dataType = dataTypes[ i++ ] ) ) { 21656 21657 // Prepend if requested 21658 if ( dataType[ 0 ] === "+" ) { 21659 dataType = dataType.slice( 1 ) || "*"; 21660 ( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func ); 21661 21662 // Otherwise append 21663 } else { 21664 ( structure[ dataType ] = structure[ dataType ] || [] ).push( func ); 21665 } 21666 } 21667 } 21668 }; 21669} 21670 21671// Base inspection function for prefilters and transports 21672function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) { 21673 21674 var inspected = {}, 21675 seekingTransport = ( structure === transports ); 21676 21677 function inspect( dataType ) { 21678 var selected; 21679 inspected[ dataType ] = true; 21680 jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) { 21681 var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR ); 21682 if ( typeof dataTypeOrTransport === "string" && 21683 !seekingTransport && !inspected[ dataTypeOrTransport ] ) { 21684 21685 options.dataTypes.unshift( dataTypeOrTransport ); 21686 inspect( dataTypeOrTransport ); 21687 return false; 21688 } else if ( seekingTransport ) { 21689 return !( selected = dataTypeOrTransport ); 21690 } 21691 } ); 21692 return selected; 21693 } 21694 21695 return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" ); 21696} 21697 21698// A special extend for ajax options 21699// that takes "flat" options (not to be deep extended) 21700// Fixes trac-9887 21701function ajaxExtend( target, src ) { 21702 var key, deep, 21703 flatOptions = jQuery.ajaxSettings.flatOptions || {}; 21704 21705 for ( key in src ) { 21706 if ( src[ key ] !== undefined ) { 21707 ( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ]; 21708 } 21709 } 21710 if ( deep ) { 21711 jQuery.extend( true, target, deep ); 21712 } 21713 21714 return target; 21715} 21716 21717/* Handles responses to an ajax request: 21718 * - finds the right dataType (mediates between content-type and expected dataType) 21719 * - returns the corresponding response 21720 */ 21721function ajaxHandleResponses( s, jqXHR, responses ) { 21722 21723 var ct, type, finalDataType, firstDataType, 21724 contents = s.contents, 21725 dataTypes = s.dataTypes; 21726 21727 // Remove auto dataType and get content-type in the process 21728 while ( dataTypes[ 0 ] === "*" ) { 21729 dataTypes.shift(); 21730 if ( ct === undefined ) { 21731 ct = s.mimeType || jqXHR.getResponseHeader( "Content-Type" ); 21732 } 21733 } 21734 21735 // Check if we're dealing with a known content-type 21736 if ( ct ) { 21737 for ( type in contents ) { 21738 if ( contents[ type ] && contents[ type ].test( ct ) ) { 21739 dataTypes.unshift( type ); 21740 break; 21741 } 21742 } 21743 } 21744 21745 // Check to see if we have a response for the expected dataType 21746 if ( dataTypes[ 0 ] in responses ) { 21747 finalDataType = dataTypes[ 0 ]; 21748 } else { 21749 21750 // Try convertible dataTypes 21751 for ( type in responses ) { 21752 if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[ 0 ] ] ) { 21753 finalDataType = type; 21754 break; 21755 } 21756 if ( !firstDataType ) { 21757 firstDataType = type; 21758 } 21759 } 21760 21761 // Or just use first one 21762 finalDataType = finalDataType || firstDataType; 21763 } 21764 21765 // If we found a dataType 21766 // We add the dataType to the list if needed 21767 // and return the corresponding response 21768 if ( finalDataType ) { 21769 if ( finalDataType !== dataTypes[ 0 ] ) { 21770 dataTypes.unshift( finalDataType ); 21771 } 21772 return responses[ finalDataType ]; 21773 } 21774} 21775 21776/* Chain conversions given the request and the original response 21777 * Also sets the responseXXX fields on the jqXHR instance 21778 */ 21779function ajaxConvert( s, response, jqXHR, isSuccess ) { 21780 var conv2, current, conv, tmp, prev, 21781 converters = {}, 21782 21783 // Work with a copy of dataTypes in case we need to modify it for conversion 21784 dataTypes = s.dataTypes.slice(); 21785 21786 // Create converters map with lowercased keys 21787 if ( dataTypes[ 1 ] ) { 21788 for ( conv in s.converters ) { 21789 converters[ conv.toLowerCase() ] = s.converters[ conv ]; 21790 } 21791 } 21792 21793 current = dataTypes.shift(); 21794 21795 // Convert to each sequential dataType 21796 while ( current ) { 21797 21798 if ( s.responseFields[ current ] ) { 21799 jqXHR[ s.responseFields[ current ] ] = response; 21800 } 21801 21802 // Apply the dataFilter if provided 21803 if ( !prev && isSuccess && s.dataFilter ) { 21804 response = s.dataFilter( response, s.dataType ); 21805 } 21806 21807 prev = current; 21808 current = dataTypes.shift(); 21809 21810 if ( current ) { 21811 21812 // There's only work to do if current dataType is non-auto 21813 if ( current === "*" ) { 21814 21815 current = prev; 21816 21817 // Convert response if prev dataType is non-auto and differs from current 21818 } else if ( prev !== "*" && prev !== current ) { 21819 21820 // Seek a direct converter 21821 conv = converters[ prev + " " + current ] || converters[ "* " + current ]; 21822 21823 // If none found, seek a pair 21824 if ( !conv ) { 21825 for ( conv2 in converters ) { 21826 21827 // If conv2 outputs current 21828 tmp = conv2.split( " " ); 21829 if ( tmp[ 1 ] === current ) { 21830 21831 // If prev can be converted to accepted input 21832 conv = converters[ prev + " " + tmp[ 0 ] ] || 21833 converters[ "* " + tmp[ 0 ] ]; 21834 if ( conv ) { 21835 21836 // Condense equivalence converters 21837 if ( conv === true ) { 21838 conv = converters[ conv2 ]; 21839 21840 // Otherwise, insert the intermediate dataType 21841 } else if ( converters[ conv2 ] !== true ) { 21842 current = tmp[ 0 ]; 21843 dataTypes.unshift( tmp[ 1 ] ); 21844 } 21845 break; 21846 } 21847 } 21848 } 21849 } 21850 21851 // Apply converter (if not an equivalence) 21852 if ( conv !== true ) { 21853 21854 // Unless errors are allowed to bubble, catch and return them 21855 if ( conv && s.throws ) { 21856 response = conv( response ); 21857 } else { 21858 try { 21859 response = conv( response ); 21860 } catch ( e ) { 21861 return { 21862 state: "parsererror", 21863 error: conv ? e : "No conversion from " + prev + " to " + current 21864 }; 21865 } 21866 } 21867 } 21868 } 21869 } 21870 } 21871 21872 return { state: "success", data: response }; 21873} 21874 21875jQuery.extend( { 21876 21877 // Counter for holding the number of active queries 21878 active: 0, 21879 21880 // Last-Modified header cache for next request 21881 lastModified: {}, 21882 etag: {}, 21883 21884 ajaxSettings: { 21885 url: location.href, 21886 type: "GET", 21887 isLocal: rlocalProtocol.test( location.protocol ), 21888 global: true, 21889 processData: true, 21890 async: true, 21891 contentType: "application/x-www-form-urlencoded; charset=UTF-8", 21892 21893 /* 21894 timeout: 0, 21895 data: null, 21896 dataType: null, 21897 username: null, 21898 password: null, 21899 cache: null, 21900 throws: false, 21901 traditional: false, 21902 headers: {}, 21903 */ 21904 21905 accepts: { 21906 "*": allTypes, 21907 text: "text/plain", 21908 html: "text/html", 21909 xml: "application/xml, text/xml", 21910 json: "application/json, text/javascript" 21911 }, 21912 21913 contents: { 21914 xml: /\bxml\b/, 21915 html: /\bhtml/, 21916 json: /\bjson\b/ 21917 }, 21918 21919 responseFields: { 21920 xml: "responseXML", 21921 text: "responseText", 21922 json: "responseJSON" 21923 }, 21924 21925 // Data converters 21926 // Keys separate source (or catchall "*") and destination types with a single space 21927 converters: { 21928 21929 // Convert anything to text 21930 "* text": String, 21931 21932 // Text to html (true = no transformation) 21933 "text html": true, 21934 21935 // Evaluate text as a json expression 21936 "text json": JSON.parse, 21937 21938 // Parse text as xml 21939 "text xml": jQuery.parseXML 21940 }, 21941 21942 // For options that shouldn't be deep extended: 21943 // you can add your own custom options here if 21944 // and when you create one that shouldn't be 21945 // deep extended (see ajaxExtend) 21946 flatOptions: { 21947 url: true, 21948 context: true 21949 } 21950 }, 21951 21952 // Creates a full fledged settings object into target 21953 // with both ajaxSettings and settings fields. 21954 // If target is omitted, writes into ajaxSettings. 21955 ajaxSetup: function( target, settings ) { 21956 return settings ? 21957 21958 // Building a settings object 21959 ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) : 21960 21961 // Extending ajaxSettings 21962 ajaxExtend( jQuery.ajaxSettings, target ); 21963 }, 21964 21965 ajaxPrefilter: addToPrefiltersOrTransports( prefilters ), 21966 ajaxTransport: addToPrefiltersOrTransports( transports ), 21967 21968 // Main method 21969 ajax: function( url, options ) { 21970 21971 // If url is an object, simulate pre-1.5 signature 21972 if ( typeof url === "object" ) { 21973 options = url; 21974 url = undefined; 21975 } 21976 21977 // Force options to be an object 21978 options = options || {}; 21979 21980 var transport, 21981 21982 // URL without anti-cache param 21983 cacheURL, 21984 21985 // Response headers 21986 responseHeadersString, 21987 responseHeaders, 21988 21989 // timeout handle 21990 timeoutTimer, 21991 21992 // Url cleanup var 21993 urlAnchor, 21994 21995 // Request state (becomes false upon send and true upon completion) 21996 completed, 21997 21998 // To know if global events are to be dispatched 21999 fireGlobals, 22000 22001 // Loop variable 22002 i, 22003 22004 // uncached part of the url 22005 uncached, 22006 22007 // Create the final options object 22008 s = jQuery.ajaxSetup( {}, options ), 22009 22010 // Callbacks context 22011 callbackContext = s.context || s, 22012 22013 // Context for global events is callbackContext if it is a DOM node or jQuery collection 22014 globalEventContext = s.context && 22015 ( callbackContext.nodeType || callbackContext.jquery ) ? 22016 jQuery( callbackContext ) : 22017 jQuery.event, 22018 22019 // Deferreds 22020 deferred = jQuery.Deferred(), 22021 completeDeferred = jQuery.Callbacks( "once memory" ), 22022 22023 // Status-dependent callbacks 22024 statusCode = s.statusCode || {}, 22025 22026 // Headers (they are sent all at once) 22027 requestHeaders = {}, 22028 requestHeadersNames = {}, 22029 22030 // Default abort message 22031 strAbort = "canceled", 22032 22033 // Fake xhr 22034 jqXHR = { 22035 readyState: 0, 22036 22037 // Builds headers hashtable if needed 22038 getResponseHeader: function( key ) { 22039 var match; 22040 if ( completed ) { 22041 if ( !responseHeaders ) { 22042 responseHeaders = {}; 22043 while ( ( match = rheaders.exec( responseHeadersString ) ) ) { 22044 responseHeaders[ match[ 1 ].toLowerCase() + " " ] = 22045 ( responseHeaders[ match[ 1 ].toLowerCase() + " " ] || [] ) 22046 .concat( match[ 2 ] ); 22047 } 22048 } 22049 match = responseHeaders[ key.toLowerCase() + " " ]; 22050 } 22051 return match == null ? null : match.join( ", " ); 22052 }, 22053 22054 // Raw string 22055 getAllResponseHeaders: function() { 22056 return completed ? responseHeadersString : null; 22057 }, 22058 22059 // Caches the header 22060 setRequestHeader: function( name, value ) { 22061 if ( completed == null ) { 22062 name = requestHeadersNames[ name.toLowerCase() ] = 22063 requestHeadersNames[ name.toLowerCase() ] || name; 22064 requestHeaders[ name ] = value; 22065 } 22066 return this; 22067 }, 22068 22069 // Overrides response content-type header 22070 overrideMimeType: function( type ) { 22071 if ( completed == null ) { 22072 s.mimeType = type; 22073 } 22074 return this; 22075 }, 22076 22077 // Status-dependent callbacks 22078 statusCode: function( map ) { 22079 var code; 22080 if ( map ) { 22081 if ( completed ) { 22082 22083 // Execute the appropriate callbacks 22084 jqXHR.always( map[ jqXHR.status ] ); 22085 } else { 22086 22087 // Lazy-add the new callbacks in a way that preserves old ones 22088 for ( code in map ) { 22089 statusCode[ code ] = [ statusCode[ code ], map[ code ] ]; 22090 } 22091 } 22092 } 22093 return this; 22094 }, 22095 22096 // Cancel the request 22097 abort: function( statusText ) { 22098 var finalText = statusText || strAbort; 22099 if ( transport ) { 22100 transport.abort( finalText ); 22101 } 22102 done( 0, finalText ); 22103 return this; 22104 } 22105 }; 22106 22107 // Attach deferreds 22108 deferred.promise( jqXHR ); 22109 22110 // Add protocol if not provided (prefilters might expect it) 22111 // Handle falsy url in the settings object (trac-10093: consistency with old signature) 22112 // We also use the url parameter if available 22113 s.url = ( ( url || s.url || location.href ) + "" ) 22114 .replace( rprotocol, location.protocol + "//" ); 22115 22116 // Alias method option to type as per ticket trac-12004 22117 s.type = options.method || options.type || s.method || s.type; 22118 22119 // Extract dataTypes list 22120 s.dataTypes = ( s.dataType || "*" ).toLowerCase().match( rnothtmlwhite ) || [ "" ]; 22121 22122 // A cross-domain request is in order when the origin doesn't match the current origin. 22123 if ( s.crossDomain == null ) { 22124 urlAnchor = document.createElement( "a" ); 22125 22126 // Support: IE <=8 - 11, Edge 12 - 15 22127 // IE throws exception on accessing the href property if url is malformed, 22128 // e.g. http://example.com:80x/ 22129 try { 22130 urlAnchor.href = s.url; 22131 22132 // Support: IE <=8 - 11 only 22133 // Anchor's host property isn't correctly set when s.url is relative 22134 urlAnchor.href = urlAnchor.href; 22135 s.crossDomain = originAnchor.protocol + "//" + originAnchor.host !== 22136 urlAnchor.protocol + "//" + urlAnchor.host; 22137 } catch ( e ) { 22138 22139 // If there is an error parsing the URL, assume it is crossDomain, 22140 // it can be rejected by the transport if it is invalid 22141 s.crossDomain = true; 22142 } 22143 } 22144 22145 // Convert data if not already a string 22146 if ( s.data && s.processData && typeof s.data !== "string" ) { 22147 s.data = jQuery.param( s.data, s.traditional ); 22148 } 22149 22150 // Apply prefilters 22151 inspectPrefiltersOrTransports( prefilters, s, options, jqXHR ); 22152 22153 // If request was aborted inside a prefilter, stop there 22154 if ( completed ) { 22155 return jqXHR; 22156 } 22157 22158 // We can fire global events as of now if asked to 22159 // Don't fire events if jQuery.event is undefined in an AMD-usage scenario (trac-15118) 22160 fireGlobals = jQuery.event && s.global; 22161 22162 // Watch for a new set of requests 22163 if ( fireGlobals && jQuery.active++ === 0 ) { 22164 jQuery.event.trigger( "ajaxStart" ); 22165 } 22166 22167 // Uppercase the type 22168 s.type = s.type.toUpperCase(); 22169 22170 // Determine if request has content 22171 s.hasContent = !rnoContent.test( s.type ); 22172 22173 // Save the URL in case we're toying with the If-Modified-Since 22174 // and/or If-None-Match header later on 22175 // Remove hash to simplify url manipulation 22176 cacheURL = s.url.replace( rhash, "" ); 22177 22178 // More options handling for requests with no content 22179 if ( !s.hasContent ) { 22180 22181 // Remember the hash so we can put it back 22182 uncached = s.url.slice( cacheURL.length ); 22183 22184 // If data is available and should be processed, append data to url 22185 if ( s.data && ( s.processData || typeof s.data === "string" ) ) { 22186 cacheURL += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data; 22187 22188 // trac-9682: remove data so that it's not used in an eventual retry 22189 delete s.data; 22190 } 22191 22192 // Add or update anti-cache param if needed 22193 if ( s.cache === false ) { 22194 cacheURL = cacheURL.replace( rantiCache, "$1" ); 22195 uncached = ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ( nonce.guid++ ) + 22196 uncached; 22197 } 22198 22199 // Put hash and anti-cache on the URL that will be requested (gh-1732) 22200 s.url = cacheURL + uncached; 22201 22202 // Change '%20' to '+' if this is encoded form body content (gh-2658) 22203 } else if ( s.data && s.processData && 22204 ( s.contentType || "" ).indexOf( "application/x-www-form-urlencoded" ) === 0 ) { 22205 s.data = s.data.replace( r20, "+" ); 22206 } 22207 22208 // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. 22209 if ( s.ifModified ) { 22210 if ( jQuery.lastModified[ cacheURL ] ) { 22211 jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] ); 22212 } 22213 if ( jQuery.etag[ cacheURL ] ) { 22214 jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] ); 22215 } 22216 } 22217 22218 // Set the correct header, if data is being sent 22219 if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) { 22220 jqXHR.setRequestHeader( "Content-Type", s.contentType ); 22221 } 22222 22223 // Set the Accepts header for the server, depending on the dataType 22224 jqXHR.setRequestHeader( 22225 "Accept", 22226 s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ? 22227 s.accepts[ s.dataTypes[ 0 ] ] + 22228 ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) : 22229 s.accepts[ "*" ] 22230 ); 22231 22232 // Check for headers option 22233 for ( i in s.headers ) { 22234 jqXHR.setRequestHeader( i, s.headers[ i ] ); 22235 } 22236 22237 // Allow custom headers/mimetypes and early abort 22238 if ( s.beforeSend && 22239 ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) { 22240 22241 // Abort if not done already and return 22242 return jqXHR.abort(); 22243 } 22244 22245 // Aborting is no longer a cancellation 22246 strAbort = "abort"; 22247 22248 // Install callbacks on deferreds 22249 completeDeferred.add( s.complete ); 22250 jqXHR.done( s.success ); 22251 jqXHR.fail( s.error ); 22252 22253 // Get transport 22254 transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR ); 22255 22256 // If no transport, we auto-abort 22257 if ( !transport ) { 22258 done( -1, "No Transport" ); 22259 } else { 22260 jqXHR.readyState = 1; 22261 22262 // Send global event 22263 if ( fireGlobals ) { 22264 globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] ); 22265 } 22266 22267 // If request was aborted inside ajaxSend, stop there 22268 if ( completed ) { 22269 return jqXHR; 22270 } 22271 22272 // Timeout 22273 if ( s.async && s.timeout > 0 ) { 22274 timeoutTimer = window.setTimeout( function() { 22275 jqXHR.abort( "timeout" ); 22276 }, s.timeout ); 22277 } 22278 22279 try { 22280 completed = false; 22281 transport.send( requestHeaders, done ); 22282 } catch ( e ) { 22283 22284 // Rethrow post-completion exceptions 22285 if ( completed ) { 22286 throw e; 22287 } 22288 22289 // Propagate others as results 22290 done( -1, e ); 22291 } 22292 } 22293 22294 // Callback for when everything is done 22295 function done( status, nativeStatusText, responses, headers ) { 22296 var isSuccess, success, error, response, modified, 22297 statusText = nativeStatusText; 22298 22299 // Ignore repeat invocations 22300 if ( completed ) { 22301 return; 22302 } 22303 22304 completed = true; 22305 22306 // Clear timeout if it exists 22307 if ( timeoutTimer ) { 22308 window.clearTimeout( timeoutTimer ); 22309 } 22310 22311 // Dereference transport for early garbage collection 22312 // (no matter how long the jqXHR object will be used) 22313 transport = undefined; 22314 22315 // Cache response headers 22316 responseHeadersString = headers || ""; 22317 22318 // Set readyState 22319 jqXHR.readyState = status > 0 ? 4 : 0; 22320 22321 // Determine if successful 22322 isSuccess = status >= 200 && status < 300 || status === 304; 22323 22324 // Get response data 22325 if ( responses ) { 22326 response = ajaxHandleResponses( s, jqXHR, responses ); 22327 } 22328 22329 // Use a noop converter for missing script but not if jsonp 22330 if ( !isSuccess && 22331 jQuery.inArray( "script", s.dataTypes ) > -1 && 22332 jQuery.inArray( "json", s.dataTypes ) < 0 ) { 22333 s.converters[ "text script" ] = function() {}; 22334 } 22335 22336 // Convert no matter what (that way responseXXX fields are always set) 22337 response = ajaxConvert( s, response, jqXHR, isSuccess ); 22338 22339 // If successful, handle type chaining 22340 if ( isSuccess ) { 22341 22342 // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. 22343 if ( s.ifModified ) { 22344 modified = jqXHR.getResponseHeader( "Last-Modified" ); 22345 if ( modified ) { 22346 jQuery.lastModified[ cacheURL ] = modified; 22347 } 22348 modified = jqXHR.getResponseHeader( "etag" ); 22349 if ( modified ) { 22350 jQuery.etag[ cacheURL ] = modified; 22351 } 22352 } 22353 22354 // if no content 22355 if ( status === 204 || s.type === "HEAD" ) { 22356 statusText = "nocontent"; 22357 22358 // if not modified 22359 } else if ( status === 304 ) { 22360 statusText = "notmodified"; 22361 22362 // If we have data, let's convert it 22363 } else { 22364 statusText = response.state; 22365 success = response.data; 22366 error = response.error; 22367 isSuccess = !error; 22368 } 22369 } else { 22370 22371 // Extract error from statusText and normalize for non-aborts 22372 error = statusText; 22373 if ( status || !statusText ) { 22374 statusText = "error"; 22375 if ( status < 0 ) { 22376 status = 0; 22377 } 22378 } 22379 } 22380 22381 // Set data for the fake xhr object 22382 jqXHR.status = status; 22383 jqXHR.statusText = ( nativeStatusText || statusText ) + ""; 22384 22385 // Success/Error 22386 if ( isSuccess ) { 22387 deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] ); 22388 } else { 22389 deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] ); 22390 } 22391 22392 // Status-dependent callbacks 22393 jqXHR.statusCode( statusCode ); 22394 statusCode = undefined; 22395 22396 if ( fireGlobals ) { 22397 globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError", 22398 [ jqXHR, s, isSuccess ? success : error ] ); 22399 } 22400 22401 // Complete 22402 completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] ); 22403 22404 if ( fireGlobals ) { 22405 globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] ); 22406 22407 // Handle the global AJAX counter 22408 if ( !( --jQuery.active ) ) { 22409 jQuery.event.trigger( "ajaxStop" ); 22410 } 22411 } 22412 } 22413 22414 return jqXHR; 22415 }, 22416 22417 getJSON: function( url, data, callback ) { 22418 return jQuery.get( url, data, callback, "json" ); 22419 }, 22420 22421 getScript: function( url, callback ) { 22422 return jQuery.get( url, undefined, callback, "script" ); 22423 } 22424} ); 22425 22426jQuery.each( [ "get", "post" ], function( _i, method ) { 22427 jQuery[ method ] = function( url, data, callback, type ) { 22428 22429 // Shift arguments if data argument was omitted 22430 if ( isFunction( data ) ) { 22431 type = type || callback; 22432 callback = data; 22433 data = undefined; 22434 } 22435 22436 // The url can be an options object (which then must have .url) 22437 return jQuery.ajax( jQuery.extend( { 22438 url: url, 22439 type: method, 22440 dataType: type, 22441 data: data, 22442 success: callback 22443 }, jQuery.isPlainObject( url ) && url ) ); 22444 }; 22445} ); 22446 22447jQuery.ajaxPrefilter( function( s ) { 22448 var i; 22449 for ( i in s.headers ) { 22450 if ( i.toLowerCase() === "content-type" ) { 22451 s.contentType = s.headers[ i ] || ""; 22452 } 22453 } 22454} ); 22455 22456 22457jQuery._evalUrl = function( url, options, doc ) { 22458 return jQuery.ajax( { 22459 url: url, 22460 22461 // Make this explicit, since user can override this through ajaxSetup (trac-11264) 22462 type: "GET", 22463 dataType: "script", 22464 cache: true, 22465 async: false, 22466 global: false, 22467 22468 // Only evaluate the response if it is successful (gh-4126) 22469 // dataFilter is not invoked for failure responses, so using it instead 22470 // of the default converter is kludgy but it works. 22471 converters: { 22472 "text script": function() {} 22473 }, 22474 dataFilter: function( response ) { 22475 jQuery.globalEval( response, options, doc ); 22476 } 22477 } ); 22478}; 22479 22480 22481jQuery.fn.extend( { 22482 wrapAll: function( html ) { 22483 var wrap; 22484 22485 if ( this[ 0 ] ) { 22486 if ( isFunction( html ) ) { 22487 html = html.call( this[ 0 ] ); 22488 } 22489 22490 // The elements to wrap the target around 22491 wrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true ); 22492 22493 if ( this[ 0 ].parentNode ) { 22494 wrap.insertBefore( this[ 0 ] ); 22495 } 22496 22497 wrap.map( function() { 22498 var elem = this; 22499 22500 while ( elem.firstElementChild ) { 22501 elem = elem.firstElementChild; 22502 } 22503 22504 return elem; 22505 } ).append( this ); 22506 } 22507 22508 return this; 22509 }, 22510 22511 wrapInner: function( html ) { 22512 if ( isFunction( html ) ) { 22513 return this.each( function( i ) { 22514 jQuery( this ).wrapInner( html.call( this, i ) ); 22515 } ); 22516 } 22517 22518 return this.each( function() { 22519 var self = jQuery( this ), 22520 contents = self.contents(); 22521 22522 if ( contents.length ) { 22523 contents.wrapAll( html ); 22524 22525 } else { 22526 self.append( html ); 22527 } 22528 } ); 22529 }, 22530 22531 wrap: function( html ) { 22532 var htmlIsFunction = isFunction( html ); 22533 22534 return this.each( function( i ) { 22535 jQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html ); 22536 } ); 22537 }, 22538 22539 unwrap: function( selector ) { 22540 this.parent( selector ).not( "body" ).each( function() { 22541 jQuery( this ).replaceWith( this.childNodes ); 22542 } ); 22543 return this; 22544 } 22545} ); 22546 22547 22548jQuery.expr.pseudos.hidden = function( elem ) { 22549 return !jQuery.expr.pseudos.visible( elem ); 22550}; 22551jQuery.expr.pseudos.visible = function( elem ) { 22552 return !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length ); 22553}; 22554 22555 22556 22557 22558jQuery.ajaxSettings.xhr = function() { 22559 try { 22560 return new window.XMLHttpRequest(); 22561 } catch ( e ) {} 22562}; 22563 22564var xhrSuccessStatus = { 22565 22566 // File protocol always yields status code 0, assume 200 22567 0: 200, 22568 22569 // Support: IE <=9 only 22570 // trac-1450: sometimes IE returns 1223 when it should be 204 22571 1223: 204 22572 }, 22573 xhrSupported = jQuery.ajaxSettings.xhr(); 22574 22575support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported ); 22576support.ajax = xhrSupported = !!xhrSupported; 22577 22578jQuery.ajaxTransport( function( options ) { 22579 var callback, errorCallback; 22580 22581 // Cross domain only allowed if supported through XMLHttpRequest 22582 if ( support.cors || xhrSupported && !options.crossDomain ) { 22583 return { 22584 send: function( headers, complete ) { 22585 var i, 22586 xhr = options.xhr(); 22587 22588 xhr.open( 22589 options.type, 22590 options.url, 22591 options.async, 22592 options.username, 22593 options.password 22594 ); 22595 22596 // Apply custom fields if provided 22597 if ( options.xhrFields ) { 22598 for ( i in options.xhrFields ) { 22599 xhr[ i ] = options.xhrFields[ i ]; 22600 } 22601 } 22602 22603 // Override mime type if needed 22604 if ( options.mimeType && xhr.overrideMimeType ) { 22605 xhr.overrideMimeType( options.mimeType ); 22606 } 22607 22608 // X-Requested-With header 22609 // For cross-domain requests, seeing as conditions for a preflight are 22610 // akin to a jigsaw puzzle, we simply never set it to be sure. 22611 // (it can always be set on a per-request basis or even using ajaxSetup) 22612 // For same-domain requests, won't change header if already provided. 22613 if ( !options.crossDomain && !headers[ "X-Requested-With" ] ) { 22614 headers[ "X-Requested-With" ] = "XMLHttpRequest"; 22615 } 22616 22617 // Set headers 22618 for ( i in headers ) { 22619 xhr.setRequestHeader( i, headers[ i ] ); 22620 } 22621 22622 // Callback 22623 callback = function( type ) { 22624 return function() { 22625 if ( callback ) { 22626 callback = errorCallback = xhr.onload = 22627 xhr.onerror = xhr.onabort = xhr.ontimeout = 22628 xhr.onreadystatechange = null; 22629 22630 if ( type === "abort" ) { 22631 xhr.abort(); 22632 } else if ( type === "error" ) { 22633 22634 // Support: IE <=9 only 22635 // On a manual native abort, IE9 throws 22636 // errors on any property access that is not readyState 22637 if ( typeof xhr.status !== "number" ) { 22638 complete( 0, "error" ); 22639 } else { 22640 complete( 22641 22642 // File: protocol always yields status 0; see trac-8605, trac-14207 22643 xhr.status, 22644 xhr.statusText 22645 ); 22646 } 22647 } else { 22648 complete( 22649 xhrSuccessStatus[ xhr.status ] || xhr.status, 22650 xhr.statusText, 22651 22652 // Support: IE <=9 only 22653 // IE9 has no XHR2 but throws on binary (trac-11426) 22654 // For XHR2 non-text, let the caller handle it (gh-2498) 22655 ( xhr.responseType || "text" ) !== "text" || 22656 typeof xhr.responseText !== "string" ? 22657 { binary: xhr.response } : 22658 { text: xhr.responseText }, 22659 xhr.getAllResponseHeaders() 22660 ); 22661 } 22662 } 22663 }; 22664 }; 22665 22666 // Listen to events 22667 xhr.onload = callback(); 22668 errorCallback = xhr.onerror = xhr.ontimeout = callback( "error" ); 22669 22670 // Support: IE 9 only 22671 // Use onreadystatechange to replace onabort 22672 // to handle uncaught aborts 22673 if ( xhr.onabort !== undefined ) { 22674 xhr.onabort = errorCallback; 22675 } else { 22676 xhr.onreadystatechange = function() { 22677 22678 // Check readyState before timeout as it changes 22679 if ( xhr.readyState === 4 ) { 22680 22681 // Allow onerror to be called first, 22682 // but that will not handle a native abort 22683 // Also, save errorCallback to a variable 22684 // as xhr.onerror cannot be accessed 22685 window.setTimeout( function() { 22686 if ( callback ) { 22687 errorCallback(); 22688 } 22689 } ); 22690 } 22691 }; 22692 } 22693 22694 // Create the abort callback 22695 callback = callback( "abort" ); 22696 22697 try { 22698 22699 // Do send the request (this may raise an exception) 22700 xhr.send( options.hasContent && options.data || null ); 22701 } catch ( e ) { 22702 22703 // trac-14683: Only rethrow if this hasn't been notified as an error yet 22704 if ( callback ) { 22705 throw e; 22706 } 22707 } 22708 }, 22709 22710 abort: function() { 22711 if ( callback ) { 22712 callback(); 22713 } 22714 } 22715 }; 22716 } 22717} ); 22718 22719 22720 22721 22722// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432) 22723jQuery.ajaxPrefilter( function( s ) { 22724 if ( s.crossDomain ) { 22725 s.contents.script = false; 22726 } 22727} ); 22728 22729// Install script dataType 22730jQuery.ajaxSetup( { 22731 accepts: { 22732 script: "text/javascript, application/javascript, " + 22733 "application/ecmascript, application/x-ecmascript" 22734 }, 22735 contents: { 22736 script: /\b(?:java|ecma)script\b/ 22737 }, 22738 converters: { 22739 "text script": function( text ) { 22740 jQuery.globalEval( text ); 22741 return text; 22742 } 22743 } 22744} ); 22745 22746// Handle cache's special case and crossDomain 22747jQuery.ajaxPrefilter( "script", function( s ) { 22748 if ( s.cache === undefined ) { 22749 s.cache = false; 22750 } 22751 if ( s.crossDomain ) { 22752 s.type = "GET"; 22753 } 22754} ); 22755 22756// Bind script tag hack transport 22757jQuery.ajaxTransport( "script", function( s ) { 22758 22759 // This transport only deals with cross domain or forced-by-attrs requests 22760 if ( s.crossDomain || s.scriptAttrs ) { 22761 var script, callback; 22762 return { 22763 send: function( _, complete ) { 22764 script = jQuery( "<script>" ) 22765 .attr( s.scriptAttrs || {} ) 22766 .prop( { charset: s.scriptCharset, src: s.url } ) 22767 .on( "load error", callback = function( evt ) { 22768 script.remove(); 22769 callback = null; 22770 if ( evt ) { 22771 complete( evt.type === "error" ? 404 : 200, evt.type ); 22772 } 22773 } ); 22774 22775 // Use native DOM manipulation to avoid our domManip AJAX trickery 22776 document.head.appendChild( script[ 0 ] ); 22777 }, 22778 abort: function() { 22779 if ( callback ) { 22780 callback(); 22781 } 22782 } 22783 }; 22784 } 22785} ); 22786 22787 22788 22789 22790var oldCallbacks = [], 22791 rjsonp = /(=)\?(?=&|$)|\?\?/; 22792 22793// Default jsonp settings 22794jQuery.ajaxSetup( { 22795 jsonp: "callback", 22796 jsonpCallback: function() { 22797 var callback = oldCallbacks.pop() || ( jQuery.expando + "_" + ( nonce.guid++ ) ); 22798 this[ callback ] = true; 22799 return callback; 22800 } 22801} ); 22802 22803// Detect, normalize options and install callbacks for jsonp requests 22804jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) { 22805 22806 var callbackName, overwritten, responseContainer, 22807 jsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ? 22808 "url" : 22809 typeof s.data === "string" && 22810 ( s.contentType || "" ) 22811 .indexOf( "application/x-www-form-urlencoded" ) === 0 && 22812 rjsonp.test( s.data ) && "data" 22813 ); 22814 22815 // Handle iff the expected data type is "jsonp" or we have a parameter to set 22816 if ( jsonProp || s.dataTypes[ 0 ] === "jsonp" ) { 22817 22818 // Get callback name, remembering preexisting value associated with it 22819 callbackName = s.jsonpCallback = isFunction( s.jsonpCallback ) ? 22820 s.jsonpCallback() : 22821 s.jsonpCallback; 22822 22823 // Insert callback into url or form data 22824 if ( jsonProp ) { 22825 s[ jsonProp ] = s[ jsonProp ].replace( rjsonp, "$1" + callbackName ); 22826 } else if ( s.jsonp !== false ) { 22827 s.url += ( rquery.test( s.url ) ? "&" : "?" ) + s.jsonp + "=" + callbackName; 22828 } 22829 22830 // Use data converter to retrieve json after script execution
vendor: 2,987 bytes, lines 22831-22940
22831 s.converters[ "script json" ] = function() { 22832 if ( !responseContainer ) { 22833 jQuery.error( callbackName + " was not called" ); 22834 } 22835 return responseContainer[ 0 ]; 22836 }; 22837 22838 // Force json dataType 22839 s.dataTypes[ 0 ] = "json"; 22840 22841 // Install callback 22842 overwritten = window[ callbackName ]; 22843 window[ callbackName ] = function() { 22844 responseContainer = arguments; 22845 }; 22846 22847 // Clean-up function (fires after converters) 22848 jqXHR.always( function() { 22849 22850 // If previous value didn't exist - remove it 22851 if ( overwritten === undefined ) { 22852 jQuery( window ).removeProp( callbackName ); 22853 22854 // Otherwise restore preexisting value 22855 } else { 22856 window[ callbackName ] = overwritten; 22857 } 22858 22859 // Save back as free 22860 if ( s[ callbackName ] ) { 22861 22862 // Make sure that re-using the options doesn't screw things around 22863 s.jsonpCallback = originalSettings.jsonpCallback; 22864 22865 // Save the callback name for future use 22866 oldCallbacks.push( callbackName ); 22867 } 22868 22869 // Call if it was a function and we have a response 22870 if ( responseContainer && isFunction( overwritten ) ) { 22871 overwritten( responseContainer[ 0 ] ); 22872 } 22873 22874 responseContainer = overwritten = undefined; 22875 } ); 22876 22877 // Delegate to script 22878 return "script"; 22879 } 22880} ); 22881 22882 22883 22884 22885// Support: Safari 8 only 22886// In Safari 8 documents created via document.implementation.createHTMLDocument 22887// collapse sibling forms: the second one becomes a child of the first one. 22888// Because of that, this security measure has to be disabled in Safari 8. 22889// https://bugs.webkit.org/show_bug.cgi?id=137337 22890support.createHTMLDocument = ( function() { 22891 var body = document.implementation.createHTMLDocument( "" ).body; 22892 body.innerHTML = "<form></form><form></form>"; 22893 return body.childNodes.length === 2; 22894} )(); 22895 22896 22897// Argument "data" should be string of html 22898// context (optional): If specified, the fragment will be created in this context, 22899// defaults to document 22900// keepScripts (optional): If true, will include scripts passed in the html string 22901jQuery.parseHTML = function( data, context, keepScripts ) { 22902 if ( typeof data !== "string" ) { 22903 return []; 22904 } 22905 if ( typeof context === "boolean" ) { 22906 keepScripts = context; 22907 context = false; 22908 } 22909 22910 var base, parsed, scripts; 22911 22912 if ( !context ) { 22913 22914 // Stop scripts or inline event handlers from being executed immediately 22915 // by using document.implementation 22916 if ( support.createHTMLDocument ) { 22917 context = document.implementation.createHTMLDocument( "" ); 22918 22919 // Set the base href for the created document 22920 // so any parsed elements with URLs 22921 // are based on the document's URL (gh-2965) 22922 base = context.createElement( "base" ); 22923 base.href = document.location.href; 22924 context.head.appendChild( base ); 22925 } else { 22926 context = document; 22927 } 22928 } 22929 22930 parsed = rsingleTag.exec( data ); 22931 scripts = !keepScripts && []; 22932 22933 // Single tag 22934 if ( parsed ) { 22935 return [ context.createElement( parsed[ 1 ] ) ]; 22936 } 22937 22938 parsed = buildFragment( [ data ], context, scripts ); 22939 22940 if ( scripts && scripts.length ) {
vendor: 10,712 bytes, lines 22941-23323
22941 jQuery( scripts ).remove(); 22942 } 22943 22944 return jQuery.merge( [], parsed.childNodes ); 22945}; 22946 22947 22948/** 22949 * Load a url into a page 22950 */ 22951jQuery.fn.load = function( url, params, callback ) { 22952 var selector, type, response, 22953 self = this, 22954 off = url.indexOf( " " ); 22955 22956 if ( off > -1 ) { 22957 selector = stripAndCollapse( url.slice( off ) ); 22958 url = url.slice( 0, off ); 22959 } 22960 22961 // If it's a function 22962 if ( isFunction( params ) ) { 22963 22964 // We assume that it's the callback 22965 callback = params; 22966 params = undefined; 22967 22968 // Otherwise, build a param string 22969 } else if ( params && typeof params === "object" ) { 22970 type = "POST"; 22971 } 22972 22973 // If we have elements to modify, make the request 22974 if ( self.length > 0 ) { 22975 jQuery.ajax( { 22976 url: url, 22977 22978 // If "type" variable is undefined, then "GET" method will be used. 22979 // Make value of this field explicit since 22980 // user can override it through ajaxSetup method 22981 type: type || "GET", 22982 dataType: "html", 22983 data: params 22984 } ).done( function( responseText ) { 22985 22986 // Save response for use in complete callback 22987 response = arguments; 22988 22989 self.html( selector ? 22990 22991 // If a selector was specified, locate the right elements in a dummy div 22992 // Exclude scripts to avoid IE 'Permission Denied' errors 22993 jQuery( "<div>" ).append( jQuery.parseHTML( responseText ) ).find( selector ) : 22994 22995 // Otherwise use the full result 22996 responseText ); 22997 22998 // If the request succeeds, this function gets "data", "status", "jqXHR" 22999 // but they are ignored because response was set above. 23000 // If it fails, this function gets "jqXHR", "status", "error" 23001 } ).always( callback && function( jqXHR, status ) { 23002 self.each( function() { 23003 callback.apply( this, response || [ jqXHR.responseText, status, jqXHR ] ); 23004 } ); 23005 } ); 23006 } 23007 23008 return this; 23009}; 23010 23011 23012 23013 23014jQuery.expr.pseudos.animated = function( elem ) { 23015 return jQuery.grep( jQuery.timers, function( fn ) { 23016 return elem === fn.elem; 23017 } ).length; 23018}; 23019 23020 23021 23022 23023jQuery.offset = { 23024 setOffset: function( elem, options, i ) { 23025 var curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition, 23026 position = jQuery.css( elem, "position" ), 23027 curElem = jQuery( elem ), 23028 props = {}; 23029 23030 // Set position first, in-case top/left are set even on static elem 23031 if ( position === "static" ) { 23032 elem.style.position = "relative"; 23033 } 23034 23035 curOffset = curElem.offset(); 23036 curCSSTop = jQuery.css( elem, "top" ); 23037 curCSSLeft = jQuery.css( elem, "left" ); 23038 calculatePosition = ( position === "absolute" || position === "fixed" ) && 23039 ( curCSSTop + curCSSLeft ).indexOf( "auto" ) > -1; 23040 23041 // Need to be able to calculate position if either 23042 // top or left is auto and position is either absolute or fixed 23043 if ( calculatePosition ) { 23044 curPosition = curElem.position(); 23045 curTop = curPosition.top; 23046 curLeft = curPosition.left; 23047 23048 } else { 23049 curTop = parseFloat( curCSSTop ) || 0; 23050 curLeft = parseFloat( curCSSLeft ) || 0; 23051 } 23052 23053 if ( isFunction( options ) ) { 23054 23055 // Use jQuery.extend here to allow modification of coordinates argument (gh-1848) 23056 options = options.call( elem, i, jQuery.extend( {}, curOffset ) ); 23057 } 23058 23059 if ( options.top != null ) { 23060 props.top = ( options.top - curOffset.top ) + curTop; 23061 } 23062 if ( options.left != null ) { 23063 props.left = ( options.left - curOffset.left ) + curLeft; 23064 } 23065 23066 if ( "using" in options ) { 23067 options.using.call( elem, props ); 23068 23069 } else { 23070 curElem.css( props ); 23071 } 23072 } 23073}; 23074 23075jQuery.fn.extend( { 23076 23077 // offset() relates an element's border box to the document origin 23078 offset: function( options ) { 23079 23080 // Preserve chaining for setter 23081 if ( arguments.length ) { 23082 return options === undefined ? 23083 this : 23084 this.each( function( i ) { 23085 jQuery.offset.setOffset( this, options, i ); 23086 } ); 23087 } 23088 23089 var rect, win, 23090 elem = this[ 0 ]; 23091 23092 if ( !elem ) { 23093 return; 23094 } 23095 23096 // Return zeros for disconnected and hidden (display: none) elements (gh-2310) 23097 // Support: IE <=11 only 23098 // Running getBoundingClientRect on a 23099 // disconnected node in IE throws an error 23100 if ( !elem.getClientRects().length ) { 23101 return { top: 0, left: 0 }; 23102 } 23103 23104 // Get document-relative position by adding viewport scroll to viewport-relative gBCR 23105 rect = elem.getBoundingClientRect(); 23106 win = elem.ownerDocument.defaultView; 23107 return { 23108 top: rect.top + win.pageYOffset, 23109 left: rect.left + win.pageXOffset 23110 }; 23111 }, 23112 23113 // position() relates an element's margin box to its offset parent's padding box 23114 // This corresponds to the behavior of CSS absolute positioning 23115 position: function() { 23116 if ( !this[ 0 ] ) { 23117 return; 23118 } 23119 23120 var offsetParent, offset, doc, 23121 elem = this[ 0 ], 23122 parentOffset = { top: 0, left: 0 }; 23123 23124 // position:fixed elements are offset from the viewport, which itself always has zero offset 23125 if ( jQuery.css( elem, "position" ) === "fixed" ) { 23126 23127 // Assume position:fixed implies availability of getBoundingClientRect 23128 offset = elem.getBoundingClientRect(); 23129 23130 } else { 23131 offset = this.offset(); 23132 23133 // Account for the *real* offset parent, which can be the document or its root element 23134 // when a statically positioned element is identified 23135 doc = elem.ownerDocument; 23136 offsetParent = elem.offsetParent || doc.documentElement; 23137 while ( offsetParent && 23138 ( offsetParent === doc.body || offsetParent === doc.documentElement ) && 23139 jQuery.css( offsetParent, "position" ) === "static" ) { 23140 23141 offsetParent = offsetParent.parentNode; 23142 } 23143 if ( offsetParent && offsetParent !== elem && offsetParent.nodeType === 1 ) { 23144 23145 // Incorporate borders into its offset, since they are outside its content origin 23146 parentOffset = jQuery( offsetParent ).offset(); 23147 parentOffset.top += jQuery.css( offsetParent, "borderTopWidth", true ); 23148 parentOffset.left += jQuery.css( offsetParent, "borderLeftWidth", true ); 23149 } 23150 } 23151 23152 // Subtract parent offsets and element margins 23153 return { 23154 top: offset.top - parentOffset.top - jQuery.css( elem, "marginTop", true ), 23155 left: offset.left - parentOffset.left - jQuery.css( elem, "marginLeft", true ) 23156 }; 23157 }, 23158 23159 // This method will return documentElement in the following cases: 23160 // 1) For the element inside the iframe without offsetParent, this method will return 23161 // documentElement of the parent window 23162 // 2) For the hidden or detached element 23163 // 3) For body or html element, i.e. in case of the html node - it will return itself 23164 // 23165 // but those exceptions were never presented as a real life use-cases 23166 // and might be considered as more preferable results. 23167 // 23168 // This logic, however, is not guaranteed and can change at any point in the future 23169 offsetParent: function() { 23170 return this.map( function() { 23171 var offsetParent = this.offsetParent; 23172 23173 while ( offsetParent && jQuery.css( offsetParent, "position" ) === "static" ) { 23174 offsetParent = offsetParent.offsetParent; 23175 } 23176 23177 return offsetParent || documentElement; 23178 } ); 23179 } 23180} ); 23181 23182// Create scrollLeft and scrollTop methods 23183jQuery.each( { scrollLeft: "pageXOffset", scrollTop: "pageYOffset" }, function( method, prop ) { 23184 var top = "pageYOffset" === prop; 23185 23186 jQuery.fn[ method ] = function( val ) { 23187 return access( this, function( elem, method, val ) { 23188 23189 // Coalesce documents and windows 23190 var win; 23191 if ( isWindow( elem ) ) { 23192 win = elem; 23193 } else if ( elem.nodeType === 9 ) { 23194 win = elem.defaultView; 23195 } 23196 23197 if ( val === undefined ) { 23198 return win ? win[ prop ] : elem[ method ]; 23199 } 23200 23201 if ( win ) { 23202 win.scrollTo( 23203 !top ? val : win.pageXOffset, 23204 top ? val : win.pageYOffset 23205 ); 23206 23207 } else { 23208 elem[ method ] = val; 23209 } 23210 }, method, val, arguments.length ); 23211 }; 23212} ); 23213 23214// Support: Safari <=7 - 9.1, Chrome <=37 - 49 23215// Add the top/left cssHooks using jQuery.fn.position 23216// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084 23217// Blink bug: https://bugs.chromium.org/p/chromium/issues/detail?id=589347 23218// getComputedStyle returns percent when specified for top/left/bottom/right; 23219// rather than make the css module depend on the offset module, just check for it here 23220jQuery.each( [ "top", "left" ], function( _i, prop ) { 23221 jQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition, 23222 function( elem, computed ) { 23223 if ( computed ) { 23224 computed = curCSS( elem, prop ); 23225 23226 // If curCSS returns percentage, fallback to offset 23227 return rnumnonpx.test( computed ) ? 23228 jQuery( elem ).position()[ prop ] + "px" : 23229 computed; 23230 } 23231 } 23232 ); 23233} ); 23234 23235 23236// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods 23237jQuery.each( { Height: "height", Width: "width" }, function( name, type ) { 23238 jQuery.each( { 23239 padding: "inner" + name, 23240 content: type, 23241 "": "outer" + name 23242 }, function( defaultExtra, funcName ) { 23243 23244 // Margin is only for outerHeight, outerWidth 23245 jQuery.fn[ funcName ] = function( margin, value ) { 23246 var chainable = arguments.length && ( defaultExtra || typeof margin !== "boolean" ), 23247 extra = defaultExtra || ( margin === true || value === true ? "margin" : "border" ); 23248 23249 return access( this, function( elem, type, value ) { 23250 var doc; 23251 23252 if ( isWindow( elem ) ) { 23253 23254 // $( window ).outerWidth/Height return w/h including scrollbars (gh-1729) 23255 return funcName.indexOf( "outer" ) === 0 ? 23256 elem[ "inner" + name ] : 23257 elem.document.documentElement[ "client" + name ]; 23258 } 23259 23260 // Get document width or height 23261 if ( elem.nodeType === 9 ) { 23262 doc = elem.documentElement; 23263 23264 // Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height], 23265 // whichever is greatest 23266 return Math.max( 23267 elem.body[ "scroll" + name ], doc[ "scroll" + name ], 23268 elem.body[ "offset" + name ], doc[ "offset" + name ], 23269 doc[ "client" + name ] 23270 ); 23271 } 23272 23273 return value === undefined ? 23274 23275 // Get width or height on the element, requesting but not forcing parseFloat 23276 jQuery.css( elem, type, extra ) : 23277 23278 // Set width or height on the element 23279 jQuery.style( elem, type, value, extra ); 23280 }, type, chainable ? margin : undefined, chainable ); 23281 }; 23282 } ); 23283} ); 23284 23285 23286jQuery.each( [ 23287 "ajaxStart", 23288 "ajaxStop", 23289 "ajaxComplete", 23290 "ajaxError", 23291 "ajaxSuccess", 23292 "ajaxSend" 23293], function( _i, type ) { 23294 jQuery.fn[ type ] = function( fn ) { 23295 return this.on( type, fn ); 23296 }; 23297} ); 23298 23299 23300 23301 23302jQuery.fn.extend( { 23303 23304 bind: function( types, data, fn ) { 23305 return this.on( types, null, data, fn ); 23306 }, 23307 unbind: function( types, fn ) { 23308 return this.off( types, null, fn ); 23309 }, 23310 23311 delegate: function( selector, types, data, fn ) { 23312 return this.on( types, selector, data, fn ); 23313 }, 23314 undelegate: function( selector, types, fn ) { 23315 23316 // ( namespace ) or ( selector, types [, fn] ) 23317 return arguments.length === 1 ? 23318 this.off( selector, "**" ) : 23319 this.off( types, selector || "**", fn ); 23320 }, 23321 23322 hover: function( fnOver, fnOut ) { 23323 return this
vendor: 2,565 bytes, lines 23323-23415
23323.mouseenter( fnOver ).mouseleave( fnOut || fnOver ); 23324 } 23325} ); 23326 23327jQuery.each( 23328 ( "blur focus focusin focusout resize scroll click dblclick " + 23329 "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " + 23330 "change select submit keydown keypress keyup contextmenu" ).split( " " ), 23331 function( _i, name ) { 23332 23333 // Handle event binding 23334 jQuery.fn[ name ] = function( data, fn ) { 23335 return arguments.length > 0 ? 23336 this.on( name, null, data, fn ) : 23337 this.trigger( name ); 23338 }; 23339 } 23340); 23341 23342 23343 23344 23345// Support: Android <=4.0 only 23346// Make sure we trim BOM and NBSP 23347// Require that the "whitespace run" starts from a non-whitespace 23348// to avoid O(N^2) behavior when the engine would try matching "\s+$" at each space position. 23349var rtrim = /^[\s\uFEFF\xA0]+|([^\s\uFEFF\xA0])[\s\uFEFF\xA0]+$/g; 23350 23351// Bind a function to a context, optionally partially applying any 23352// arguments. 23353// jQuery.proxy is deprecated to promote standards (specifically Function#bind) 23354// However, it is not slated for removal any time soon 23355jQuery.proxy = function( fn, context ) { 23356 var tmp, args, proxy; 23357 23358 if ( typeof context === "string" ) { 23359 tmp = fn[ context ]; 23360 context = fn; 23361 fn = tmp; 23362 } 23363 23364 // Quick check to determine if target is callable, in the spec 23365 // this throws a TypeError, but we will just return undefined. 23366 if ( !isFunction( fn ) ) { 23367 return undefined; 23368 } 23369 23370 // Simulated bind 23371 args = slice.call( arguments, 2 ); 23372 proxy = function() { 23373 return fn.apply( context || this, args.concat( slice.call( arguments ) ) ); 23374 }; 23375 23376 // Set the guid of unique handler to the same of original handler, so it can be removed 23377 proxy.guid = fn.guid = fn.guid || jQuery.guid++; 23378 23379 return proxy; 23380}; 23381 23382jQuery.holdReady = function( hold ) { 23383 if ( hold ) { 23384 jQuery.readyWait++; 23385 } else { 23386 jQuery.ready( true ); 23387 } 23388}; 23389jQuery.isArray = Array.isArray; 23390jQuery.parseJSON = JSON.parse; 23391jQuery.nodeName = nodeName; 23392jQuery.isFunction = isFunction; 23393jQuery.isWindow = isWindow; 23394jQuery.camelCase = camelCase; 23395jQuery.type = toType; 23396 23397jQuery.now = Date.now; 23398 23399jQuery.isNumeric = function( obj ) { 23400 23401 // As of jQuery 3.0, isNumeric is limited to 23402 // strings and numbers (primitives or objects) 23403 // that can be coerced to finite numbers (gh-2662) 23404 var type = jQuery.type( obj ); 23405 return ( type === "number" || type === "string" ) && 23406 23407 // parseFloat NaNs numeric-cast false positives ("") 23408 // ...but misinterprets leading-number strings, particularly hex literals ("0x...") 23409 // subtraction forces infinities to NaN 23410 !isNaN( obj - parseFloat( obj ) ); 23411}; 23412 23413jQuery.trim = function( text ) { 23414 return text == null ? 23415 "" :
23416 ( text + "" ).replace( rtrim, "$1" ); 23417}; 23418 23419 23420 23421// Register as a named AMD module, since jQuery can be concatenated with other 23422// files that may use define, but not via a proper concatenation script that 23423// understands anonymous AMD modules. A named AMD is safest and most robust 23424// way to register. Lowercase jquery is used because AMD module names are 23425// derived from file names, and jQuery is normally delivered in a lowercase 23426// file name. Do this after creating the global so that if an AMD module wants 23427// to call noConflict to hide this version of jQuery, it will work. 23428 23429// Note that for maximum portability, libraries that are not jQuery should 23430// declare themselves as anonymous modules, and avoid setting a global if an 23431// AMD loader is present. jQuery is a special case. For more information, see 23432// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon 23433 23434if ( typeof define === "function" && define.amd ) { 23435 define( "jquery", [], function() { 23436 return jQuery; 23437 } ); 23438} 23439 23440 23441 23442 23443var 23444 23445 // Map over jQuery in case of overwrite 23446 _jQuery = window.jQuery, 23447 23448 // Map over the $ in case of overwrite 23449 _$ = window.$; 23450 23451jQuery.noConflict = function( deep ) { 23452 if ( window.$ === jQuery ) { 23453 window.$ = _$; 23454 } 23455 23456 if ( deep && window.jQuery === jQuery ) { 23457 window.jQuery = _jQuery; 23458 } 23459 23460 return jQuery; 23461}; 23462 23463// Expose jQuery and $ identifiers, even in AMD 23464// (trac-7102#comment:10, https://github.com/jquery/jquery/pull/557) 23465// and CommonJS for browser emulators (trac-13566) 23466if ( typeof noGlobal === "undefined" ) { 23467 window.jQuery = window.$ = jQuery; 23468} 23469 23470 23471 23472 23473return jQuery; 23474} );
vendor: 21,195 bytes, lines 23475-23479
23475/* 23476 Copyright (C) Federico Zivolo 2020 23477 Distributed under the MIT License (license terms are at http://opensource.org/licenses/MIT). 23478 */(function(e,t){'object'==typeof exports&&'undefined'!=typeof module?module.exports=t():'function'==typeof define&&define.amd?define(t):e.Popper=t()})(this,function(){'use strict';function e(e){return e&&'[object Function]'==={}.toString.call(e)}function t(e,t){if(1!==e.nodeType)return[];var o=e.ownerDocument.defaultView,n=o.getComputedStyle(e,null);return t?n[t]:n}function o(e){return'HTML'===e.nodeName?e:e.parentNode||e.host}function n(e){if(!e)return document.body;switch(e.nodeName){case'HTML':case'BODY':return e.ownerDocument.body;case'#document':return e.body;}var i=t(e),r=i.overflow,p=i.overflowX,s=i.overflowY;return /(auto|scroll|overlay)/.test(r+s+p)?e:n(o(e))}function i(e){return e&&e.referenceNode?e.referenceNode:e}function r(e){return 11===e?re:10===e?pe:re||pe}function p(e){if(!e)return document.documentElement;for(var o=r(10)?document.body:null,n=e.offsetParent||null;n===o&&e.nextElementSibling;)n=(e=e.nextElementSibling).offsetParent;var i=n&&n.nodeName;return i&&'BODY'!==i&&'HTML'!==i?-1!==['TH','TD','TABLE'].indexOf(n.nodeName)&&'static'===t(n,'position')?p(n):n:e?e.ownerDocument.documentElement:document.documentElement}function s(e){var t=e.nodeName;return'BODY'!==t&&('HTML'===t||p(e.firstElementChild)===e)}function d(e){return null===e.parentNode?e:d(e.parentNode)}function a(e,t){if(!e||!e.nodeType||!t||!t.nodeType)return document.documentElement;var o=e.compareDocumentPosition(t)&Node.DOCUMENT_POSITION_FOLLOWING,n=o?e:t,i=o?t:e,r=document.createRange();r.setStart(n,0),r.setEnd(i,0);var l=r.commonAncestorContainer;if(e!==l&&t!==l||n.contains(i))return s(l)?l:p(l);var f=d(e);return f.host?a(f.host,t):a(e,d(t).host)}function l(e){var t=1<arguments.length&&void 0!==arguments[1]?arguments[1]:'top',o='top'===t?'scrollTop':'scrollLeft',n=e.nodeName;if('BODY'===n||'HTML'===n){var i=e.ownerDocument.documentElement,r=e.ownerDocument.scrollingElement||i;return r[o]}return e[o]}function f(e,t){var o=2<arguments.length&&void 0!==arguments[2]&&arguments[2],n=l(t,'top'),i=l(t,'left'),r=o?-1:1;return e.top+=n*r,e.bottom+=n*r,e.left+=i*r,e.right+=i*r,e}function m(e,t){var o='x'===t?'Left':'Top',n='Left'==o?'Right':'Bottom';return parseFloat(e['border'+o+'Width'])+parseFloat(e['border'+n+'Width'])}function h(e,t,o,n){return ee(t['offset'+e],t['scroll'+e],o['client'+e],o['offset'+e],o['scroll'+e],r(10)?parseInt(o['offset'+e])+parseInt(n['margin'+('Height'===e?'Top':'Left')])+parseInt(n['margin'+('Height'===e?'Bottom':'Right')]):0)}function c(e){var t=e.body,o=e.documentElement,n=r(10)&&getComputedStyle(o);return{height:h('Height',t,o,n),width:h('Width',t,o,n)}}function g(e){return le({},e,{right:e.left+e.width,bottom:e.top+e.height})}function u(e){var o={};try{if(r(10)){o=e.getBoundingClientRect();var n=l(e,'top'),i=l(e,'left');o.top+=n,o.left+=i,o.bottom+=n,o.right+=i}else o=e.getBoundingClientRect()}catch(t){}var p={left:o.left,top:o.top,width:o.right-o.left,height:o.bottom-o.top},s='HTML'===e.nodeName?c(e.ownerDocument):{},d=s.width||e.clientWidth||p.width,a=s.height||e.clientHeight||p.height,f=e.offsetWidth-d,h=e.offsetHeight-a;if(f||h){var u=t(e);f-=m(u,'x'),h-=m(u,'y'),p.width-=f,p.height-=h}return g(p)}function b(e,o){var i=2<arguments.length&&void 0!==arguments[2]&&arguments[2],p=r(10),s='HTML'===o.nodeName,d=u(e),a=u(o),l=n(e),m=t(o),h=parseFloat(m.borderTopWidth),c=parseFloat(m.borderLeftWidth);i&&s&&(a.top=ee(a.top,0),a.left=ee(a.left,0));var b=g({top:d.top-a.top-h,left:d.left-a.left-c,width:d.width,height:d.height});if(b.marginTop=0,b.marginLeft=0,!p&&s){var w=parseFloat(m.marginTop),y=parseFloat(m.marginLeft);b.top-=h-w,b.bottom-=h-w,b.left-=c-y,b.right-=c-y,b.marginTop=w,b.marginLeft=y}return(p&&!i?o.contains(l):o===l&&'BODY'!==l.nodeName)&&(b=f(b,o)),b}function w(e){var t=1<arguments.length&&void 0!==arguments[1]&&arguments[1],o=e.ownerDocument.documentElement,n=b(e,o),i=ee(o.clientWidth,window.innerWidth||0),r=ee(o.clientHeight,window.innerHeight||0),p=t?0:l(o),s=t?0:l(o,'left'),d={top:p-n.top+n.marginTop,left:s-n.left+n.marginLeft,width:i,height:r};return g(d)}function y(e){var n=e.nodeName;if('BODY'===n||'HTML'===n)return!1;if('fixed'===t(e,'position'))return!0;var i=o(e);return!!i&&y(i)}function E(e){if(!e||!e.parentElement||r())return document.documentElement;for(var o=e.parentElement;o&&'none'===t(o,'transform');)o=o.parentElement;return o||document.documentElement}function v(e,t,r,p){var s=4<arguments.length&&void 0!==arguments[4]&&arguments[4],d={top:0,left:0},l=s?E(e):a(e,i(t));if('viewport'===p)d=w(l,s);else{var f;'scrollParent'===p?(f=n(o(t)),'BODY'===f.nodeName&&(f=e.ownerDocument.documentElement)):'window'===p?f=e.ownerDocument.documentElement:f=p;var m=b(f,l,s);if('HTML'===f.nodeName&&!y(l)){var h=c(e.ownerDocument),g=h.height,u=h.width;d.top+=m.top-m.marginTop,d.bottom=g+m.top,d.left+=m.left-m.marginLeft,d.right=u+m.left}else d=m}r=r||0;var v='number'==typeof r;return d.left+=v?r:r.left||0,d.top+=v?r:r.top||0,d.right-=v?r:r.right||0,d.bottom-=v?r:r.bottom||0,d}function x(e){var t=e.width,o=e.height;return t*o}function O(e,t,o,n,i){var r=5<arguments.length&&void 0!==arguments[5]?arguments[5]:0;if(-1===e.indexOf('auto'))return e;var p=v(o,n,r,i),s={top:{width:p.width,height:t.top-p.top},right:{width:p.right-t.right,height:p.height},bottom:{width:p.width,height:p.bottom-t.bottom},left:{width:t.left-p.left,height:p.height}},d=Object.keys(s).map(function(e){return le({key:e},s[e],{area:x(s[e])})}).sort(function(e,t){return t.area-e.area}),a=d.filter(function(e){var t=e.width,n=e.height;return t>=o.clientWidth&&n>=o.clientHeight}),l=0<a.length?a[0].key:d[0].key,f=e.split('-')[1];return l+(f?'-'+f:'')}function L(e,t,o){var n=3<arguments.length&&void 0!==arguments[3]?arguments[3]:null,r=n?E(t):a(t,i(o));return b(o,r,n)}function S(e){var t=e.ownerDocument.defaultView,o=t.getComputedStyle(e),n=parseFloat(o.marginTop||0)+parseFloat(o.marginBottom||0),i=parseFloat(o.marginLeft||0)+parseFloat(o.marginRight||0),r={width:e.offsetWidth+i,height:e.offsetHeight+n};return r}function T(e){var t={left:'right',right:'left',bottom:'top',top:'bottom'};return e.replace(/left|right|bottom|top/g,function(e){return t[e]})}function C(e,t,o){o=o.split('-')[0];var n=S(e),i={width:n.width,height:n.height},r=-1!==['right','left'].indexOf(o),p=r?'top':'left',s=r?'left':'top',d=r?'height':'width',a=r?'width':'height';return i[p]=t[p]+t[d]/2-n[d]/2,i[s]=o===s?t[s]-n[a]:t[T(s)],i}function D(e,t){return Array.prototype.find?e.find(t):e.filter(t)[0]}function N(e,t,o){if(Array.prototype.findIndex)return e.findIndex(function(e){return e[t]===o});var n=D(e,function(e){return e[t]===o});return e.indexOf(n)}function P(t,o,n){var i=void 0===n?t:t.slice(0,N(t,'name',n));return i.forEach(function(t){t['function']&&console.warn('`modifier.function` is deprecated, use `modifier.fn`!');var n=t['function']||t.fn;t.enabled&&e(n)&&(o.offsets.popper=g(o.offsets.popper),o.offsets.reference=g(o.offsets.reference),o=n(o,t))}),o}function k(){if(!this.state.isDestroyed){var e={instance:this,styles:{},arrowStyles:{},attributes:{},flipped:!1,offsets:{}};e.offsets.reference=L(this.state,this.popper,this.reference,this.options.positionFixed),e.placement=O(this.options.placement,e.offsets.reference,this.popper,this.reference,this.options.modifiers.flip.boundariesElement,this.options.modifiers.flip.padding),e.originalPlacement=e.placement,e.positionFixed=this.options.positionFixed,e.offsets.popper=C(this.popper,e.offsets.reference,e.placement),e.offsets.popper.position=this.options.positionFixed?'fixed':'absolute',e=P(this.modifiers,e),this.state.isCreated?this.options.onUpdate(e):(this.state.isCreated=!0,this.options.onCreate(e))}}function W(e,t){return e.some(function(e){var o=e.name,n=e.enabled;return n&&o===t})}function B(e){for(var t=[!1,'ms','Webkit','Moz','O'],o=e.charAt(0).toUpperCase()+e.slice(1),n=0;n<t.length;n++){var i=t[n],r=i?''+i+o:e;if('undefined'!=typeof document.body.style[r])return r}return null}function H(){return this.state.isDestroyed=!0,W(this.modifiers,'applyStyle')&&(this.popper.removeAttribute('x-placement'),this.popper.style.position='',this.popper.style.top='',this.popper.style.left='',this.popper.style.right='',this.popper.style.bottom='',this.popper.style.willChange='',this.popper.style[B('transform')]=''),this.disableEventListeners(),this.options.removeOnDestroy&&this.popper.parentNode.removeChild(this.popper),this}function A(e){var t=e.ownerDocument;return t?t.defaultView:window}function M(e,t,o,i){var r='BODY'===e.nodeName,p=r?e.ownerDocument.defaultView:e;p.addEventListener(t,o,{passive:!0}),r||M(n(p.parentNode),t,o,i),i.push(p)}function F(e,t,o,i){o.updateBound=i,A(e).addEventListener('resize',o.updateBound,{passive:!0});var r=n(e);return M(r,'scroll',o.updateBound,o.scrollParents),o.scrollElement=r,o.eventsEnabled=!0,o}function I(){this.state.eventsEnabled||(this.state=F(this.reference,this.options,this.state,this.scheduleUpdate))}function R(e,t){return A(e).removeEventListener('resize',t.updateBound),t.scrollParents.forEach(function(e){e.removeEventListener('scroll',t.updateBound)}),t.updateBound=null,t.scrollParents=[],t.scrollElement=null,t.eventsEnabled=!1,t}function U(){this.state.eventsEnabled&&(cancelAnimationFrame(this.scheduleUpdate),this.state=R(this.reference,this.state))}function Y(e){return''!==e&&!isNaN(parseFloat(e))&&isFinite(e)}function V(e,t){Object.keys(t).forEach(function(o){var n='';-1!==['width','height','top','right','bottom','left'].indexOf(o)&&Y(t[o])&&(n='px'),e.style[o]=t[o]+n})}function j(e,t){Object.keys(t).forEach(function(o){var n=t[o];!1===n?e.removeAttribute(o):e.setAttribute(o,t[o])})}function q(e,t){var o=e.offsets,n=o.popper,i=o.reference,r=$,p=function(e){return e},s=r(i.width),d=r(n.width),a=-1!==['left','right'].indexOf(e.placement),l=-1!==e.placement.indexOf('-'),f=t?a||l||s%2==d%2?r:Z:p,m=t?r:p;return{left:f(1==s%2&&1==d%2&&!l&&t?n.left-1:n.left),top:m(n.top),bottom:m(n.bottom),right:f(n.right)}}function K(e,t,o){var n=D(e,function(e){var o=e.name;return o===t}),i=!!n&&e.some(function(e){return e.name===o&&e.enabled&&e.order<n.order});if(!i){var r='`'+t+'`';console.warn('`'+o+'`'+' modifier is required by '+r+' modifier in order to work, be sure to include it before '+r+'!')}return i}function z(e){return'end'===e?'start':'start'===e?'end':e}function G(e){var t=1<arguments.length&&void 0!==arguments[1]&&arguments[1],o=he.indexOf(e),n=he.slice(o+1).concat(he.slice(0,o));return t?n.reverse():n}function _(e,t,o,n){var i=e.match(/((?:\-|\+)?\d*\.?\d*)(.*)/),r=+i[1],p=i[2];if(!r)return e;if(0===p.indexOf('%')){var s;switch(p){case'%p':s=o;break;case'%':case'%r':default:s=n;}var d=g(s);return d[t]/100*r}if('vh'===p||'vw'===p){var a;return a='vh'===p?ee(document.documentElement.clientHeight,window.innerHeight||0):ee(document.documentElement.clientWidth,window.innerWidth||0),a/100*r}return r}function X(e,t,o,n){var i=[0,0],r=-1!==['right','left'].indexOf(n),p=e.split(/(\+|\-)/).map(function(e){return e.trim()}),s=p.indexOf(D(p,function(e){return-1!==e.search(/,|\s/)}));p[s]&&-1===p[s].indexOf(',')&&console.warn('Offsets separated by white space(s) are deprecated, use a comma (,) instead.');var d=/\s*,\s*|\s+/,a=-1===s?[p]:[p.slice(0,s).concat([p[s].split(d)[0]]),[p[s].split(d)[1]].concat(p.slice(s+1))];return a=a.map(function(e,n){var i=(1===n?!r:r)?'height':'width',p=!1;return e.reduce(function(e,t){return''===e[e.length-1]&&-1!==['+','-'].indexOf(t)?(e[e.length-1]=t,p=!0,e):p?(e[e.length-1]+=t,p=!1,e):e.concat(t)},[]).map(function(e){return _(e,i,t,o)})}),a.forEach(function(e,t){e.forEach(function(o,n){Y(o)&&(i[t]+=o*('-'===e[n-1]?-1:1))})}),i}function J(e,t){var o,n=t.offset,i=e.placement,r=e.offsets,p=r.popper,s=r.reference,d=i.split('-')[0];return o=Y(+n)?[+n,0]:X(n,p,s,d),'left'===d?(p.top+=o[0],p.left-=o[1]):'right'===d?(p.top+=o[0],p.left+=o[1]):'top'===d?(p.left+=o[0],p.top-=o[1]):'bottom'===d&&(p.left+=o[0],p.top+=o[1]),e.popper=p,e}var Q=Math.min,Z=Math.floor,$=Math.round,ee=Math.max,te='undefined'!=typeof window&&'undefined'!=typeof document&&'undefined'!=typeof navigator,oe=function(){for(var e=['Edge','Trident','Firefox'],t=0;t<e.length;t+=1)if(te&&0<=navigator.userAgent.indexOf(e[t]))return 1;return 0}(),ne=te&&window.Promise,ie=ne?function(e){var t=!1;return function(){t||(t=!0,window.Promise.resolve().then(function(){t=!1,e()}))}}:function(e){var t=!1;return function(){t||(t=!0,setTimeout(function(){t=!1,e()},oe))}},re=te&&!!(window.MSInputMethodContext&&document.documentMode),pe=te&&/MSIE 10/.test(navigator.userAgent),se=function(e,t){if(!(e instanceof t))throw new TypeError('Cannot call a class as a function')},de=function(){function e(e,t){for(var o,n=0;n<t.length;n++)o=t[n],o.enumerable=o.enumerable||!1,o.configurable=!0,'value'in o&&(o.writable=!0),Object.defineProperty(e,o.key,o)}return function(t,o,n){return o&&e(t.prototype,o),n&&e(t,n),t}}(),ae=function(e,t,o){return t in e?Object.defineProperty(e,t,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[t]=o,e},le=Object.assign||function(e){for(var t,o=1;o<arguments.length;o++)for(var n in t=arguments[o],t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n]);return e},fe=te&&/Firefox/i.test(navigator.userAgent),me=['auto-start','auto','auto-end','top-start','top','top-end','right-start','right','right-end','bottom-end','bottom','bottom-start','left-end','left','left-start'],he=me.slice(3),ce={FLIP:'flip',CLOCKWISE:'clockwise',COUNTERCLOCKWISE:'counterclockwise'},ge=function(){function t(o,n){var i=this,r=2<arguments.length&&void 0!==arguments[2]?arguments[2]:{};se(this,t),this.scheduleUpdate=function(){return requestAnimationFrame(i.update)},this.update=ie(this.update.bind(this)),this.options=le({},t.Defaults,r),this.state={isDestroyed:!1,isCreated:!1,scrollParents:[]},this.reference=o&&o.jquery?o[0]:o,this.popper=n&&n.jquery?n[0]:n,this.options.modifiers={},Object.keys(le({},t.Defaults.modifiers,r.modifiers)).forEach(function(e){i.options.modifiers[e]=le({},t.Defaults.modifiers[e]||{},r.modifiers?r.modifiers[e]:{})}),this.modifiers=Object.keys(this.options.modifiers).map(function(e){return le({name:e},i.options.modifiers[e])}).sort(function(e,t){return e.order-t.order}),this.modifiers.forEach(function(t){t.enabled&&e(t.onLoad)&&t.onLoad(i.reference,i.popper,i.options,t,i.state)}),this.update();var p=this.options.eventsEnabled;p&&this.enableEventListeners(),this.state.eventsEnabled=p}return de(t,[{key:'update',value:function(){return k.call(this)}},{key:'destroy',value:function(){return H.call(this)}},{key:'enableEventListeners',value:function(){return I.call(this)}},{key:'disableEventListeners',value:function(){return U.call(this)}}]),t}();return ge.Utils=('undefined'==typeof window?global:window).PopperUtils,ge.placements=me,ge.Defaults={placement:'bottom',positionFixed:!1,eventsEnabled:!0,removeOnDestroy:!1,onCreate:function(){},onUpdate:function(){},modifiers:{shift:{order:100,enabled:!0,fn:function(e){var t=e.placement,o=t.split('-')[0],n=t.split('-')[1];if(n){var i=e.offsets,r=i.reference,p=i.popper,s=-1!==['bottom','top'].indexOf(o),d=s?'left':'top',a=s?'width':'height',l={start:ae({},d,r[d]),end:ae({},d,r[d]+r[a]-p[a])};e.offsets.popper=le({},p,l[n])}return e}},offset:{order:200,enabled:!0,fn:J,offset:0},preventOverflow:{order:300,enabled:!0,fn:function(e,t){var o=t.boundariesElement||p(e.instance.popper);e.instance.reference===o&&(o=p(o));var n=B('transform'),i=e.instance.popper.style,r=i.top,s=i.left,d=i[n];i.top='',i.left='',i[n]='';var a=v(e.instance.popper,e.instance.reference,t.padding,o,e.positionFixed);i.top=r,i.left=s,i[n]=d,t.boundaries=a;var l=t.priority,f=e.offsets.popper,m={primary:function(e){var o=f[e];return f[e]<a[e]&&!t.escapeWithReference&&(o=ee(f[e],a[e])),ae({},e,o)},secondary:function(e){var o='right'===e?'left':'top',n=f[o];return f[e]>a[e]&&!t.escapeWithReference&&(n=Q(f[o],a[e]-('right'===e?f.width:f.height))),ae({},o,n)}};return l.forEach(function(e){var t=-1===['left','top'].indexOf(e)?'secondary':'primary';f=le({},f,m[t](e))}),e.offsets.popper=f,e},priority:['left','right','top','bottom'],padding:5,boundariesElement:'scrollParent'},keepTogether:{order:400,enabled:!0,fn:function(e){var t=e.offsets,o=t.popper,n=t.reference,i=e.placement.split('-')[0],r=Z,p=-1!==['top','bottom'].indexOf(i),s=p?'right':'bottom',d=p?'left':'top',a=p?'width':'height';return o[s]<r(n[d])&&(e.offsets.popper[d]=r(n[d])-o[a]),o[d]>r(n[s])&&(e.offsets.popper[d]=r(n[s])),e}},arrow:{order:500,enabled:!0,fn:function(e,o){var n;if(!K(e.instance.modifiers,'arrow','keepTogether'))return e;var i=o.element;if('string'==typeof i){if(i=e.instance.popper.querySelector(i),!i)return e;}else if(!e.instance.popper.contains(i))return console.warn('WARNING: `arrow.element` must be child of its popper element!'),e;var r=e.placement.split('-')[0],p=e.offsets,s=p.popper,d=p.reference,a=-1!==['left','right'].indexOf(r),l=a?'height':'width',f=a?'Top':'Left',m=f.toLowerCase(),h=a?'left':'top',c=a?'bottom':'right',u=S(i)[l];d[c]-u<s[m]&&(e.offsets.popper[m]-=s[m]-(d[c]-u)),d[m]+u>s[c]&&(e.offsets.popper[m]+=d[m]+u-s[c]),e.offsets.popper=g(e.offsets.popper);var b=d[m]+d[l]/2-u/2,w=t(e.instance.popper),y=parseFloat(w['margin'+f]),E=parseFloat(w['border'+f+'Width']),v=b-e.offsets.popper[m]-y-E;return v=ee(Q(s[l]-u,v),0),e.arrowElement=i,e.offsets.arrow=(n={},ae(n,m,$(v)),ae(n,h,''),n),e},element:'[x-arrow]'},flip:{order:600,enabled:!0,fn:function(e,t){if(W(e.instance.modifiers,'inner'))return e;if(e.flipped&&e.placement===e.originalPlacement)return e;var o=v(e.instance.popper,e.instance.reference,t.padding,t.boundariesElement,e.positionFixed),n=e.placement.split('-')[0],i=T(n),r=e.placement.split('-')[1]||'',p=[];switch(t.behavior){case ce.FLIP:p=[n,i];break;case ce.CLOCKWISE:p=G(n);break;case ce.COUNTERCLOCKWISE:p=G(n,!0);break;default:p=t.behavior;}return p.forEach(function(s,d){if(n!==s||p.length===d+1)return e;n=e.placement.split('-')[0],i=T(n);var a=e.offsets.popper,l=e.offsets.reference,f=Z,m='left'===n&&f(a.right)>f(l.left)||'right'===n&&f(a.left)<f(l.right)||'top'===n&&f(a.bottom)>f(l.top)||'bottom'===n&&f(a.top)<f(l.bottom),h=f(a.left)<f(o.left),c=f(a.right)>f(o.right),g=f(a.top)<f(o.top),u=f(a.bottom)>f(o.bottom),b='left'===n&&h||'right'===n&&c||'top'===n&&g||'bottom'===n&&u,w=-1!==['top','bottom'].indexOf(n),y=!!t.flipVariations&&(w&&'start'===r&&h||w&&'end'===r&&c||!w&&'start'===r&&g||!w&&'end'===r&&u),E=!!t.flipVariationsByContent&&(w&&'start'===r&&c||w&&'end'===r&&h||!w&&'start'===r&&u||!w&&'end'===r&&g),v=y||E;(m||b||v)&&(e.flipped=!0,(m||b)&&(n=p[d+1]),v&&(r=z(r)),e.placement=n+(r?'-'+r:''),e.offsets.popper=le({},e.offsets.popper,C(e.instance.popper,e.offsets.reference,e.placement)),e=P(e.instance.modifiers,e,'flip'))}),e},behavior:'flip',padding:5,boundariesElement:'viewport',flipVariations:!1,flipVariationsByContent:!1},inner:{order:700,enabled:!1,fn:function(e){var t=e.placement,o=t.split('-')[0],n=e.offsets,i=n.popper,r=n.reference,p=-1!==['left','right'].indexOf(o),s=-1===['top','left'].indexOf(o);return i[p?'left':'top']=r[o]-(s?i[p?'width':'height']:0),e.placement=T(t),e.offsets.popper=g(i),e}},hide:{order:800,enabled:!0,fn:function(e){if(!K(e.instance.modifiers,'hide','preventOverflow'))return e;var t=e.offsets.reference,o=D(e.instance.modifiers,function(e){return'preventOverflow'===e.name}).boundaries;if(t.bottom<o.top||t.left>o.right||t.top>o.bottom||t.right<o.left){if(!0===e.hide)return e;e.hide=!0,e.attributes['x-out-of-boundaries']=''}else{if(!1===e.hide)return e;e.hide=!1,e.attributes['x-out-of-boundaries']=!1}return e}},computeStyle:{order:850,enabled:!0,fn:function(e,t){var o=t.x,n=t.y,i=e.offsets.popper,r=D(e.instance.modifiers,function(e){return'applyStyle'===e.name}).gpuAcceleration;void 0!==r&&console.warn('WARNING: `gpuAcceleration` option moved to `computeStyle` modifier and will not be supported in future versions of Popper.js!');var s,d,a=void 0===r?t.gpuAcceleration:r,l=p(e.instance.popper),f=u(l),m={position:i.position},h=q(e,2>window.devicePixelRatio||!fe),c='bottom'===o?'top':'bottom',g='right'===n?'left':'right',b=B('transform');if(d='bottom'==c?'HTML'===l.nodeName?-l.clientHeight+h.bottom:-f.height+h.bottom:h.top,s='right'==g?'HTML'===l.nodeName?-l.clientWidth+h.right:-f.width+h.right:h.left,a&&b)m[b]='translate3d('+s+'px, '+d+'px, 0)',m[c]=0,m[g]=0,m.willChange='transform';else{var w='bottom'==c?-1:1,y='right'==g?-1:1;m[c]=d*w,m[g]=s*y,m.willChange=c+', '+g}var E={"x-placement":e.placement};return e.attributes=le({},E,e.attributes),e.styles=le({},m,e.styles),e.arrowStyles=le({},e.offsets.arrow,e.arrowStyles),e},gpuAcceleration:!0,x:'bottom',y:'right'},applyStyle:{order:900,enabled:!0,fn:function(e){return V(e.instance.popper,e.styles),j(e.instance.popper,e.attributes),e.arrowElement&&Object.keys(e.arrowStyles).length&&V(e.arrowElement,e.arrowStyles),e},onLoad:function(e,t,o,n,i){var r=L(i,t,e,o.positionFixed),p=O(o.placement,r,t,e,o.modifiers.flip.boundariesElement,o.modifiers.flip.padding);return t.setAttribute('x-placement',p),V(t,{position:o.positionFixed?'fixed':'absolute'}),o},gpuAcceleration:void 0}}},ge}); 23479/
23479*! 23480 * Bootstrap v4.6.2 (https://getbootstrap.com/) 23481 * Copyright 2011-2022 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) 23482 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 23483 */ 23484(function (global, factory) { 23485 typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('jquery'), require('popper.js')) : 23486 typeof define === 'function' && define.amd ? define(['exports', 'jquery', 'popper.js'], factory) : 23487 (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.bootstrap = {}, global.jQuery, global.Popper)); 23488})(this, (function (exports, $, Popper) { 'use strict'; 23489 23490 function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; } 23491 23492 var $__default = /*#__PURE__*/_interopDefaultLegacy($); 23493 var Popper__default = /*#__PURE__*/_interopDefaultLegacy(Popper); 23494 23495 function _defineProperties(target, props) { 23496 for (var i = 0; i < props.length; i++) { 23497 var descriptor = props[i]; 23498 descriptor.enumerable = descriptor.enumerable || false; 23499 descriptor.configurable = true; 23500 if ("value" in descriptor) descriptor.writable = true; 23501 Object.defineProperty(target, descriptor.key, descriptor); 23502 } 23503 } 23504 23505 function _createClass(Constructor, protoProps, staticProps) { 23506 if (protoProps) _defineProperties(Constructor.prototype, protoProps); 23507 if (staticProps) _defineProperties(Constructor, staticProps); 23508 Object.defineProperty(Constructor, "prototype", { 23509 writable: false 23510 }); 23511 return Constructor; 23512 } 23513 23514 function _extends() { 23515 _extends = Object.assign ? Object.assign.bind() : function (target) { 23516 for (var i = 1; i < arguments.length; i++) { 23517 var source = arguments[i]; 23518 23519 for (var key in source) { 23520 if (Object.prototype.hasOwnProperty.call(source, key)) { 23521 target[key] = source[key]; 23522 } 23523 } 23524 } 23525 23526 return target; 23527 }; 23528 return _extends.apply(this, arguments); 23529 } 23530 23531 function _inheritsLoose(subClass, superClass) { 23532 subClass.prototype = Object.create(superClass.prototype); 23533 subClass.prototype.constructor = subClass; 23534 23535 _setPrototypeOf(subClass, superClass); 23536 } 23537 23538 function _setPrototypeOf(o, p) { 23539 _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { 23540 o.__proto__ = p; 23541 return o; 23542 }; 23543 return _setPrototypeOf(o, p); 23544 } 23545 23546 /** 23547 * -------------------------------------------------------------------------- 23548 * Bootstrap (v4.6.2): util.js 23549 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 23550 * -------------------------------------------------------------------------- 23551 */ 23552 /** 23553 * Private TransitionEnd Helpers 23554 */ 23555 23556 var TRANSITION_END = 'transitionend'; 23557 var MAX_UID = 1000000; 23558 var MILLISECONDS_MULTIPLIER = 1000; // Shoutout AngusCroll (https://goo.gl/pxwQGp) 23559 23560 function toType(obj) { 23561 if (obj === null || typeof obj === 'undefined') { 23562 return "" + obj; 23563 } 23564 23565 return {}.toString.call(obj).match(/\s([a-z]+)/i)[1].toLowerCase(); 23566 } 23567 23568 function getSpecialTransitionEndEvent() { 23569 return { 23570 bindType: TRANSITION_END, 23571 delegateType: TRANSITION_END, 23572 handle: function handle(event) { 23573 if ($__default["default"](event.target).is(this)) { 23574 return event.handleObj.handler.apply(this, arguments); // eslint-disable-line prefer-rest-params 23575 } 23576 23577 return undefined; 23578 } 23579 }; 23580 } 23581 23582 function transitionEndEmulator(duration) { 23583 var _this = this; 23584 23585 var called = false; 23586 $__default["default"](this).one(Util.TRANSITION_END, function () { 23587 called = true; 23588 }); 23589 setTimeout(function () { 23590 if (!called) { 23591 Util.triggerTransitionEnd(_this); 23592 } 23593 }, duration); 23594 return this; 23595 } 23596 23597 function setTransitionEndSupport() { 23598 $__default["default"].fn.emulateTransitionEnd = transitionEndEmulator; 23599 $__default["default"].event.special[Util.TRANSITION_END] = getSpecialTransitionEndEvent(); 23600 } 23601 /** 23602 * Public Util API 23603 */ 23604 23605 23606 var Util = { 23607 TRANSITION_END: 'bsTransitionEnd', 23608 getUID: function getUID(prefix) { 23609 do { 23610 // eslint-disable-next-line no-bitwise 23611 prefix += ~~(Math.random() * MAX_UID); // "~~" acts like a faster Math.floor() here 23612 } while (document.getElementById(prefix)); 23613 23614 return prefix; 23615 }, 23616 getSelectorFromElement: function getSelectorFromElement(element) { 23617 var selector = element.getAttribute('data-target'); 23618 23619 if (!selector || selector === '#') { 23620 var hrefAttr = element.getAttribute('href'); 23621 selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : ''; 23622 } 23623
23624 try { 23625 return document.querySelector(selector) ? selector : null; 23626 } catch (_) { 23627 return null; 23628 } 23629 }, 23630 getTransitionDurationFromElement: function getTransitionDurationFromElement(element) { 23631 if (!element) { 23632 return 0; 23633 } // Get transition-duration of the element 23634 23635 23636 var transitionDuration = $__default["default"](element).css('transition-duration'); 23637 var transitionDelay = $__default["default"](element).css('transition-delay'); 23638 var floatTransitionDuration = parseFloat(transitionDuration); 23639 var floatTransitionDelay = parseFloat(transitionDelay); // Return 0 if element or transition duration is not found 23640 23641 if (!floatTransitionDuration && !floatTransitionDelay) { 23642 return 0; 23643 } // If multiple durations are defined, take the first 23644 23645 23646 transitionDuration = transitionDuration.split(',')[0]; 23647 transitionDelay = transitionDelay.split(',')[0]; 23648 return (parseFloat(transitionDuration) + parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER; 23649 }, 23650 reflow: function reflow(element) { 23651 return element.offsetHeight; 23652 }, 23653 triggerTransitionEnd: function triggerTransitionEnd(element) { 23654 $__default["default"](element).trigger(TRANSITION_END); 23655 }, 23656 supportsTransitionEnd: function supportsTransitionEnd() { 23657 return Boolean(TRANSITION_END); 23658 }, 23659 isElement: function isElement(obj) { 23660 return (obj[0] || obj).nodeType; 23661 }, 23662 typeCheckConfig: function typeCheckConfig(componentName, config, configTypes) { 23663 for (var property in configTypes) { 23664 if (Object.prototype.hasOwnProperty.call(configTypes, property)) { 23665 var expectedTypes = configTypes[property]; 23666 var value = config[property]; 23667 var valueType = value && Util.isElement(value) ? 'element' : toType(value); 23668 23669 if (!new RegExp(expectedTypes).test(valueType)) { 23670 throw new Error(componentName.toUpperCase() + ": " + ("Option \"" + property + "\" provided type \"" + valueType + "\" ") + ("but expected type \"" + expectedTypes + "\".")); 23671 } 23672 } 23673 } 23674 }, 23675 findShadowRoot: function findShadowRoot(element) { 23676 if (!document.documentElement.attachShadow) { 23677 return null; 23678 } // Can find the shadow root otherwise it'll return the document 23679 23680 23681 if (typeof element.getRootNode === 'function') { 23682 var root = element.getRootNode(); 23683 return root instanceof ShadowRoot ? root : null; 23684 } 23685 23686 if (element instanceof ShadowRoot) { 23687 return element; 23688 } // when we don't find a shadow root 23689 23690 23691 if (!element.parentNode) { 23692 return null; 23693 } 23694 23695 return Util.findShadowRoot(element.parentNode); 23696 }, 23697 jQueryDetection: function jQueryDetection() { 23698 if (typeof $__default["default"] === 'undefined') { 23699 throw new TypeError('Bootstrap\'s JavaScript requires jQuery. jQuery must be included before Bootstrap\'s JavaScript.'); 23700 } 23701 23702 var version = $__default["default"].fn.jquery.split(' ')[0].split('.'); 23703 var minMajor = 1; 23704 var ltMajor = 2; 23705 var minMinor = 9; 23706 var minPatch = 1; 23707 var maxMajor = 4; 23708 23709 if (version[0] < ltMajor && version[1] < minMinor || version[0] === minMajor && version[1] === minMinor && version[2] < minPatch || version[0] >= maxMajor) { 23710 throw new Error('Bootstrap\'s JavaScript requires at least jQuery v1.9.1 but less than v4.0.0'); 23711 } 23712 } 23713 }; 23714 Util.jQueryDetection(); 23715 setTransitionEndSupport(); 23716 23717 /** 23718 * Constants 23719 */ 23720 23721 var NAME$a = 'alert'; 23722 var VERSION$a = '4.6.2'; 23723 var DATA_KEY$a = 'bs.alert'; 23724 var EVENT_KEY$a = "." + DATA_KEY$a; 23725 var DATA_API_KEY$7 = '.data-api'; 23726 var JQUERY_NO_CONFLICT$a = $__default["default"].fn[NAME$a]; 23727 var CLASS_NAME_ALERT = 'alert'; 23728 var CLASS_NAME_FADE$5 = 'fade'; 23729 var CLASS_NAME_SHOW$7 = 'show'; 23730 var EVENT_CLOSE = "close" + EVENT_KEY$a; 23731 var EVENT_CLOSED = "closed" + EVENT_KEY$a; 23732 var EVENT_CLICK_DATA_API$6 = "click" + EVENT_KEY$a + DATA_API_KEY$7; 23733 var SELECTOR_DISMISS = '[data-dismiss="alert"]'; 23734 /** 23735 * Class definition 23736 */ 23737 23738 var Alert = /*#__PURE__*/function () { 23739 function Alert(element) { 23740 this._element = element; 23741 } // Getters 23742 23743 23744 var _proto = Alert.prototype; 23745 23746 // Public 23747 _proto.close = function close(element) { 23748 var rootElement = this._element; 23749 23750 if (element) { 23751 rootElement = this._getRootElement(element); 23752 } 23753 23754 var customEvent = this._triggerCloseEvent(rootElement); 23755 23756 if (customEvent.isDefaultPrevented()) { 23757 return; 23758 } 23759 23760 this._removeElement(rootElement); 23761 }; 23762 23763 _proto.dispose = function dispose() { 23764 $__default["default"].removeData(this._element, DATA_KEY$a); 23765 this._element = null; 23766 } // Private 23767 ; 23768 23769 _proto._getRootElement = function _getRootElement(element) { 23770 var selector = Util.getSelectorFromElement(element); 23771 var parent = false;
23772 23773 if (selector) { 23774 parent = document.querySelector(selector); 23775 } 23776 23777 if (!parent) { 23778 parent = $__default["default"](element).closest("." + CLASS_NAME_ALERT)[0]; 23779 } 23780 23781 return parent; 23782 }; 23783 23784 _proto._triggerCloseEvent = function _triggerCloseEvent(element) { 23785 var closeEvent = $__default["default"].Event(EVENT_CLOSE); 23786 $__default["default"](element).trigger(closeEvent); 23787 return closeEvent; 23788 }; 23789 23790 _proto._removeElement = function _removeElement(element) { 23791 var _this = this; 23792 23793 $__default["default"](element).removeClass(CLASS_NAME_SHOW$7); 23794 23795 if (!$__default["default"](element).hasClass(CLASS_NAME_FADE$5)) { 23796 this._destroyElement(element); 23797 23798 return; 23799 } 23800 23801 var transitionDuration = Util.getTransitionDurationFromElement(element); 23802 $__default["default"](element).one(Util.TRANSITION_END, function (event) { 23803 return _this._destroyElement(element, event); 23804 }).emulateTransitionEnd(transitionDuration); 23805 }; 23806 23807 _proto._destroyElement = function _destroyElement(element) { 23808 $__default["default"](element).detach().trigger(EVENT_CLOSED).remove(); 23809 } // Static 23810 ; 23811 23812 Alert._jQueryInterface = function _jQueryInterface(config) { 23813 return this.each(function () { 23814 var $element = $__default["default"](this); 23815 var data = $element.data(DATA_KEY$a); 23816 23817 if (!data) { 23818 data = new Alert(this); 23819 $element.data(DATA_KEY$a, data); 23820 } 23821 23822 if (config === 'close') { 23823 data[config](this); 23824 } 23825 }); 23826 }; 23827 23828 Alert._handleDismiss = function _handleDismiss(alertInstance) { 23829 return function (event) { 23830 if (event) { 23831 event.preventDefault(); 23832 } 23833 23834 alertInstance.close(this); 23835 }; 23836 }; 23837 23838 _createClass(Alert, null, [{ 23839 key: "VERSION", 23840 get: function get() { 23841 return VERSION$a; 23842 } 23843 }]); 23844 23845 return Alert; 23846 }(); 23847 /** 23848 * Data API implementation 23849 */ 23850 23851 23852 $__default["default"](document).on(EVENT_CLICK_DATA_API$6, SELECTOR_DISMISS, Alert._handleDismiss(new Alert())); 23853 /** 23854 * jQuery 23855 */ 23856 23857 $__default["default"].fn[NAME$a] = Alert._jQueryInterface; 23858 $__default["default"].fn[NAME$a].Constructor = Alert; 23859 23860 $__default["default"].fn[NAME$a].noConflict = function () { 23861 $__default["default"].fn[NAME$a] = JQUERY_NO_CONFLICT$a; 23862 return Alert._jQueryInterface; 23863 }; 23864 23865 /** 23866 * Constants 23867 */ 23868 23869 var NAME$9 = 'button'; 23870 var VERSION$9 = '4.6.2'; 23871 var DATA_KEY$9 = 'bs.button'; 23872 var EVENT_KEY$9 = "." + DATA_KEY$9; 23873 var DATA_API_KEY$6 = '.data-api'; 23874 var JQUERY_NO_CONFLICT$9 = $__default["default"].fn[NAME$9]; 23875 var CLASS_NAME_ACTIVE$3 = 'active'; 23876 var CLASS_NAME_BUTTON = 'btn'; 23877 var CLASS_NAME_FOCUS = 'focus'; 23878 var EVENT_CLICK_DATA_API$5 = "click" + EVENT_KEY$9 + DATA_API_KEY$6; 23879 var EVENT_FOCUS_BLUR_DATA_API = "focus" + EVENT_KEY$9 + DATA_API_KEY$6 + " " + ("blur" + EVENT_KEY$9 + DATA_API_KEY$6); 23880 var EVENT_LOAD_DATA_API$2 = "load" + EVENT_KEY$9 + DATA_API_KEY$6; 23881 var SELECTOR_DATA_TOGGLE_CARROT = '[data-toggle^="button"]'; 23882 var SELECTOR_DATA_TOGGLES = '[data-toggle="buttons"]'; 23883 var SELECTOR_DATA_TOGGLE$4 = '[data-toggle="button"]'; 23884 var SELECTOR_DATA_TOGGLES_BUTTONS = '[data-toggle="buttons"] .btn'; 23885 var SELECTOR_INPUT = 'input:not([type="hidden"])'; 23886 var SELECTOR_ACTIVE$2 = '.active'; 23887 var SELECTOR_BUTTON = '.btn'; 23888 /** 23889 * Class definition 23890 */ 23891 23892 var Button = /*#__PURE__*/function () { 23893 function Button(element) { 23894 this._element = element; 23895 this.shouldAvoidTriggerChange = false; 23896 } // Getters 23897 23898 23899 var _proto = Button.prototype; 23900 23901 // Public 23902 _proto.toggle = function toggle() { 23903 var triggerChangeEvent = true; 23904 var addAriaPressed = true; 23905 var rootElement = $__default["default"](this._element).closest(SELECTOR_DATA_TOGGLES)[0]; 23906 23907 if (rootElement) { 23908 var input = this._element.querySelector(SELECTOR_INPUT); 23909 23910 if (input) { 23911 if (input.type === 'radio') { 23912 if (input.checked && this._element.classList.contains(CLASS_NAME_ACTIVE$3)) { 23913 triggerChangeEvent = false;
23914 } else { 23915 var activeElement = rootElement.querySelector(SELECTOR_ACTIVE$2); 23916 23917 if (activeElement) { 23918 $__default["default"](activeElement).removeClass(CLASS_NAME_ACTIVE$3); 23919 } 23920 } 23921 } 23922 23923 if (triggerChangeEvent) { 23924 // if it's not a radio button or checkbox don't add a pointless/invalid checked property to the input 23925 if (input.type === 'checkbox' || input.type === 'radio') { 23926 input.checked = !this._element.classList.contains(CLASS_NAME_ACTIVE$3); 23927 } 23928 23929 if (!this.shouldAvoidTriggerChange) { 23930 $__default["default"](input).trigger('change'); 23931 } 23932 } 23933 23934 input.focus(); 23935 addAriaPressed = false; 23936 } 23937 } 23938 23939 if (!(this._element.hasAttribute('disabled') || this._element.classList.contains('disabled'))) { 23940 if (addAriaPressed) { 23941 this._element.setAttribute('aria-pressed', !this._element.classList.contains(CLASS_NAME_ACTIVE$3)); 23942 } 23943 23944 if (triggerChangeEvent) { 23945 $__default["default"](this._element).toggleClass(CLASS_NAME_ACTIVE$3); 23946 } 23947 } 23948 }; 23949 23950 _proto.dispose = function dispose() { 23951 $__default["default"].removeData(this._element, DATA_KEY$9); 23952 this._element = null; 23953 } // Static 23954 ; 23955 23956 Button._jQueryInterface = function _jQueryInterface(config, avoidTriggerChange) { 23957 return this.each(function () { 23958 var $element = $__default["default"](this); 23959 var data = $element.data(DATA_KEY$9); 23960 23961 if (!data) { 23962 data = new Button(this); 23963 $element.data(DATA_KEY$9, data); 23964 } 23965 23966 data.shouldAvoidTriggerChange = avoidTriggerChange; 23967 23968 if (config === 'toggle') { 23969 data[config](); 23970 } 23971 }); 23972 }; 23973 23974 _createClass(Button, null, [{ 23975 key: "VERSION", 23976 get: function get() { 23977 return VERSION$9; 23978 } 23979 }]); 23980 23981 return Button; 23982 }(); 23983 /** 23984 * Data API implementation 23985 */ 23986 23987 23988 $__default["default"](document).on(EVENT_CLICK_DATA_API$5, SELECTOR_DATA_TOGGLE_CARROT, function (event) { 23989 var button = event.target; 23990 var initialButton = button; 23991 23992 if (!$__default["default"](button).hasClass(CLASS_NAME_BUTTON)) { 23993 button = $__default["default"](button).closest(SELECTOR_BUTTON)[0]; 23994 } 23995 23996 if (!button || button.hasAttribute('disabled') || button.classList.contains('disabled')) { 23997 event.preventDefault(); // work around Firefox bug #1540995 23998 } else { 23999 var inputBtn = button.querySelector(SELECTOR_INPUT); 24000 24001 if (inputBtn && (inputBtn.hasAttribute('disabled') || inputBtn.classList.contains('disabled'))) { 24002 event.preventDefault(); // work around Firefox bug #1540995 24003 24004 return; 24005 } 24006 24007 if (initialButton.tagName === 'INPUT' || button.tagName !== 'LABEL') { 24008 Button._jQueryInterface.call($__default["default"](button), 'toggle', initialButton.tagName === 'INPUT'); 24009 } 24010 } 24011 }).on(EVENT_FOCUS_BLUR_DATA_API, SELECTOR_DATA_TOGGLE_CARROT, function (event) { 24012 var button = $__default["default"](event.target).closest(SELECTOR_BUTTON)[0]; 24013 $__default["default"](button).toggleClass(CLASS_NAME_FOCUS, /^focus(in)?$/.test(event.type)); 24014 }); 24015 $__default["default"](window).on(EVENT_LOAD_DATA_API$2, function () { 24016 // ensure correct active class is set to match the controls' actual values/states 24017 // find all checkboxes/readio buttons inside data-toggle groups 24018 var buttons = [].slice.call(document.querySelectorAll(SELECTOR_DATA_TOGGLES_BUTTONS)); 24019 24020 for (var i = 0, len = buttons.length; i < len; i++) { 24021 var button = buttons[i]; 24022 var input = button.querySelector(SELECTOR_INPUT); 24023 24024 if (input.checked || input.hasAttribute('checked')) { 24025 button.classList.add(CLASS_NAME_ACTIVE$3); 24026 } else { 24027 button.classList.remove(CLASS_NAME_ACTIVE$3); 24028 } 24029 } // find all button toggles 24030 24031 24032 buttons = [].slice.call(document.querySelectorAll(SELECTOR_DATA_TOGGLE$4)); 24033 24034 for (var _i = 0, _len = buttons.length; _i < _len; _i++) { 24035 var _button = buttons[_i]; 24036 24037 if (_button.getAttribute('aria-pressed') === 'true') { 24038 _button.classList.add(CLASS_NAME_ACTIVE$3); 24039 } else { 24040 _button.classList.remove(CLASS_NAME_ACTIVE$3); 24041 } 24042 } 24043 }); 24044 /** 24045 * jQuery 24046 */ 24047 24048 $__default["default"].fn[NAME$9] = Button._jQueryInterface; 24049 $__default["default"].fn[NAME$9].Constructor = Button; 24050 24051 $__default["default"].fn[NAME$9].noConflict = function () { 24052 $__default["default"].fn[NAME$9] = JQUERY_NO_CONFLICT$9; 24053 return Button._jQueryInterface; 24054 }; 24055 24056 /** 24057 * Constants 24058 */ 24059 24060 var NAME$8 = 'carousel'; 24061 var VERSION$8 = '4.6.2'; 24062 var DATA_KEY$8 = 'bs.carousel'; 24063 var EVENT_KEY$8 = "." + DATA_KEY$8; 24064 var DATA_API_KEY$5 = '.data-api'; 24065 var JQUERY_NO_CONFLICT$8 = $__default["default"].fn[NAME$8]; 24066 var ARROW_LEFT_KEYCODE = 37; // KeyboardEvent.which value for left arrow key 24067 24068 var ARROW_RIGHT_KEYCODE = 39; // KeyboardEvent.which value for right arrow key 24069 24070 var TOUCHEVENT_COMPAT_WAIT = 500; // Time for mouse compat events to fire after touch 24071 24072 var SWIPE_THRESHOLD = 40; 24073 var CLASS_NAME_CAROUSEL = 'carousel'; 24074 var CLASS_NAME_ACTIVE$2 = 'active'; 24075 var CLASS_NAME_SLIDE = 'slide'; 24076 var CLASS_NAME_RIGHT = 'carousel-item-right'; 24077 var CLASS_NAME_LEFT = 'carousel-item-left'; 24078 var CLASS_NAME_NEXT = 'carousel-item-next'; 24079 var CLASS_NAME_PREV = 'carousel-item-prev'; 24080 var CLASS_NAME_POINTER_EVENT = 'pointer-event'; 24081 var DIRECTION_NEXT = 'next'; 24082 var DIRECTION_PREV = 'prev'; 24083 var DIRECTION_LEFT = 'left'; 24084 var DIRECTION_RIGHT = 'right'; 24085 var EVENT_SLIDE = "slide" + EVENT_KEY$8; 24086 var EVENT_SLID = "slid" + EVENT_KEY$8; 24087 var EVENT_KEYDOWN = "keydown" + EVENT_KEY$8; 24088 var EVENT_MOUSEENTER = "mouseenter" + EVENT_KEY$8; 24089 var EVENT_MOUSELEAVE = "mouseleave" + EVENT_KEY$8; 24090 var EVENT_TOUCHSTART = "touchstart" + EVENT_KEY$8; 24091 var EVENT_TOUCHMOVE = "touchmove" + EVENT_KEY$8; 24092 var EVENT_TOUCHEND = "touchend" + EVENT_KEY$8; 24093 var EVENT_POINTERDOWN = "pointerdown" + EVENT_KEY$8; 24094 var EVENT_POINTERUP = "pointerup" + EVENT_KEY$8; 24095 var EVENT_DRAG_START = "dragstart" + EVENT_KEY$8; 24096 var EVENT_LOAD_DATA_API$1 = "load" + EVENT_KEY$8 + DATA_API_KEY$5; 24097 var EVENT_CLICK_DATA_API$4 = "click" + EVENT_KEY$8 + DATA_API_KEY$5; 24098 var SELECTOR_ACTIVE$1 = '.active'; 24099 var SELECTOR_ACTIVE_ITEM = '.active.carousel-item';
24100 var SELECTOR_ITEM = '.carousel-item'; 24101 var SELECTOR_ITEM_IMG = '.carousel-item img'; 24102 var SELECTOR_NEXT_PREV = '.carousel-item-next, .carousel-item-prev'; 24103 var SELECTOR_INDICATORS = '.carousel-indicators'; 24104 var SELECTOR_DATA_SLIDE = '[data-slide], [data-slide-to]'; 24105 var SELECTOR_DATA_RIDE = '[data-ride="carousel"]'; 24106 var Default$7 = { 24107 interval: 5000, 24108 keyboard: true, 24109 slide: false, 24110 pause: 'hover', 24111 wrap: true, 24112 touch: true 24113 }; 24114 var DefaultType$7 = { 24115 interval: '(number|boolean)', 24116 keyboard: 'boolean', 24117 slide: '(boolean|string)', 24118 pause: '(string|boolean)', 24119 wrap: 'boolean', 24120 touch: 'boolean' 24121 }; 24122 var PointerType = { 24123 TOUCH: 'touch', 24124 PEN: 'pen' 24125 }; 24126 /** 24127 * Class definition 24128 */ 24129 24130 var Carousel = /*#__PURE__*/function () { 24131 function Carousel(element, config) { 24132 this._items = null; 24133 this._interval = null; 24134 this._activeElement = null; 24135 this._isPaused = false; 24136 this._isSliding = false; 24137 this.touchTimeout = null; 24138 this.touchStartX = 0; 24139 this.touchDeltaX = 0; 24140 this._config = this._getConfig(config); 24141 this._element = element; 24142 this._indicatorsElement = this._element.querySelector(SELECTOR_INDICATORS); 24143 this._touchSupported = 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0; 24144 this._pointerEvent = Boolean(window.PointerEvent || window.MSPointerEvent); 24145 24146 this._addEventListeners(); 24147 } // Getters 24148 24149 24150 var _proto = Carousel.prototype; 24151 24152 // Public 24153 _proto.next = function next() { 24154 if (!this._isSliding) { 24155 this._slide(DIRECTION_NEXT); 24156 } 24157 }; 24158 24159 _proto.nextWhenVisible = function nextWhenVisible() { 24160 var $element = $__default["default"](this._element); // Don't call next when the page isn't visible 24161 // or the carousel or its parent isn't visible 24162 24163 if (!document.hidden && $element.is(':visible') && $element.css('visibility') !== 'hidden') { 24164 this.next(); 24165 } 24166 }; 24167 24168 _proto.prev = function prev() { 24169 if (!this._isSliding) { 24170 this._slide(DIRECTION_PREV); 24171 } 24172 }; 24173 24174 _proto.pause = function pause(event) { 24175 if (!event) { 24176 this._isPaused = true; 24177 } 24178 24179 if (this._element.querySelector(SELECTOR_NEXT_PREV)) { 24180 Util.triggerTransitionEnd(this._element); 24181 this.cycle(true); 24182 } 24183 24184 clearInterval(this._interval); 24185 this._interval = null; 24186 }; 24187 24188 _proto.cycle = function cycle(event) { 24189 if (!event) { 24190 this._isPaused = false; 24191 } 24192 24193 if (this._interval) { 24194 clearInterval(this._interval); 24195 this._interval = null; 24196 } 24197 24198 if (this._config.interval && !this._isPaused) { 24199 this._updateInterval(); 24200 24201 this._interval = setInterval((document.visibilityState ? this.nextWhenVisible : this.next).bind(this), this._config.interval); 24202 } 24203 }; 24204 24205 _proto.to = function to(index) { 24206 var _this = this; 24207 24208 this._activeElement = this._element.querySelector(SELECTOR_ACTIVE_ITEM); 24209 24210 var activeIndex = this._getItemIndex(this._activeElement); 24211 24212 if (index > this._items.length - 1 || index < 0) { 24213 return; 24214 } 24215 24216 if (this._isSliding) { 24217 $__default["default"](this._element).one(EVENT_SLID, function () { 24218 return _this.to(index); 24219 }); 24220 return; 24221 } 24222 24223 if (activeIndex === index) { 24224 this.pause(); 24225 this.cycle(); 24226 return; 24227 } 24228 24229 var direction = index > activeIndex ? DIRECTION_NEXT : DIRECTION_PREV; 24230 24231 this._slide(direction, this._items[index]); 24232 }; 24233 24234 _proto.dispose = function dispose() { 24235 $__default["default"](this._element).off(EVENT_KEY$8); 24236 $__default["default"].removeData(this._element, DATA_KEY$8); 24237 this._items = null; 24238 this._config = null; 24239 this._element = null; 24240 this._interval = null; 24241 this._isPaused = null; 24242 this._isSliding = null; 24243 this._activeElement = null; 24244 this._indicatorsElement = null; 24245 } // Private 24246 ; 24247 24248 _proto._getConfig = function _getConfig(config) { 24249 config = _extends({}, Default$7, config); 24250 Util.typeCheckConfig(NAME$8, config, DefaultType$7); 24251 return config; 24252 }; 24253 24254 _proto._handleSwipe = function _handleSwipe() { 24255 var absDeltax = Math.abs(this.touchDeltaX); 24256 24257 if (absDeltax <= SWIPE_THRESHOLD) { 24258 return; 24259 } 24260 24261 var direction = absDeltax / this.touchDeltaX; 24262 this.touchDeltaX = 0; // swipe left 24263 24264 if (direction > 0) { 24265 this.prev(); 24266 } // swipe right 24267 24268 24269 if (direction < 0) { 24270 this.next(); 24271 } 24272 }; 24273 24274 _proto._addEventListeners = function _addEventListeners() { 24275 var _this2 = this; 24276 24277 if (this._config.keyboard) { 24278 $__default["default"](this._element).on(EVENT_KEYDOWN, function (event) { 24279 return _this2._keydown(event); 24280 }); 24281 } 24282 24283 if (this._config.pause === 'hover') { 24284 $__default["default"](this._element).on(EVENT_MOUSEENTER, function (event) { 24285 return _this2.pause(event); 24286 }).on(EVENT_MOUSELEAVE, function (event) { 24287 return _this2.cycle(event); 24288 }); 24289 } 24290 24291 if (this._config.touch) { 24292 this._addTouchEventListeners(); 24293 } 24294 }; 24295 24296 _proto._addTouchEventListeners = function _addTouchEventListeners() { 24297 var _this3 = this; 24298 24299 if (!this._touchSupported) { 24300 return; 24301 } 24302 24303 var start = function start(event) { 24304 if (_this3._pointerEvent && PointerType[event.originalEvent.pointerType.toUpperCase()]) { 24305 _this3.touchStartX = event.originalEvent.clientX; 24306 } else if (!_this3._pointerEvent) { 24307 _this3.touchStartX = event.originalEvent.touches[0].clientX; 24308 } 24309 }; 24310 24311 var move = function move(event) { 24312 // ensure swiping with one touch and not pinching 24313 _this3.touchDeltaX = event.originalEvent.touches && event.originalEvent.touches.length > 1 ? 0 : event.originalEvent.touches[0].clientX - _this3.touchStartX; 24314 }; 24315 24316 var end = function end(event) { 24317 if (_this3._pointerEvent && PointerType[event.originalEvent.pointerType.toUpperCase()]) { 24318 _this3.touchDeltaX = event.originalEvent.clientX - _this3.touchStartX; 24319 } 24320 24321 _this3._handleSwipe(); 24322 24323 if (_this3._config.pause === 'hover') {
24324 // If it's a touch-enabled device, mouseenter/leave are fired as 24325 // part of the mouse compatibility events on first tap - the carousel 24326 // would stop cycling until user tapped out of it; 24327 // here, we listen for touchend, explicitly pause the carousel 24328 // (as if it's the second time we tap on it, mouseenter compat event 24329 // is NOT fired) and after a timeout (to allow for mouse compatibility 24330 // events to fire) we explicitly restart cycling 24331 _this3.pause(); 24332 24333 if (_this3.touchTimeout) { 24334 clearTimeout(_this3.touchTimeout); 24335 } 24336 24337 _this3.touchTimeout = setTimeout(function (event) { 24338 return _this3.cycle(event); 24339 }, TOUCHEVENT_COMPAT_WAIT + _this3._config.interval); 24340 } 24341 }; 24342 24343 $__default["default"](this._element.querySelectorAll(SELECTOR_ITEM_IMG)).on(EVENT_DRAG_START, function (e) { 24344 return e.preventDefault(); 24345 }); 24346 24347 if (this._pointerEvent) { 24348 $__default["default"](this._element).on(EVENT_POINTERDOWN, function (event) { 24349 return start(event); 24350 }); 24351 $__default["default"](this._element).on(EVENT_POINTERUP, function (event) { 24352 return end(event); 24353 }); 24354 24355 this._element.classList.add(CLASS_NAME_POINTER_EVENT); 24356 } else { 24357 $__default["default"](this._element).on(EVENT_TOUCHSTART, function (event) { 24358 return start(event); 24359 }); 24360 $__default["default"](this._element).on(EVENT_TOUCHMOVE, function (event) { 24361 return move(event); 24362 }); 24363 $__default["default"](this._element).on(EVENT_TOUCHEND, function (event) { 24364 return end(event); 24365 }); 24366 } 24367 }; 24368 24369 _proto._keydown = function _keydown(event) { 24370 if (/input|textarea/i.test(event.target.tagName)) { 24371 return; 24372 } 24373 24374 switch (event.which) { 24375 case ARROW_LEFT_KEYCODE: 24376 event.preventDefault(); 24377 this.prev(); 24378 break; 24379 24380 case ARROW_RIGHT_KEYCODE: 24381 event.preventDefault(); 24382 this.next(); 24383 break; 24384 } 24385 }; 24386 24387 _proto._getItemIndex = function _getItemIndex(element) { 24388 this._items = element && element.parentNode ? [].slice.call(element.parentNode.querySelectorAll(SELECTOR_ITEM)) : []; 24389 return this._items.indexOf(element); 24390 }; 24391 24392 _proto._getItemByDirection = function _getItemByDirection(direction, activeElement) { 24393 var isNextDirection = direction === DIRECTION_NEXT; 24394 var isPrevDirection = direction === DIRECTION_PREV; 24395 24396 var activeIndex = this._getItemIndex(activeElement); 24397 24398 var lastItemIndex = this._items.length - 1; 24399 var isGoingToWrap = isPrevDirection && activeIndex === 0 || isNextDirection && activeIndex === lastItemIndex; 24400 24401 if (isGoingToWrap && !this._config.wrap) { 24402 return activeElement; 24403 } 24404 24405 var delta = direction === DIRECTION_PREV ? -1 : 1; 24406 var itemIndex = (activeIndex + delta) % this._items.length; 24407 return itemIndex === -1 ? this._items[this._items.length - 1] : this._items[itemIndex]; 24408 }; 24409 24410 _proto._triggerSlideEvent = function _triggerSlideEvent(relatedTarget, eventDirectionName) { 24411 var targetIndex = this._getItemIndex(relatedTarget); 24412 24413 var fromIndex = this._getItemIndex(this._element.querySelector(SELECTOR_ACTIVE_ITEM)); 24414 24415 var slideEvent = $__default["default"].Event(EVENT_SLIDE, { 24416 relatedTarget: relatedTarget, 24417 direction: eventDirectionName, 24418 from: fromIndex, 24419 to: targetIndex 24420 }); 24421 $__default["default"](this._element).trigger(slideEvent); 24422 return slideEvent; 24423 }; 24424 24425 _proto._setActiveIndicatorElement = function _setActiveIndicatorElement(element) { 24426 if (this._indicatorsElement) { 24427 var indicators = [].slice.call(this._indicatorsElement.querySelectorAll(SELECTOR_ACTIVE$1)); 24428 $__default["default"](indicators).removeClass(CLASS_NAME_ACTIVE$2); 24429 24430 var nextIndicator = this._indicatorsElement.children[this._getItemIndex(element)]; 24431 24432 if (nextIndicator) { 24433 $__default["default"](nextIndicator).addClass(CLASS_NAME_ACTIVE$2); 24434 } 24435 } 24436 }; 24437 24438 _proto._updateInterval = function _updateInterval() { 24439 var element = this._activeElement || this._element.querySelector(SELECTOR_ACTIVE_ITEM); 24440 24441 if (!element) { 24442 return; 24443 } 24444 24445 var elementInterval = parseInt(element.getAttribute('data-interval'), 10); 24446 24447 if (elementInterval) { 24448 this._config.defaultInterval = this._config.defaultInterval || this._config.interval; 24449 this._config.interval = elementInterval; 24450 } else { 24451 this._config.interval = this._config.defaultInterval || this._config.interval; 24452 } 24453 }; 24454 24455 _proto._slide = function _slide(direction, element) { 24456 var _this4 = this; 24457 24458 var activeElement = this._element.querySelector(SELECTOR_ACTIVE_ITEM); 24459 24460 var activeElementIndex = this._getItemIndex(activeElement); 24461 24462 var nextElement = element || activeElement && this._getItemByDirection(direction, activeElement); 24463 24464 var nextElementIndex = this._getItemIndex(nextElement); 24465 24466 var isCycling = Boolean(this._interval); 24467 var directionalClassName; 24468 var orderClassName; 24469 var eventDirectionName; 24470 24471 if (direction === DIRECTION_NEXT) { 24472 directionalClassName = CLASS_NAME_LEFT; 24473 orderClassName = CLASS_NAME_NEXT; 24474 eventDirectionName = DIRECTION_LEFT; 24475 } else { 24476 directionalClassName = CLASS_NAME_RIGHT; 24477 orderClassName = CLASS_NAME_PREV; 24478 eventDirectionName = DIRECTION_RIGHT; 24479 } 24480 24481 if (nextElement && $__default["default"](nextElement).hasClass(CLASS_NAME_ACTIVE$2)) { 24482 this._isSliding = false;
24483 return; 24484 } 24485 24486 var slideEvent = this._triggerSlideEvent(nextElement, eventDirectionName); 24487 24488 if (slideEvent.isDefaultPrevented()) { 24489 return; 24490 } 24491 24492 if (!activeElement || !nextElement) { 24493 // Some weirdness is happening, so we bail 24494 return; 24495 } 24496 24497 this._isSliding = true; 24498 24499 if (isCycling) { 24500 this.pause(); 24501 } 24502 24503 this._setActiveIndicatorElement(nextElement); 24504 24505 this._activeElement = nextElement; 24506 var slidEvent = $__default["default"].Event(EVENT_SLID, { 24507 relatedTarget: nextElement, 24508 direction: eventDirectionName, 24509 from: activeElementIndex, 24510 to: nextElementIndex 24511 }); 24512 24513 if ($__default["default"](this._element).hasClass(CLASS_NAME_SLIDE)) { 24514 $__default["default"](nextElement).addClass(orderClassName); 24515 Util.reflow(nextElement); 24516 $__default["default"](activeElement).addClass(directionalClassName); 24517 $__default["default"](nextElement).addClass(directionalClassName); 24518 var transitionDuration = Util.getTransitionDurationFromElement(activeElement); 24519 $__default["default"](activeElement).one(Util.TRANSITION_END, function () { 24520 $__default["default"](nextElement).removeClass(directionalClassName + " " + orderClassName).addClass(CLASS_NAME_ACTIVE$2); 24521 $__default["default"](activeElement).removeClass(CLASS_NAME_ACTIVE$2 + " " + orderClassName + " " + directionalClassName); 24522 _this4._isSliding = false; 24523 setTimeout(function () { 24524 return $__default["default"](_this4._element).trigger(slidEvent); 24525 }, 0); 24526 }).emulateTransitionEnd(transitionDuration); 24527 } else { 24528 $__default["default"](activeElement).removeClass(CLASS_NAME_ACTIVE$2); 24529 $__default["default"](nextElement).addClass(CLASS_NAME_ACTIVE$2); 24530 this._isSliding = false; 24531 $__default["default"](this._element).trigger(slidEvent); 24532 } 24533 24534 if (isCycling) { 24535 this.cycle(); 24536 } 24537 } // Static 24538 ; 24539 24540 Carousel._jQueryInterface = function _jQueryInterface(config) { 24541 return this.each(function () { 24542 var data = $__default["default"](this).data(DATA_KEY$8); 24543 24544 var _config = _extends({}, Default$7, $__default["default"](this).data()); 24545 24546 if (typeof config === 'object') { 24547 _config = _extends({}, _config, config); 24548 } 24549 24550 var action = typeof config === 'string' ? config : _config.slide; 24551 24552 if (!data) { 24553 data = new Carousel(this, _config); 24554 $__default["default"](this).data(DATA_KEY$8, data); 24555 } 24556 24557 if (typeof config === 'number') { 24558 data.to(config); 24559 } else if (typeof action === 'string') { 24560 if (typeof data[action] === 'undefined') { 24561 throw new TypeError("No method named \"" + action + "\""); 24562 } 24563 24564 data[action](); 24565 } else if (_config.interval && _config.ride) { 24566 data.pause(); 24567 data.cycle(); 24568 } 24569 }); 24570 }; 24571 24572 Carousel._dataApiClickHandler = function _dataApiClickHandler(event) { 24573 var selector = Util.getSelectorFromElement(this); 24574 24575 if (!selector) { 24576 return; 24577 } 24578 24579 var target = $__default["default"](selector)[0]; 24580 24581 if (!target || !$__default["default"](target).hasClass(CLASS_NAME_CAROUSEL)) { 24582 return; 24583 } 24584 24585 var config = _extends({}, $__default["default"](target).data(), $__default["default"](this).data()); 24586 24587 var slideIndex = this.getAttribute('data-slide-to'); 24588 24589 if (slideIndex) { 24590 config.interval = false; 24591 } 24592 24593 Carousel._jQueryInterface.call($__default["default"](target), config); 24594 24595 if (slideIndex) { 24596 $__default["default"](target).data(DATA_KEY$8).to(slideIndex); 24597 } 24598 24599 event.preventDefault(); 24600 }; 24601 24602 _createClass(Carousel, null, [{ 24603 key: "VERSION", 24604 get: function get() { 24605 return VERSION$8; 24606 } 24607 }, { 24608 key: "Default", 24609 get: function get() { 24610 return Default$7; 24611 } 24612 }]); 24613 24614 return Carousel; 24615 }(); 24616 /** 24617 * Data API implementation 24618 */ 24619 24620 24621 $__default["default"](document).on(EVENT_CLICK_DATA_API$4, SELECTOR_DATA_SLIDE, Carousel._dataApiClickHandler); 24622 $__default["default"](window).on(EVENT_LOAD_DATA_API$1, function () { 24623 var carousels = [].slice.call(document.querySelectorAll(SELECTOR_DATA_RIDE)); 24624 24625 for (var i = 0, len = carousels.length; i < len; i++) { 24626 var $carousel = $__default["default"](carousels[i]); 24627
24628 Carousel._jQueryInterface.call($carousel, $carousel.data()); 24629 } 24630 }); 24631 /** 24632 * jQuery 24633 */ 24634 24635 $__default["default"].fn[NAME$8] = Carousel._jQueryInterface; 24636 $__default["default"].fn[NAME$8].Constructor = Carousel; 24637 24638 $__default["default"].fn[NAME$8].noConflict = function () { 24639 $__default["default"].fn[NAME$8] = JQUERY_NO_CONFLICT$8; 24640 return Carousel._jQueryInterface; 24641 }; 24642 24643 /** 24644 * Constants 24645 */ 24646 24647 var NAME$7 = 'collapse'; 24648 var VERSION$7 = '4.6.2'; 24649 var DATA_KEY$7 = 'bs.collapse'; 24650 var EVENT_KEY$7 = "." + DATA_KEY$7; 24651 var DATA_API_KEY$4 = '.data-api'; 24652 var JQUERY_NO_CONFLICT$7 = $__default["default"].fn[NAME$7]; 24653 var CLASS_NAME_SHOW$6 = 'show'; 24654 var CLASS_NAME_COLLAPSE = 'collapse'; 24655 var CLASS_NAME_COLLAPSING = 'collapsing'; 24656 var CLASS_NAME_COLLAPSED = 'collapsed'; 24657 var DIMENSION_WIDTH = 'width'; 24658 var DIMENSION_HEIGHT = 'height'; 24659 var EVENT_SHOW$4 = "show" + EVENT_KEY$7; 24660 var EVENT_SHOWN$4 = "shown" + EVENT_KEY$7; 24661 var EVENT_HIDE$4 = "hide" + EVENT_KEY$7; 24662 var EVENT_HIDDEN$4 = "hidden" + EVENT_KEY$7; 24663 var EVENT_CLICK_DATA_API$3 = "click" + EVENT_KEY$7 + DATA_API_KEY$4; 24664 var SELECTOR_ACTIVES = '.show, .collapsing'; 24665 var SELECTOR_DATA_TOGGLE$3 = '[data-toggle="collapse"]'; 24666 var Default$6 = { 24667 toggle: true, 24668 parent: '' 24669 }; 24670 var DefaultType$6 = { 24671 toggle: 'boolean', 24672 parent: '(string|element)' 24673 }; 24674 /** 24675 * Class definition 24676 */ 24677 24678 var Collapse = /*#__PURE__*/function () { 24679 function Collapse(element, config) { 24680 this._isTransitioning = false; 24681 this._element = element; 24682 this._config = this._getConfig(config); 24683 this._triggerArray = [].slice.call(document.querySelectorAll("[data-toggle=\"collapse\"][href=\"#" + element.id + "\"]," + ("[data-toggle=\"collapse\"][data-target=\"#" + element.id + "\"]"))); 24684 var toggleList = [].slice.call(document.querySelectorAll(SELECTOR_DATA_TOGGLE$3)); 24685 24686 for (var i = 0, len = toggleList.length; i < len; i++) { 24687 var elem = toggleList[i]; 24688 var selector = Util.getSelectorFromElement(elem); 24689 var filterElement = [].slice.call(document.querySelectorAll(selector)).filter(function (foundElem) { 24690 return foundElem === element; 24691 }); 24692 24693 if (selector !== null && filterElement.length > 0) { 24694 this._selector = selector; 24695 24696 this._triggerArray.push(elem); 24697 } 24698 } 24699 24700 this._parent = this._config.parent ? this._getParent() : null; 24701 24702 if (!this._config.parent) { 24703 this._addAriaAndCollapsedClass(this._element, this._triggerArray); 24704 } 24705 24706 if (this._config.toggle) { 24707 this.toggle(); 24708 } 24709 } // Getters 24710 24711 24712 var _proto = Collapse.prototype; 24713 24714 // Public 24715 _proto.toggle = function toggle() { 24716 if ($__default["default"](this._element).hasClass(CLASS_NAME_SHOW$6)) { 24717 this.hide(); 24718 } else { 24719 this.show(); 24720 } 24721 }; 24722 24723 _proto.show = function show() { 24724 var _this = this; 24725 24726 if (this._isTransitioning || $__default["default"](this._element).hasClass(CLASS_NAME_SHOW$6)) { 24727 return; 24728 } 24729 24730 var actives; 24731 var activesData; 24732 24733 if (this._parent) { 24734 actives = [].slice.call(this._parent.querySelectorAll(SELECTOR_ACTIVES)).filter(function (elem) { 24735 if (typeof _this._config.parent === 'string') { 24736 return elem.getAttribute('data-parent') === _this._config.parent; 24737 } 24738 24739 return elem.classList.contains(CLASS_NAME_COLLAPSE); 24740 }); 24741 24742 if (actives.length === 0) { 24743 actives = null; 24744 } 24745 } 24746 24747 if (actives) { 24748 activesData = $__default["default"](actives).not(this._selector).data(DATA_KEY$7); 24749 24750 if (activesData && activesData._isTransitioning) { 24751 return; 24752 } 24753 } 24754 24755 var startEvent = $__default["default"].Event(EVENT_SHOW$4); 24756 $__default["default"](this._element).trigger(startEvent); 24757 24758 if (startEvent.isDefaultPrevented()) { 24759 return; 24760 } 24761 24762 if (actives) { 24763 Collapse._jQueryInterface.call($__default["default"](actives).not(this._selector), 'hide'); 24764 24765 if (!activesData) { 24766 $__default["default"](actives).data(DATA_KEY$7, null); 24767 } 24768 } 24769 24770 var dimension = this._getDimension(); 24771 24772 $__default["default"](this._element).removeClass(CLASS_NAME_COLLAPSE).addClass(CLASS_NAME_COLLAPSING); 24773 this._element.style[dimension] = 0; 24774 24775 if (this._triggerArray.length) { 24776 $__default["default"](this._triggerArray).removeClass(CLASS_NAME_COLLAPSED).attr('aria-expanded', true); 24777 } 24778 24779 this.setTransitioning(true); 24780 24781 var complete = function complete() { 24782 $__default["default"](_this._element).removeClass(CLASS_NAME_COLLAPSING).addClass(CLASS_NAME_COLLAPSE + " " + CLASS_NAME_SHOW$6); 24783 _this._element.style[dimension] = ''; 24784 24785 _this.setTransitioning(false); 24786 24787 $__default["default"](_this._element).trigger(EVENT_SHOWN$4); 24788 }; 24789 24790 var capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1); 24791 var scrollSize = "scroll" + capitalizedDimension; 24792 var transitionDuration = Util.getTransitionDurationFromElement(this._element); 24793 $__default["default"](this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration); 24794 this._element.style[dimension] = this._element[scrollSize] + "px"; 24795 }; 24796 24797 _proto.hide = function hide() { 24798 var _this2 = this; 24799 24800 if (this._isTransitioning || !$__default["default"](this._element).hasClass(CLASS_NAME_SHOW$6)) { 24801 return; 24802 } 24803 24804 var startEvent = $__default["default"].Event(EVENT_HIDE$4); 24805 $__default["default"](this._element).trigger(startEvent); 24806 24807 if (startEvent.isDefaultPrevented()) { 24808 return; 24809 } 24810 24811 var dimension = this._getDimension(); 24812 24813 this._element.style[dimension] = this._element.getBoundingClientRect()[dimension] + "px"; 24814 Util.reflow(this._element); 24815 $__default["default"](this._element).addClass(CLASS_NAME_COLLAPSING).removeClass(CLASS_NAME_COLLAPSE + " " + CLASS_NAME_SHOW$6); 24816 var triggerArrayLength = this._triggerArray.length; 24817 24818 if (triggerArrayLength > 0) { 24819 for (var i = 0; i < triggerArrayLength; i++) { 24820 var trigger = this._triggerArray[i]; 24821 var selector = Util.getSelectorFromElement(trigger); 24822 24823 if (selector !== null) { 24824 var $elem = $__default["default"]([].slice.call(document.querySelectorAll(selector))); 24825 24826 if (!$elem.hasClass(CLASS_NAME_SHOW$6)) { 24827 $__default["default"](trigger).addClass(CLASS_NAME_COLLAPSED).attr('aria-expanded', false); 24828 } 24829 } 24830 } 24831 } 24832 24833 this.setTransitioning(true); 24834 24835 var complete = function complete() { 24836 _this2.setTransitioning(false); 24837 24838 $__default["default"](_this2._element).removeClass(CLASS_NAME_COLLAPSING).addClass(CLASS_NAME_COLLAPSE).trigger(EVENT_HIDDEN$4); 24839 }; 24840 24841 this._element.style[dimension] = ''; 24842 var transitionDuration = Util.getTransitionDurationFromElement(this._element); 24843 $__default["default"](this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration); 24844 }; 24845 24846 _proto.setTransitioning = function setTransitioning(isTransitioning) { 24847 this._isTransitioning = isTransitioning; 24848 }; 24849 24850 _proto.dispose = function dispose() { 24851 $__default["default"].removeData(this._element, DATA_KEY$7); 24852 this._config = null; 24853 this._parent = null; 24854 this._element = null; 24855 this._triggerArray = null; 24856 this._isTransitioning = null; 24857 } // Private 24858 ; 24859 24860 _proto._getConfig = function _getConfig(config) { 24861 config = _extends({}, Default$6, config); 24862 config.toggle = Boolean(config.toggle); // Coerce string values 24863 24864 Util.typeCheckConfig(NAME$7, config, DefaultType$6); 24865 return config; 24866 }; 24867 24868 _proto._getDimension = function _getDimension() { 24869 var hasWidth = $__default["default"](this._element).hasClass(DIMENSION_WIDTH); 24870 return hasWidth ? DIMENSION_WIDTH : DIMENSION_HEIGHT; 24871 }; 24872 24873 _proto._getParent = function _getParent() { 24874 var _this3 = this; 24875 24876 var parent; 24877 24878 if (Util.isElement(this._config.parent)) { 24879 parent = this._config.parent; // It's a jQuery object 24880 24881 if (typeof this._config.parent.jquery !== 'undefined') { 24882 parent = this._config.parent[0]; 24883 } 24884 } else { 24885 parent = document.querySelector(this._config.parent); 24886 } 24887 24888 var selector = "[data-toggle=\"collapse\"][data-parent=\"" + this._config.parent + "\"]"; 24889 var children = [].slice.call(parent.querySelectorAll(selector)); 24890 $__default["default"](children).each(function (i, element) { 24891 _this3._addAriaAndCollapsedClass(Collapse._getTargetFromElement(element), [element]); 24892 }); 24893 return parent; 24894 }; 24895 24896 _proto._addAriaAndCollapsedClass = function _addAriaAndCollapsedClass(element, triggerArray) { 24897 var isOpen = $__default["default"](element).hasClass(CLASS_NAME_SHOW$6); 24898 24899 if (triggerArray.length) { 24900 $__default["default"](triggerArray).toggleClass(CLASS_NAME_COLLAPSED, !isOpen).attr('aria-expanded', isOpen); 24901 } 24902 } // Static 24903 ; 24904 24905 Collapse._getTargetFromElement = function _getTargetFromElement(element) { 24906 var selector = Util.getSelectorFromElement(element); 24907 return selector ? document.querySelector(selector) : null; 24908 }; 24909 24910 Collapse._jQueryInterface = function _jQueryInterface(config) { 24911 return this.each(function () { 24912 var $element = $__default["default"](this); 24913 var data = $element.data(DATA_KEY$7); 24914 24915 var _config = _extends({}, Default$6, $element.data(), typeof config === 'object' && config ? config : {}); 24916 24917 if (!data && _config.toggle && typeof config === 'string' && /show|hide/.test(config)) { 24918 _config.toggle = false;
24919 } 24920 24921 if (!data) { 24922 data = new Collapse(this, _config); 24923 $element.data(DATA_KEY$7, data); 24924 } 24925 24926 if (typeof config === 'string') { 24927 if (typeof data[config] === 'undefined') { 24928 throw new TypeError("No method named \"" + config + "\""); 24929 } 24930 24931 data[config](); 24932 } 24933 }); 24934 }; 24935 24936 _createClass(Collapse, null, [{ 24937 key: "VERSION", 24938 get: function get() { 24939 return VERSION$7; 24940 } 24941 }, { 24942 key: "Default", 24943 get: function get() { 24944 return Default$6; 24945 } 24946 }]); 24947 24948 return Collapse; 24949 }(); 24950 /** 24951 * Data API implementation 24952 */ 24953 24954 24955 $__default["default"](document).on(EVENT_CLICK_DATA_API$3, SELECTOR_DATA_TOGGLE$3, function (event) { 24956 // preventDefault only for <a> elements (which change the URL) not inside the collapsible element 24957 if (event.currentTarget.tagName === 'A') { 24958 event.preventDefault(); 24959 } 24960 24961 var $trigger = $__default["default"](this); 24962 var selector = Util.getSelectorFromElement(this); 24963 var selectors = [].slice.call(document.querySelectorAll(selector)); 24964 $__default["default"](selectors).each(function () { 24965 var $target = $__default["default"](this); 24966 var data = $target.data(DATA_KEY$7); 24967 var config = data ? 'toggle' : $trigger.data(); 24968 24969 Collapse._jQueryInterface.call($target, config); 24970 }); 24971 }); 24972 /** 24973 * jQuery 24974 */ 24975 24976 $__default["default"].fn[NAME$7] = Collapse._jQueryInterface; 24977 $__default["default"].fn[NAME$7].Constructor = Collapse; 24978 24979 $__default["default"].fn[NAME$7].noConflict = function () { 24980 $__default["default"].fn[NAME$7] = JQUERY_NO_CONFLICT$7; 24981 return Collapse._jQueryInterface; 24982 }; 24983 24984 /** 24985 * Constants 24986 */ 24987 24988 var NAME$6 = 'dropdown'; 24989 var VERSION$6 = '4.6.2'; 24990 var DATA_KEY$6 = 'bs.dropdown'; 24991 var EVENT_KEY$6 = "." + DATA_KEY$6; 24992 var DATA_API_KEY$3 = '.data-api'; 24993 var JQUERY_NO_CONFLICT$6 = $__default["default"].fn[NAME$6]; 24994 var ESCAPE_KEYCODE$1 = 27; // KeyboardEvent.which value for Escape (Esc) key 24995 24996 var SPACE_KEYCODE = 32; // KeyboardEvent.which value for space key 24997 24998 var TAB_KEYCODE = 9; // KeyboardEvent.which value for tab key 24999 25000 var ARROW_UP_KEYCODE = 38; // KeyboardEvent.which value for up arrow key 25001 25002 var ARROW_DOWN_KEYCODE = 40; // KeyboardEvent.which value for down arrow key 25003 25004 var RIGHT_MOUSE_BUTTON_WHICH = 3; // MouseEvent.which value for the right button (assuming a right-handed mouse) 25005 25006 var REGEXP_KEYDOWN = new RegExp(ARROW_UP_KEYCODE + "|" + ARROW_DOWN_KEYCODE + "|" + ESCAPE_KEYCODE$1); 25007 var CLASS_NAME_DISABLED$1 = 'disabled'; 25008 var CLASS_NAME_SHOW$5 = 'show'; 25009 var CLASS_NAME_DROPUP = 'dropup'; 25010 var CLASS_NAME_DROPRIGHT = 'dropright'; 25011 var CLASS_NAME_DROPLEFT = 'dropleft'; 25012 var CLASS_NAME_MENURIGHT = 'dropdown-menu-right'; 25013 var CLASS_NAME_POSITION_STATIC = 'position-static'; 25014 var EVENT_HIDE$3 = "hide" + EVENT_KEY$6; 25015 var EVENT_HIDDEN$3 = "hidden" + EVENT_KEY$6; 25016 var EVENT_SHOW$3 = "show" + EVENT_KEY$6; 25017 var EVENT_SHOWN$3 = "shown" + EVENT_KEY$6; 25018 var EVENT_CLICK = "click" + EVENT_KEY$6; 25019 var EVENT_CLICK_DATA_API$2 = "click" + EVENT_KEY$6 + DATA_API_KEY$3; 25020 var EVENT_KEYDOWN_DATA_API = "keydown" + EVENT_KEY$6 + DATA_API_KEY$3; 25021 var EVENT_KEYUP_DATA_API = "keyup" + EVENT_KEY$6 + DATA_API_KEY$3; 25022 var SELECTOR_DATA_TOGGLE$2 = '[data-toggle="dropdown"]'; 25023 var SELECTOR_FORM_CHILD = '.dropdown form'; 25024 var SELECTOR_MENU = '.dropdown-menu'; 25025 var SELECTOR_NAVBAR_NAV = '.navbar-nav'; 25026 var SELECTOR_VISIBLE_ITEMS = '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)'; 25027 var PLACEMENT_TOP = 'top-start'; 25028 var PLACEMENT_TOPEND = 'top-end'; 25029 var PLACEMENT_BOTTOM = 'bottom-start'; 25030 var PLACEMENT_BOTTOMEND = 'bottom-end'; 25031 var PLACEMENT_RIGHT = 'right-start'; 25032 var PLACEMENT_LEFT = 'left-start'; 25033 var Default$5 = { 25034 offset: 0, 25035 flip: true, 25036 boundary: 'scrollParent', 25037 reference: 'toggle', 25038 display: 'dynamic', 25039 popperConfig: null 25040 }; 25041 var DefaultType$5 = { 25042 offset: '(number|string|function)', 25043 flip: 'boolean', 25044 boundary: '(string|element)', 25045 reference: '(string|element)', 25046 display: 'string', 25047 popperConfig: '(null|object)' 25048 }; 25049 /** 25050 * Class definition 25051 */ 25052 25053 var Dropdown = /*#__PURE__*/function () { 25054 function Dropdown(element, config) { 25055 this._element = element; 25056 this._popper = null; 25057 this._config = this._getConfig(config); 25058 this._menu = this._getMenuElement(); 25059 this._inNavbar = this._detectNavbar(); 25060 25061 this._addEventListeners(); 25062 } // Getters 25063 25064 25065 var _proto = Dropdown.prototype; 25066 25067 // Public
25068 _proto.toggle = function toggle() { 25069 if (this._element.disabled || $__default["default"](this._element).hasClass(CLASS_NAME_DISABLED$1)) { 25070 return; 25071 } 25072 25073 var isActive = $__default["default"](this._menu).hasClass(CLASS_NAME_SHOW$5); 25074 25075 Dropdown._clearMenus(); 25076 25077 if (isActive) { 25078 return; 25079 } 25080 25081 this.show(true); 25082 }; 25083 25084 _proto.show = function show(usePopper) { 25085 if (usePopper === void 0) { 25086 usePopper = false; 25087 } 25088 25089 if (this._element.disabled || $__default["default"](this._element).hasClass(CLASS_NAME_DISABLED$1) || $__default["default"](this._menu).hasClass(CLASS_NAME_SHOW$5)) { 25090 return; 25091 } 25092 25093 var relatedTarget = { 25094 relatedTarget: this._element 25095 }; 25096 var showEvent = $__default["default"].Event(EVENT_SHOW$3, relatedTarget); 25097 25098 var parent = Dropdown._getParentFromElement(this._element); 25099 25100 $__default["default"](parent).trigger(showEvent); 25101 25102 if (showEvent.isDefaultPrevented()) { 25103 return; 25104 } // Totally disable Popper for Dropdowns in Navbar 25105 25106 25107 if (!this._inNavbar && usePopper) { 25108 // Check for Popper dependency 25109 if (typeof Popper__default["default"] === 'undefined') { 25110 throw new TypeError('Bootstrap\'s dropdowns require Popper (https://popper.js.org)'); 25111 } 25112 25113 var referenceElement = this._element; 25114 25115 if (this._config.reference === 'parent') { 25116 referenceElement = parent; 25117 } else if (Util.isElement(this._config.reference)) { 25118 referenceElement = this._config.reference; // Check if it's jQuery element 25119 25120 if (typeof this._config.reference.jquery !== 'undefined') { 25121 referenceElement = this._config.reference[0]; 25122 } 25123 } // If boundary is not `scrollParent`, then set position to `static` 25124 // to allow the menu to "escape" the scroll parent's boundaries 25125 // https://github.com/twbs/bootstrap/issues/24251 25126 25127 25128 if (this._config.boundary !== 'scrollParent') { 25129 $__default["default"](parent).addClass(CLASS_NAME_POSITION_STATIC); 25130 } 25131 25132 this._popper = new Popper__default["default"](referenceElement, this._menu, this._getPopperConfig()); 25133 } // If this is a touch-enabled device we add extra 25134 // empty mouseover listeners to the body's immediate children; 25135 // only needed because of broken event delegation on iOS 25136 // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html 25137 25138 25139 if ('ontouchstart' in document.documentElement && $__default["default"](parent).closest(SELECTOR_NAVBAR_NAV).length === 0) { 25140 $__default["default"](document.body).children().on('mouseover', null, $__default["default"].noop); 25141 } 25142 25143 this._element.focus(); 25144 25145 this._element.setAttribute('aria-expanded', true); 25146 25147 $__default["default"](this._menu).toggleClass(CLASS_NAME_SHOW$5); 25148 $__default["default"](parent).toggleClass(CLASS_NAME_SHOW$5).trigger($__default["default"].Event(EVENT_SHOWN$3, relatedTarget)); 25149 }; 25150 25151 _proto.hide = function hide() { 25152 if (this._element.disabled || $__default["default"](this._element).hasClass(CLASS_NAME_DISABLED$1) || !$__default["default"](this._menu).hasClass(CLASS_NAME_SHOW$5)) { 25153 return; 25154 } 25155 25156 var relatedTarget = { 25157 relatedTarget: this._element 25158 }; 25159 var hideEvent = $__default["default"].Event(EVENT_HIDE$3, relatedTarget); 25160 25161 var parent = Dropdown._getParentFromElement(this._element); 25162 25163 $__default["default"](parent).trigger(hideEvent); 25164 25165 if (hideEvent.isDefaultPrevented()) { 25166 return; 25167 } 25168 25169 if (this._popper) { 25170 this._popper.destroy(); 25171 } 25172 25173 $__default["default"](this._menu).toggleClass(CLASS_NAME_SHOW$5); 25174 $__default["default"](parent).toggleClass(CLASS_NAME_SHOW$5).trigger($__default["default"].Event(EVENT_HIDDEN$3, relatedTarget)); 25175 }; 25176 25177 _proto.dispose = function dispose() { 25178 $__default["default"].removeData(this._element, DATA_KEY$6); 25179 $__default["default"](this._element).off(EVENT_KEY$6); 25180 this._element = null; 25181 this._menu = null; 25182 25183 if (this._popper !== null) { 25184 this._popper.destroy(); 25185 25186 this._popper = null; 25187 } 25188 }; 25189
25190 _proto.update = function update() { 25191 this._inNavbar = this._detectNavbar(); 25192 25193 if (this._popper !== null) { 25194 this._popper.scheduleUpdate(); 25195 } 25196 } // Private 25197 ; 25198 25199 _proto._addEventListeners = function _addEventListeners() { 25200 var _this = this; 25201 25202 $__default["default"](this._element).on(EVENT_CLICK, function (event) { 25203 event.preventDefault(); 25204 event.stopPropagation(); 25205 25206 _this.toggle(); 25207 }); 25208 }; 25209 25210 _proto._getConfig = function _getConfig(config) { 25211 config = _extends({}, this.constructor.Default, $__default["default"](this._element).data(), config); 25212 Util.typeCheckConfig(NAME$6, config, this.constructor.DefaultType); 25213 return config; 25214 }; 25215 25216 _proto._getMenuElement = function _getMenuElement() { 25217 if (!this._menu) { 25218 var parent = Dropdown._getParentFromElement(this._element); 25219 25220 if (parent) { 25221 this._menu = parent.querySelector(SELECTOR_MENU); 25222 } 25223 } 25224 25225 return this._menu; 25226 }; 25227 25228 _proto._getPlacement = function _getPlacement() { 25229 var $parentDropdown = $__default["default"](this._element.parentNode); 25230 var placement = PLACEMENT_BOTTOM; // Handle dropup 25231 25232 if ($parentDropdown.hasClass(CLASS_NAME_DROPUP)) { 25233 placement = $__default["default"](this._menu).hasClass(CLASS_NAME_MENURIGHT) ? PLACEMENT_TOPEND : PLACEMENT_TOP; 25234 } else if ($parentDropdown.hasClass(CLASS_NAME_DROPRIGHT)) { 25235 placement = PLACEMENT_RIGHT; 25236 } else if ($parentDropdown.hasClass(CLASS_NAME_DROPLEFT)) { 25237 placement = PLACEMENT_LEFT; 25238 } else if ($__default["default"](this._menu).hasClass(CLASS_NAME_MENURIGHT)) { 25239 placement = PLACEMENT_BOTTOMEND; 25240 } 25241 25242 return placement; 25243 }; 25244 25245 _proto._detectNavbar = function _detectNavbar() { 25246 return $__default["default"](this._element).closest('.navbar').length > 0; 25247 }; 25248 25249 _proto._getOffset = function _getOffset() { 25250 var _this2 = this; 25251 25252 var offset = {}; 25253 25254 if (typeof this._config.offset === 'function') { 25255 offset.fn = function (data) { 25256 data.offsets = _extends({}, data.offsets, _this2._config.offset(data.offsets, _this2._element)); 25257 return data; 25258 }; 25259 } else { 25260 offset.offset = this._config.offset; 25261 } 25262 25263 return offset; 25264 }; 25265 25266 _proto._getPopperConfig = function _getPopperConfig() { 25267 var popperConfig = { 25268 placement: this._getPlacement(), 25269 modifiers: { 25270 offset: this._getOffset(), 25271 flip: { 25272 enabled: this._config.flip 25273 }, 25274 preventOverflow: { 25275 boundariesElement: this._config.boundary 25276 } 25277 } 25278 }; // Disable Popper if we have a static display 25279 25280 if (this._config.display === 'static') { 25281 popperConfig.modifiers.applyStyle = { 25282 enabled: false 25283 }; 25284 } 25285 25286 return _extends({}, popperConfig, this._config.popperConfig); 25287 } // Static 25288 ; 25289 25290 Dropdown._jQueryInterface = function _jQueryInterface(config) { 25291 return this.each(function () { 25292 var data = $__default["default"](this).data(DATA_KEY$6); 25293 25294 var _config = typeof config === 'object' ? config : null; 25295 25296 if (!data) { 25297 data = new Dropdown(this, _config); 25298 $__default["default"](this).data(DATA_KEY$6, data); 25299 } 25300 25301 if (typeof config === 'string') { 25302 if (typeof data[config] === 'undefined') { 25303 throw new TypeError("No method named \"" + config + "\""); 25304 } 25305 25306 data[config](); 25307 } 25308 }); 25309 }; 25310 25311 Dropdown._clearMenus = function _clearMenus(event) { 25312 if (event && (event.which === RIGHT_MOUSE_BUTTON_WHICH || event.type === 'keyup' && event.which !== TAB_KEYCODE)) { 25313 return; 25314 } 25315 25316 var toggles = [].slice.call(document.querySelectorAll(SELECTOR_DATA_TOGGLE$2)); 25317 25318 for (var i = 0, len = toggles.length; i < len; i++) { 25319 var parent = Dropdown._getParentFromElement(toggles[i]); 25320 25321 var context = $__default["default"](toggles[i]).data(DATA_KEY$6); 25322 var relatedTarget = { 25323 relatedTarget: toggles[i] 25324 }; 25325 25326 if (event && event.type === 'click') { 25327 relatedTarget.clickEvent = event; 25328 } 25329 25330 if (!context) { 25331 continue; 25332 } 25333 25334 var dropdownMenu = context._menu; 25335 25336 if (!$__default["default"](parent).hasClass(CLASS_NAME_SHOW$5)) { 25337 continue; 25338 } 25339 25340 if (event && (event.type === 'click' && /input|textarea/i.test(event.target.tagName) || event.type === 'keyup' && event.which === TAB_KEYCODE) && $__default["default"].contains(parent, event.target)) { 25341 continue; 25342 } 25343 25344 var hideEvent = $__default["default"].Event(EVENT_HIDE$3, relatedTarget); 25345 $__default["default"](parent).trigger(hideEvent); 25346 25347 if (hideEvent.isDefaultPrevented()) { 25348 continue; 25349 } // If this is a touch-enabled device we remove the extra 25350 // empty mouseover listeners we added for iOS support 25351 25352 25353 if ('ontouchstart' in document.documentElement) { 25354 $__default["default"](document.body).children().off('mouseover', null, $__default["default"].noop); 25355 } 25356 25357 toggles[i].setAttribute('aria-expanded', 'false'); 25358 25359 if (context._popper) { 25360 context._popper.destroy(); 25361 } 25362 25363 $__default["default"](dropdownMenu).removeClass(CLASS_NAME_SHOW$5); 25364 $__default["default"](parent).removeClass(CLASS_NAME_SHOW$5).trigger($__default["default"].Event(EVENT_HIDDEN$3, relatedTarget)); 25365 } 25366 }; 25367 25368 Dropdown._getParentFromElement = function _getParentFromElement(element) { 25369 var parent; 25370 var selector = Util.getSelectorFromElement(element); 25371 25372 if (selector) { 25373 parent = document.querySelector(selector); 25374 } 25375 25376 return parent || element.parentNode; 25377 } // eslint-disable-next-line complexity 25378 ; 25379 25380 Dropdown._dataApiKeydownHandler = function _dataApiKeydownHandler(event) { 25381 // If not input/textarea: 25382 // - And not a key in REGEXP_KEYDOWN => not a dropdown command 25383 // If input/textarea: 25384 // - If space key => not a dropdown command 25385 // - If key is other than escape 25386 // - If key is not up or down => not a dropdown command 25387 // - If trigger inside the menu =>
25387 not a dropdown command 25388 if (/input|textarea/i.test(event.target.tagName) ? event.which === SPACE_KEYCODE || event.which !== ESCAPE_KEYCODE$1 && (event.which !== ARROW_DOWN_KEYCODE && event.which !== ARROW_UP_KEYCODE || $__default["default"](event.target).closest(SELECTOR_MENU).length) : !REGEXP_KEYDOWN.test(event.which)) { 25389 return; 25390 } 25391 25392 if (this.disabled || $__default["default"](this).hasClass(CLASS_NAME_DISABLED$1)) { 25393 return; 25394 } 25395 25396 var parent = Dropdown._getParentFromElement(this); 25397 25398 var isActive = $__default["default"](parent).hasClass(CLASS_NAME_SHOW$5); 25399 25400 if (!isActive && event.which === ESCAPE_KEYCODE$1) { 25401 return; 25402 } 25403 25404 event.preventDefault(); 25405 event.stopPropagation(); 25406 25407 if (!isActive || event.which === ESCAPE_KEYCODE$1 || event.which === SPACE_KEYCODE) { 25408 if (event.which === ESCAPE_KEYCODE$1) { 25409 $__default["default"](parent.querySelector(SELECTOR_DATA_TOGGLE$2)).trigger('focus'); 25410 } 25411 25412 $__default["default"](this).trigger('click'); 25413 return; 25414 } 25415 25416 var items = [].slice.call(parent.querySelectorAll(SELECTOR_VISIBLE_ITEMS)).filter(function (item) { 25417 return $__default["default"](item).is(':visible'); 25418 }); 25419 25420 if (items.length === 0) { 25421 return; 25422 } 25423 25424 var index = items.indexOf(event.target); 25425 25426 if (event.which === ARROW_UP_KEYCODE && index > 0) { 25427 // Up 25428 index--; 25429 } 25430 25431 if (event.which === ARROW_DOWN_KEYCODE && index < items.length - 1) { 25432 // Down 25433 index++; 25434 } 25435 25436 if (index < 0) { 25437 index = 0; 25438 } 25439 25440 items[index].focus(); 25441 }; 25442 25443 _createClass(Dropdown, null, [{ 25444 key: "VERSION", 25445 get: function get() { 25446 return VERSION$6; 25447 } 25448 }, { 25449 key: "Default", 25450 get: function get() { 25451 return Default$5; 25452 } 25453 }, { 25454 key: "DefaultType", 25455 get: function get() { 25456 return DefaultType$5; 25457 } 25458 }]); 25459 25460 return Dropdown; 25461 }(); 25462 /** 25463 * Data API implementation 25464 */ 25465 25466 25467 $__default["default"](document).on(EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE$2, Dropdown._dataApiKeydownHandler).on(EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown._dataApiKeydownHandler).on(EVENT_CLICK_DATA_API$2 + " " + EVENT_KEYUP_DATA_API, Dropdown._clearMenus).on(EVENT_CLICK_DATA_API$2, SELECTOR_DATA_TOGGLE$2, function (event) { 25468 event.preventDefault(); 25469 event.stopPropagation(); 25470 25471 Dropdown._jQueryInterface.call($__default["default"](this), 'toggle'); 25472 }).on(EVENT_CLICK_DATA_API$2, SELECTOR_FORM_CHILD, function (e) { 25473 e.stopPropagation(); 25474 }); 25475 /** 25476 * jQuery 25477 */ 25478 25479 $__default["default"].fn[NAME$6] = Dropdown._jQueryInterface; 25480 $__default["default"].fn[NAME$6].Constructor = Dropdown; 25481 25482 $__default["default"].fn[NAME$6].noConflict = function () { 25483 $__default["default"].fn[NAME$6] = JQUERY_NO_CONFLICT$6; 25484 return Dropdown._jQueryInterface; 25485 }; 25486 25487 /** 25488 * Constants 25489 */ 25490 25491 var NAME$5 = 'modal'; 25492 var VERSION$5 = '4.6.2'; 25493 var DATA_KEY$5 = 'bs.modal'; 25494 var EVENT_KEY$5 = "." + DATA_KEY$5; 25495 var DATA_API_KEY$2 = '.data-api'; 25496 var JQUERY_NO_CONFLICT$5 = $__default["default"].fn[NAME$5]; 25497 var ESCAPE_KEYCODE = 27; // KeyboardEvent.which value for Escape (Esc) key 25498 25499 var CLASS_NAME_SCROLLABLE = 'modal-dialog-scrollable'; 25500 var CLASS_NAME_SCROLLBAR_MEASURER = 'modal-scrollbar-measure'; 25501 var CLASS_NAME_BACKDROP = 'modal-backdrop'; 25502 var CLASS_NAME_OPEN = 'modal-open'; 25503 var CLASS_NAME_FADE$4 = 'fade'; 25504 var CLASS_NAME_SHOW$4 = 'show'; 25505 var CLASS_NAME_STATIC = 'modal-static'; 25506 var EVENT_HIDE$2 = "hide" + EVENT_KEY$5; 25507 var EVENT_HIDE_PREVENTED = "hidePrevented" + EVENT_KEY$5; 25508 var EVENT_HIDDEN$2 = "hidden" + EVENT_KEY$5; 25509 var EVENT_SHOW$2 = "show" + EVENT_KEY$5; 25510 var EVENT_SHOWN$2 = "shown" + EVENT_KEY$5; 25511 var EVENT_FOCUSIN = "focusin" + EVENT_KEY$5; 25512 var EVENT_RESIZE = "resize" + EVENT_KEY$5; 25513 var EVENT_CLICK_DISMISS$1 = "click.dismiss" + EVENT_KEY$5; 25514 var EVENT_KEYDOWN_DISMISS = "keydown.dismiss" + EVENT_KEY$5; 25515 var EVENT_MOUSEUP_DISMISS = "mouseup.dismiss" + EVENT_KEY$5; 25516 var EVENT_MOUSEDOWN_DISMISS = "mousedown.dismiss" + EVENT_KEY$5; 25517 var EVENT_CLICK_DATA_API$1 = "click" + EVENT_KEY$5 + DATA_API_KEY$2; 25518 var SELECTOR_DIALOG = '.modal-dialog'; 25519 var SELECTOR_MODAL_BODY = '.modal-body'; 25520 var SELECTOR_DATA_TOGGLE$1 = '[data-toggle="modal"]'; 25521 var SELECTOR_DATA_DISMISS$1 = '[data-dismiss="modal"]'; 25522 var SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top'; 25523 var SELECTOR_STICKY_CONTENT = '.sticky-top'; 25524 var Default$4 = { 25525 backdrop: true, 25526 keyboard: true, 25527 focus: true, 25528 show: true 25529 }; 25530 var DefaultType$4 = { 25531 backdrop: '(boolean|string)', 25532 keyboard: 'boolean', 25533 focus: 'boolean', 25534 show: 'boolean' 25535 }; 25536 /** 25537 * Class definition 25538 */ 25539 25540 var Modal = /*#__PURE__*/function () { 25541 function Modal(element, config) { 25542 this._config = this._getConfig(config); 25543 this._element = element; 25544 this._dialog = element.querySelector(SELECTOR_DIALOG); 25545 this._backdrop = null; 25546 this._isShown = false;
25547 this._isBodyOverflowing = false; 25548 this._ignoreBackdropClick = false; 25549 this._isTransitioning = false; 25550 this._scrollbarWidth = 0; 25551 } // Getters 25552 25553 25554 var _proto = Modal.prototype; 25555 25556 // Public 25557 _proto.toggle = function toggle(relatedTarget) { 25558 return this._isShown ? this.hide() : this.show(relatedTarget); 25559 }; 25560 25561 _proto.show = function show(relatedTarget) { 25562 var _this = this; 25563 25564 if (this._isShown || this._isTransitioning) { 25565 return; 25566 } 25567 25568 var showEvent = $__default["default"].Event(EVENT_SHOW$2, { 25569 relatedTarget: relatedTarget 25570 }); 25571 $__default["default"](this._element).trigger(showEvent); 25572 25573 if (showEvent.isDefaultPrevented()) { 25574 return; 25575 } 25576 25577 this._isShown = true; 25578 25579 if ($__default["default"](this._element).hasClass(CLASS_NAME_FADE$4)) { 25580 this._isTransitioning = true; 25581 } 25582 25583 this._checkScrollbar(); 25584 25585 this._setScrollbar(); 25586 25587 this._adjustDialog(); 25588 25589 this._setEscapeEvent(); 25590 25591 this._setResizeEvent(); 25592 25593 $__default["default"](this._element).on(EVENT_CLICK_DISMISS$1, SELECTOR_DATA_DISMISS$1, function (event) { 25594 return _this.hide(event); 25595 }); 25596 $__default["default"](this._dialog).on(EVENT_MOUSEDOWN_DISMISS, function () { 25597 $__default["default"](_this._element).one(EVENT_MOUSEUP_DISMISS, function (event) { 25598 if ($__default["default"](event.target).is(_this._element)) { 25599 _this._ignoreBackdropClick = true; 25600 } 25601 }); 25602 }); 25603 25604 this._showBackdrop(function () { 25605 return _this._showElement(relatedTarget); 25606 }); 25607 }; 25608 25609 _proto.hide = function hide(event) { 25610 var _this2 = this; 25611 25612 if (event) { 25613 event.preventDefault(); 25614 } 25615 25616 if (!this._isShown || this._isTransitioning) { 25617 return; 25618 } 25619 25620 var hideEvent = $__default["default"].Event(EVENT_HIDE$2); 25621 $__default["default"](this._element).trigger(hideEvent); 25622 25623 if (!this._isShown || hideEvent.isDefaultPrevented()) { 25624 return; 25625 } 25626 25627 this._isShown = false; 25628 var transition = $__default["default"](this._element).hasClass(CLASS_NAME_FADE$4); 25629 25630 if (transition) { 25631 this._isTransitioning = true; 25632 } 25633 25634 this._setEscapeEvent(); 25635 25636 this._setResizeEvent(); 25637 25638 $__default["default"](document).off(EVENT_FOCUSIN); 25639 $__default["default"](this._element).removeClass(CLASS_NAME_SHOW$4); 25640 $__default["default"](this._element).off(EVENT_CLICK_DISMISS$1); 25641 $__default["default"](this._dialog).off(EVENT_MOUSEDOWN_DISMISS); 25642 25643 if (transition) { 25644 var transitionDuration = Util.getTransitionDurationFromElement(this._element); 25645 $__default["default"](this._element).one(Util.TRANSITION_END, function (event) { 25646 return _this2._hideModal(event); 25647 }).emulateTransitionEnd(transitionDuration); 25648 } else { 25649 this._hideModal(); 25650 } 25651 }; 25652 25653 _proto.dispose = function dispose() { 25654 [window, this._element, this._dialog].forEach(function (htmlElement) { 25655 return $__default["default"](htmlElement).off(EVENT_KEY$5); 25656 }); 25657 /** 25658 * `document` has 2 events `EVENT_FOCUSIN` and `EVENT_CLICK_DATA_API` 25659 * Do not move `document` in `htmlElements` array 25660 * It will remove `EVENT_CLICK_DATA_API` event that should remain 25661 */ 25662 25663 $__default["default"](document).off(EVENT_FOCUSIN); 25664 $__default["default"].removeData(this._element, DATA_KEY$5); 25665 this._config = null; 25666 this._element = null; 25667 this._dialog = null; 25668 this._backdrop = null; 25669 this._isShown = null; 25670 this._isBodyOverflowing = null; 25671 this._ignoreBackdropClick = null; 25672 this._isTransitioning = null; 25673 this._scrollbarWidth = null; 25674 }; 25675 25676 _proto.handleUpdate = function handleUpdate() { 25677 this._adjustDialog(); 25678 } // Private 25679 ; 25680 25681 _proto._getConfig = function _getConfig(config) { 25682 config = _extends({}, Default$4, config); 25683 Util.typeCheckConfig(NAME$5, config, DefaultType$4); 25684 return config; 25685 }; 25686 25687 _proto._triggerBackdropTransition = function _triggerBackdropTransition() { 25688 var _this3 = this; 25689 25690 var hideEventPrevented = $__default["default"].Event(EVENT_HIDE_PREVENTED); 25691 $__default["default"](this._element).trigger(hideEventPrevented); 25692 25693 if (hideEventPrevented.isDefaultPrevented()) { 25694 return; 25695 } 25696 25697 var isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight; 25698 25699 if (!isModalOverflowing) { 25700 this._element.style.overflowY = 'hidden'; 25701 } 25702 25703 this._element.classList.add(CLASS_NAME_STATIC); 25704 25705 var modalTransitionDuration = Util.getTransitionDurationFromElement(this._dialog); 25706 $__default["default"](this._element).off(Util.TRANSITION_END); 25707 $__default["default"](this._element).one(Util.TRANSITION_END, function () { 25708 _this3._element.classList.remove(CLASS_NAME_STATIC); 25709 25710 if (!isModalOverflowing) { 25711 $__default["default"](_this3._element).one(Util.TRANSITION_END, function () { 25712 _this3._element.style.overflowY = ''; 25713 }).emulateTransitionEnd(_this3._element, modalTransitionDuration); 25714 } 25715 }).emulateTransitionEnd(modalTransitionDuration); 25716 25717 this._element.focus(); 25718 }; 25719 25720 _proto._showElement = function _showElement(relatedTarget) { 25721 var _this4 = this; 25722 25723 var transition = $__default["default"](this._element).hasClass(CLASS_NAME_FADE$4); 25724 var modalBody = this._dialog ? this._dialog.querySelector(SELECTOR_MODAL_BODY) : null; 25725 25726 if (!this._element.parentNode || this._element.parentNode.nodeType !== Node.ELEMENT_NODE) { 25727 // Don't move modal's DOM position 25728 document.body.appendChild(this._element); 25729 } 25730 25731 this._element.style.display = 'block'; 25732 25733 this._element.removeAttribute('aria-hidden'); 25734 25735 this._element.setAttribute('aria-modal', true); 25736 25737 this._element.setAttribute('role', 'dialog'); 25738 25739 if ($__default["default"](this._dialog).hasClass(CLASS_NAME_SCROLLABLE) && modalBody) { 25740 modalBody.scrollTop = 0; 25741 } else { 25742 this._element.scrollTop = 0; 25743 } 25744 25745 if (transition) { 25746 Util.reflow(this._element); 25747 } 25748 25749 $__default["default"](this._element).addClass(CLASS_NAME_SHOW$4); 25750 25751 if (this._config.focus) { 25752 this._enforceFocus(); 25753 } 25754 25755 var shownEvent = $__default["default"].Event(EVENT_SHOWN$2, { 25756 relatedTarget: relatedTarget 25757 }); 25758 25759 var transitionComplete = function transitionComplete() { 25760 if (_this4._config.focus) { 25761 _this4._element.focus(); 25762 } 25763 25764 _this4._isTransitioning = false;
25765 $__default["default"](_this4._element).trigger(shownEvent); 25766 }; 25767 25768 if (transition) { 25769 var transitionDuration = Util.getTransitionDurationFromElement(this._dialog); 25770 $__default["default"](this._dialog).one(Util.TRANSITION_END, transitionComplete).emulateTransitionEnd(transitionDuration); 25771 } else { 25772 transitionComplete(); 25773 } 25774 }; 25775 25776 _proto._enforceFocus = function _enforceFocus() { 25777 var _this5 = this; 25778 25779 $__default["default"](document).off(EVENT_FOCUSIN) // Guard against infinite focus loop 25780 .on(EVENT_FOCUSIN, function (event) { 25781 if (document !== event.target && _this5._element !== event.target && $__default["default"](_this5._element).has(event.target).length === 0) { 25782 _this5._element.focus(); 25783 } 25784 }); 25785 }; 25786 25787 _proto._setEscapeEvent = function _setEscapeEvent() { 25788 var _this6 = this; 25789 25790 if (this._isShown) { 25791 $__default["default"](this._element).on(EVENT_KEYDOWN_DISMISS, function (event) { 25792 if (_this6._config.keyboard && event.which === ESCAPE_KEYCODE) { 25793 event.preventDefault(); 25794 25795 _this6.hide(); 25796 } else if (!_this6._config.keyboard && event.which === ESCAPE_KEYCODE) { 25797 _this6._triggerBackdropTransition(); 25798 } 25799 }); 25800 } else if (!this._isShown) { 25801 $__default["default"](this._element).off(EVENT_KEYDOWN_DISMISS); 25802 } 25803 }; 25804 25805 _proto._setResizeEvent = function _setResizeEvent() { 25806 var _this7 = this; 25807 25808 if (this._isShown) { 25809 $__default["default"](window).on(EVENT_RESIZE, function (event) { 25810 return _this7.handleUpdate(event); 25811 }); 25812 } else { 25813 $__default["default"](window).off(EVENT_RESIZE); 25814 } 25815 }; 25816 25817 _proto._hideModal = function _hideModal() { 25818 var _this8 = this; 25819 25820 this._element.style.display = 'none'; 25821 25822 this._element.setAttribute('aria-hidden', true); 25823 25824 this._element.removeAttribute('aria-modal'); 25825 25826 this._element.removeAttribute('role'); 25827 25828 this._isTransitioning = false; 25829 25830 this._showBackdrop(function () { 25831 $__default["default"](document.body).removeClass(CLASS_NAME_OPEN); 25832 25833 _this8._resetAdjustments(); 25834 25835 _this8._resetScrollbar(); 25836 25837 $__default["default"](_this8._element).trigger(EVENT_HIDDEN$2); 25838 }); 25839 }; 25840 25841 _proto._removeBackdrop = function _removeBackdrop() { 25842 if (this._backdrop) { 25843 $__default["default"](this._backdrop).remove(); 25844 this._backdrop = null; 25845 } 25846 }; 25847 25848 _proto._showBackdrop = function _showBackdrop(callback) { 25849 var _this9 = this; 25850 25851 var animate = $__default["default"](this._element).hasClass(CLASS_NAME_FADE$4) ? CLASS_NAME_FADE$4 : ''; 25852 25853 if (this._isShown && this._config.backdrop) { 25854 this._backdrop = document.createElement('div'); 25855 this._backdrop.className = CLASS_NAME_BACKDROP; 25856 25857 if (animate) { 25858 this._backdrop.classList.add(animate); 25859 } 25860 25861 $__default["default"](this._backdrop).appendTo(document.body); 25862 $__default["default"](this._element).on(EVENT_CLICK_DISMISS$1, function (event) { 25863 if (_this9._ignoreBackdropClick) { 25864 _this9._ignoreBackdropClick = false; 25865 return; 25866 } 25867 25868 if (event.target !== event.currentTarget) { 25869 return; 25870 } 25871 25872 if (_this9._config.backdrop === 'static') { 25873 _this9._triggerBackdropTransition(); 25874 } else { 25875 _this9.hide(); 25876 } 25877 }); 25878 25879 if (animate) { 25880 Util.reflow(this._backdrop); 25881 } 25882 25883 $__default["default"](this._backdrop).addClass(CLASS_NAME_SHOW$4); 25884 25885 if (!callback) { 25886 return; 25887 } 25888 25889 if (!animate) { 25890 callback(); 25891 return; 25892 } 25893 25894 var backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop); 25895 $__default["default"](this._backdrop).one(Util.TRANSITION_END, callback).emulateTransitionEnd(backdropTransitionDuration); 25896 } else if (!this._isShown && this._backdrop) { 25897 $__default["default"](this._backdrop).removeClass(CLASS_NAME_SHOW$4); 25898 25899 var callbackRemove = function callbackRemove() { 25900 _this9._removeBackdrop(); 25901 25902 if (callback) { 25903 callback(); 25904 } 25905 }; 25906 25907 if ($__default["default"](this._element).hasClass(CLASS_NAME_FADE$4)) { 25908 var _backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop); 25909 25910 $__default["default"](this._backdrop).one(Util.TRANSITION_END, callbackRemove).emulateTransitionEnd(_backdropTransitionDuration); 25911 } else { 25912 callbackRemove(); 25913 } 25914 } else if (callback) { 25915 callback(); 25916 } 25917 } // ---------------------------------------------------------------------- 25918 // the following methods are used to handle overflowing modals 25919 // todo (fat): these should probably be refactored out of modal.js 25920 // ---------------------------------------------------------------------- 25921 ; 25922
25923 _proto._adjustDialog = function _adjustDialog() { 25924 var isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight; 25925 25926 if (!this._isBodyOverflowing && isModalOverflowing) { 25927 this._element.style.paddingLeft = this._scrollbarWidth + "px"; 25928 } 25929 25930 if (this._isBodyOverflowing && !isModalOverflowing) { 25931 this._element.style.paddingRight = this._scrollbarWidth + "px"; 25932 } 25933 }; 25934 25935 _proto._resetAdjustments = function _resetAdjustments() { 25936 this._element.style.paddingLeft = ''; 25937 this._element.style.paddingRight = ''; 25938 }; 25939 25940 _proto._checkScrollbar = function _checkScrollbar() { 25941 var rect = document.body.getBoundingClientRect(); 25942 this._isBodyOverflowing = Math.round(rect.left + rect.right) < window.innerWidth; 25943 this._scrollbarWidth = this._getScrollbarWidth(); 25944 }; 25945 25946 _proto._setScrollbar = function _setScrollbar() { 25947 var _this10 = this; 25948 25949 if (this._isBodyOverflowing) { 25950 // Note: DOMNode.style.paddingRight returns the actual value or '' if not set 25951 // while $(DOMNode).css('padding-right') returns the calculated value or 0 if not set 25952 var fixedContent = [].slice.call(document.querySelectorAll(SELECTOR_FIXED_CONTENT)); 25953 var stickyContent = [].slice.call(document.querySelectorAll(SELECTOR_STICKY_CONTENT)); // Adjust fixed content padding 25954 25955 $__default["default"](fixedContent).each(function (index, element) { 25956 var actualPadding = element.style.paddingRight; 25957 var calculatedPadding = $__default["default"](element).css('padding-right'); 25958 $__default["default"](element).data('padding-right', actualPadding).css('padding-right', parseFloat(calculatedPadding) + _this10._scrollbarWidth + "px"); 25959 }); // Adjust sticky content margin 25960 25961 $__default["default"](stickyContent).each(function (index, element) { 25962 var actualMargin = element.style.marginRight; 25963 var calculatedMargin = $__default["default"](element).css('margin-right'); 25964 $__default["default"](element).data('margin-right', actualMargin).css('margin-right', parseFloat(calculatedMargin) - _this10._scrollbarWidth + "px"); 25965 }); // Adjust body padding 25966 25967 var actualPadding = document.body.style.paddingRight; 25968 var calculatedPadding = $__default["default"](document.body).css('padding-right'); 25969 $__default["default"](document.body).data('padding-right', actualPadding).css('padding-right', parseFloat(calculatedPadding) + this._scrollbarWidth + "px"); 25970 } 25971 25972 $__default["default"](document.body).addClass(CLASS_NAME_OPEN); 25973 }; 25974 25975 _proto._resetScrollbar = function _resetScrollbar() { 25976 // Restore fixed content padding 25977 var fixedContent = [].slice.call(document.querySelectorAll(SELECTOR_FIXED_CONTENT)); 25978 $__default["default"](fixedContent).each(function (index, element) { 25979 var padding = $__default["default"](element).data('padding-right'); 25980 $__default["default"](element).removeData('padding-right'); 25981 element.style.paddingRight = padding ? padding : ''; 25982 }); // Restore sticky content 25983 25984 var elements = [].slice.call(document.querySelectorAll("" + SELECTOR_STICKY_CONTENT)); 25985 $__default["default"](elements).each(function (index, element) { 25986 var margin = $__default["default"](element).data('margin-right'); 25987 25988 if (typeof margin !== 'undefined') { 25989 $__default["default"](element).css('margin-right', margin).removeData('margin-right'); 25990 } 25991 }); // Restore body padding 25992 25993 var padding = $__default["default"](document.body).data('padding-right'); 25994 $__default["default"](document.body).removeData('padding-right'); 25995 document.body.style.paddingRight = padding ? padding : ''; 25996 }; 25997 25998 _proto._getScrollbarWidth = function _getScrollbarWidth() { 25999 // thx d.walsh 26000 var scrollDiv = document.createElement('div'); 26001 scrollDiv.className = CLASS_NAME_SCROLLBAR_MEASURER; 26002 document.body.appendChild(scrollDiv); 26003 var scrollbarWidth = scrollDiv.getBoundingClientRect().width - scrollDiv.clientWidth; 26004 document.body.removeChild(scrollDiv); 26005 return scrollbarWidth; 26006 } // Static 26007 ; 26008 26009 Modal._jQueryInterface = function _jQueryInterface(config, relatedTarget) { 26010 return this.each(function () { 26011 var data = $__default["default"](this).data(DATA_KEY$5); 26012 26013 var _config = _extends({}, Default$4, $__default["default"](this).data(), typeof config === 'object' && config ? config : {}); 26014 26015 if (!data) { 26016 data = new Modal(this, _config); 26017 $__default["default"](this).data(DATA_KEY$5, data); 26018 } 26019 26020 if (typeof config === 'string') { 26021 if (typeof data[config] === 'undefined') {
26022 throw new TypeError("No method named \"" + config + "\""); 26023 } 26024 26025 data[config](relatedTarget); 26026 } else if (_config.show) { 26027 data.show(relatedTarget); 26028 } 26029 }); 26030 }; 26031 26032 _createClass(Modal, null, [{ 26033 key: "VERSION", 26034 get: function get() { 26035 return VERSION$5; 26036 } 26037 }, { 26038 key: "Default", 26039 get: function get() { 26040 return Default$4; 26041 } 26042 }]); 26043 26044 return Modal; 26045 }(); 26046 /** 26047 * Data API implementation 26048 */ 26049 26050 26051 $__default["default"](document).on(EVENT_CLICK_DATA_API$1, SELECTOR_DATA_TOGGLE$1, function (event) { 26052 var _this11 = this; 26053 26054 var target; 26055 var selector = Util.getSelectorFromElement(this); 26056 26057 if (selector) { 26058 target = document.querySelector(selector); 26059 } 26060 26061 var config = $__default["default"](target).data(DATA_KEY$5) ? 'toggle' : _extends({}, $__default["default"](target).data(), $__default["default"](this).data()); 26062 26063 if (this.tagName === 'A' || this.tagName === 'AREA') { 26064 event.preventDefault(); 26065 } 26066 26067 var $target = $__default["default"](target).one(EVENT_SHOW$2, function (showEvent) { 26068 if (showEvent.isDefaultPrevented()) { 26069 // Only register focus restorer if modal will actually get shown 26070 return; 26071 } 26072 26073 $target.one(EVENT_HIDDEN$2, function () { 26074 if ($__default["default"](_this11).is(':visible')) { 26075 _this11.focus(); 26076 } 26077 }); 26078 }); 26079 26080 Modal._jQueryInterface.call($__default["default"](target), config, this); 26081 }); 26082 /** 26083 * jQuery 26084 */ 26085 26086 $__default["default"].fn[NAME$5] = Modal._jQueryInterface; 26087 $__default["default"].fn[NAME$5].Constructor = Modal; 26088 26089 $__default["default"].fn[NAME$5].noConflict = function () { 26090 $__default["default"].fn[NAME$5] = JQUERY_NO_CONFLICT$5; 26091 return Modal._jQueryInterface; 26092 }; 26093 26094 /** 26095 * -------------------------------------------------------------------------- 26096 * Bootstrap (v4.6.2): tools/sanitizer.js 26097 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 26098 * -------------------------------------------------------------------------- 26099 */ 26100 var uriAttrs = ['background', 'cite', 'href', 'itemtype', 'longdesc', 'poster', 'src', 'xlink:href']; 26101 var ARIA_ATTRIBUTE_PATTERN = /^aria-[\w-]*$/i; 26102 var DefaultWhitelist = { 26103 // Global attributes allowed on any supplied element below. 26104 '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN], 26105 a: ['target', 'href', 'title', 'rel'], 26106 area: [], 26107 b: [], 26108 br: [], 26109 col: [], 26110 code: [], 26111 div: [], 26112 em: [], 26113 hr: [], 26114 h1: [], 26115 h2: [], 26116 h3: [], 26117 h4: [], 26118 h5: [], 26119 h6: [], 26120 i: [], 26121 img: ['src', 'srcset', 'alt', 'title', 'width', 'height'], 26122 li: [], 26123 ol: [], 26124 p: [], 26125 pre: [], 26126 s: [], 26127 small: [], 26128 span: [], 26129 sub: [], 26130 sup: [], 26131 strong: [], 26132 u: [], 26133 ul: [] 26134 }; 26135 /** 26136 * A pattern that recognizes a commonly useful subset of URLs that are safe. 26137 * 26138 * Shoutout to Angular https://github.com/angular/angular/blob/12.2.x/packages/core/src/sanitization/url_sanitizer.ts 26139 */ 26140 26141 var SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file|sms):|[^#&/:?]*(?:[#/?]|$))/i; 26142 /** 26143 * A pattern that matches safe data URLs. Only matches image, video and audio types. 26144 * 26145 * Shoutout to Angular https://github.com/angular/angular/blob/12.2.x/packages/core/src/sanitization/url_sanitizer.ts 26146 */ 26147 26148 var DATA_URL_PATTERN = /^data:(?:image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\/(?:mpeg|mp4|ogg|webm)|audio\/(?:mp3|oga|ogg|opus));base64,[\d+/a-z]+=*$/i; 26149 26150 function allowedAttribute(attr, allowedAttributeList) { 26151 var attrName = attr.nodeName.toLowerCase(); 26152 26153 if (allowedAttributeList.indexOf(attrName) !== -1) { 26154 if (uriAttrs.indexOf(attrName) !== -1) { 26155 return Boolean(SAFE_URL_PATTERN.test(attr.nodeValue) || DATA_URL_PATTERN.test(attr.nodeValue)); 26156 } 26157 26158 return true; 26159 } 26160 26161 var regExp = allowedAttributeList.filter(function (attrRegex) { 26162 return attrRegex instanceof RegExp; 26163 }); // Check if a regular expression validates the attribute. 26164 26165 for (var i = 0, len = regExp.length; i < len; i++) { 26166 if (regExp[i].test(attrName)) { 26167 return true; 26168 } 26169 } 26170 26171 return false;
26172 } 26173 26174 function sanitizeHtml(unsafeHtml, whiteList, sanitizeFn) { 26175 if (unsafeHtml.length === 0) { 26176 return unsafeHtml; 26177 } 26178 26179 if (sanitizeFn && typeof sanitizeFn === 'function') { 26180 return sanitizeFn(unsafeHtml); 26181 } 26182 26183 var domParser = new window.DOMParser(); 26184 var createdDocument = domParser.parseFromString(unsafeHtml, 'text/html'); 26185 var whitelistKeys = Object.keys(whiteList); 26186 var elements = [].slice.call(createdDocument.body.querySelectorAll('*')); 26187 26188 var _loop = function _loop(i, len) { 26189 var el = elements[i]; 26190 var elName = el.nodeName.toLowerCase(); 26191 26192 if (whitelistKeys.indexOf(el.nodeName.toLowerCase()) === -1) { 26193 el.parentNode.removeChild(el); 26194 return "continue"; 26195 } 26196 26197 var attributeList = [].slice.call(el.attributes); // eslint-disable-next-line unicorn/prefer-spread 26198 26199 var whitelistedAttributes = [].concat(whiteList['*'] || [], whiteList[elName] || []); 26200 attributeList.forEach(function (attr) { 26201 if (!allowedAttribute(attr, whitelistedAttributes)) { 26202 el.removeAttribute(attr.nodeName); 26203 } 26204 }); 26205 }; 26206 26207 for (var i = 0, len = elements.length; i < len; i++) { 26208 var _ret = _loop(i); 26209 26210 if (_ret === "continue") continue; 26211 } 26212 26213 return createdDocument.body.innerHTML; 26214 } 26215 26216 /** 26217 * Constants 26218 */ 26219 26220 var NAME$4 = 'tooltip'; 26221 var VERSION$4 = '4.6.2'; 26222 var DATA_KEY$4 = 'bs.tooltip'; 26223 var EVENT_KEY$4 = "." + DATA_KEY$4; 26224 var JQUERY_NO_CONFLICT$4 = $__default["default"].fn[NAME$4]; 26225 var CLASS_PREFIX$1 = 'bs-tooltip'; 26226 var BSCLS_PREFIX_REGEX$1 = new RegExp("(^|\\s)" + CLASS_PREFIX$1 + "\\S+", 'g'); 26227 var DISALLOWED_ATTRIBUTES = ['sanitize', 'whiteList', 'sanitizeFn']; 26228 var CLASS_NAME_FADE$3 = 'fade'; 26229 var CLASS_NAME_SHOW$3 = 'show'; 26230 var HOVER_STATE_SHOW = 'show'; 26231 var HOVER_STATE_OUT = 'out'; 26232 var SELECTOR_TOOLTIP_INNER = '.tooltip-inner'; 26233 var SELECTOR_ARROW = '.arrow'; 26234 var TRIGGER_HOVER = 'hover'; 26235 var TRIGGER_FOCUS = 'focus'; 26236 var TRIGGER_CLICK = 'click'; 26237 var TRIGGER_MANUAL = 'manual'; 26238 var AttachmentMap = { 26239 AUTO: 'auto', 26240 TOP: 'top', 26241 RIGHT: 'right', 26242 BOTTOM: 'bottom', 26243 LEFT: 'left' 26244 }; 26245 var Default$3 = { 26246 animation: true, 26247 template: '<div class="tooltip" role="tooltip">' + '<div class="arrow"></div>' + '<div class="tooltip-inner"></div></div>', 26248 trigger: 'hover focus', 26249 title: '', 26250 delay: 0, 26251 html: false, 26252 selector: false, 26253 placement: 'top', 26254 offset: 0, 26255 container: false, 26256 fallbackPlacement: 'flip', 26257 boundary: 'scrollParent', 26258 customClass: '', 26259 sanitize: true, 26260 sanitizeFn: null, 26261 whiteList: DefaultWhitelist, 26262 popperConfig: null 26263 }; 26264 var DefaultType$3 = { 26265 animation: 'boolean', 26266 template: 'string', 26267 title: '(string|element|function)', 26268 trigger: 'string', 26269 delay: '(number|object)', 26270 html: 'boolean', 26271 selector: '(string|boolean)', 26272 placement: '(string|function)', 26273 offset: '(number|string|function)', 26274 container: '(string|element|boolean)', 26275 fallbackPlacement: '(string|array)', 26276 boundary: '(string|element)', 26277 customClass: '(string|function)', 26278 sanitize: 'boolean', 26279 sanitizeFn: '(null|function)', 26280 whiteList: 'object', 26281 popperConfig: '(null|object)' 26282 }; 26283 var Event$1 = { 26284 HIDE: "hide" + EVENT_KEY$4, 26285 HIDDEN: "hidden" + EVENT_KEY$4, 26286 SHOW: "show" + EVENT_KEY$4, 26287 SHOWN: "shown" + EVENT_KEY$4, 26288 INSERTED: "inserted" + EVENT_KEY$4, 26289 CLICK: "click" + EVENT_KEY$4, 26290 FOCUSIN: "focusin" + EVENT_KEY$4, 26291 FOCUSOUT: "focusout" + EVENT_KEY$4, 26292 MOUSEENTER: "mouseenter" + EVENT_KEY$4, 26293 MOUSELEAVE: "mouseleave" + EVENT_KEY$4 26294 }; 26295 /** 26296 * Class definition 26297 */ 26298 26299 var Tooltip = /*#__PURE__*/function () { 26300 function Tooltip(element, config) { 26301 if (typeof Popper__default["default"] === 'undefined') { 26302 throw new TypeError('Bootstrap\'s tooltips require Popper (https://popper.js.org)'); 26303 } // Private 26304 26305 26306 this._isEnabled = true; 26307 this._timeout = 0; 26308 this._hoverState = ''; 26309 this._activeTrigger = {}; 26310 this._popper = null; // Protected 26311 26312 this.element = element; 26313 this.config = this._getConfig(config); 26314 this.tip = null; 26315 26316 this._setListeners(); 26317 } // Getters 26318 26319 26320 var _proto = Tooltip.prototype; 26321 26322 // Public 26323 _proto.enable = function enable() { 26324 this._isEnabled = true; 26325 }; 26326 26327 _proto.disable = function disable() { 26328 this._isEnabled = false;
26329 }; 26330 26331 _proto.toggleEnabled = function toggleEnabled() { 26332 this._isEnabled = !this._isEnabled; 26333 }; 26334 26335 _proto.toggle = function toggle(event) { 26336 if (!this._isEnabled) { 26337 return; 26338 } 26339 26340 if (event) { 26341 var dataKey = this.constructor.DATA_KEY; 26342 var context = $__default["default"](event.currentTarget).data(dataKey); 26343 26344 if (!context) { 26345 context = new this.constructor(event.currentTarget, this._getDelegateConfig()); 26346 $__default["default"](event.currentTarget).data(dataKey, context); 26347 } 26348 26349 context._activeTrigger.click = !context._activeTrigger.click; 26350 26351 if (context._isWithActiveTrigger()) { 26352 context._enter(null, context); 26353 } else { 26354 context._leave(null, context); 26355 } 26356 } else { 26357 if ($__default["default"](this.getTipElement()).hasClass(CLASS_NAME_SHOW$3)) { 26358 this._leave(null, this); 26359 26360 return; 26361 } 26362 26363 this._enter(null, this); 26364 } 26365 }; 26366 26367 _proto.dispose = function dispose() { 26368 clearTimeout(this._timeout); 26369 $__default["default"].removeData(this.element, this.constructor.DATA_KEY); 26370 $__default["default"](this.element).off(this.constructor.EVENT_KEY); 26371 $__default["default"](this.element).closest('.modal').off('hide.bs.modal', this._hideModalHandler); 26372 26373 if (this.tip) { 26374 $__default["default"](this.tip).remove(); 26375 } 26376 26377 this._isEnabled = null; 26378 this._timeout = null; 26379 this._hoverState = null; 26380 this._activeTrigger = null; 26381 26382 if (this._popper) { 26383 this._popper.destroy(); 26384 } 26385 26386 this._popper = null; 26387 this.element = null; 26388 this.config = null; 26389 this.tip = null; 26390 }; 26391 26392 _proto.show = function show() { 26393 var _this = this; 26394 26395 if ($__default["default"](this.element).css('display') === 'none') { 26396 throw new Error('Please use show on visible elements'); 26397 } 26398 26399 var showEvent = $__default["default"].Event(this.constructor.Event.SHOW); 26400 26401 if (this.isWithContent() && this._isEnabled) { 26402 $__default["default"](this.element).trigger(showEvent); 26403 var shadowRoot = Util.findShadowRoot(this.element); 26404 var isInTheDom = $__default["default"].contains(shadowRoot !== null ? shadowRoot : this.element.ownerDocument.documentElement, this.element); 26405 26406 if (showEvent.isDefaultPrevented() || !isInTheDom) { 26407 return; 26408 } 26409 26410 var tip = this.getTipElement(); 26411 var tipId = Util.getUID(this.constructor.NAME);
26412 tip.setAttribute('id', tipId); 26413 this.element.setAttribute('aria-describedby', tipId); 26414 this.setContent(); 26415 26416 if (this.config.animation) { 26417 $__default["default"](tip).addClass(CLASS_NAME_FADE$3); 26418 } 26419 26420 var placement = typeof this.config.placement === 'function' ? this.config.placement.call(this, tip, this.element) : this.config.placement; 26421 26422 var attachment = this._getAttachment(placement); 26423 26424 this.addAttachmentClass(attachment); 26425 26426 var container = this._getContainer(); 26427 26428 $__default["default"](tip).data(this.constructor.DATA_KEY, this); 26429 26430 if (!$__default["default"].contains(this.element.ownerDocument.documentElement, this.tip)) { 26431 $__default["default"](tip).appendTo(container); 26432 } 26433 26434 $__default["default"](this.element).trigger(this.constructor.Event.INSERTED); 26435 this._popper = new Popper__default["default"](this.element, tip, this._getPopperConfig(attachment)); 26436 $__default["default"](tip).addClass(CLASS_NAME_SHOW$3); 26437 $__default["default"](tip).addClass(this.config.customClass); // If this is a touch-enabled device we add extra 26438 // empty mouseover listeners to the body's immediate children; 26439 // only needed because of broken event delegation on iOS 26440 // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html 26441 26442 if ('ontouchstart' in document.documentElement) { 26443 $__default["default"](document.body).children().on('mouseover', null, $__default["default"].noop); 26444 } 26445 26446 var complete = function complete() { 26447 if (_this.config.animation) { 26448 _this._fixTransition(); 26449 } 26450 26451 var prevHoverState = _this._hoverState; 26452 _this._hoverState = null; 26453 $__default["default"](_this.element).trigger(_this.constructor.Event.SHOWN); 26454 26455 if (prevHoverState === HOVER_STATE_OUT) { 26456 _this._leave(null, _this); 26457 } 26458 }; 26459 26460 if ($__default["default"](this.tip).hasClass(CLASS_NAME_FADE$3)) { 26461 var transitionDuration = Util.getTransitionDurationFromElement(this.tip); 26462 $__default["default"](this.tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration); 26463 } else { 26464 complete(); 26465 } 26466 } 26467 }; 26468 26469 _proto.hide = function hide(callback) { 26470 var _this2 = this; 26471 26472 var tip = this.getTipElement(); 26473 var hideEvent = $__default["default"].Event(this.constructor.Event.HIDE); 26474 26475 var complete = function complete() { 26476 if (_this2._hoverState !== HOVER_STATE_SHOW && tip.parentNode) { 26477 tip.parentNode.removeChild(tip); 26478 } 26479 26480 _this2._cleanTipClass(); 26481 26482 _this2.element.removeAttribute('aria-describedby'); 26483 26484 $__default["default"](_this2.element).trigger(_this2.constructor.Event.HIDDEN); 26485 26486 if (_this2._popper !== null) { 26487 _this2._popper.destroy(); 26488 } 26489 26490 if (callback) { 26491 callback(); 26492 } 26493 }; 26494 26495 $__default["default"](this.element).trigger(hideEvent); 26496 26497 if (hideEvent.isDefaultPrevented()) { 26498 return; 26499 } 26500 26501 $__default["default"](tip).removeClass(CLASS_NAME_SHOW$3); // If this is a touch-enabled device we remove the extra 26502 // empty mouseover listeners we added for iOS support 26503 26504 if ('ontouchstart' in document.documentElement) { 26505 $__default["default"](document.body).children().off('mouseover', null, $__default["default"].noop); 26506 } 26507 26508 this._activeTrigger[TRIGGER_CLICK] = false; 26509 this._activeTrigger[TRIGGER_FOCUS] = false; 26510 this._activeTrigger[TRIGGER_HOVER] = false; 26511 26512 if ($__default["default"](this.tip).hasClass(CLASS_NAME_FADE$3)) { 26513 var transitionDuration = Util.getTransitionDurationFromElement(tip); 26514 $__default["default"](tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration); 26515 } else { 26516 complete(); 26517 } 26518 26519 this._hoverState = ''; 26520 }; 26521 26522 _proto.update = function update() { 26523 if (this._popper !== null) { 26524 this._popper.scheduleUpdate(); 26525 } 26526 } // Protected 26527 ; 26528 26529 _proto.isWithContent = function isWithContent() { 26530 return Boolean(this.getTitle()); 26531 }; 26532 26533 _proto.addAttachmentClass = function addAttachmentClass(attachment) { 26534 $__default["default"](this.getTipElement()).addClass(CLASS_PREFIX$1 + "-" + attachment); 26535 }; 26536 26537 _proto.getTipElement = function getTipElement() { 26538 this.tip = this.tip || $__default["default"](this.config.template)[0]; 26539 return this.tip; 26540 }; 26541 26542 _proto.setContent = function setContent() { 26543 var tip = this.getTipElement(); 26544 this.setElementContent($__default["default"](tip.querySelectorAll(SELECTOR_TOOLTIP_INNER)), this.getTitle()); 26545 $__default["default"](tip).removeClass(CLASS_NAME_FADE$3 + " " + CLASS_NAME_SHOW$3); 26546 }; 26547 26548 _proto.setElementContent = function setElementContent($element, content) { 26549 if (typeof content === 'object' && (content.nodeType || content.jquery)) { 26550 // Content is a DOM node or a jQuery 26551 if (this.config.html) { 26552 if (!$__default["default"](content).parent().is($element)) { 26553 $element.empty().append(content); 26554 } 26555 } else { 26556 $element.text($__default["default"](content).text()); 26557 } 26558 26559 return; 26560 } 26561 26562 if (this.config.html) { 26563 if (this.config.sanitize) { 26564 content = sanitizeHtml(content, this.config.whiteList, this.config.sanitizeFn); 26565 } 26566 26567 $element.html(content); 26568 } else { 26569 $element.text(content); 26570 } 26571 }; 26572 26573 _proto.getTitle = function getTitle() { 26574 var title = this.element.getAttribute('data-original-title'); 26575 26576 if (!title) { 26577 title = typeof this.config.title === 'function' ? this.config.title.call(this.element) : this.config.title; 26578 } 26579 26580 return title; 26581 } // Private 26582 ; 26583 26584 _proto._getPopperConfig = function _getPopperConfig(attachment) { 26585 var _this3 = this; 26586 26587 var defaultBsConfig = { 26588 placement: attachment, 26589 modifiers: { 26590 offset: this._getOffset(), 26591 flip: { 26592 behavior: this.config.fallbackPlacement 26593 }, 26594 arrow: { 26595 element: SELECTOR_ARROW 26596 }, 26597 preventOverflow: {
26598 boundariesElement: this.config.boundary 26599 } 26600 }, 26601 onCreate: function onCreate(data) { 26602 if (data.originalPlacement !== data.placement) { 26603 _this3._handlePopperPlacementChange(data); 26604 } 26605 }, 26606 onUpdate: function onUpdate(data) { 26607 return _this3._handlePopperPlacementChange(data); 26608 } 26609 }; 26610 return _extends({}, defaultBsConfig, this.config.popperConfig); 26611 }; 26612 26613 _proto._getOffset = function _getOffset() { 26614 var _this4 = this; 26615 26616 var offset = {}; 26617 26618 if (typeof this.config.offset === 'function') { 26619 offset.fn = function (data) { 26620 data.offsets = _extends({}, data.offsets, _this4.config.offset(data.offsets, _this4.element)); 26621 return data; 26622 }; 26623 } else { 26624 offset.offset = this.config.offset; 26625 } 26626 26627 return offset; 26628 }; 26629 26630 _proto._getContainer = function _getContainer() { 26631 if (this.config.container === false) { 26632 return document.body; 26633 } 26634 26635 if (Util.isElement(this.config.container)) { 26636 return $__default["default"](this.config.container); 26637 } 26638 26639 return $__default["default"](document).find(this.config.container); 26640 }; 26641 26642 _proto._getAttachment = function _getAttachment(placement) { 26643 return AttachmentMap[placement.toUpperCase()]; 26644 }; 26645 26646 _proto._setListeners = function _setListeners() { 26647 var _this5 = this; 26648 26649 var triggers = this.config.trigger.split(' '); 26650 triggers.forEach(function (trigger) { 26651 if (trigger === 'click') { 26652 $__default["default"](_this5.element).on(_this5.constructor.Event.CLICK, _this5.config.selector, function (event) { 26653 return _this5.toggle(event); 26654 }); 26655 } else if (trigger !== TRIGGER_MANUAL) { 26656 var eventIn = trigger === TRIGGER_HOVER ? _this5.constructor.Event.MOUSEENTER : _this5.constructor.Event.FOCUSIN; 26657 var eventOut = trigger === TRIGGER_HOVER ? _this5.constructor.Event.MOUSELEAVE : _this5.constructor.Event.FOCUSOUT; 26658 $__default["default"](_this5.element).on(eventIn, _this5.config.selector, function (event) { 26659 return _this5._enter(event); 26660 }).on(eventOut, _this5.config.selector, function (event) { 26661 return _this5._leave(event); 26662 }); 26663 } 26664 }); 26665 26666 this._hideModalHandler = function () { 26667 if (_this5.element) { 26668 _this5.hide(); 26669 } 26670 }; 26671 26672 $__default["default"](this.element).closest('.modal').on('hide.bs.modal', this._hideModalHandler); 26673 26674 if (this.config.selector) { 26675 this.config = _extends({}, this.config, { 26676 trigger: 'manual', 26677 selector: '' 26678 }); 26679 } else { 26680 this._fixTitle(); 26681 } 26682 }; 26683 26684 _proto._fixTitle = function _fixTitle() { 26685 var titleType = typeof this.element.getAttribute('data-original-title'); 26686 26687 if (this.element.getAttribute('title') || titleType !== 'string') { 26688 this.element.setAttribute('data-original-title', this.element.getAttribute('title') || ''); 26689 this.element.setAttribute('title', ''); 26690 } 26691 }; 26692 26693 _proto._enter = function _enter(event, context) { 26694 var dataKey = this.constructor.DATA_KEY; 26695 context = context || $__default["default"](event.currentTarget).data(dataKey); 26696 26697 if (!context) { 26698 context = new this.constructor(event.currentTarget, this._getDelegateConfig()); 26699 $__default["default"](event.currentTarget).data(dataKey, context); 26700 } 26701 26702 if (event) { 26703 context._activeTrigger[event.type === 'focusin' ? TRIGGER_FOCUS : TRIGGER_HOVER] = true; 26704 } 26705 26706 if ($__default["default"](context.getTipElement()).hasClass(CLASS_NAME_SHOW$3) || context._hoverState === HOVER_STATE_SHOW) { 26707 context._hoverState = HOVER_STATE_SHOW; 26708 return; 26709 } 26710 26711 clearTimeout(context._timeout); 26712 context._hoverState = HOVER_STATE_SHOW; 26713 26714 if (!context.config.delay || !context.config.delay.show) { 26715 context.show(); 26716 return; 26717 } 26718 26719 context._timeout = setTimeout(function () { 26720 if (context._hoverState === HOVER_STATE_SHOW) { 26721 context.show(); 26722 } 26723 }, context.config.delay.show); 26724 }; 26725 26726 _proto._leave = function _leave(event, context) { 26727 var dataKey = this.constructor.DATA_KEY; 26728 context = context || $__default["default"](event.currentTarget).data(dataKey); 26729 26730 if (!context) { 26731 context = new this.constructor(event.currentTarget, this._getDelegateConfig()); 26732 $__default["default"](event.currentTarget).data(dataKey, context); 26733 } 26734 26735 if (event) { 26736 context._activeTrigger[event.type === 'focusout' ? TRIGGER_FOCUS : TRIGGER_HOVER] = false;
26737 } 26738 26739 if (context._isWithActiveTrigger()) { 26740 return; 26741 } 26742 26743 clearTimeout(context._timeout); 26744 context._hoverState = HOVER_STATE_OUT; 26745 26746 if (!context.config.delay || !context.config.delay.hide) { 26747 context.hide(); 26748 return; 26749 } 26750 26751 context._timeout = setTimeout(function () { 26752 if (context._hoverState === HOVER_STATE_OUT) { 26753 context.hide(); 26754 } 26755 }, context.config.delay.hide); 26756 }; 26757 26758 _proto._isWithActiveTrigger = function _isWithActiveTrigger() { 26759 for (var trigger in this._activeTrigger) { 26760 if (this._activeTrigger[trigger]) { 26761 return true; 26762 } 26763 } 26764 26765 return false; 26766 }; 26767 26768 _proto._getConfig = function _getConfig(config) { 26769 var dataAttributes = $__default["default"](this.element).data(); 26770 Object.keys(dataAttributes).forEach(function (dataAttr) { 26771 if (DISALLOWED_ATTRIBUTES.indexOf(dataAttr) !== -1) { 26772 delete dataAttributes[dataAttr]; 26773 } 26774 }); 26775 config = _extends({}, this.constructor.Default, dataAttributes, typeof config === 'object' && config ? config : {}); 26776 26777 if (typeof config.delay === 'number') { 26778 config.delay = { 26779 show: config.delay, 26780 hide: config.delay 26781 }; 26782 } 26783 26784 if (typeof config.title === 'number') { 26785 config.title = config.title.toString(); 26786 } 26787 26788 if (typeof config.content === 'number') { 26789 config.content = config.content.toString(); 26790 } 26791 26792 Util.typeCheckConfig(NAME$4, config, this.constructor.DefaultType); 26793 26794 if (config.sanitize) { 26795 config.template = sanitizeHtml(config.template, config.whiteList, config.sanitizeFn); 26796 } 26797 26798 return config; 26799 }; 26800 26801 _proto._getDelegateConfig = function _getDelegateConfig() { 26802 var config = {}; 26803 26804 if (this.config) { 26805 for (var key in this.config) { 26806 if (this.constructor.Default[key] !== this.config[key]) { 26807 config[key] = this.config[key]; 26808 } 26809 } 26810 } 26811 26812 return config; 26813 }; 26814 26815 _proto._cleanTipClass = function _cleanTipClass() { 26816 var $tip = $__default["default"](this.getTipElement()); 26817 var tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX$1); 26818 26819 if (tabClass !== null && tabClass.length) { 26820 $tip.removeClass(tabClass.join('')); 26821 } 26822 }; 26823 26824 _proto._handlePopperPlacementChange = function _handlePopperPlacementChange(popperData) { 26825 this.tip = popperData.instance.popper; 26826 26827 this._cleanTipClass(); 26828 26829 this.addAttachmentClass(this._getAttachment(popperData.placement)); 26830 }; 26831 26832 _proto._fixTransition = function _fixTransition() { 26833 var tip = this.getTipElement(); 26834 var initConfigAnimation = this.config.animation; 26835 26836 if (tip.getAttribute('x-placement') !== null) { 26837 return; 26838 } 26839 26840 $__default["default"](tip).removeClass(CLASS_NAME_FADE$3); 26841 this.config.animation = false; 26842 this.hide(); 26843 this.show(); 26844 this.config.animation = initConfigAnimation; 26845 } // Static 26846 ; 26847 26848 Tooltip._jQueryInterface = function _jQueryInterface(config) { 26849 return this.each(function () { 26850 var $element = $__default["default"](this); 26851 var data = $element.data(DATA_KEY$4); 26852 26853 var _config = typeof config === 'object' && config; 26854 26855 if (!data && /dispose|hide/.test(config)) { 26856 return; 26857 } 26858 26859 if (!data) { 26860 data = new Tooltip(this, _config); 26861 $element.data(DATA_KEY$4, data); 26862 } 26863 26864 if (typeof config === 'string') { 26865 if (typeof data[config] === 'undefined') { 26866 throw new TypeError("No method named \"" + config + "\""); 26867 } 26868 26869 data[config](); 26870 } 26871 }); 26872 }; 26873 26874 _createClass(Tooltip, null, [{ 26875 key: "VERSION", 26876 get: function get() { 26877 return VERSION$4; 26878 } 26879 }, { 26880 key: "Default", 26881 get: function get() { 26882 return Default$3; 26883 } 26884 }, { 26885 key: "NAME", 26886 get: function get() { 26887 return NAME$4; 26888 } 26889 }, { 26890 key: "DATA_KEY", 26891 get: function get() { 26892 return DATA_KEY$4; 26893 } 26894 }, {
26895 key: "Event", 26896 get: function get() { 26897 return Event$1; 26898 } 26899 }, { 26900 key: "EVENT_KEY", 26901 get: function get() { 26902 return EVENT_KEY$4; 26903 } 26904 }, { 26905 key: "DefaultType", 26906 get: function get() { 26907 return DefaultType$3; 26908 } 26909 }]); 26910 26911 return Tooltip; 26912 }(); 26913 /** 26914 * jQuery 26915 */ 26916 26917 26918 $__default["default"].fn[NAME$4] = Tooltip._jQueryInterface; 26919 $__default["default"].fn[NAME$4].Constructor = Tooltip; 26920 26921 $__default["default"].fn[NAME$4].noConflict = function () { 26922 $__default["default"].fn[NAME$4] = JQUERY_NO_CONFLICT$4; 26923 return Tooltip._jQueryInterface; 26924 }; 26925 26926 /** 26927 * Constants 26928 */ 26929 26930 var NAME$3 = 'popover'; 26931 var VERSION$3 = '4.6.2'; 26932 var DATA_KEY$3 = 'bs.popover'; 26933 var EVENT_KEY$3 = "." + DATA_KEY$3; 26934 var JQUERY_NO_CONFLICT$3 = $__default["default"].fn[NAME$3]; 26935 var CLASS_PREFIX = 'bs-popover'; 26936 var BSCLS_PREFIX_REGEX = new RegExp("(^|\\s)" + CLASS_PREFIX + "\\S+", 'g'); 26937 var CLASS_NAME_FADE$2 = 'fade'; 26938 var CLASS_NAME_SHOW$2 = 'show'; 26939 var SELECTOR_TITLE = '.popover-header'; 26940 var SELECTOR_CONTENT = '.popover-body'; 26941 26942 var Default$2 = _extends({}, Tooltip.Default, { 26943 placement: 'right', 26944 trigger: 'click', 26945 content: '', 26946 template: '<div class="popover" role="tooltip">' + '<div class="arrow"></div>' + '<h3 class="popover-header"></h3>' + '<div class="popover-body"></div></div>' 26947 }); 26948 26949 var DefaultType$2 = _extends({}, Tooltip.DefaultType, { 26950 content: '(string|element|function)' 26951 }); 26952 26953 var Event = { 26954 HIDE: "hide" + EVENT_KEY$3, 26955 HIDDEN: "hidden" + EVENT_KEY$3, 26956 SHOW: "show" + EVENT_KEY$3, 26957 SHOWN: "shown" + EVENT_KEY$3, 26958 INSERTED: "inserted" + EVENT_KEY$3, 26959 CLICK: "click" + EVENT_KEY$3, 26960 FOCUSIN: "focusin" + EVENT_KEY$3, 26961 FOCUSOUT: "focusout" + EVENT_KEY$3, 26962 MOUSEENTER: "mouseenter" + EVENT_KEY$3, 26963 MOUSELEAVE: "mouseleave" + EVENT_KEY$3 26964 }; 26965 /** 26966 * Class definition 26967 */ 26968 26969 var Popover = /*#__PURE__*/function (_Tooltip) { 26970 _inheritsLoose(Popover, _Tooltip); 26971 26972 function Popover() { 26973 return _Tooltip.apply(this, arguments) || this; 26974 } 26975 26976 var _proto = Popover.prototype; 26977 26978 // Overrides 26979 _proto.isWithContent = function isWithContent() { 26980 return this.getTitle() || this._getContent(); 26981 }; 26982 26983 _proto.addAttachmentClass = function addAttachmentClass(attachment) { 26984 $__default["default"](this.getTipElement()).addClass(CLASS_PREFIX + "-" + attachment); 26985 }; 26986 26987 _proto.getTipElement = function getTipElement() { 26988 this.tip = this.tip || $__default["default"](this.config.template)[0]; 26989 return this.tip; 26990 }; 26991 26992 _proto.setContent = function setContent() { 26993 var $tip = $__default["default"](this.getTipElement()); // We use append for html objects to maintain js events 26994 26995 this.setElementContent($tip.find(SELECTOR_TITLE), this.getTitle()); 26996 26997 var content = this._getContent(); 26998 26999 if (typeof content === 'function') { 27000 content = content.call(this.element); 27001 } 27002 27003 this.setElementContent($tip.find(SELECTOR_CONTENT), content); 27004 $tip.removeClass(CLASS_NAME_FADE$2 + " " + CLASS_NAME_SHOW$2); 27005 } // Private 27006 ; 27007 27008 _proto._getContent = function _getContent() { 27009 return this.element.getAttribute('data-content') || this.config.content; 27010 }; 27011 27012 _proto._cleanTipClass = function _cleanTipClass() { 27013 var $tip = $__default["default"](this.getTipElement()); 27014 var tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX); 27015 27016 if (tabClass !== null && tabClass.length > 0) { 27017 $tip.removeClass(tabClass.join('')); 27018 } 27019 } // Static 27020 ; 27021 27022 Popover._jQueryInterface = function _jQueryInterface(config) { 27023 return this.each(function () { 27024 var data = $__default["default"](this).data(DATA_KEY$3); 27025 27026 var _config = typeof config === 'object' ? config : null; 27027 27028 if (!data && /dispose|hide/.test(config)) { 27029 return; 27030 } 27031 27032 if (!data) { 27033 data = new Popover(this, _config); 27034 $__default["default"](this).data(DATA_KEY$3, data); 27035 } 27036 27037 if (typeof config === 'string') { 27038 if (typeof data[config] === 'undefined') {
27039 throw new TypeError("No method named \"" + config + "\""); 27040 } 27041 27042 data[config](); 27043 } 27044 }); 27045 }; 27046 27047 _createClass(Popover, null, [{ 27048 key: "VERSION", 27049 get: // Getters 27050 function get() { 27051 return VERSION$3; 27052 } 27053 }, { 27054 key: "Default", 27055 get: function get() { 27056 return Default$2; 27057 } 27058 }, { 27059 key: "NAME", 27060 get: function get() { 27061 return NAME$3; 27062 } 27063 }, { 27064 key: "DATA_KEY", 27065 get: function get() { 27066 return DATA_KEY$3; 27067 } 27068 }, { 27069 key: "Event", 27070 get: function get() { 27071 return Event; 27072 } 27073 }, { 27074 key: "EVENT_KEY", 27075 get: function get() { 27076 return EVENT_KEY$3; 27077 } 27078 }, { 27079 key: "DefaultType", 27080 get: function get() { 27081 return DefaultType$2; 27082 } 27083 }]); 27084 27085 return Popover; 27086 }(Tooltip); 27087 /** 27088 * jQuery 27089 */ 27090 27091 27092 $__default["default"].fn[NAME$3] = Popover._jQueryInterface; 27093 $__default["default"].fn[NAME$3].Constructor = Popover; 27094 27095 $__default["default"].fn[NAME$3].noConflict = function () { 27096 $__default["default"].fn[NAME$3] = JQUERY_NO_CONFLICT$3; 27097 return Popover._jQueryInterface; 27098 }; 27099 27100 /** 27101 * Constants 27102 */ 27103 27104 var NAME$2 = 'scrollspy'; 27105 var VERSION$2 = '4.6.2'; 27106 var DATA_KEY$2 = 'bs.scrollspy'; 27107 var EVENT_KEY$2 = "." + DATA_KEY$2; 27108 var DATA_API_KEY$1 = '.data-api'; 27109 var JQUERY_NO_CONFLICT$2 = $__default["default"].fn[NAME$2]; 27110 var CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item'; 27111 var CLASS_NAME_ACTIVE$1 = 'active'; 27112 var EVENT_ACTIVATE = "activate" + EVENT_KEY$2; 27113 var EVENT_SCROLL = "scroll" + EVENT_KEY$2; 27114 var EVENT_LOAD_DATA_API = "load" + EVENT_KEY$2 + DATA_API_KEY$1; 27115 var METHOD_OFFSET = 'offset'; 27116 var METHOD_POSITION = 'position'; 27117 var SELECTOR_DATA_SPY = '[data-spy="scroll"]'; 27118 var SELECTOR_NAV_LIST_GROUP$1 = '.nav, .list-group'; 27119 var SELECTOR_NAV_LINKS = '.nav-link'; 27120 var SELECTOR_NAV_ITEMS = '.nav-item'; 27121 var SELECTOR_LIST_ITEMS = '.list-group-item'; 27122 var SELECTOR_DROPDOWN$1 = '.dropdown'; 27123 var SELECTOR_DROPDOWN_ITEMS = '.dropdown-item'; 27124 var SELECTOR_DROPDOWN_TOGGLE$1 = '.dropdown-toggle'; 27125 var Default$1 = { 27126 offset: 10, 27127 method: 'auto', 27128 target: '' 27129 }; 27130 var DefaultType$1 = { 27131 offset: 'number', 27132 method: 'string', 27133 target: '(string|element)' 27134 }; 27135 /** 27136 * Class definition 27137 */ 27138 27139 var ScrollSpy = /*#__PURE__*/function () { 27140 function ScrollSpy(element, config) { 27141 var _this = this; 27142 27143 this._element = element; 27144 this._scrollElement = element.tagName === 'BODY' ? window : element; 27145 this._config = this._getConfig(config); 27146 this._selector = this._config.target + " " + SELECTOR_NAV_LINKS + "," + (this._config.target + " " + SELECTOR_LIST_ITEMS + ",") + (this._config.target + " " + SELECTOR_DROPDOWN_ITEMS); 27147 this._offsets = []; 27148 this._targets = []; 27149 this._activeTarget = null; 27150 this._scrollHeight = 0; 27151 $__default["default"](this._scrollElement).on(EVENT_SCROLL, function (event) { 27152 return _this._process(event); 27153 }); 27154 this.refresh(); 27155 27156 this._process(); 27157 } // Getters 27158 27159 27160 var _proto = ScrollSpy.prototype; 27161 27162 // Public 27163 _proto.refresh = function refresh() { 27164 var _this2 = this; 27165 27166 var autoMethod = this._scrollElement === this._scrollElement.window ? METHOD_OFFSET : METHOD_POSITION; 27167 var offsetMethod = this._config.method === 'auto' ? autoMethod : this._config.method; 27168 var offsetBase = offsetMethod === METHOD_POSITION ? this._getScrollTop() : 0; 27169 this._offsets = []; 27170 this._targets = []; 27171 this._scrollHeight = this._getScrollHeight(); 27172 var targets = [].slice.call(document.querySelectorAll(this._selector)); 27173 targets.map(function (element) { 27174 var target; 27175 var targetSelector = Util.getSelectorFromElement(element); 27176 27177 if (targetSelector) { 27178 target = document.querySelector(targetSelector); 27179 } 27180 27181 if (target) { 27182 var targetBCR = target.getBoundingClientRect(); 27183 27184 if (targetBCR.width || targetBCR.height) { 27185 // TODO (fat): remove sketch reliance on jQuery position/offset 27186 return [$__default["default"](target)[offsetMethod]().top + offsetBase, targetSelector]; 27187 } 27188 } 27189 27190 return null; 27191 }
27191).filter(Boolean).sort(function (a, b) { 27192 return a[0] - b[0]; 27193 }).forEach(function (item) { 27194 _this2._offsets.push(item[0]); 27195 27196 _this2._targets.push(item[1]); 27197 }); 27198 }; 27199 27200 _proto.dispose = function dispose() { 27201 $__default["default"].removeData(this._element, DATA_KEY$2); 27202 $__default["default"](this._scrollElement).off(EVENT_KEY$2); 27203 this._element = null; 27204 this._scrollElement = null; 27205 this._config = null; 27206 this._selector = null; 27207 this._offsets = null; 27208 this._targets = null; 27209 this._activeTarget = null; 27210 this._scrollHeight = null; 27211 } // Private 27212 ; 27213 27214 _proto._getConfig = function _getConfig(config) { 27215 config = _extends({}, Default$1, typeof config === 'object' && config ? config : {}); 27216 27217 if (typeof config.target !== 'string' && Util.isElement(config.target)) { 27218 var id = $__default["default"](config.target).attr('id'); 27219 27220 if (!id) { 27221 id = Util.getUID(NAME$2); 27222 $__default["default"](config.target).attr('id', id); 27223 } 27224 27225 config.target = "#" + id; 27226 } 27227 27228 Util.typeCheckConfig(NAME$2, config, DefaultType$1); 27229 return config; 27230 }; 27231 27232 _proto._getScrollTop = function _getScrollTop() { 27233 return this._scrollElement === window ? this._scrollElement.pageYOffset : this._scrollElement.scrollTop; 27234 }; 27235 27236 _proto._getScrollHeight = function _getScrollHeight() { 27237 return this._scrollElement.scrollHeight || Math.max(document.body.scrollHeight, document.documentElement.scrollHeight); 27238 }; 27239 27240 _proto._getOffsetHeight = function _getOffsetHeight() { 27241 return this._scrollElement === window ? window.innerHeight : this._scrollElement.getBoundingClientRect().height; 27242 }; 27243 27244 _proto._process = function _process() { 27245 var scrollTop = this._getScrollTop() + this._config.offset; 27246 27247 var scrollHeight = this._getScrollHeight(); 27248 27249 var maxScroll = this._config.offset + scrollHeight - this._getOffsetHeight(); 27250 27251 if (this._scrollHeight !== scrollHeight) { 27252 this.refresh(); 27253 } 27254 27255 if (scrollTop >= maxScroll) { 27256 var target = this._targets[this._targets.length - 1]; 27257 27258 if (this._activeTarget !== target) { 27259 this._activate(target); 27260 } 27261 27262 return; 27263 } 27264 27265 if (this._activeTarget && scrollTop < this._offsets[0] && this._offsets[0] > 0) { 27266 this._activeTarget = null; 27267 27268 this._clear(); 27269 27270 return; 27271 } 27272 27273 for (var i = this._offsets.length; i--;) { 27274 var isActiveTarget = this._activeTarget !== this._targets[i] && scrollTop >= this._offsets[i] && (typeof this._offsets[i + 1] === 'undefined' || scrollTop < this._offsets[i + 1]); 27275 27276 if (isActiveTarget) { 27277 this._activate(this._targets[i]); 27278 } 27279 } 27280 }; 27281 27282 _proto._activate = function _activate(target) { 27283 this._activeTarget = target; 27284 27285 this._clear(); 27286 27287 var queries = this._selector.split(',').map(function (selector) { 27288 return selector + "[data-target=\"" + target + "\"]," + selector + "[href=\"" + target + "\"]"; 27289 }); 27290 27291 var $link = $__default["default"]([].slice.call(document.querySelectorAll(queries.join(',')))); 27292 27293 if ($link.hasClass(CLASS_NAME_DROPDOWN_ITEM)) { 27294 $link.closest(SELECTOR_DROPDOWN$1).find(SELECTOR_DROPDOWN_TOGGLE$1).addClass(CLASS_NAME_ACTIVE$1); 27295 $link.addClass(CLASS_NAME_ACTIVE$1); 27296 } else { 27297 // Set triggered link as active 27298 $link.addClass(CLASS_NAME_ACTIVE$1); // Set triggered links parents as active 27299 // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor 27300 27301 $link.parents(SELECTOR_NAV_LIST_GROUP$1).prev(SELECTOR_NAV_LINKS + ", " + SELECTOR_LIST_ITEMS).addClass(CLASS_NAME_ACTIVE$1); // Handle special case when .nav-link is inside .nav-item 27302 27303 $link.parents(SELECTOR_NAV_LIST_GROUP$1).prev(SELECTOR_NAV_ITEMS).children(SELECTOR_NAV_LINKS).addClass(CLASS_NAME_ACTIVE$1); 27304 } 27305 27306 $__default["default"](this._scrollElement).trigger(EVENT_ACTIVATE, { 27307 relatedTarget: target 27308 }); 27309 }; 27310 27311 _proto._clear = function _clear() { 27312 [].slice.call(document.querySelectorAll(this._selector)).filter(function (node) { 27313 return node.classList.contains(CLASS_NAME_ACTIVE$1); 27314 }
27314).forEach(function (node) { 27315 return node.classList.remove(CLASS_NAME_ACTIVE$1); 27316 }); 27317 } // Static 27318 ; 27319 27320 ScrollSpy._jQueryInterface = function _jQueryInterface(config) { 27321 return this.each(function () { 27322 var data = $__default["default"](this).data(DATA_KEY$2); 27323 27324 var _config = typeof config === 'object' && config; 27325 27326 if (!data) { 27327 data = new ScrollSpy(this, _config); 27328 $__default["default"](this).data(DATA_KEY$2, data); 27329 } 27330 27331 if (typeof config === 'string') { 27332 if (typeof data[config] === 'undefined') { 27333 throw new TypeError("No method named \"" + config + "\""); 27334 } 27335 27336 data[config](); 27337 } 27338 }); 27339 }; 27340 27341 _createClass(ScrollSpy, null, [{ 27342 key: "VERSION", 27343 get: function get() { 27344 return VERSION$2; 27345 } 27346 }, { 27347 key: "Default", 27348 get: function get() { 27349 return Default$1; 27350 } 27351 }]); 27352 27353 return ScrollSpy; 27354 }(); 27355 /** 27356 * Data API implementation 27357 */ 27358 27359 27360 $__default["default"](window).on(EVENT_LOAD_DATA_API, function () { 27361 var scrollSpys = [].slice.call(document.querySelectorAll(SELECTOR_DATA_SPY)); 27362 var scrollSpysLength = scrollSpys.length; 27363 27364 for (var i = scrollSpysLength; i--;) { 27365 var $spy = $__default["default"](scrollSpys[i]); 27366 27367 ScrollSpy._jQueryInterface.call($spy, $spy.data()); 27368 } 27369 }); 27370 /** 27371 * jQuery 27372 */ 27373 27374 $__default["default"].fn[NAME$2] = ScrollSpy._jQueryInterface; 27375 $__default["default"].fn[NAME$2].Constructor = ScrollSpy; 27376 27377 $__default["default"].fn[NAME$2].noConflict = function () { 27378 $__default["default"].fn[NAME$2] = JQUERY_NO_CONFLICT$2; 27379 return ScrollSpy._jQueryInterface; 27380 }; 27381 27382 /** 27383 * Constants 27384 */ 27385 27386 var NAME$1 = 'tab'; 27387 var VERSION$1 = '4.6.2'; 27388 var DATA_KEY$1 = 'bs.tab'; 27389 var EVENT_KEY$1 = "." + DATA_KEY$1; 27390 var DATA_API_KEY = '.data-api'; 27391 var JQUERY_NO_CONFLICT$1 = $__default["default"].fn[NAME$1]; 27392 var CLASS_NAME_DROPDOWN_MENU = 'dropdown-menu'; 27393 var CLASS_NAME_ACTIVE = 'active'; 27394 var CLASS_NAME_DISABLED = 'disabled'; 27395 var CLASS_NAME_FADE$1 = 'fade'; 27396 var CLASS_NAME_SHOW$1 = 'show'; 27397 var EVENT_HIDE$1 = "hide" + EVENT_KEY$1; 27398 var EVENT_HIDDEN$1 = "hidden" + EVENT_KEY$1; 27399 var EVENT_SHOW$1 = "show" + EVENT_KEY$1; 27400 var EVENT_SHOWN$1 = "shown" + EVENT_KEY$1; 27401 var EVENT_CLICK_DATA_API = "click" + EVENT_KEY$1 + DATA_API_KEY; 27402 var SELECTOR_DROPDOWN = '.dropdown'; 27403 var SELECTOR_NAV_LIST_GROUP = '.nav, .list-group'; 27404 var SELECTOR_ACTIVE = '.active'; 27405 var SELECTOR_ACTIVE_UL = '> li > .active'; 27406 var SELECTOR_DATA_TOGGLE = '[data-toggle="tab"], [data-toggle="pill"], [data-toggle="list"]'; 27407 var SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle'; 27408 var SELECTOR_DROPDOWN_ACTIVE_CHILD = '> .dropdown-menu .active'; 27409 /** 27410 * Class definition 27411 */ 27412 27413 var Tab = /*#__PURE__*/function () { 27414 function Tab(element) { 27415 this._element = element; 27416 } // Getters 27417 27418 27419 var _proto = Tab.prototype; 27420 27421 // Public 27422 _proto.show = function show() { 27423 var _this = this; 27424 27425 if (this._element.parentNode && this._element.parentNode.nodeType === Node.ELEMENT_NODE && $__default["default"](this._element).hasClass(CLASS_NAME_ACTIVE) || $__default["default"](this._element).hasClass(CLASS_NAME_DISABLED) || this._element.hasAttribute('disabled')) { 27426 return; 27427 } 27428 27429 var target; 27430 var previous; 27431 var listElement = $__default["default"](this._element).closest(SELECTOR_NAV_LIST_GROUP)[0]; 27432 var selector = Util.getSelectorFromElement(this._element); 27433 27434 if (listElement) { 27435 var itemSelector = listElement.nodeName === 'UL' || listElement.nodeName === 'OL' ? SELECTOR_ACTIVE_UL : SELECTOR_ACTIVE; 27436 previous = $__default["default"].makeArray($__default["default"](listElement).find(itemSelector)); 27437 previous = previous[previous.length - 1]; 27438 } 27439 27440 var hideEvent = $__default["default"].Event(EVENT_HIDE$1, { 27441 relatedTarget: this._element 27442 }); 27443 var showEvent = $__default["default"].Event(EVENT_SHOW$1, { 27444 relatedTarget: previous 27445 }); 27446 27447 if (previous) { 27448 $__default["default"](previous).trigger(hideEvent); 27449 } 27450 27451 $__default["default"](this._element).trigger(showEvent); 27452 27453 if (showEvent.isDefaultPrevented() || hideEvent.isDefaultPrevented()) { 27454 return; 27455 } 27456 27457 if (selector) { 27458 target = document.querySelector(selector); 27459 } 27460 27461 this._activate(this._element, listElement); 27462 27463 var complete = function complete() { 27464 var hiddenEvent = $__default["default"].Event(EVENT_HIDDEN$1, { 27465 relatedTarget: _this._element 27466 }); 27467 var shownEvent = $__default["default"].Event(EVENT_SHOWN$1, { 27468 relatedTarget: previous 27469 }); 27470 $__default["default"](previous).trigger(hiddenEvent); 27471 $__default["default"](_this._element).trigger(shownEvent); 27472 }; 27473 27474 if (target) { 27475 this._activate(target, target.parentNode, complete); 27476 } else { 27477 complete(); 27478 } 27479 }; 27480 27481 _proto.dispose = function dispose() { 27482 $__default["default"].removeData(this._element, DATA_KEY$1); 27483 this._element = null; 27484 } // Private 27485 ; 27486 27487 _proto._activate = function _activate(element, container, callback) { 27488 var _this2 = this; 27489 27490 var activeElements = container && (container.nodeName === 'UL' || container.nodeName === 'OL') ? $__default["default"](container).find(SELECTOR_ACTIVE_UL) : $__default["default"](container).children(SELECTOR_ACTIVE); 27491 var active = activeElements[0]; 27492 var isTransitioning = callback && active && $__default["default"](active).hasClass(CLASS_NAME_FADE$1); 27493 27494 var complete = function complete() { 27495 return _this2._transitionComplete(element, active, callback); 27496 }; 27497 27498 if (active && isTransitioning) { 27499 var transitionDuration = Util.getTransitionDurationFromElement(active); 27500 $__default["default"](active).removeClass(CLASS_NAME_SHOW$1).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration); 27501 } else { 27502 complete(); 27503 } 27504 }; 27505 27506 _proto._transitionComplete = function _transitionComplete(element, active, callback) { 27507 if (active) { 27508 $__default["default"](active).removeClass(CLASS_NAME_ACTIVE);
27509 var dropdownChild = $__default["default"](active.parentNode).find(SELECTOR_DROPDOWN_ACTIVE_CHILD)[0]; 27510 27511 if (dropdownChild) { 27512 $__default["default"](dropdownChild).removeClass(CLASS_NAME_ACTIVE); 27513 } 27514 27515 if (active.getAttribute('role') === 'tab') { 27516 active.setAttribute('aria-selected', false); 27517 } 27518 } 27519 27520 $__default["default"](element).addClass(CLASS_NAME_ACTIVE); 27521 27522 if (element.getAttribute('role') === 'tab') { 27523 element.setAttribute('aria-selected', true); 27524 } 27525 27526 Util.reflow(element); 27527 27528 if (element.classList.contains(CLASS_NAME_FADE$1)) { 27529 element.classList.add(CLASS_NAME_SHOW$1); 27530 } 27531 27532 var parent = element.parentNode; 27533 27534 if (parent && parent.nodeName === 'LI') { 27535 parent = parent.parentNode; 27536 } 27537 27538 if (parent && $__default["default"](parent).hasClass(CLASS_NAME_DROPDOWN_MENU)) { 27539 var dropdownElement = $__default["default"](element).closest(SELECTOR_DROPDOWN)[0]; 27540 27541 if (dropdownElement) { 27542 var dropdownToggleList = [].slice.call(dropdownElement.querySelectorAll(SELECTOR_DROPDOWN_TOGGLE)); 27543 $__default["default"](dropdownToggleList).addClass(CLASS_NAME_ACTIVE); 27544 } 27545 27546 element.setAttribute('aria-expanded', true); 27547 } 27548 27549 if (callback) { 27550 callback(); 27551 } 27552 } // Static 27553 ; 27554 27555 Tab._jQueryInterface = function _jQueryInterface(config) { 27556 return this.each(function () { 27557 var $this = $__default["default"](this); 27558 var data = $this.data(DATA_KEY$1); 27559 27560 if (!data) { 27561 data = new Tab(this); 27562 $this.data(DATA_KEY$1, data); 27563 } 27564 27565 if (typeof config === 'string') { 27566 if (typeof data[config] === 'undefined') { 27567 throw new TypeError("No method named \"" + config + "\""); 27568 } 27569 27570 data[config](); 27571 } 27572 }); 27573 }; 27574 27575 _createClass(Tab, null, [{ 27576 key: "VERSION", 27577 get: function get() { 27578 return VERSION$1; 27579 } 27580 }]); 27581 27582 return Tab; 27583 }(); 27584 /** 27585 * Data API implementation 27586 */ 27587 27588 27589 $__default["default"](document).on(EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) { 27590 event.preventDefault(); 27591 27592 Tab._jQueryInterface.call($__default["default"](this), 'show'); 27593 }); 27594 /** 27595 * jQuery 27596 */ 27597 27598 $__default["default"].fn[NAME$1] = Tab._jQueryInterface; 27599 $__default["default"].fn[NAME$1].Constructor = Tab; 27600 27601 $__default["default"].fn[NAME$1].noConflict = function () { 27602 $__default["default"].fn[NAME$1] = JQUERY_NO_CONFLICT$1; 27603 return Tab._jQueryInterface; 27604 }; 27605 27606 /** 27607 * Constants 27608 */ 27609 27610 var NAME = 'toast'; 27611 var VERSION = '4.6.2'; 27612 var DATA_KEY = 'bs.toast'; 27613 var EVENT_KEY = "." + DATA_KEY; 27614 var JQUERY_NO_CONFLICT = $__default["default"].fn[NAME]; 27615 var CLASS_NAME_FADE = 'fade'; 27616 var CLASS_NAME_HIDE = 'hide'; 27617 var CLASS_NAME_SHOW = 'show'; 27618 var CLASS_NAME_SHOWING = 'showing'; 27619 var EVENT_CLICK_DISMISS = "click.dismiss" + EVENT_KEY; 27620 var EVENT_HIDE = "hide" + EVENT_KEY; 27621 var EVENT_HIDDEN = "hidden" + EVENT_KEY; 27622 var EVENT_SHOW = "show" + EVENT_KEY; 27623 var EVENT_SHOWN = "shown" + EVENT_KEY; 27624 var SELECTOR_DATA_DISMISS = '[data-dismiss="toast"]'; 27625 var Default = { 27626 animation: true, 27627 autohide: true, 27628 delay: 500 27629 }; 27630 var DefaultType = { 27631 animation: 'boolean', 27632 autohide: 'boolean', 27633 delay: 'number' 27634 }; 27635 /** 27636 * Class definition 27637 */ 27638 27639 var Toast = /*#__PURE__*/function () { 27640 function Toast(element, config) { 27641 this._element = element; 27642 this._config = this._getConfig(config); 27643 this._timeout = null; 27644 27645 this._setListeners(); 27646 } // Getters 27647 27648 27649 var _proto = Toast.prototype; 27650 27651 // Public 27652 _proto.show = function show() { 27653 var _this = this; 27654 27655 var showEvent = $__default["default"].Event(EVENT_SHOW); 27656 $__default["default"](this._element).trigger(showEvent); 27657 27658 if (showEvent.isDefaultPrevented()) { 27659 return; 27660 } 27661 27662 this._clearTimeout(); 27663 27664 if (this._config.animation) { 27665 this._element.classList.add(CLASS_NAME_FADE); 27666 } 27667 27668 var complete = function complete() { 27669 _this._element.classList.remove(CLASS_NAME_SHOWING); 27670 27671 _this._element.classList.add(CLASS_NAME_SHOW); 27672 27673 $__default["default"](_this._element).trigger(EVENT_SHOWN); 27674 27675 if (_this._config.autohide) { 27676 _this._timeout = setTimeout(function () { 27677 _this.hide(); 27678 }, _this._config.delay); 27679 } 27680 }; 27681 27682 this._element.classList.remove(CLASS_NAME_HIDE); 27683 27684 Util.reflow(this._element); 27685 27686 this._element.classList.add(CLASS_NAME_SHOWING); 27687 27688 if (this._config.animation) { 27689 var transitionDuration = Util.getTransitionDurationFromElement(this._element); 27690 $__default["default"](this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration); 27691 } else { 27692 complete(); 27693 } 27694 }; 27695 27696 _proto.hide = function hide() { 27697 if (!this._element.classList.contains(CLASS_NAME_SHOW)) { 27698 return; 27699 } 27700 27701 var hideEvent = $__default["default"].Event(EVENT_HIDE); 27702 $__default["default"](this._element).trigger(hideEvent); 27703 27704 if (hideEvent.isDefaultPrevented()) { 27705 return; 27706 } 27707 27708 this._close(); 27709 }; 27710 27711 _proto.dispose = function dispose() { 27712 this._clearTimeout(); 27713 27714 if (this._element.classList.contains(CLASS_NAME_SHOW)) { 27715 this._element.classList.remove(CLASS_NAME_SHOW); 27716 } 27717 27718 $__default["default"](this._element).off(EVENT_CLICK_DISMISS); 27719 $__default["default"].removeData(this._element, DATA_KEY); 27720 this._element = null; 27721 this._config = null; 27722 } // Private 27723 ; 27724 27725 _proto._getConfig = function _getConfig(config) { 27726 config = _extends({}, Default, $__default["default"](this._element).data(), typeof config === 'object' && config ? config : {}); 27727 Util.typeCheckConfig(NAME, config, this.constructor.DefaultType); 27728 return config; 27729 }; 27730 27731 _proto._setListeners = function _setListeners() { 27732 var _this2 = this; 27733 27734 $__default["default"](this._element).on(EVENT_CLICK_DISMISS, SELECTOR_DATA_DISMISS, function () { 27735 return _this2.hide(); 27736 }); 27737 }; 27738 27739 _proto._close = function _close() { 27740 var _this3 = this; 27741 27742 var complete = function complete() { 27743 _this3._element.classList.add(CLASS_NAME_HIDE); 27744 27745 $__default["default"](_this3._element).trigger(EVENT_HIDDEN); 27746 }; 27747 27748 this._element.classList.remove(CLASS_NAME_SHOW); 27749 27750 if (this._config.animation) { 27751 var transitionDuration = Util.getTransitionDurationFromElement(this._element); 27752 $__default["default"](this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration); 27753 } else { 27754 complete(); 27755 } 27756 }; 27757 27758 _proto._clearTimeout = function _clearTimeout() { 27759 clearTimeout(this._timeout); 27760 this._timeout = null; 27761 } // Static 27762 ; 27763 27764 Toast._jQueryInterface = function _jQueryInterface(config) { 27765 return this.each(function () { 27766 var $element = $__default["default"](this); 27767 var data = $element.data(DATA_KEY); 27768 27769 var _config = typeof config === 'object' && config; 27770 27771 if (!data) { 27772 data = new Toast(this, _config); 27773 $element.data(DATA_KEY, data); 27774 } 27775 27776 if (typeof config === 'string') { 27777 if (typeof data[config] === 'undefined') {
27778 throw new TypeError("No method named \"" + config + "\""); 27779 } 27780 27781 data[config](this); 27782 } 27783 }); 27784 }; 27785 27786 _createClass(Toast, null, [{ 27787 key: "VERSION", 27788 get: function get() { 27789 return VERSION; 27790 } 27791 }, { 27792 key: "DefaultType", 27793 get: function get() { 27794 return DefaultType; 27795 } 27796 }, { 27797 key: "Default", 27798 get: function get() { 27799 return Default; 27800 } 27801 }]); 27802 27803 return Toast; 27804 }(); 27805 /** 27806 * jQuery 27807 */ 27808 27809 27810 $__default["default"].fn[NAME] = Toast._jQueryInterface; 27811 $__default["default"].fn[NAME].Constructor = Toast; 27812 27813 $__default["default"].fn[NAME].noConflict = function () { 27814 $__default["default"].fn[NAME] = JQUERY_NO_CONFLICT; 27815 return Toast._jQueryInterface; 27816 }; 27817 27818 exports.Alert = Alert; 27819 exports.Button = Button; 27820 exports.Carousel = Carousel; 27821 exports.Collapse = Collapse; 27822 exports.Dropdown = Dropdown; 27823 exports.Modal = Modal; 27824 exports.Popover = Popover; 27825 exports.Scrollspy = ScrollSpy; 27826 exports.Tab = Tab; 27827 exports.Toast = Toast; 27828 exports.Tooltip = Tooltip; 27829 exports.Util = Util; 27830 27831 Object.defineProperty(exports, '__esModule', { value: true }); 27832 27833}));
vendor: 20,301 bytes, lines 27834-27839
27834/*! 27835 Modaal - accessible modals - v0.4.4 27836 by Humaan, for all humans. 27837 http://humaan.com 27838 */ 27839!function(a){function t(a){var t={},o=!1;a.attr("data-modaal-type")&&(o=!0,t.type=a.attr("data-modaal-type")),a.attr("data-modaal-content-source")&&(o=!0,t.content_source=a.attr("data-modaal-content-source")),a.attr("data-modaal-animation")&&(o=!0,t.animation=a.attr("data-modaal-animation")),a.attr("data-modaal-animation-speed")&&(o=!0,t.animation_speed=a.attr("data-modaal-animation-speed")),a.attr("data-modaal-after-callback-delay")&&(o=!0,t.after_callback_delay=a.attr("data-modaal-after-callback-delay")),a.attr("data-modaal-is-locked")&&(o=!0,t.is_locked="true"===a.attr("data-modaal-is-locked")),a.attr("data-modaal-hide-close")&&(o=!0,t.hide_close="true"===a.attr("data-modaal-hide-close")),a.attr("data-modaal-background")&&(o=!0,t.background=a.attr("data-modaal-background")),a.attr("data-modaal-overlay-opacity")&&(o=!0,t.overlay_opacity=a.attr("data-modaal-overlay-opacity")),a.attr("data-modaal-overlay-close")&&(o=!0,t.overlay_close="false"!==a.attr("data-modaal-overlay-close")),a.attr("data-modaal-accessible-title")&&(o=!0,t.accessible_title=a.attr("data-modaal-accessible-title")),a.attr("data-modaal-start-open")&&(o=!0,t.start_open="true"===a.attr("data-modaal-start-open")),a.attr("data-modaal-fullscreen")&&(o=!0,t.fullscreen="true"===a.attr("data-modaal-fullscreen")),a.attr("data-modaal-custom-class")&&(o=!0,t.custom_class=a.attr("data-modaal-custom-class")),a.attr("data-modaal-close-text")&&(o=!0,t.close_text=a.attr("data-modaal-close-text")),a.attr("data-modaal-close-aria-label")&&(o=!0,t.close_aria_label=a.attr("data-modaal-close-aria-label")),a.attr("data-modaal-background-scroll")&&(o=!0,t.background_scroll="true"===a.attr("data-modaal-background-scroll")),a.attr("data-modaal-width")&&(o=!0,t.width=parseInt(a.attr("data-modaal-width"))),a.attr("data-modaal-height")&&(o=!0,t.height=parseInt(a.attr("data-modaal-height"))),a.attr("data-modaal-confirm-button-text")&&(o=!0,t.confirm_button_text=a.attr("data-modaal-confirm-button-text")),a.attr("data-modaal-confirm-cancel-button-text")&&(o=!0,t.confirm_cancel_button_text=a.attr("data-modaal-confirm-cancel-button-text")),a.attr("data-modaal-confirm-title")&&(o=!0,t.confirm_title=a.attr("data-modaal-confirm-title")),a.attr("data-modaal-confirm-content")&&(o=!0,t.confirm_content=a.attr("data-modaal-confirm-content")),a.attr("data-modaal-gallery-active-class")&&(o=!0,t.gallery_active_class=a.attr("data-modaal-gallery-active-class")),a.attr("data-modaal-loading-content")&&(o=!0,t.loading_content=a.attr("data-modaal-loading-content")),a.attr("data-modaal-loading-class")&&(o=!0,t.loading_class=a.attr("data-modaal-loading-class")),a.attr("data-modaal-ajax-error-class")&&(o=!0,t.ajax_error_class=a.attr("data-modaal-ajax-error-class")),a.attr("data-modaal-instagram-id")&&(o=!0,t.instagram_id=a.attr("data-modaal-instagram-id")),o&&a.modaal(t)}var o={init:function(t,o){var e=this;if(e.dom=a("body"),e.$elem=a(o),e.options=a.extend({},a.fn.modaal.options,e.$elem.data(),t),e.xhr=null,e.scope={is_open:!1,id:"modaal_"+(new Date).getTime()+Math.random().toString(16).substring(2),source:e.options.content_source?e.options.content_source:e.$elem.attr("href")},e.$elem.attr("data-modaal-scope",e.scope.id),e.private_options={active_class:"is_active"},e.lastFocus=null,e.options.is_locked||"confirm"==e.options.type||e.options.hide_close?e.scope.close_btn="":e.scope.close_btn='<button type="button" class="modaal-close" id="modaal-close" aria-label="'+e.options.close_aria_label+'"><span>'+e.options.close_text+"</span></button>","none"===e.options.animation&&(e.options.animation_speed=0,e.options.after_callback_delay=0),a(o).on("click.Modaal",function(a){a.preventDefault(),e.create_modaal(e,a)}),!0===e.options.outer_controls)var i="outer";else var i="inner";e.scope.prev_btn='<button type="button" class="modaal-gallery-control modaal-gallery-prev modaal-gallery-prev-'+i+'" id="modaal-gallery-prev" aria-label="Previous image (use left arrow to change)"><span>Previous Image</span></button>',e.scope.next_btn='<button type="button" class="modaal-gallery-control modaal-gallery-next modaal-gallery-next-'+i+'" id="modaal-gallery-next" aria-label="Next image (use right arrow to change)"><span>Next Image</span></button>',!0===e.options.start_open&&e.create_modaal(e)},create_modaal:function(a,t){var o,a=this;if(a.lastFocus=a.$elem,!1!==a.options.should_open&&("function"!=typeof a.options.should_open||!1!==a.options.should_open())){switch(a.options.before_open.call(a,t),a.options.type){case"inline":a.create_basic();break;case"ajax":o=a.options.source(a.$elem,a.scope.source),a.fetch_ajax(o);break;case"confirm":a.options.is_locked=!0,a.create_confirm();break;case"image":a.create_image();break;case"iframe":o=a.options.source(a.$elem,a.scope.source),a.create_iframe(o);break;case"video":a.create_video(a.scope.source);break;case"instagram":a.create_instagram()}a.watch_events()}},watch_events:function(){var t=this;t.dom.off("click.Modaal keyup.Modaal keydown.Modaal"),t.dom.on("keydown.Modaal",function(o){var e=o.keyCode,i=o.target;9==e&&t.scope.is_open&&(a.contains(document.getElementById(t.scope.id),i)||a("#"+t.scope.id).find('*[tabindex="0"]').focus())}),t.dom.on("keyup.Modaal",function(o){var e=o.keyCode,i=o.target;return o.shiftKey&&9==o.keyCode&&t.scope.is_open&&(a.contains(document.getElementById(t.scope.id),i)||a("#"+t.scope.id).find(".modaal-close").focus()),!t.options.is_locked&&27==e&&t.scope.is_open?!a(document.activeElement).is("input:not(:checkbox):not(:radio)")&&void t.modaal_close():"image"==t.options.type?(37==e&&t.scope.is_open&&!a("#"+t.scope.id+" .modaal-gallery-prev").hasClass("is_hidden")&&t.gallery_update("prev"),void(39==e&&t.scope.is_open&&!a("#"+t.scope.id+" .modaal-gallery-next").hasClass("is_hidden")&&t.gallery_update("next"))):void 0}),t.dom.on("click.Modaal",function(o){var e=a(o.target);if(!t.options.is_locked&&(t.options.overlay_close&&e.is(".modaal-inner-wrapper")||e.is(".modaal-close")||e.closest(".modaal-close").length))return void t.modaal_close();if(e.is(".modaal-confirm-btn"))return e.is(".modaal-ok")&&t.options.confirm_callback.call(t,t.lastFocus),e.is(".modaal-cancel")&&t.options.confirm_cancel_callback.call(t,t.lastFocus),void t.modaal_close();if(e.is(".modaal-gallery-control")){if(e.hasClass("is_hidden"))return;return e.is(".modaal-gallery-prev")&&t.gallery_update("prev"),void(e.is(".modaal-gallery-next")&&t.gallery_update("next"))}})},build_modal:function(t){var o=this,e="";"instagram"==o.options.type&&(e=" modaal-instagram");var i,l="video"==o.options.type?"modaal-video-wrap":"modaal-content";switch(o.options.animation){case"fade":i=" modaal-start_fade";break;case"slide-down":i=" modaal-start_slidedown";break;default:i=" modaal-start_none"}var n="";o.options.fullscreen&&(n=" modaal-fullscreen"),""===o.options.custom_class&&void 0===o.options.custom_class||(o.options.custom_class=" "+o.options.custom_class);var s="";o.options.width&&o.options.height&&"number"==typeof o.options.width&&"number"==typeof o.options.height?s=' style="max-width:'+o.options.width+"px;height:"+o.options.height+'px;overflow:auto;"':o.options.width&&"number"==typeof o.options.width?s=' style="max-width:'+o.options.width+'px;"':o.options.height&&"number"==typeof o.options.height&&(s=' style="height:'+o.options.height+'px;overflow:auto;"'),("image"==o.options.type||"video"==o.options.type||"instagram"==o.options.type||o.options.fullscreen)&&(s="");var d="";o.is_touch()&&(d=' style="cursor:pointer;"');var r='<div class="modaal-wrapper modaal-'+o.options.type+i+e+n+o.options.custom_class+'" id="'+o.scope.id+'"><div class="modaal-outer-wrapper"><div class="modaal-inner-wrapper"'+d+">";"video"!=o.options.type&&(r+='<div class="modaal-container"'+s+">"),r+='<div class="'+l+' modaal-focus" aria-hidden="false" aria-label="'+o.options.accessible_title+" - "+o.options.close_aria_label+'" role="dialog">',"inline"==o.options.type?r+='<div class="modaal-content-container" role="document"></div>':r+=t,r+="</div>"+o.scope.close_btn,"video"!=o.options.type&&(r+="</div>"),r+="</div>","image"==o.options.type&&!0===o.options.outer_controls&&(r+=o.scope.prev_btn+o.scope.next_btn),r+="</div></div>",a("#"+o.scope.id+"_overlay").length<1&&o.dom.append(r),"inline"==o.options.type&&t.appendTo("#"+o.scope.id+" .modaal-content-container"),o.modaal_overlay("show")},create_basic:function(){var t=this,o=a(t.scope.source),e="";o.length?(e=o.contents().detach(),o.empty()):e="Content could not be loaded. Please check the source and try again.",t.build_modal(e)},create_instagram:function(){var t=this,o=t.options.instagram_id,e="",i="Instagram photo couldn't be loaded, please check the embed code and try again.";if(t.build_modal('<div class="modaal-content-container'+(""!=t.options.loading_class?" "+t.options.loading_class:"")+'">'+t.options.loading_content+"</div>"),""!=o&&null!==o&&void 0!==o){var l="https://api.instagram.com/oembed?url=http://instagr.am/p/"+o+"/";a.ajax({url:l,dataType:"jsonp",cache:!1,success:function(o){t.dom.append('<div id="temp-ig" style="width:0;height:0;overflow:hidden;">'+o.html+"</div>"),t.dom.attr("data-igloaded")?window.instgrm.Embeds.process():t.dom.attr("data-igloaded","true");var e="#"+t.scope.id+" .modaal-content-container";a(e).length>0&&setTimeout(function(){a("#temp-ig").contents().clone().appendTo(e),a("#temp-ig").remove()},1e3)},error:function(){e=i;var o=a("#"+t.scope.id+" .modaal-content-container");o.length>0&&(o.removeClass(t.options.loading_class).addClass(t.options.ajax_error_class),o.html(e))}})}else e=i;return!1},fetch_ajax:function(t){var o=this;null==o.options.accessible_title&&(o.options.accessible_title="Dialog Window"),null!==o.xhr&&(o.xhr.abort(),o.xhr=null),o.build_modal('<div class="modaal-content-container'+(""!=o.options.loading_class?" "+o.options.loading_class:"")+'">'+o.options.loading_content+"</div>"),o.xhr=a.ajax(t,{success:function(t){var e=a("#"+o.scope.id).find(".modaal-content-container");e.length>0&&(e.removeClass(o.options.loading_class),e.html(t),o.options.ajax_success.call(o,e))},error:function(t){if("abort"!=t.statusText){var e=a("#"+o.scope.id+" .modaal-content-container");e.length>0&&(e.removeClass(o.options.loading_class).addClass(o.options.ajax_error_class),e.html("Content could not be loaded. Please check the source and try again."))}}})},create_confirm:function(){var a,t=this;a='<div class="modaal-content-container"><h1 id="modaal-title">'+t.options.confirm_title+'</h1><div class="modaal-confirm-content">'+t.options.confirm_content+'</div><div class="modaal-confirm-wrap"><button type="button" class="modaal-confirm-btn modaal-ok" aria-label="Confirm">'+t.options.confirm_button_text+'</button><button type="button" class="modaal-confirm-btn modaal-cancel" aria-label="Cancel">'+t.options.confirm_cancel_button_text+"</button></div></div></div>",t.build_modal(a)},create_image:function(){var t,o,e=this,i="";if(e.$elem.is("[data-group]")||e.$elem.is("[rel]")){var l=e.$elem.is("[data-group]"),n=l?e.$elem.attr("data-group"):e.$elem.attr("rel"),s=a(l?'[data-group="'+n+'"]':'[rel="'+n+'"]');s.removeAttr("data-gallery-active","is_active"),e.$elem.attr("data-gallery-active","is_active"),o=s.length-1;var d=[];i='<div class="modaal-gallery-item-wrap">',s.each(function(t,o){var e="",i="",l="",n=!1,s=!1,r=o.getAttribute("data-modaal-desc"),c=o.getAttribute("data-gallery-active");a(o).attr("data-modaal-content-source")?e=a(o).attr("data-modaal-content-source"):a(o).attr("href")?e=a(o).attr("href"):a(o).attr("src")?e=a(o).attr("src"):(e="trigger requires href or data-modaal-content-source attribute",s=!0),""!=r&&null!==r&&void 0!==r?(i=r,l='<div class="modaal-gallery-label"><span class="modaal-accessible-hide">Image '+(t+1)+" - </span>"+r.replace(/</g,"<").replace(/>/g,">")+"</div>"):l='<div class="modaal-gallery-label"><span class="modaal-accessible-hide">Image '+(t+1)+"</span></div>",c&&(n=!0);var m={url:e,alt:i,rawdesc:r,desc:l,active:n,src_error:s};d.push(m)});for(var r=0;r<d.length;r++){var c="",m=d[r].rawdesc?"Image: "+d[r].rawdesc:"Image "+r+" no description";d[r].active&&(c=" "+e.private_options.active_class);var p=d[r].src_error?d[r].url:'<img src="'+d[r].url+'" alt=" " style="width:100%">';i+='<div class="modaal-gallery-item gallery-item-'+r+c+'" aria-label="'+m+'">'+p+d[r].desc+"</div>"}i+="</div>",1!=e.options.outer_controls&&(i+=e.scope.prev_btn+e.scope.next_btn)}else{var u,_=!1;e.$elem.attr("data-modaal-content-source")?u=e.$elem.attr("data-modaal-content-source"):e.$elem.attr("href")?u=e.$elem.attr("href"):e.$elem.attr("src")?u=e.$elem.attr("src"):(u="trigger requires href or data-modaal-content-source attribute",_=!0);var v="",f="",m="";e.$elem.attr("data-modaal-desc")?(m=e.$elem.attr("data-modaal-desc"),v=e.$elem.attr("data-modaal-desc"),f='<div class="modaal-gallery-label"><span class="modaal-accessible-hide">Image - </span>'+v.replace(/</g,"<").replace(/>/g,">")+"</div>"):m="Image with no description";var p=_?u:'<img src="'+u+'" alt=" " style="width:100%">';i='<div class="modaal-gallery-item is_active" aria-label="'+m+'">'+p+f+"</div>"}t=i,e.build_modal(t),a(".modaal-gallery-item.is_active").is(".gallery-item-0")&&a(".modaal-gallery-prev").hide(),a(".modaal-gallery-item.is_active").is(".gallery-item-"+o)&&a(".modaal-gallery-next").hide()},gallery_update:function(t){var o=this,e=a("#"+o.scope.id),i=e.find(".modaal-gallery-item"),l=i.length-1;if(0==l)return!1;var n=e.find(".modaal-gallery-prev"),s=e.find(".modaal-gallery-next"),d=0,r=0,c=e.find(".modaal-gallery-item."+o.private_options.active_class),m="next"==t?c.next(".modaal-gallery-item"):c.prev(".modaal-gallery-item");return o.options.before_image_change.call(o,c,m),("prev"!=t||!e.find(".gallery-item-0").hasClass("is_active"))&&(("next"!=t||!e.find(".gallery-item-"+l).hasClass("is_active"))&&void c.stop().animate({opacity:0},250,function(){m.addClass("is_next").css({position:"absolute",display:"block",opacity:0});var t=a(document).width(),i=t>1140?280:50;d=e.find(".modaal-gallery-item.is_next").width(),r=e.find(".modaal-gallery-item.is_next").height();var p=e.find(".modaal-gallery-item.is_next img").prop("naturalWidth"),u=e.find(".modaal-gallery-item.is_next img").prop("naturalHeight");p>t-i?(d=t-i,e.find(".modaal-gallery-item.is_next").css({width:d}),e.find(".modaal-gallery-item.is_next img").css({width:d}),r=e.find(".modaal-gallery-item.is_next").find("img").height()):(d=p,r=u),e.find(".modaal-gallery-item-wrap").stop().animate({width:d,height:r},250,function(){c.removeClass(o.private_options.active_class+" "+o.options.gallery_active_class).removeAttr("style"),c.find("img").removeAttr("style"),m.addClass(o.private_options.active_class+" "+o.options.gallery_active_class).removeClass("is_next").css("position",""),m.stop().animate({opacity:1},250,function(){a(this).removeAttr("style").css({width:"100%"}),a(this).find("img").css("width","100%"),e.find(".modaal-gallery-item-wrap").removeAttr("style"),o.options.after_image_change.call(o,m)}),e.find(".modaal-gallery-item").removeAttr("tabindex"),e.find(".modaal-gallery-item."+o.private_options.active_class).attr("tabindex","0").focus(),e.find(".modaal-gallery-item."+o.private_options.active_class).is(".gallery-item-0")?n.stop().animate({opacity:0},150,function(){a(this).hide()}):n.stop().css({display:"block",opacity:n.css("opacity")}).animate({opacity:1},150),e.find(".modaal-gallery-item."+o.private_options.active_class).is(".gallery-item-"+l)?s.stop().animate({opacity:0},150,function(){a(this).hide()}):s.stop().css({display:"block",opacity:n.css("opacity")}).animate({opacity:1},150)})}))},create_video:function(a){var t,o=this;t='<iframe src="'+a+'" class="modaal-video-frame" frameborder="0" allowfullscreen></iframe>',o.build_modal('<div class="modaal-video-container">'+t+"</div>")},create_iframe:function(a){var t,o=this;t=null!==o.options.width||void 0!==o.options.width||null!==o.options.height||void 0!==o.options.height?'<iframe src="'+a+'" class="modaal-iframe-elem" frameborder="0" allowfullscreen></iframe>':'<div class="modaal-content-container">Please specify a width and height for your iframe</div>',o.build_modal(t)},modaal_open:function(){var t=this,o=a("#"+t.scope.id),e=t.options.animation;"none"===e&&(o.removeClass("modaal-start_none"),t.options.after_open.call(t,o)),"fade"===e&&o.removeClass("modaal-start_fade"),"slide-down"===e&&o.removeClass("modaal-start_slide_down");var i=o;a(".modaal-wrapper *[tabindex=0]").removeAttr("tabindex"),i="image"==t.options.type?a("#"+t.scope.id).find(".modaal-gallery-item."+t.private_options.active_class):o.find(".modaal-iframe-elem").length?o.find(".modaal-iframe-elem"):o.find(".modaal-video-wrap").length?o.find(".modaal-video-wrap"):o.find(".modaal-focus"),i.attr("tabindex","0").focus(),"none"!==e&&setTimeout(function(){t.options.after_open.call(t,o)},t.options.after_callback_delay)},modaal_close:function(){var t=this,o=a("#"+t.scope.id);t.options.before_close.call(t,o),null!==t.xhr&&(t.xhr.abort(),t.xhr=null),"none"===t.options.animation&&o.addClass("modaal-start_none"),"fade"===t.options.animation&&o.addClass("modaal-start_fade"),"slide-down"===t.options.animation&&o.addClass("modaal-start_slide_down"),setTimeout(function(){"inline"==t.options.type&&a("#"+t.scope.id+" .modaal-content-container").contents().detach().appendTo(t.scope.source),o.remove(),t.options.after_close.call(t),t.scope.is_open=!1},t.options.after_callback_delay),t.modaal_overlay("hide"),null!=t.lastFocus&&t.lastFocus.focus()},modaal_overlay:function(t){var o=this;"show"==t?(o.scope.is_open=!0,o.options.background_scroll||o.dom.addClass("modaal-noscroll"),a("#"+o.scope.id+"_overlay").length<1&&o.dom.append('<div class="modaal-overlay" id="'+o.scope.id+'_overlay"></div>'),a("#"+o.scope.id+"_overlay").css("background",o.options.background).stop().animate({opacity:o.options.overlay_opacity},o.options.animation_speed,function(){o.modaal_open()})):"hide"==t&&a("#"+o.scope.id+"_overlay").stop().animate({opacity:0},o.options.animation_speed,function(){a(this).remove(),o.dom.removeClass("modaal-noscroll")})},is_touch:function(){return"ontouchstart"in window||navigator.maxTouchPoints}},e=[];a.fn.modaal=function(t){return this.each(function(i){var l=a(this).data("modaal");if(l){if("string"==typeof t)switch(t){case"open":l.create_modaal(l);break;case"close":l.modaal_close()}}else{var n=Object.create(o);n.init(t,this),a.data(this,"modaal",n),e.push({element:a(this).attr("class"),options:t})}})},a.fn.modaal.options={type:"inline",content_source:null,animation:"fade",animation_speed:300,after_callback_delay:350,is_locked:!1,hide_close:!1,background:"#000",overlay_opacity:"0.8",overlay_close:!0,accessible_title:"Dialog Window",start_open:!1,fullscreen:!1,custom_class:"",background_scroll:!1,should_open:!0,close_text:"Close",close_aria_label:"Close (Press escape to close)",width:null,height:null,before_open:function(){},after_open:function(){},before_close:function(){},after_close:function(){},source:function(a,t){return t},confirm_button_text:"Confirm",confirm_cancel_button_text:"Cancel",confirm_title:"Confirm Title",confirm_content:"<p>This is the default confirm dialog content. Replace me through the options</p>",confirm_callback:function(){},confirm_cancel_callback:function(){},gallery_active_class:"gallery_active_item",outer_controls:!1,before_image_change:function(a,t){},after_image_change:function(a){},loading_content:'<div class="modaal-loading-spinner"><div><div></div></div><div><div></div></div><div><div></div></div><div><div></div></div><div><div></div></div><div><div></div></div><div><div></div></div><div><div></div></div></div>',loading_class:"is_loading",ajax_error_class:"modaal-error",ajax_success:function(){},instagram_id:null},a(function(){var o=a(".modaal");o.length&&o.each(function(){t(a(this))});var i=new MutationObserver(function(o){o.forEach(function(o){if(o.addedNodes&&o.addedNodes.length>0){[].some.call(o.addedNodes,function(o){var i=a(o);(i.is("a")||i.is("button"))&&(i.hasClass("modaal")?t(i):e.forEach(function(t){if(t.element==i.attr("class"))return a(i).modaal(t.options),!1}))})}})}),l={subtree:!0,attributes:!0,childList:!0,characterData:!0};setTimeout(function(){i.observe(document.body,l)},500)})}(jQuery,window,document);
vendor: 3,477 bytes, lines 27839-27853
27839 27840$(function(){ 27841 $('.question').on('click', function() { 27842 if($(this).next('p').css('font-size') == '0px') { 27843 $(this).next('p').css({'font-size':'inherit','height':'auto','opacity':'1'}); 27844 $(this).toggleClass('question-open'); 27845 }else{ 27846 $(this).next('p').css({'font-size':'0px','height':'0','opacity':'0'}); 27847 $(this).toggleClass('question-open'); 27848 } 27849 }); 27850}); 27851/*! lazysizes - v5.2.2 */ 27852 27853!function(e){var t=function(u,D,f){"use strict";var k,H;if(function(){var e;var t={lazyClass:"lazyload",loadedClass:"lazyloaded",loadingClass:"lazyloading",preloadClass:"lazypreload",errorClass:"lazyerror",autosizesClass:"lazyautosizes",srcAttr:"data-src",srcsetAttr:"data-srcset",sizesAttr:"data-sizes",minSize:40,customMedia:{},init:true,expFactor:1.5,hFac:.8,loadMode:2,loadHidden:true,ricTimeout:0,throttleDelay:125};H=u.lazySizesConfig||u.lazysizesConfig||{};for(e in t){if(!(e in H)){H[e]=t[e]}}}(),!D||!D.getElementsByClassName){return{init:function(){},cfg:H,noSupport:true}}var O=D.documentElement,a=u.HTMLPictureElement,P="addEventListener",$="getAttribute",q=u[P].bind(u),I=u.setTimeout,U=u.requestAnimationFrame||I,l=u.requestIdleCallback,j=/^picture$/i,r=["load","error","lazyincluded","_lazyloaded"],i={},G=Array.prototype.forEach,J=function(e,t){if(!i[t]){i[t]=new RegExp("(\\s|^)"+t+"(\\s|$)")}return i[t].test(e[$]("class")||"")&&i[t]},K=function(e,t){if(!J(e,t)){e.setAttribute("class",(e[$]("class")||"").trim()+" "+t)}},Q=function(e,t){var i;if(i=J(e,t)){e.setAttribute("class",(e[$]("class")||"").replace(i," "))}},V=function(t,i,e){var a=e?P:"removeEventListener";if(e){V(t,i)}r.forEach(function(e){t[a](e,i)})},X=function(e,t,i,a,r){var n=D.createEvent("Event");if(!i){i={}}i.instance=k;n.initEvent(t,!a,!r);n.detail=i;e.dispatchEvent(n);return n},Y=function(e,t){var i;if(!a&&(i=u.picturefill||H.pf)){if(t&&t.src&&!e[$]("srcset")){e.setAttribute("srcset",t.src)}i({reevaluate:true,elements:[e]})}else if(t&&t.src){e.src=t.src}},Z=function(e,t){return(getComputedStyle(e,null)||{})[t]},s=function(e,t,i){i=i||e.offsetWidth;while(i<H.minSize&&t&&!e._lazysizesWidth){i=t.offsetWidth;t=t.parentNode}return i},ee=function(){var i,a;var t=[];var r=[];var n=t;var s=function(){var e=n;n=t.length?r:t;i=true;a=false;while(e.length){e.shift()()}i=false};var e=function(e,t){if(i&&!t){e.apply(this,arguments)}else{n.push(e);if(!a){a=true;(D.hidden?I:U)(s)}}};e._lsFlush=s;return e}(),te=function(i,e){return e?function(){ee(i)}:function(){var e=this;var t=arguments;ee(function(){i.apply(e,t)})}},ie=function(e){var i;var a=0;var r=H.throttleDelay;var n=H.ricTimeout;var t=function(){i=false;a=f.now();e()};var s=l&&n>49?function(){l(t,{timeout:n});if(n!==H.ricTimeout){n=H.ricTimeout}}:te(function(){I(t)},true);return function(e){var t;if(e=e===true){n=33}if(i){return}i=true;t=r-(f.now()-a);if(t<0){t=0}if(e||t<9){s()}else{I(s,t)}}},ae=function(e){var t,i;var a=99;var r=function(){t=null;e()};var n=function(){var e=f.now()-i;if(e<a){I(n,a-e)}else{(l||r)(r)}};return function(){i=f.now();if(!t){t=I(n,a)}}},e=function(){var v,m,c,h,e;var y,z,g,p,C,b,A;var n=/^img$/i;var d=/^iframe$/i;var E="onscroll"in u&&!/(gle|ing)bot/.test(navigator.userAgent);var _=0;var w=0;var N=0;var M=-1;var x=function(e){N--;if(!e||N<0||!e.target){N=0}};var W=function(e){if(A==null){A=Z(D.body,"visibility")=="hidden"}return A||!(Z(e.parentNode,"visibility")=="hidden"&&Z(e,"visibility")=="hidden")};var S=function(e,t){var i;var a=e;var r=W(e);g-=t;b+=t;p-=t;C+=t;
vendor: 4,896 bytes, lines 27853-27857
27853while(r&&(a=a.offsetParent)&&a!=D.body&&a!=O){r=(Z(a,"opacity")||1)>0;if(r&&Z(a,"overflow")!="visible"){i=a.getBoundingClientRect();r=C>i.left&&p<i.right&&b>i.top-1&&g<i.bottom+1}}return r};var t=function(){var e,t,i,a,r,n,s,l,o,u,f,c;var d=k.elements;if((h=H.loadMode)&&N<8&&(e=d.length)){t=0;M++;for(;t<e;t++){if(!d[t]||d[t]._lazyRace){continue}if(!E||k.prematureUnveil&&k.prematureUnveil(d[t])){R(d[t]);continue}if(!(l=d[t][$]("data-expand"))||!(n=l*1)){n=w}if(!u){u=!H.expand||H.expand<1?O.clientHeight>500&&O.clientWidth>500?500:370:H.expand;k._defEx=u;f=u*H.expFactor;c=H.hFac;A=null;if(w<f&&N<1&&M>2&&h>2&&!D.hidden){w=f;M=0}else if(h>1&&M>1&&N<6){w=u}else{w=_}}if(o!==n){y=innerWidth+n*c;z=innerHeight+n;s=n*-1;o=n}i=d[t].getBoundingClientRect();if((b=i.bottom)>=s&&(g=i.top)<=z&&(C=i.right)>=s*c&&(p=i.left)<=y&&(b||C||p||g)&&(H.loadHidden||W(d[t]))&&(m&&N<3&&!l&&(h<3||M<4)||S(d[t],n))){R(d[t]);r=true;if(N>9){break}}else if(!r&&m&&!a&&N<4&&M<4&&h>2&&(v[0]||H.preloadAfterLoad)&&(v[0]||!l&&(b||C||p||g||d[t][$](H.sizesAttr)!="auto"))){a=v[0]||d[t]}}if(a&&!r){R(a)}}};var i=ie(t);var B=function(e){var t=e.target;if(t._lazyCache){delete t._lazyCache;return}x(e);K(t,H.loadedClass);Q(t,H.loadingClass);V(t,L);X(t,"lazyloaded")};var a=te(B);var L=function(e){a({target:e.target})};var T=function(t,i){try{t.contentWindow.location.replace(i)}catch(e){t.src=i}};var F=function(e){var t;var i=e[$](H.srcsetAttr);if(t=H.customMedia[e[$]("data-media")||e[$]("media")]){e.setAttribute("media",t)}if(i){e.setAttribute("srcset",i)}};var s=te(function(t,e,i,a,r){var n,s,l,o,u,f;if(!(u=X(t,"lazybeforeunveil",e)).defaultPrevented){if(a){if(i){K(t,H.autosizesClass)}else{t.setAttribute("sizes",a)}}s=t[$](H.srcsetAttr);n=t[$](H.srcAttr);if(r){l=t.parentNode;o=l&&j.test(l.nodeName||"")}f=e.firesLoad||"src"in t&&(s||n||o);u={target:t};K(t,H.loadingClass);if(f){clearTimeout(c);c=I(x,2500);V(t,L,true)}if(o){G.call(l.getElementsByTagName("source"),F)}if(s){t.setAttribute("srcset",s)}else if(n&&!o){if(d.test(t.nodeName)){T(t,n)}else{t.src=n}}if(r&&(s||o)){Y(t,{src:n})}}if(t._lazyRace){delete t._lazyRace}Q(t,H.lazyClass);ee(function(){var e=t.complete&&t.naturalWidth>1;if(!f||e){if(e){K(t,"ls-is-cached")}B(u);t._lazyCache=true;I(function(){if("_lazyCache"in t){delete t._lazyCache}},9)}if(t.loading=="lazy"){N--}},true)});var R=function(e){if(e._lazyRace){return}var t;var i=n.test(e.nodeName);var a=i&&(e[$](H.sizesAttr)||e[$]("sizes"));var r=a=="auto";if((r||!m)&&i&&(e[$]("src")||e.srcset)&&!e.complete&&!J(e,H.errorClass)&&J(e,H.lazyClass)){return}t=X(e,"lazyunveilread").detail;if(r){re.updateElem(e,true,e.offsetWidth)}e._lazyRace=true;N++;s(e,t,r,a,i)};var r=ae(function(){H.loadMode=3;i()});var l=function(){if(H.loadMode==3){H.loadMode=2}r()};var o=function(){if(m){return}if(f.now()-e<999){I(o,999);return}m=true;H.loadMode=3;i();q("scroll",l,true)};return{_:function(){e=f.now();k.elements=D.getElementsByClassName(H.lazyClass);v=D.getElementsByClassName(H.lazyClass+" "+H.preloadClass);q("scroll",i,true);q("resize",i,true);q("pageshow",function(e){if(e.persisted){var t=D.querySelectorAll("."+H.loadingClass);if(t.length&&t.forEach){U(function(){t.forEach(function(e){if(e.complete){R(e)}})})}}});if(u.MutationObserver){new MutationObserver(i).observe(O,{childList:true,subtree:true,attributes:true})}else{O[P]("DOMNodeInserted",i,true);O[P]("DOMAttrModified",i,true);setInterval(i,999)}q("hashchange",i,true);["focus","mouseover","click","load","transitionend","animationend"].forEach(function(e){D[P](e,i,true)});if(/d$|^c/.test(D.readyState)){o()}else{q("load",o);D[P]("DOMContentLoaded",i);I(o,2e4)}if(k.elements.length){t();ee._lsFlush()}else{i()}},checkElems:i,unveil:R,_aLSL:l}}(),re=function(){var i;var n=te(function(e,t,i,a){var r,n,s;e._lazysizesWidth=a;a+="px";e.setAttribute("sizes",a);if(j.test(t.nodeName||"")){r=t.getElementsByTagName("source");for(n=0,s=r.length;n<s;n++){r[n].setAttribute("sizes",a)}}if(!i.detail.dataAttr){Y(e,i.detail)}});var a=function(e,t,i){var a;var r=e.parentNode;if(r){i=s(e,r,i);a=X(e,"lazybeforesizes",{width:i,dataAttr:!!t});if(!a.defaultPrevented){i=a.detail.width;if(i&&i!==e._lazysizesWidth){n(e,r,a,i)}}}};var e=function(){var e;var t=i.length;if(t){e=0;for(;e<t;e++){a(i[e])}}};var t=ae(e);return{_:function(){i=D.getElementsByClassName(H.autosizesClass);q("resize",t)},checkElems:t,updateElem:a}}(),t=function(){if(!t.i&&D.getElementsByClassName){t.i=true;re._();e._()}};return I(function(){H.init&&t()}),k={cfg:H,autoSizer:re,loader:e,init:t,uP:Y,aC:K,rC:Q,hC:J,fire:X,gW:s,rAF:ee}}(e,e.document,Date);e.lazySizes=t,"object"==typeof module&&module.exports&&(module.exports=t)}("undefined"!=typeof window?window:{}); 27854// This is a manifest file that'll be compiled into application.js, which will include all the files 27855// listed below. 27856// 27857// Any JavaScript/Coffee file within this directory, lib/assets/javascripts, or any plugin's
27858// vendor/assets/javascripts directory can be referenced here using a relative path. 27859// 27860// Read Sprockets README (https://github.com/rails/sprockets#sprockets-directives) for details 27861// about supported directives. 27862// 27863 27864 27865 27866 27867 27868 27869 27870 27871 27872 27873 27874 27875 27876 27877 27878 27879 27880;
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.