vendor: 78 bytes, lines 1-3
1/******/ (() => { // webpackBootstrap 2/******/ var __webpack_modules__ = ({ 3
vendor: 342 bytes, lines 4-13
4/***/ "./node_modules/axios/index.js": 5/*!*************************************!*\ 6 !*** ./node_modules/axios/index.js ***! 7 \*************************************/ 8/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 9 10module.exports = __webpack_require__(/*! ./lib/axios */ "./node_modules/axios/lib/axios.js"); 11 12/***/ }), 13
vendor: 7,873 bytes, lines 14-236
14/***/ "./node_modules/axios/lib/adapters/xhr.js": 15/*!************************************************!*\ 16 !*** ./node_modules/axios/lib/adapters/xhr.js ***! 17 \************************************************/ 18/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 19 20"use strict"; 21 22 23var utils = __webpack_require__(/*! ./../utils */ "./node_modules/axios/lib/utils.js"); 24var settle = __webpack_require__(/*! ./../core/settle */ "./node_modules/axios/lib/core/settle.js"); 25var cookies = __webpack_require__(/*! ./../helpers/cookies */ "./node_modules/axios/lib/helpers/cookies.js"); 26var buildURL = __webpack_require__(/*! ./../helpers/buildURL */ "./node_modules/axios/lib/helpers/buildURL.js"); 27var buildFullPath = __webpack_require__(/*! ../core/buildFullPath */ "./node_modules/axios/lib/core/buildFullPath.js"); 28var parseHeaders = __webpack_require__(/*! ./../helpers/parseHeaders */ "./node_modules/axios/lib/helpers/parseHeaders.js"); 29var isURLSameOrigin = __webpack_require__(/*! ./../helpers/isURLSameOrigin */ "./node_modules/axios/lib/helpers/isURLSameOrigin.js"); 30var createError = __webpack_require__(/*! ../core/createError */ "./node_modules/axios/lib/core/createError.js"); 31var defaults = __webpack_require__(/*! ../defaults */ "./node_modules/axios/lib/defaults.js"); 32var Cancel = __webpack_require__(/*! ../cancel/Cancel */ "./node_modules/axios/lib/cancel/Cancel.js"); 33 34module.exports = function xhrAdapter(config) { 35 return new Promise(function dispatchXhrRequest(resolve, reject) { 36 var requestData = config.data; 37 var requestHeaders = config.headers; 38 var responseType = config.responseType; 39 var onCanceled; 40 function done() { 41 if (config.cancelToken) { 42 config.cancelToken.unsubscribe(onCanceled); 43 } 44 45 if (config.signal) { 46 config.signal.removeEventListener('abort', onCanceled); 47 } 48 } 49 50 if (utils.isFormData(requestData)) { 51 delete requestHeaders['Content-Type']; // Let the browser set it 52 } 53 54 var request = new XMLHttpRequest(); 55 56 // HTTP basic authentication 57 if (config.auth) { 58 var username = config.auth.username || ''; 59 var password = config.auth.password ? unescape(encodeURIComponent(config.auth.password)) : ''; 60 requestHeaders.Authorization = 'Basic ' + btoa(username + ':' + password); 61 } 62 63 var fullPath = buildFullPath(config.baseURL, config.url); 64 request.open(config.method.toUpperCase(), buildURL(fullPath, config.params, config.paramsSerializer), true); 65 66 // Set the request timeout in MS 67 request.timeout = config.timeout; 68 69 function onloadend() { 70 if (!request) { 71 return; 72 } 73 // Prepare the response 74 var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null; 75 var responseData = !responseType || responseType === 'text' || responseType === 'json' ? 76 request.responseText : request.response; 77 var response = { 78 data: responseData, 79 status: request.status, 80 statusText: request.statusText, 81 headers: responseHeaders, 82 config: config, 83 request: request 84 }; 85 86 settle(function _resolve(value) { 87 resolve(value); 88 done(); 89 }, function _reject(err) { 90 reject(err); 91 done(); 92 }, response); 93 94 // Clean up request 95 request = null; 96 } 97 98 if ('onloadend' in request) { 99 // Use onloadend if available 100 request.onloadend = onloadend; 101 } else { 102 // Listen for ready state to emulate onloadend 103 request.onreadystatechange = function handleLoad() { 104 if (!request || request.readyState !== 4) { 105 return; 106 } 107 108 // The request errored out and we didn't get a response, this will be 109 // handled by onerror instead 110 // With one exception: request that using file: protocol, most browsers 111 // will return status as 0 even though it's a successful request 112 if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) { 113 return; 114 } 115 // readystate handler is calling before onerror or ontimeout handlers, 116 // so we should call onloadend on the next 'tick' 117 setTimeout(onloadend); 118 }; 119 } 120 121 // Handle browser request cancellation (as opposed to a manual cancellation) 122 request.onabort = function handleAbort() { 123 if (!request) { 124 return; 125 } 126 127 reject(createError('Request aborted', config, 'ECONNABORTED', request)); 128 129 // Clean up request 130 request = null; 131 }; 132 133 // Handle low level network errors 134 request.onerror = function handleError() { 135 // Real errors are hidden from us by the browser 136 // onerror should only fire if it's a network error 137 reject(createError('Network Error', config, null, request)); 138 139 // Clean up request 140 request = null; 141 }; 142 143 // Handle timeout 144 request.ontimeout = function handleTimeout() { 145 var timeoutErrorMessage = config.timeout ? 'timeout of ' + config.timeout + 'ms exceeded' : 'timeout exceeded'; 146 var transitional = config.transitional || defaults.transitional; 147 if (config.timeoutErrorMessage) { 148 timeoutErrorMessage = config.timeoutErrorMessage; 149 } 150 reject(createError( 151 timeoutErrorMessage, 152 config, 153 transitional.clarifyTimeoutError ? 'ETIMEDOUT' : 'ECONNABORTED', 154 request)); 155 156 // Clean up request 157 request = null; 158 }; 159 160 // Add xsrf header 161 // This is only done if running in a standard browser environment. 162 // Specifically not if we're in a web worker, or react-native. 163 if (utils.isStandardBrowserEnv()) { 164 // Add xsrf header 165 var xsrfValue = (config.withCredentials || isURLSameOrigin(fullPath)) && config.xsrfCookieName ? 166 cookies.read(config.xsrfCookieName) : 167 undefined; 168 169 if (xsrfValue) { 170 requestHeaders[config.xsrfHeaderName] = xsrfValue; 171 } 172 } 173 174 // Add headers to the request 175 if ('setRequestHeader' in request) { 176 utils.forEach(requestHeaders, function setRequestHeader(val, key) { 177 if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') { 178 // Remove Content-Type if data is undefined 179 delete requestHeaders[key]; 180 } else { 181 // Otherwise add header to the request 182 request.setRequestHeader(key, val); 183 } 184 }); 185 } 186 187 // Add withCredentials to request if needed 188 if (!utils.isUndefined(config.withCredentials)) { 189 request.withCredentials = !!config.withCredentials; 190 } 191 192 // Add responseType to request if needed 193 if (responseType && responseType !== 'json') { 194 request.responseType = config.responseType; 195 } 196 197 // Handle progress if needed 198 if (typeof config.onDownloadProgress === 'function') { 199 request.addEventListener('progress', config.onDownloadProgress); 200 } 201 202 // Not all browsers support upload events 203 if (typeof config.onUploadProgress === 'function' && request.upload) { 204 request.upload.addEventListener('progress', config.onUploadProgress); 205 } 206 207 if (config.cancelToken || config.signal) { 208 // Handle cancellation 209 // eslint-disable-next-line func-names 210 onCanceled = function(cancel) { 211 if (!request) { 212 return; 213 } 214 reject(!cancel || (cancel && cancel.type) ? new Cancel('canceled') : cancel); 215 request.abort(); 216 request = null; 217 }; 218 219 config.cancelToken && config.cancelToken.subscribe(onCanceled); 220 if (config.signal) { 221 config.signal.aborted ? onCanceled() : config.signal.addEventListener('abort', onCanceled); 222 } 223 } 224 225 if (!requestData) { 226 requestData = null; 227 } 228 229 // Send the request 230 request.send(requestData); 231 }); 232}; 233 234 235/***/ }), 236
vendor: 2,498 bytes, lines 237-304
237/***/ "./node_modules/axios/lib/axios.js": 238/*!*****************************************!*\ 239 !*** ./node_modules/axios/lib/axios.js ***! 240 \*****************************************/ 241/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 242 243"use strict"; 244 245 246var utils = __webpack_require__(/*! ./utils */ "./node_modules/axios/lib/utils.js"); 247var bind = __webpack_require__(/*! ./helpers/bind */ "./node_modules/axios/lib/helpers/bind.js"); 248var Axios = __webpack_require__(/*! ./core/Axios */ "./node_modules/axios/lib/core/Axios.js"); 249var mergeConfig = __webpack_require__(/*! ./core/mergeConfig */ "./node_modules/axios/lib/core/mergeConfig.js"); 250var defaults = __webpack_require__(/*! ./defaults */ "./node_modules/axios/lib/defaults.js"); 251 252/** 253 * Create an instance of Axios 254 * 255 * @param {Object} defaultConfig The default config for the instance 256 * @return {Axios} A new instance of Axios 257 */ 258function createInstance(defaultConfig) { 259 var context = new Axios(defaultConfig); 260 var instance = bind(Axios.prototype.request, context); 261 262 // Copy axios.prototype to instance 263 utils.extend(instance, Axios.prototype, context); 264 265 // Copy context to instance 266 utils.extend(instance, context); 267 268 // Factory for creating new instances 269 instance.create = function create(instanceConfig) { 270 return createInstance(mergeConfig(defaultConfig, instanceConfig)); 271 }; 272 273 return instance; 274} 275 276// Create the default instance to be exported 277var axios = createInstance(defaults); 278 279// Expose Axios class to allow class inheritance 280axios.Axios = Axios; 281 282// Expose Cancel & CancelToken 283axios.Cancel = __webpack_require__(/*! ./cancel/Cancel */ "./node_modules/axios/lib/cancel/Cancel.js"); 284axios.CancelToken = __webpack_require__(/*! ./cancel/CancelToken */ "./node_modules/axios/lib/cancel/CancelToken.js"); 285axios.isCancel = __webpack_require__(/*! ./cancel/isCancel */ "./node_modules/axios/lib/cancel/isCancel.js"); 286axios.VERSION = (__webpack_require__(/*! ./env/data */ "./node_modules/axios/lib/env/data.js").version); 287 288// Expose all/spread 289axios.all = function all(promises) { 290 return Promise.all(promises); 291}; 292axios.spread = __webpack_require__(/*! ./helpers/spread */ "./node_modules/axios/lib/helpers/spread.js"); 293 294// Expose isAxiosError 295axios.isAxiosError = __webpack_require__(/*! ./helpers/isAxiosError */ "./node_modules/axios/lib/helpers/isAxiosError.js"); 296 297module.exports = axios; 298 299// Allow use of default import syntax in TypeScript 300module.exports["default"] = axios; 301 302 303/***/ }), 304
vendor: 636 bytes, lines 305-334
305/***/ "./node_modules/axios/lib/cancel/Cancel.js": 306/*!*************************************************!*\ 307 !*** ./node_modules/axios/lib/cancel/Cancel.js ***! 308 \*************************************************/ 309/***/ ((module) => { 310 311"use strict"; 312 313 314/** 315 * A `Cancel` is an object that is thrown when an operation is canceled. 316 * 317 * @class 318 * @param {string=} message The message. 319 */ 320function Cancel(message) { 321 this.message = message; 322} 323 324Cancel.prototype.toString = function toString() { 325 return 'Cancel' + (this.message ? ': ' + this.message : ''); 326}; 327 328Cancel.prototype.__CANCEL__ = true; 329 330module.exports = Cancel; 331 332 333/***/ }), 334
vendor: 2,848 bytes, lines 335-464
335/***/ "./node_modules/axios/lib/cancel/CancelToken.js": 336/*!******************************************************!*\ 337 !*** ./node_modules/axios/lib/cancel/CancelToken.js ***! 338 \******************************************************/ 339/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 340 341"use strict"; 342 343 344var Cancel = __webpack_require__(/*! ./Cancel */ "./node_modules/axios/lib/cancel/Cancel.js"); 345 346/** 347 * A `CancelToken` is an object that can be used to request cancellation of an operation. 348 * 349 * @class 350 * @param {Function} executor The executor function. 351 */ 352function CancelToken(executor) { 353 if (typeof executor !== 'function') { 354 throw new TypeError('executor must be a function.'); 355 } 356 357 var resolvePromise; 358 359 this.promise = new Promise(function promiseExecutor(resolve) { 360 resolvePromise = resolve; 361 }); 362 363 var token = this; 364 365 // eslint-disable-next-line func-names 366 this.promise.then(function(cancel) { 367 if (!token._listeners) return; 368 369 var i; 370 var l = token._listeners.length; 371 372 for (i = 0; i < l; i++) { 373 token._listeners[i](cancel); 374 } 375 token._listeners = null; 376 }); 377 378 // eslint-disable-next-line func-names 379 this.promise.then = function(onfulfilled) { 380 var _resolve; 381 // eslint-disable-next-line func-names 382 var promise = new Promise(function(resolve) { 383 token.subscribe(resolve); 384 _resolve = resolve; 385 }).then(onfulfilled); 386 387 promise.cancel = function reject() { 388 token.unsubscribe(_resolve); 389 }; 390 391 return promise; 392 }; 393 394 executor(function cancel(message) { 395 if (token.reason) { 396 // Cancellation has already been requested 397 return; 398 } 399 400 token.reason = new Cancel(message); 401 resolvePromise(token.reason); 402 }); 403} 404 405/** 406 * Throws a `Cancel` if cancellation has been requested. 407 */ 408CancelToken.prototype.throwIfRequested = function throwIfRequested() { 409 if (this.reason) { 410 throw this.reason; 411 } 412}; 413 414/** 415 * Subscribe to the cancel signal 416 */ 417 418CancelToken.prototype.subscribe = function subscribe(listener) { 419 if (this.reason) { 420 listener(this.reason); 421 return; 422 } 423 424 if (this._listeners) { 425 this._listeners.push(listener); 426 } else { 427 this._listeners = [listener]; 428 } 429}; 430 431/** 432 * Unsubscribe from the cancel signal 433 */ 434 435CancelToken.prototype.unsubscribe = function unsubscribe(listener) { 436 if (!this._listeners) { 437 return; 438 } 439 var index = this._listeners.indexOf(listener); 440 if (index !== -1) { 441 this._listeners.splice(index, 1); 442 } 443}; 444 445/** 446 * Returns an object that contains a new `CancelToken` and a function that, when called, 447 * cancels the `CancelToken`. 448 */ 449CancelToken.source = function source() { 450 var cancel; 451 var token = new CancelToken(function executor(c) { 452 cancel = c; 453 }); 454 return { 455 token: token, 456 cancel: cancel 457 }; 458}; 459 460module.exports = CancelToken; 461 462 463/***/ }), 464
vendor: 361 bytes, lines 465-480
465/***/ "./node_modules/axios/lib/cancel/isCancel.js": 466/*!***************************************************!*\ 467 !*** ./node_modules/axios/lib/cancel/isCancel.js ***! 468 \***************************************************/ 469/***/ ((module) => { 470 471"use strict"; 472 473 474module.exports = function isCancel(value) { 475 return !!(value && value.__CANCEL__); 476}; 477 478 479/***/ }), 480
vendor: 5,073 bytes, lines 481-646
481/***/ "./node_modules/axios/lib/core/Axios.js": 482/*!**********************************************!*\ 483 !*** ./node_modules/axios/lib/core/Axios.js ***! 484 \**********************************************/ 485/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 486 487"use strict"; 488 489 490var utils = __webpack_require__(/*! ./../utils */ "./node_modules/axios/lib/utils.js"); 491var buildURL = __webpack_require__(/*! ../helpers/buildURL */ "./node_modules/axios/lib/helpers/buildURL.js"); 492var InterceptorManager = __webpack_require__(/*! ./InterceptorManager */ "./node_modules/axios/lib/core/InterceptorManager.js"); 493var dispatchRequest = __webpack_require__(/*! ./dispatchRequest */ "./node_modules/axios/lib/core/dispatchRequest.js"); 494var mergeConfig = __webpack_require__(/*! ./mergeConfig */ "./node_modules/axios/lib/core/mergeConfig.js"); 495var validator = __webpack_require__(/*! ../helpers/validator */ "./node_modules/axios/lib/helpers/validator.js"); 496 497var validators = validator.validators; 498/** 499 * Create a new instance of Axios 500 * 501 * @param {Object} instanceConfig The default config for the instance 502 */ 503function Axios(instanceConfig) { 504 this.defaults = instanceConfig; 505 this.interceptors = { 506 request: new InterceptorManager(), 507 response: new InterceptorManager() 508 }; 509} 510 511/** 512 * Dispatch a request 513 * 514 * @param {Object} config The config specific for this request (merged with this.defaults) 515 */ 516Axios.prototype.request = function request(configOrUrl, config) { 517 /*eslint no-param-reassign:0*/ 518 // Allow for axios('example/url'[, config]) a la fetch API 519 if (typeof configOrUrl === 'string') { 520 config = config || {}; 521 config.url = configOrUrl; 522 } else { 523 config = configOrUrl || {}; 524 } 525 526 if (!config.url) { 527 throw new Error('Provided config url is not valid'); 528 } 529 530 config = mergeConfig(this.defaults, config); 531 532 // Set config.method 533 if (config.method) { 534 config.method = config.method.toLowerCase(); 535 } else if (this.defaults.method) { 536 config.method = this.defaults.method.toLowerCase(); 537 } else { 538 config.method = 'get'; 539 } 540 541 var transitional = config.transitional; 542 543 if (transitional !== undefined) { 544 validator.assertOptions(transitional, { 545 silentJSONParsing: validators.transitional(validators.boolean), 546 forcedJSONParsing: validators.transitional(validators.boolean), 547 clarifyTimeoutError: validators.transitional(validators.boolean) 548 }, false); 549 } 550 551 // filter out skipped interceptors 552 var requestInterceptorChain = []; 553 var synchronousRequestInterceptors = true; 554 this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) { 555 if (typeof interceptor.runWhen === 'function' && interceptor.runWhen(config) === false) { 556 return; 557 } 558 559 synchronousRequestInterceptors = synchronousRequestInterceptors && interceptor.synchronous; 560 561 requestInterceptorChain.unshift(interceptor.fulfilled, interceptor.rejected); 562 }); 563 564 var responseInterceptorChain = []; 565 this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) { 566 responseInterceptorChain.push(interceptor.fulfilled, interceptor.rejected); 567 }); 568 569 var promise; 570 571 if (!synchronousRequestInterceptors) { 572 var chain = [dispatchRequest, undefined]; 573 574 Array.prototype.unshift.apply(chain, requestInterceptorChain); 575 chain = chain.concat(responseInterceptorChain); 576 577 promise = Promise.resolve(config); 578 while (chain.length) { 579 promise = promise.then(chain.shift(), chain.shift()); 580 } 581 582 return promise; 583 } 584 585 586 var newConfig = config; 587 while (requestInterceptorChain.length) { 588 var onFulfilled = requestInterceptorChain.shift(); 589 var onRejected = requestInterceptorChain.shift(); 590 try { 591 newConfig = onFulfilled(newConfig); 592 } catch (error) { 593 onRejected(error); 594 break; 595 } 596 } 597 598 try { 599 promise = dispatchRequest(newConfig); 600 } catch (error) { 601 return Promise.reject(error); 602 } 603 604 while (responseInterceptorChain.length) { 605 promise = promise.then(responseInterceptorChain.shift(), responseInterceptorChain.shift()); 606 } 607 608 return promise; 609}; 610 611Axios.prototype.getUri = function getUri(config) { 612 if (!config.url) { 613 throw new Error('Provided config url is not valid'); 614 } 615 config = mergeConfig(this.defaults, config); 616 return buildURL(config.url, config.params, config.paramsSerializer).replace(/^\?/, ''); 617}; 618 619// Provide aliases for supported request methods 620utils.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) { 621 /*eslint func-names:0*/ 622 Axios.prototype[method] = function(url, config) { 623 return this.request(mergeConfig(config || {}, { 624 method: method, 625 url: url, 626 data: (config || {}).data 627 })); 628 }; 629}); 630 631utils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) { 632 /*eslint func-names:0*/ 633 Axios.prototype[method] = function(url, data, config) { 634 return this.request(mergeConfig(config || {}, { 635 method: method, 636 url: url, 637 data: data 638 })); 639 }; 640}); 641 642module.exports = Axios; 643 644 645/***/ }), 646
vendor: 1,754 bytes, lines 647-711
647/***/ "./node_modules/axios/lib/core/InterceptorManager.js": 648/*!***********************************************************!*\ 649 !*** ./node_modules/axios/lib/core/InterceptorManager.js ***! 650 \***********************************************************/ 651/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 652 653"use strict"; 654 655 656var utils = __webpack_require__(/*! ./../utils */ "./node_modules/axios/lib/utils.js"); 657 658function InterceptorManager() { 659 this.handlers = []; 660} 661 662/** 663 * Add a new interceptor to the stack 664 * 665 * @param {Function} fulfilled The function to handle `then` for a `Promise` 666 * @param {Function} rejected The function to handle `reject` for a `Promise` 667 * 668 * @return {Number} An ID used to remove interceptor later 669 */ 670InterceptorManager.prototype.use = function use(fulfilled, rejected, options) { 671 this.handlers.push({ 672 fulfilled: fulfilled, 673 rejected: rejected, 674 synchronous: options ? options.synchronous : false, 675 runWhen: options ? options.runWhen : null 676 }); 677 return this.handlers.length - 1; 678}; 679 680/** 681 * Remove an interceptor from the stack 682 * 683 * @param {Number} id The ID that was returned by `use` 684 */ 685InterceptorManager.prototype.eject = function eject(id) { 686 if (this.handlers[id]) { 687 this.handlers[id] = null; 688 } 689}; 690 691/** 692 * Iterate over all the registered interceptors 693 * 694 * This method is particularly useful for skipping over any 695 * interceptors that may have become `null` calling `eject`. 696 * 697 * @param {Function} fn The function to call for each interceptor 698 */ 699InterceptorManager.prototype.forEach = function forEach(fn) { 700 utils.forEach(this.handlers, function forEachHandler(h) { 701 if (h !== null) { 702 fn(h); 703 } 704 }); 705}; 706 707module.exports = InterceptorManager; 708 709 710/***/ }), 711
vendor: 1,149 bytes, lines 712-742
712/***/ "./node_modules/axios/lib/core/buildFullPath.js": 713/*!******************************************************!*\ 714 !*** ./node_modules/axios/lib/core/buildFullPath.js ***! 715 \******************************************************/ 716/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 717 718"use strict"; 719 720 721var isAbsoluteURL = __webpack_require__(/*! ../helpers/isAbsoluteURL */ "./node_modules/axios/lib/helpers/isAbsoluteURL.js"); 722var combineURLs = __webpack_require__(/*! ../helpers/combineURLs */ "./node_modules/axios/lib/helpers/combineURLs.js"); 723 724/** 725 * Creates a new URL by combining the baseURL with the requestedURL, 726 * only when the requestedURL is not already an absolute URL. 727 * If the requestURL is absolute, this function returns the requestedURL untouched. 728 * 729 * @param {string} baseURL The base URL 730 * @param {string} requestedURL Absolute or relative URL to combine 731 * @returns {string} The combined full path 732 */ 733module.exports = function buildFullPath(baseURL, requestedURL) { 734 if (baseURL && !isAbsoluteURL(requestedURL)) { 735 return combineURLs(baseURL, requestedURL); 736 } 737 return requestedURL; 738}; 739 740 741/***/ }), 742
vendor: 1,000 bytes, lines 743-771
743/***/ "./node_modules/axios/lib/core/createError.js": 744/*!****************************************************!*\ 745 !*** ./node_modules/axios/lib/core/createError.js ***! 746 \****************************************************/ 747/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 748 749"use strict"; 750 751 752var enhanceError = __webpack_require__(/*! ./enhanceError */ "./node_modules/axios/lib/core/enhanceError.js"); 753 754/** 755 * Create an Error with the specified message, config, error code, request and response. 756 * 757 * @param {string} message The error message. 758 * @param {Object} config The config. 759 * @param {string} [code] The error code (for example, 'ECONNABORTED'). 760 * @param {Object} [request] The request. 761 * @param {Object} [response] The response. 762 * @returns {Error} The created error. 763 */ 764module.exports = function createError(message, config, code, request, response) { 765 var error = new Error(message); 766 return enhanceError(error, config, code, request, response); 767}; 768 769 770/***/ }), 771
vendor: 2,747 bytes, lines 772-869
772/***/ "./node_modules/axios/lib/core/dispatchRequest.js": 773/*!********************************************************!*\ 774 !*** ./node_modules/axios/lib/core/dispatchRequest.js ***! 775 \********************************************************/ 776/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 777 778"use strict"; 779 780 781var utils = __webpack_require__(/*! ./../utils */ "./node_modules/axios/lib/utils.js"); 782var transformData = __webpack_require__(/*! ./transformData */ "./node_modules/axios/lib/core/transformData.js"); 783var isCancel = __webpack_require__(/*! ../cancel/isCancel */ "./node_modules/axios/lib/cancel/isCancel.js"); 784var defaults = __webpack_require__(/*! ../defaults */ "./node_modules/axios/lib/defaults.js"); 785var Cancel = __webpack_require__(/*! ../cancel/Cancel */ "./node_modules/axios/lib/cancel/Cancel.js"); 786 787/** 788 * Throws a `Cancel` if cancellation has been requested. 789 */ 790function throwIfCancellationRequested(config) { 791 if (config.cancelToken) { 792 config.cancelToken.throwIfRequested(); 793 } 794 795 if (config.signal && config.signal.aborted) { 796 throw new Cancel('canceled'); 797 } 798} 799 800/** 801 * Dispatch a request to the server using the configured adapter. 802 * 803 * @param {object} config The config that is to be used for the request 804 * @returns {Promise} The Promise to be fulfilled 805 */ 806module.exports = function dispatchRequest(config) { 807 throwIfCancellationRequested(config); 808 809 // Ensure headers exist 810 config.headers = config.headers || {}; 811 812 // Transform request data 813 config.data = transformData.call( 814 config, 815 config.data, 816 config.headers, 817 config.transformRequest 818 ); 819 820 // Flatten headers 821 config.headers = utils.merge( 822 config.headers.common || {}, 823 config.headers[config.method] || {}, 824 config.headers 825 ); 826 827 utils.forEach( 828 ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'], 829 function cleanHeaderConfig(method) { 830 delete config.headers[method]; 831 } 832 ); 833 834 var adapter = config.adapter || defaults.adapter; 835 836 return adapter(config).then(function onAdapterResolution(response) { 837 throwIfCancellationRequested(config); 838 839 // Transform response data 840 response.data = transformData.call( 841 config, 842 response.data, 843 response.headers, 844 config.transformResponse 845 ); 846 847 return response; 848 }, function onAdapterRejection(reason) { 849 if (!isCancel(reason)) { 850 throwIfCancellationRequested(config); 851 852 // Transform response data 853 if (reason && reason.response) { 854 reason.response.data = transformData.call( 855 config, 856 reason.response.data, 857 reason.response.headers, 858 config.transformResponse 859 ); 860 } 861 } 862 863 return Promise.reject(reason); 864 }); 865}; 866 867 868/***/ }), 869
vendor: 1,399 bytes, lines 870-923
870/***/ "./node_modules/axios/lib/core/enhanceError.js": 871/*!*****************************************************!*\ 872 !*** ./node_modules/axios/lib/core/enhanceError.js ***! 873 \*****************************************************/ 874/***/ ((module) => { 875 876"use strict"; 877 878 879/** 880 * Update an Error with the specified config, error code, and response. 881 * 882 * @param {Error} error The error to update. 883 * @param {Object} config The config. 884 * @param {string} [code] The error code (for example, 'ECONNABORTED'). 885 * @param {Object} [request] The request. 886 * @param {Object} [response] The response. 887 * @returns {Error} The error. 888 */ 889module.exports = function enhanceError(error, config, code, request, response) { 890 error.config = config; 891 if (code) { 892 error.code = code; 893 } 894 895 error.request = request; 896 error.response = response; 897 error.isAxiosError = true; 898 899 error.toJSON = function toJSON() { 900 return { 901 // Standard 902 message: this.message, 903 name: this.name, 904 // Microsoft 905 description: this.description, 906 number: this.number, 907 // Mozilla 908 fileName: this.fileName, 909 lineNumber: this.lineNumber, 910 columnNumber: this.columnNumber, 911 stack: this.stack, 912 // Axios 913 config: this.config, 914 code: this.code, 915 status: this.response && this.response.status ? this.response.status : null 916 }; 917 }; 918 return error; 919}; 920 921 922/***/ }), 923
vendor: 3,558 bytes, lines 924-1033
924/***/ "./node_modules/axios/lib/core/mergeConfig.js": 925/*!****************************************************!*\ 926 !*** ./node_modules/axios/lib/core/mergeConfig.js ***! 927 \****************************************************/ 928/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 929 930"use strict"; 931 932 933var utils = __webpack_require__(/*! ../utils */ "./node_modules/axios/lib/utils.js"); 934 935/** 936 * Config-specific merge-function which creates a new config-object 937 * by merging two configuration objects together. 938 * 939 * @param {Object} config1 940 * @param {Object} config2 941 * @returns {Object} New object resulting from merging config2 to config1 942 */ 943module.exports = function mergeConfig(config1, config2) { 944 // eslint-disable-next-line no-param-reassign 945 config2 = config2 || {}; 946 var config = {}; 947 948 function getMergedValue(target, source) { 949 if (utils.isPlainObject(target) && utils.isPlainObject(source)) { 950 return utils.merge(target, source); 951 } else if (utils.isPlainObject(source)) { 952 return utils.merge({}, source); 953 } else if (utils.isArray(source)) { 954 return source.slice(); 955 } 956 return source; 957 } 958 959 // eslint-disable-next-line consistent-return 960 function mergeDeepProperties(prop) { 961 if (!utils.isUndefined(config2[prop])) { 962 return getMergedValue(config1[prop], config2[prop]); 963 } else if (!utils.isUndefined(config1[prop])) { 964 return getMergedValue(undefined, config1[prop]); 965 } 966 } 967 968 // eslint-disable-next-line consistent-return 969 function valueFromConfig2(prop) { 970 if (!utils.isUndefined(config2[prop])) { 971 return getMergedValue(undefined, config2[prop]); 972 } 973 } 974 975 // eslint-disable-next-line consistent-return 976 function defaultToConfig2(prop) { 977 if (!utils.isUndefined(config2[prop])) { 978 return getMergedValue(undefined, config2[prop]); 979 } else if (!utils.isUndefined(config1[prop])) { 980 return getMergedValue(undefined, config1[prop]); 981 } 982 } 983 984 // eslint-disable-next-line consistent-return 985 function mergeDirectKeys(prop) { 986 if (prop in config2) { 987 return getMergedValue(config1[prop], config2[prop]); 988 } else if (prop in config1) { 989 return getMergedValue(undefined, config1[prop]); 990 } 991 } 992 993 var mergeMap = { 994 'url': valueFromConfig2, 995 'method': valueFromConfig2, 996 'data': valueFromConfig2, 997 'baseURL': defaultToConfig2, 998 'transformRequest': defaultToConfig2, 999 'transformResponse': defaultToConfig2, 1000 'paramsSerializer': defaultToConfig2, 1001 'timeout': defaultToConfig2, 1002 'timeoutMessage': defaultToConfig2, 1003 'withCredentials': defaultToConfig2, 1004 'adapter': defaultToConfig2, 1005 'responseType': defaultToConfig2, 1006 'xsrfCookieName': defaultToConfig2, 1007 'xsrfHeaderName': defaultToConfig2, 1008 'onUploadProgress': defaultToConfig2, 1009 'onDownloadProgress': defaultToConfig2, 1010 'decompress': defaultToConfig2, 1011 'maxContentLength': defaultToConfig2, 1012 'maxBodyLength': defaultToConfig2, 1013 'transport': defaultToConfig2, 1014 'httpAgent': defaultToConfig2, 1015 'httpsAgent': defaultToConfig2, 1016 'cancelToken': defaultToConfig2, 1017 'socketPath': defaultToConfig2, 1018 'responseEncoding': defaultToConfig2, 1019 'validateStatus': mergeDirectKeys 1020 }; 1021 1022 utils.forEach(Object.keys(config1).concat(Object.keys(config2)), function computeConfigValue(prop) { 1023 var merge = mergeMap[prop] || mergeDeepProperties; 1024 var configValue = merge(prop); 1025 (utils.isUndefined(configValue) && merge !== mergeDirectKeys) || (config[prop] = configValue); 1026 }); 1027 1028 return config; 1029}; 1030 1031 1032/***/ }), 1033
vendor: 1,060 bytes, lines 1034-1069
1034/***/ "./node_modules/axios/lib/core/settle.js": 1035/*!***********************************************!*\ 1036 !*** ./node_modules/axios/lib/core/settle.js ***! 1037 \***********************************************/ 1038/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 1039 1040"use strict"; 1041 1042 1043var createError = __webpack_require__(/*! ./createError */ "./node_modules/axios/lib/core/createError.js"); 1044 1045/** 1046 * Resolve or reject a Promise based on response status. 1047 * 1048 * @param {Function} resolve A function that resolves the promise. 1049 * @param {Function} reject A function that rejects the promise. 1050 * @param {object} response The response. 1051 */ 1052module.exports = function settle(resolve, reject, response) { 1053 var validateStatus = response.config.validateStatus; 1054 if (!response.status || !validateStatus || validateStatus(response.status)) { 1055 resolve(response); 1056 } else { 1057 reject(createError( 1058 'Request failed with status code ' + response.status, 1059 response.config, 1060 null, 1061 response.request, 1062 response 1063 )); 1064 } 1065}; 1066 1067 1068/***/ }), 1069
vendor: 1,066 bytes, lines 1070-1102
1070/***/ "./node_modules/axios/lib/core/transformData.js": 1071/*!******************************************************!*\ 1072 !*** ./node_modules/axios/lib/core/transformData.js ***! 1073 \******************************************************/ 1074/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 1075 1076"use strict"; 1077 1078 1079var utils = __webpack_require__(/*! ./../utils */ "./node_modules/axios/lib/utils.js"); 1080var defaults = __webpack_require__(/*! ./../defaults */ "./node_modules/axios/lib/defaults.js"); 1081 1082/** 1083 * Transform the data for a request or a response 1084 * 1085 * @param {Object|String} data The data to be transformed 1086 * @param {Array} headers The headers for the request or response 1087 * @param {Array|Function} fns A single function or Array of functions 1088 * @returns {*} The resulting transformed data 1089 */ 1090module.exports = function transformData(data, headers, fns) { 1091 var context = this || defaults; 1092 /*eslint no-param-reassign:0*/ 1093 utils.forEach(fns, function transform(fn) { 1094 data = fn.call(context, data, headers); 1095 }); 1096 1097 return data; 1098}; 1099 1100 1101/***/ }), 1102
vendor: 4,297 bytes, lines 1103-1248
1103/***/ "./node_modules/axios/lib/defaults.js": 1104/*!********************************************!*\ 1105 !*** ./node_modules/axios/lib/defaults.js ***! 1106 \********************************************/ 1107/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 1108 1109"use strict"; 1110/* provided dependency */ var process = __webpack_require__(/*! process/browser.js */ "./node_modules/process/browser.js"); 1111 1112 1113var utils = __webpack_require__(/*! ./utils */ "./node_modules/axios/lib/utils.js"); 1114var normalizeHeaderName = __webpack_require__(/*! ./helpers/normalizeHeaderName */ "./node_modules/axios/lib/helpers/normalizeHeaderName.js"); 1115var enhanceError = __webpack_require__(/*! ./core/enhanceError */ "./node_modules/axios/lib/core/enhanceError.js"); 1116 1117var DEFAULT_CONTENT_TYPE = { 1118 'Content-Type': 'application/x-www-form-urlencoded' 1119}; 1120 1121function setContentTypeIfUnset(headers, value) { 1122 if (!utils.isUndefined(headers) && utils.isUndefined(headers['Content-Type'])) { 1123 headers['Content-Type'] = value; 1124 } 1125} 1126 1127function getDefaultAdapter() { 1128 var adapter; 1129 if (typeof XMLHttpRequest !== 'undefined') { 1130 // For browsers use XHR adapter 1131 adapter = __webpack_require__(/*! ./adapters/xhr */ "./node_modules/axios/lib/adapters/xhr.js"); 1132 } else if (typeof process !== 'undefined' && Object.prototype.toString.call(process) === '[object process]') { 1133 // For node use HTTP adapter 1134 adapter = __webpack_require__(/*! ./adapters/http */ "./node_modules/axios/lib/adapters/xhr.js"); 1135 } 1136 return adapter; 1137} 1138 1139function stringifySafely(rawValue, parser, encoder) { 1140 if (utils.isString(rawValue)) { 1141 try { 1142 (parser || JSON.parse)(rawValue); 1143 return utils.trim(rawValue); 1144 } catch (e) { 1145 if (e.name !== 'SyntaxError') { 1146 throw e; 1147 } 1148 } 1149 } 1150 1151 return (encoder || JSON.stringify)(rawValue); 1152} 1153 1154var defaults = { 1155 1156 transitional: { 1157 silentJSONParsing: true, 1158 forcedJSONParsing: true, 1159 clarifyTimeoutError: false 1160 }, 1161 1162 adapter: getDefaultAdapter(), 1163 1164 transformRequest: [function transformRequest(data, headers) { 1165 normalizeHeaderName(headers, 'Accept'); 1166 normalizeHeaderName(headers, 'Content-Type'); 1167 1168 if (utils.isFormData(data) || 1169 utils.isArrayBuffer(data) || 1170 utils.isBuffer(data) || 1171 utils.isStream(data) || 1172 utils.isFile(data) || 1173 utils.isBlob(data) 1174 ) { 1175 return data; 1176 } 1177 if (utils.isArrayBufferView(data)) { 1178 return data.buffer; 1179 } 1180 if (utils.isURLSearchParams(data)) { 1181 setContentTypeIfUnset(headers, 'application/x-www-form-urlencoded;charset=utf-8'); 1182 return data.toString(); 1183 } 1184 if (utils.isObject(data) || (headers && headers['Content-Type'] === 'application/json')) { 1185 setContentTypeIfUnset(headers, 'application/json'); 1186 return stringifySafely(data); 1187 } 1188 return data; 1189 }], 1190 1191 transformResponse: [function transformResponse(data) { 1192 var transitional = this.transitional || defaults.transitional; 1193 var silentJSONParsing = transitional && transitional.silentJSONParsing; 1194 var forcedJSONParsing = transitional && transitional.forcedJSONParsing; 1195 var strictJSONParsing = !silentJSONParsing && this.responseType === 'json'; 1196 1197 if (strictJSONParsing || (forcedJSONParsing && utils.isString(data) && data.length)) { 1198 try { 1199 return JSON.parse(data); 1200 } catch (e) { 1201 if (strictJSONParsing) { 1202 if (e.name === 'SyntaxError') { 1203 throw enhanceError(e, this, 'E_JSON_PARSE'); 1204 } 1205 throw e; 1206 } 1207 } 1208 } 1209 1210 return data; 1211 }], 1212 1213 /** 1214 * A timeout in milliseconds to abort a request. If set to 0 (default) a 1215 * timeout is not created. 1216 */ 1217 timeout: 0, 1218 1219 xsrfCookieName: 'XSRF-TOKEN', 1220 xsrfHeaderName: 'X-XSRF-TOKEN', 1221 1222 maxContentLength: -1, 1223 maxBodyLength: -1, 1224 1225 validateStatus: function validateStatus(status) { 1226 return status >= 200 && status < 300; 1227 }, 1228 1229 headers: { 1230 common: { 1231 'Accept': 'application/json, text/plain, */*' 1232 } 1233 } 1234}; 1235 1236utils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) { 1237 defaults.headers[method] = {}; 1238}); 1239 1240utils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) { 1241 defaults.headers[method] = utils.merge(DEFAULT_CONTENT_TYPE); 1242}); 1243 1244module.exports = defaults; 1245 1246 1247/***/ }), 1248
vendor: 273 bytes, lines 1249-1260
1249/***/ "./node_modules/axios/lib/env/data.js": 1250/*!********************************************!*\ 1251 !*** ./node_modules/axios/lib/env/data.js ***! 1252 \********************************************/ 1253/***/ ((module) => { 1254 1255module.exports = { 1256 "version": "0.25.0" 1257}; 1258 1259/***/ }), 1260
vendor: 503 bytes, lines 1261-1282
1261/***/ "./node_modules/axios/lib/helpers/bind.js": 1262/*!************************************************!*\ 1263 !*** ./node_modules/axios/lib/helpers/bind.js ***! 1264 \************************************************/ 1265/***/ ((module) => { 1266 1267"use strict"; 1268 1269 1270module.exports = function bind(fn, thisArg) { 1271 return function wrap() { 1272 var args = new Array(arguments.length); 1273 for (var i = 0; i < args.length; i++) { 1274 args[i] = arguments[i]; 1275 } 1276 return fn.apply(thisArg, args); 1277 }; 1278}; 1279 1280 1281/***/ }), 1282
vendor: 2,007 bytes, lines 1283-1363
1283/***/ "./node_modules/axios/lib/helpers/buildURL.js": 1284/*!****************************************************!*\ 1285 !*** ./node_modules/axios/lib/helpers/buildURL.js ***! 1286 \****************************************************/ 1287/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 1288 1289"use strict"; 1290 1291 1292var utils = __webpack_require__(/*! ./../utils */ "./node_modules/axios/lib/utils.js"); 1293 1294function encode(val) { 1295 return encodeURIComponent(val). 1296 replace(/%3A/gi, ':'). 1297 replace(/%24/g, '$'). 1298 replace(/%2C/gi, ','). 1299 replace(/%20/g, '+'). 1300 replace(/%5B/gi, '['). 1301 replace(/%5D/gi, ']'); 1302} 1303 1304/** 1305 * Build a URL by appending params to the end 1306 * 1307 * @param {string} url The base of the url (e.g., http://www.google.com) 1308 * @param {object} [params] The params to be appended 1309 * @returns {string} The formatted url 1310 */ 1311module.exports = function buildURL(url, params, paramsSerializer) { 1312 /*eslint no-param-reassign:0*/ 1313 if (!params) { 1314 return url; 1315 } 1316 1317 var serializedParams; 1318 if (paramsSerializer) { 1319 serializedParams = paramsSerializer(params); 1320 } else if (utils.isURLSearchParams(params)) { 1321 serializedParams = params.toString(); 1322 } else { 1323 var parts = []; 1324 1325 utils.forEach(params, function serialize(val, key) { 1326 if (val === null || typeof val === 'undefined') { 1327 return; 1328 } 1329 1330 if (utils.isArray(val)) { 1331 key = key + '[]'; 1332 } else { 1333 val = [val]; 1334 } 1335 1336 utils.forEach(val, function parseValue(v) { 1337 if (utils.isDate(v)) { 1338 v = v.toISOString(); 1339 } else if (utils.isObject(v)) { 1340 v = JSON.stringify(v); 1341 } 1342 parts.push(encode(key) + '=' + encode(v)); 1343 }); 1344 }); 1345 1346 serializedParams = parts.join('&'); 1347 } 1348 1349 if (serializedParams) { 1350 var hashmarkIndex = url.indexOf('#'); 1351 if (hashmarkIndex !== -1) { 1352 url = url.slice(0, hashmarkIndex); 1353 } 1354 1355 url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams; 1356 } 1357 1358 return url; 1359}; 1360 1361 1362/***/ }), 1363
vendor: 655 bytes, lines 1364-1388
1364/***/ "./node_modules/axios/lib/helpers/combineURLs.js": 1365/*!*******************************************************!*\ 1366 !*** ./node_modules/axios/lib/helpers/combineURLs.js ***! 1367 \*******************************************************/ 1368/***/ ((module) => { 1369 1370"use strict"; 1371 1372 1373/** 1374 * Creates a new URL by combining the specified URLs 1375 * 1376 * @param {string} baseURL The base URL 1377 * @param {string} relativeURL The relative URL 1378 * @returns {string} The combined URL 1379 */ 1380module.exports = function combineURLs(baseURL, relativeURL) { 1381 return relativeURL 1382 ? baseURL.replace(/\/+$/, '') + '/' + relativeURL.replace(/^\/+/, '') 1383 : baseURL; 1384}; 1385 1386 1387/***/ }), 1388
vendor: 1,794 bytes, lines 1389-1452
1389/***/ "./node_modules/axios/lib/helpers/cookies.js": 1390/*!***************************************************!*\ 1391 !*** ./node_modules/axios/lib/helpers/cookies.js ***! 1392 \***************************************************/ 1393/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 1394 1395"use strict"; 1396 1397 1398var utils = __webpack_require__(/*! ./../utils */ "./node_modules/axios/lib/utils.js"); 1399 1400module.exports = ( 1401 utils.isStandardBrowserEnv() ? 1402 1403 // Standard browser envs support document.cookie 1404 (function standardBrowserEnv() { 1405 return { 1406 write: function write(name, value, expires, path, domain, secure) { 1407 var cookie = []; 1408 cookie.push(name + '=' + encodeURIComponent(value)); 1409 1410 if (utils.isNumber(expires)) { 1411 cookie.push('expires=' + new Date(expires).toGMTString()); 1412 } 1413 1414 if (utils.isString(path)) { 1415 cookie.push('path=' + path); 1416 } 1417 1418 if (utils.isString(domain)) { 1419 cookie.push('domain=' + domain); 1420 } 1421 1422 if (secure === true) { 1423 cookie.push('secure'); 1424 } 1425 1426 document.cookie = cookie.join('; '); 1427 }, 1428 1429 read: function read(name) { 1430 var match = document.cookie.match(new RegExp('(^|;\\s*)(' + name + ')=([^;]*)')); 1431 return (match ? decodeURIComponent(match[3]) : null); 1432 }, 1433 1434 remove: function remove(name) { 1435 this.write(name, '', Date.now() - 86400000); 1436 } 1437 }; 1438 })() : 1439 1440 // Non standard browser env (web workers, react-native) lack needed support. 1441 (function nonStandardBrowserEnv() { 1442 return { 1443 write: function write() {}, 1444 read: function read() { return null; }, 1445 remove: function remove() {} 1446 }; 1447 })() 1448); 1449 1450 1451/***/ }), 1452
vendor: 844 bytes, lines 1453-1477
1453/***/ "./node_modules/axios/lib/helpers/isAbsoluteURL.js": 1454/*!*********************************************************!*\ 1455 !*** ./node_modules/axios/lib/helpers/isAbsoluteURL.js ***! 1456 \*********************************************************/ 1457/***/ ((module) => { 1458 1459"use strict"; 1460 1461 1462/** 1463 * Determines whether the specified URL is absolute 1464 * 1465 * @param {string} url The URL to test 1466 * @returns {boolean} True if the specified URL is absolute, otherwise false 1467 */ 1468module.exports = function isAbsoluteURL(url) { 1469 // A URL is considered absolute if it begins with "<scheme>://" or "//" (protocol-relative URL). 1470 // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed 1471 // by any combination of letters, digits, plus, period, or hyphen. 1472 return /^([a-z][a-z\d+\-.]*:)?\/\//i.test(url); 1473}; 1474 1475 1476/***/ }), 1477
vendor: 752 bytes, lines 1478-1501
1478/***/ "./node_modules/axios/lib/helpers/isAxiosError.js": 1479/*!********************************************************!*\ 1480 !*** ./node_modules/axios/lib/helpers/isAxiosError.js ***! 1481 \********************************************************/ 1482/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 1483 1484"use strict"; 1485 1486 1487var utils = __webpack_require__(/*! ./../utils */ "./node_modules/axios/lib/utils.js"); 1488 1489/** 1490 * Determines whether the payload is an error thrown by Axios 1491 * 1492 * @param {*} payload The value to test 1493 * @returns {boolean} True if the payload is an error thrown by Axios, otherwise false 1494 */ 1495module.exports = function isAxiosError(payload) { 1496 return utils.isObject(payload) && (payload.isAxiosError === true); 1497}; 1498 1499 1500/***/ }), 1501
vendor: 2,696 bytes, lines 1502-1580
1502/***/ "./node_modules/axios/lib/helpers/isURLSameOrigin.js": 1503/*!***********************************************************!*\ 1504 !*** ./node_modules/axios/lib/helpers/isURLSameOrigin.js ***! 1505 \***********************************************************/ 1506/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 1507 1508"use strict"; 1509 1510 1511var utils = __webpack_require__(/*! ./../utils */ "./node_modules/axios/lib/utils.js"); 1512 1513module.exports = ( 1514 utils.isStandardBrowserEnv() ? 1515 1516 // Standard browser envs have full support of the APIs needed to test 1517 // whether the request URL is of the same origin as current location. 1518 (function standardBrowserEnv() { 1519 var msie = /(msie|trident)/i.test(navigator.userAgent); 1520 var urlParsingNode = document.createElement('a'); 1521 var originURL; 1522 1523 /** 1524 * Parse a URL to discover it's components 1525 * 1526 * @param {String} url The URL to be parsed 1527 * @returns {Object} 1528 */ 1529 function resolveURL(url) { 1530 var href = url; 1531 1532 if (msie) { 1533 // IE needs attribute set twice to normalize properties 1534 urlParsingNode.setAttribute('href', href); 1535 href = urlParsingNode.href; 1536 } 1537 1538 urlParsingNode.setAttribute('href', href); 1539 1540 // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils 1541 return { 1542 href: urlParsingNode.href, 1543 protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '', 1544 host: urlParsingNode.host, 1545 search: urlParsingNode.search ? urlParsingNode.search.replace(/^\?/, '') : '', 1546 hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '', 1547 hostname: urlParsingNode.hostname, 1548 port: urlParsingNode.port, 1549 pathname: (urlParsingNode.pathname.charAt(0) === '/') ? 1550 urlParsingNode.pathname : 1551 '/' + urlParsingNode.pathname 1552 }; 1553 } 1554 1555 originURL = resolveURL(window.location.href); 1556 1557 /** 1558 * Determine if a URL shares the same origin as the current location 1559 * 1560 * @param {String} requestURL The URL to test 1561 * @returns {boolean} True if URL shares the same origin, otherwise false 1562 */ 1563 return function isURLSameOrigin(requestURL) { 1564 var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL; 1565 return (parsed.protocol === originURL.protocol && 1566 parsed.host === originURL.host); 1567 }; 1568 })() : 1569 1570 // Non standard browser envs (web workers, react-native) lack needed support. 1571 (function nonStandardBrowserEnv() { 1572 return function isURLSameOrigin() { 1573 return true; 1574 }; 1575 })() 1576); 1577 1578 1579/***/ }), 1580
vendor: 764 bytes, lines 1581-1603
1581/***/ "./node_modules/axios/lib/helpers/normalizeHeaderName.js": 1582/*!***************************************************************!*\ 1583 !*** ./node_modules/axios/lib/helpers/normalizeHeaderName.js ***! 1584 \***************************************************************/ 1585/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 1586 1587"use strict"; 1588 1589 1590var utils = __webpack_require__(/*! ../utils */ "./node_modules/axios/lib/utils.js"); 1591 1592module.exports = function normalizeHeaderName(headers, normalizedName) { 1593 utils.forEach(headers, function processHeader(value, name) { 1594 if (name !== normalizedName && name.toUpperCase() === normalizedName.toUpperCase()) { 1595 headers[normalizedName] = value; 1596 delete headers[name]; 1597 } 1598 }); 1599}; 1600 1601 1602/***/ }), 1603
vendor: 1,772 bytes, lines 1604-1667
1604/***/ "./node_modules/axios/lib/helpers/parseHeaders.js": 1605/*!********************************************************!*\ 1606 !*** ./node_modules/axios/lib/helpers/parseHeaders.js ***! 1607 \********************************************************/ 1608/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 1609 1610"use strict"; 1611 1612 1613var utils = __webpack_require__(/*! ./../utils */ "./node_modules/axios/lib/utils.js"); 1614 1615// Headers whose duplicates are ignored by node 1616// c.f. https://nodejs.org/api/http.html#http_message_headers 1617var ignoreDuplicateOf = [ 1618 'age', 'authorization', 'content-length', 'content-type', 'etag', 1619 'expires', 'from', 'host', 'if-modified-since', 'if-unmodified-since', 1620 'last-modified', 'location', 'max-forwards', 'proxy-authorization', 1621 'referer', 'retry-after', 'user-agent' 1622]; 1623 1624/** 1625 * Parse headers into an object 1626 * 1627 * ``` 1628 * Date: Wed, 27 Aug 2014 08:58:49 GMT 1629 * Content-Type: application/json 1630 * Connection: keep-alive 1631 * Transfer-Encoding: chunked 1632 * ``` 1633 * 1634 * @param {String} headers Headers needing to be parsed 1635 * @returns {Object} Headers parsed into an object 1636 */ 1637module.exports = function parseHeaders(headers) { 1638 var parsed = {}; 1639 var key; 1640 var val; 1641 var i; 1642 1643 if (!headers) { return parsed; } 1644 1645 utils.forEach(headers.split('\n'), function parser(line) { 1646 i = line.indexOf(':'); 1647 key = utils.trim(line.substr(0, i)).toLowerCase(); 1648 val = utils.trim(line.substr(i + 1)); 1649 1650 if (key) { 1651 if (parsed[key] && ignoreDuplicateOf.indexOf(key) >= 0) { 1652 return; 1653 } 1654 if (key === 'set-cookie') { 1655 parsed[key] = (parsed[key] ? parsed[key] : []).concat([val]); 1656 } else { 1657 parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val; 1658 } 1659 } 1660 }); 1661 1662 return parsed; 1663}; 1664 1665 1666/***/ }), 1667
vendor: 819 bytes, lines 1668-1705
1668/***/ "./node_modules/axios/lib/helpers/spread.js": 1669/*!**************************************************!*\ 1670 !*** ./node_modules/axios/lib/helpers/spread.js ***! 1671 \**************************************************/ 1672/***/ ((module) => { 1673 1674"use strict"; 1675 1676 1677/** 1678 * Syntactic sugar for invoking a function and expanding an array for arguments. 1679 * 1680 * Common use case would be to use `Function.prototype.apply`. 1681 * 1682 * ```js 1683 * function f(x, y, z) {} 1684 * var args = [1, 2, 3]; 1685 * f.apply(null, args); 1686 * ``` 1687 * 1688 * With `spread` this example can be re-written. 1689 * 1690 * ```js 1691 * spread(function(x, y, z) {})([1, 2, 3]); 1692 * ``` 1693 * 1694 * @param {Function} callback 1695 * @returns {Function} 1696 */ 1697module.exports = function spread(callback) { 1698 return function wrap(arr) { 1699 return callback.apply(null, arr); 1700 }; 1701}; 1702 1703 1704/***/ }), 1705
vendor: 2,719 bytes, lines 1706-1798
1706/***/ "./node_modules/axios/lib/helpers/validator.js": 1707/*!*****************************************************!*\ 1708 !*** ./node_modules/axios/lib/helpers/validator.js ***! 1709 \*****************************************************/ 1710/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 1711 1712"use strict"; 1713 1714 1715var VERSION = (__webpack_require__(/*! ../env/data */ "./node_modules/axios/lib/env/data.js").version); 1716 1717var validators = {}; 1718 1719// eslint-disable-next-line func-names 1720['object', 'boolean', 'number', 'function', 'string', 'symbol'].forEach(function(type, i) { 1721 validators[type] = function validator(thing) { 1722 return typeof thing === type || 'a' + (i < 1 ? 'n ' : ' ') + type; 1723 }; 1724}); 1725 1726var deprecatedWarnings = {}; 1727 1728/** 1729 * Transitional option validator 1730 * @param {function|boolean?} validator - set to false if the transitional option has been removed 1731 * @param {string?} version - deprecated version / removed since version 1732 * @param {string?} message - some message with additional info 1733 * @returns {function} 1734 */ 1735validators.transitional = function transitional(validator, version, message) { 1736 function formatMessage(opt, desc) { 1737 return '[Axios v' + VERSION + '] Transitional option \'' + opt + '\'' + desc + (message ? '. ' + message : ''); 1738 } 1739 1740 // eslint-disable-next-line func-names 1741 return function(value, opt, opts) { 1742 if (validator === false) { 1743 throw new Error(formatMessage(opt, ' has been removed' + (version ? ' in ' + version : ''))); 1744 } 1745 1746 if (version && !deprecatedWarnings[opt]) { 1747 deprecatedWarnings[opt] = true; 1748 // eslint-disable-next-line no-console 1749 console.warn( 1750 formatMessage( 1751 opt, 1752 ' has been deprecated since v' + version + ' and will be removed in the near future' 1753 ) 1754 ); 1755 } 1756 1757 return validator ? validator(value, opt, opts) : true; 1758 }; 1759}; 1760 1761/** 1762 * Assert object's properties type 1763 * @param {object} options 1764 * @param {object} schema 1765 * @param {boolean?} allowUnknown 1766 */ 1767 1768function assertOptions(options, schema, allowUnknown) { 1769 if (typeof options !== 'object') { 1770 throw new TypeError('options must be an object'); 1771 } 1772 var keys = Object.keys(options); 1773 var i = keys.length; 1774 while (i-- > 0) { 1775 var opt = keys[i]; 1776 var validator = schema[opt]; 1777 if (validator) { 1778 var value = options[opt]; 1779 var result = value === undefined || validator(value, opt, options); 1780 if (result !== true) { 1781 throw new TypeError('option ' + opt + ' must be ' + result); 1782 } 1783 continue; 1784 } 1785 if (allowUnknown !== true) { 1786 throw Error('Unknown option ' + opt); 1787 } 1788 } 1789} 1790 1791module.exports = { 1792 assertOptions: assertOptions, 1793 validators: validators 1794}; 1795 1796 1797/***/ }), 1798
vendor: 9,185 bytes, lines 1799-2158
1799/***/ "./node_modules/axios/lib/utils.js": 1800/*!*****************************************!*\ 1801 !*** ./node_modules/axios/lib/utils.js ***! 1802 \*****************************************/ 1803/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 1804 1805"use strict"; 1806 1807 1808var bind = __webpack_require__(/*! ./helpers/bind */ "./node_modules/axios/lib/helpers/bind.js"); 1809 1810// utils is a library of generic helper functions non-specific to axios 1811 1812var toString = Object.prototype.toString; 1813 1814/** 1815 * Determine if a value is an Array 1816 * 1817 * @param {Object} val The value to test 1818 * @returns {boolean} True if value is an Array, otherwise false 1819 */ 1820function isArray(val) { 1821 return Array.isArray(val); 1822} 1823 1824/** 1825 * Determine if a value is undefined 1826 * 1827 * @param {Object} val The value to test 1828 * @returns {boolean} True if the value is undefined, otherwise false 1829 */ 1830function isUndefined(val) { 1831 return typeof val === 'undefined'; 1832} 1833 1834/** 1835 * Determine if a value is a Buffer 1836 * 1837 * @param {Object} val The value to test 1838 * @returns {boolean} True if value is a Buffer, otherwise false 1839 */ 1840function isBuffer(val) { 1841 return val !== null && !isUndefined(val) && val.constructor !== null && !isUndefined(val.constructor) 1842 && typeof val.constructor.isBuffer === 'function' && val.constructor.isBuffer(val); 1843} 1844 1845/** 1846 * Determine if a value is an ArrayBuffer 1847 * 1848 * @param {Object} val The value to test 1849 * @returns {boolean} True if value is an ArrayBuffer, otherwise false 1850 */ 1851function isArrayBuffer(val) { 1852 return toString.call(val) === '[object ArrayBuffer]'; 1853} 1854 1855/** 1856 * Determine if a value is a FormData 1857 * 1858 * @param {Object} val The value to test 1859 * @returns {boolean} True if value is an FormData, otherwise false 1860 */ 1861function isFormData(val) { 1862 return toString.call(val) === '[object FormData]'; 1863} 1864 1865/** 1866 * Determine if a value is a view on an ArrayBuffer 1867 * 1868 * @param {Object} val The value to test 1869 * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false 1870 */ 1871function isArrayBufferView(val) { 1872 var result; 1873 if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) { 1874 result = ArrayBuffer.isView(val); 1875 } else { 1876 result = (val) && (val.buffer) && (isArrayBuffer(val.buffer)); 1877 } 1878 return result; 1879} 1880 1881/** 1882 * Determine if a value is a String 1883 * 1884 * @param {Object} val The value to test 1885 * @returns {boolean} True if value is a String, otherwise false 1886 */ 1887function isString(val) { 1888 return typeof val === 'string'; 1889} 1890 1891/** 1892 * Determine if a value is a Number 1893 * 1894 * @param {Object} val The value to test 1895 * @returns {boolean} True if value is a Number, otherwise false 1896 */ 1897function isNumber(val) { 1898 return typeof val === 'number'; 1899} 1900 1901/** 1902 * Determine if a value is an Object 1903 * 1904 * @param {Object} val The value to test 1905 * @returns {boolean} True if value is an Object, otherwise false 1906 */ 1907function isObject(val) { 1908 return val !== null && typeof val === 'object'; 1909} 1910 1911/** 1912 * Determine if a value is a plain Object 1913 * 1914 * @param {Object} val The value to test 1915 * @return {boolean} True if value is a plain Object, otherwise false 1916 */ 1917function isPlainObject(val) { 1918 if (toString.call(val) !== '[object Object]') { 1919 return false; 1920 } 1921 1922 var prototype = Object.getPrototypeOf(val); 1923 return prototype === null || prototype === Object.prototype; 1924} 1925 1926/** 1927 * Determine if a value is a Date 1928 * 1929 * @param {Object} val The value to test 1930 * @returns {boolean} True if value is a Date, otherwise false 1931 */ 1932function isDate(val) { 1933 return toString.call(val) === '[object Date]'; 1934} 1935 1936/** 1937 * Determine if a value is a File 1938 * 1939 * @param {Object} val The value to test 1940 * @returns {boolean} True if value is a File, otherwise false 1941 */ 1942function isFile(val) { 1943 return toString.call(val) === '[object File]'; 1944} 1945 1946/** 1947 * Determine if a value is a Blob 1948 * 1949 * @param {Object} val The value to test 1950 * @returns {boolean} True if value is a Blob, otherwise false 1951 */ 1952function isBlob(val) { 1953 return toString.call(val) === '[object Blob]'; 1954} 1955 1956/** 1957 * Determine if a value is a Function 1958 * 1959 * @param {Object} val The value to test 1960 * @returns {boolean} True if value is a Function, otherwise false 1961 */ 1962function isFunction(val) { 1963 return toString.call(val) === '[object Function]'; 1964} 1965 1966/** 1967 * Determine if a value is a Stream 1968 * 1969 * @param {Object} val The value to test 1970 * @returns {boolean} True if value is a Stream, otherwise false 1971 */ 1972function isStream(val) { 1973 return isObject(val) && isFunction(val.pipe); 1974} 1975 1976/** 1977 * Determine if a value is a URLSearchParams object 1978 * 1979 * @param {Object} val The value to test 1980 * @returns {boolean} True if value is a URLSearchParams object, otherwise false 1981 */ 1982function isURLSearchParams(val) { 1983 return toString.call(val) === '[object URLSearchParams]'; 1984} 1985 1986/** 1987 * Trim excess whitespace off the beginning and end of a string 1988 * 1989 * @param {String} str The String to trim 1990 * @returns {String} The String freed of excess whitespace 1991 */ 1992function trim(str) { 1993 return str.trim ? str.trim() : str.replace(/^\s+|\s+$/g, ''); 1994} 1995 1996/** 1997 * Determine if we're running in a standard browser environment 1998 * 1999 * This allows axios to run in a web worker, and react-native. 2000 * Both environments support XMLHttpRequest, but not fully standard globals. 2001 * 2002 * web workers: 2003 * typeof window -> undefined 2004 * typeof document -> undefined 2005 * 2006 * react-native: 2007 * navigator.product -> 'ReactNative' 2008 * nativescript 2009 * navigator.product -> 'NativeScript' or 'NS' 2010 */ 2011function isStandardBrowserEnv() { 2012 if (typeof navigator !== 'undefined' && (navigator.product === 'ReactNative' || 2013 navigator.product === 'NativeScript' || 2014 navigator.product === 'NS')) { 2015 return false; 2016 } 2017 return ( 2018 typeof window !== 'undefined' && 2019 typeof document !== 'undefined' 2020 ); 2021} 2022 2023/** 2024 * Iterate over an Array or an Object invoking a function for each item. 2025 * 2026 * If `obj` is an Array callback will be called passing 2027 * the value, index, and complete array for each item. 2028 * 2029 * If 'obj' is an Object callback will be called passing 2030 * the value, key, and complete object for each property. 2031 * 2032 * @param {Object|Array} obj The object to iterate 2033 * @param {Function} fn The callback to invoke for each item 2034 */ 2035function forEach(obj, fn) { 2036 // Don't bother if no value provided 2037 if (obj === null || typeof obj === 'undefined') { 2038 return; 2039 } 2040 2041 // Force an array if not already something iterable 2042 if (typeof obj !== 'object') { 2043 /*eslint no-param-reassign:0*/ 2044 obj = [obj]; 2045 } 2046 2047 if (isArray(obj)) { 2048 // Iterate over array values 2049 for (var i = 0, l = obj.length; i < l; i++) { 2050 fn.call(null, obj[i], i, obj); 2051 } 2052 } else { 2053 // Iterate over object keys 2054 for (var key in obj) { 2055 if (Object.prototype.hasOwnProperty.call(obj, key)) { 2056 fn.call(null, obj[key], key, obj); 2057 } 2058 } 2059 } 2060} 2061 2062/** 2063 * Accepts varargs expecting each argument to be an object, then 2064 * immutably merges the properties of each object and returns result. 2065 * 2066 * When multiple objects contain the same key the later object in 2067 * the arguments list will take precedence. 2068 * 2069 * Example: 2070 * 2071 * ```js 2072 * var result = merge({foo: 123}, {foo: 456}); 2073 * console.log(result.foo); // outputs 456 2074 * ``` 2075 * 2076 * @param {Object} obj1 Object to merge 2077 * @returns {Object} Result of all merge properties 2078 */ 2079function merge(/* obj1, obj2, obj3, ... */) { 2080 var result = {}; 2081 function assignValue(val, key) { 2082 if (isPlainObject(result[key]) && isPlainObject(val)) { 2083 result[key] = merge(result[key], val); 2084 } else if (isPlainObject(val)) { 2085 result[key] = merge({}, val); 2086 } else if (isArray(val)) { 2087 result[key] = val.slice(); 2088 } else { 2089 result[key] = val; 2090 } 2091 } 2092 2093 for (var i = 0, l = arguments.length; i < l; i++) { 2094 forEach(arguments[i], assignValue); 2095 } 2096 return result; 2097} 2098 2099/** 2100 * Extends object a by mutably adding to it the properties of object b. 2101 * 2102 * @param {Object} a The object to be extended 2103 * @param {Object} b The object to copy properties from 2104 * @param {Object} thisArg The object to bind function to 2105 * @return {Object} The resulting value of object a 2106 */ 2107function extend(a, b, thisArg) { 2108 forEach(b, function assignValue(val, key) { 2109 if (thisArg && typeof val === 'function') { 2110 a[key] = bind(val, thisArg); 2111 } else { 2112 a[key] = val; 2113 } 2114 }); 2115 return a; 2116} 2117 2118/** 2119 * Remove byte order marker. This catches EF BB BF (the UTF-8 BOM) 2120 * 2121 * @param {string} content with BOM 2122 * @return {string} content value without BOM 2123 */ 2124function stripBOM(content) { 2125 if (content.charCodeAt(0) === 0xFEFF) { 2126 content = content.slice(1); 2127 } 2128 return content; 2129} 2130 2131module.exports = { 2132 isArray: isArray, 2133 isArrayBuffer: isArrayBuffer, 2134 isBuffer: isBuffer, 2135 isFormData: isFormData, 2136 isArrayBufferView: isArrayBufferView, 2137 isString: isString, 2138 isNumber: isNumber, 2139 isObject: isObject, 2140 isPlainObject: isPlainObject, 2141 isUndefined: isUndefined, 2142 isDate: isDate, 2143 isFile: isFile, 2144 isBlob: isBlob, 2145 isFunction: isFunction, 2146 isStream: isStream, 2147 isURLSearchParams: isURLSearchParams, 2148 isStandardBrowserEnv: isStandardBrowserEnv, 2149 forEach: forEach, 2150 merge: merge, 2151 extend: extend, 2152 trim: trim, 2153 stripBOM: stripBOM 2154}; 2155 2156 2157/***/ }), 2158
2159/***/ "./resources/assets/js/general/axios-global.js": 2160/*!*****************************************************!*\ 2161 !*** ./resources/assets/js/general/axios-global.js ***! 2162 \*****************************************************/ 2163/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 2164 2165"use strict"; 2166__webpack_require__.r(__webpack_exports__); 2167/* harmony import */ var axios__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! axios */ "./node_modules/axios/index.js"); 2168/* harmony import */ var axios__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(axios__WEBPACK_IMPORTED_MODULE_0__); 2169 2170window.axios = (axios__WEBPACK_IMPORTED_MODULE_0___default()); 2171window.axios.defaults.headers.common = { 2172 'X-Requested-With': 'XMLHttpRequest' 2173}; 2174var token = document.head.querySelector('meta[name="work-script"]'); 2175if (token) { 2176 window.axios.defaults.headers.common['X-CSRF-TOKEN'] = token.content; 2177} else { 2178 console.error('CSRF token not found: https://laravel.com/docs/csrf#csrf-x-csrf-token'); 2179} 2180 2181/***/ }), 2182
2183/***/ "./resources/assets/js/general/jquery-global.js": 2184/*!******************************************************!*\ 2185 !*** ./resources/assets/js/general/jquery-global.js ***! 2186 \******************************************************/ 2187/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 2188 2189"use strict"; 2190__webpack_require__.r(__webpack_exports__); 2191/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! jquery */ "./node_modules/jquery/dist/jquery.js"); 2192/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_0__); 2193// jquery-global.js 2194 2195window.jQuery = (jquery__WEBPACK_IMPORTED_MODULE_0___default()); 2196window.$ = (jquery__WEBPACK_IMPORTED_MODULE_0___default()); 2197 2198/***/ }), 2199
2200/***/ "./resources/assets/js/general/vue-global.js": 2201/*!***************************************************!*\ 2202 !*** ./resources/assets/js/general/vue-global.js ***! 2203 \***************************************************/ 2204/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 2205 2206"use strict"; 2207__webpack_require__.r(__webpack_exports__); 2208/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ "./node_modules/vue/dist/vue.esm.js"); 2209 2210window.Vue = vue__WEBPACK_IMPORTED_MODULE_0__["default"]; 2211vue__WEBPACK_IMPORTED_MODULE_0__["default"].directive('clickoutside', { 2212 inserted: function inserted(el, binding, vnode) { 2213 // assign event to the element 2214 el.clickOutsideEvent = function (event) { 2215 // here we check if the click event is outside the element and it's children 2216 if (!(el == event.target || el.contains(event.target))) { 2217 // if clicked outside, call the provided method 2218 // vnode.context[binding.expression](event) 2219 } 2220 }; 2221 // register click and touch events 2222 document.body.addEventListener('click', el.clickOutsideEvent); 2223 document.body.addEventListener('touchstart', el.clickOutsideEvent); 2224 }, 2225 unbind: function unbind(el) { 2226 // unregister click and touch events before the element is unmounted 2227 document.body.removeEventListener('click', el.clickOutsideEvent); 2228 document.body.removeEventListener('touchstart', el.clickOutsideEvent); 2229 }, 2230 stopProp: function stopProp(event) { 2231 event.stopPropagation(); 2232 } 2233}); 2234 2235/***/ }), 2236
2237/***/ "./resources/assets/js/museum/utilities/load.js": 2238/*!******************************************************!*\ 2239 !*** ./resources/assets/js/museum/utilities/load.js ***! 2240 \******************************************************/ 2241/***/ (() => { 2242 2243$(document).ready(function () { 2244 setTimeout(function () { 2245 $("body").addClass("body--loaded"); 2246 }, 500); 2247 $("body").on('click', '.js-page-transition', function (e) { 2248 e.preventDefault(); 2249 var url = $(this).attr('href'); 2250 $("body").addClass("body--leave"); 2251 setTimeout(function () { 2252 window.location.href = url; 2253 }, 300); 2254 }); 2255}); 2256 2257/***/ }), 2258 2259/***/ "./node_modules/css-loader/dist/cjs.js??clonedRuleSet-13.use[1]!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-13.use[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./node_modules/vue-spinner/src/ClipLoader.vue?vue&type=style&index=0&id=35989352&lang=css": 2260/*!*******************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\ 2261 !*** ./node_modules/css-loader/dist/cjs.js??clonedRuleSet-13.use[1]!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-13.use[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./node_modules/vue-spinner/src/ClipLoader.vue?vue&type=style&index=0&id=35989352&lang=css ***! 2262 \*******************************************************************************************************************************************************************************************************************************************************************************************************************************************************/ 2263/***/ ((module, __webpack_exports__, __webpack_require__) => { 2264 2265"use strict"; 2266__webpack_require__.r(__webpack_exports__); 2267/* harmony export */ __webpack_require__.d(__webpack_exports__, { 2268/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) 2269/* harmony export */ }); 2270/* harmony import */ var _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); 2271/* harmony import */ var _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0__); 2272// Imports 2273 2274var ___CSS_LOADER_EXPORT___ = _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0___default()(function(i){return i[1]}); 2275// Module 2276___CSS_LOADER_EXPORT___.push([module.id, "\n.v-spinner\n{\n/*\t font-size: 10px; \n\n width: 60px;\n height: 40px;*/\n /*margin: 25px auto;*/\n text-align: center;\n}\n.v-spinner .v-clip\n{\n animation: v-clipDelay 0.75s 0s infinite linear;\n\t animation-fill-mode: both;\n\n display: inline-block;\n}\n@keyframes v-clipDelay\n{\n0%\n {\n transform: rotate(0deg) scale(1);\n}\n50%\n {\n transform: rotate(180deg) scale(0.8);\n}\n100%\n {\n transform: rotate(360deg) scale(1);\n}\n}\n", ""]); 2277// Exports 2278/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); 2279 2280 2281/***/ }), 2282
vendor: 1,872 bytes, lines 2283-2358
2283/***/ "./node_modules/css-loader/dist/runtime/api.js": 2284/*!*****************************************************!*\ 2285 !*** ./node_modules/css-loader/dist/runtime/api.js ***! 2286 \*****************************************************/ 2287/***/ ((module) => { 2288 2289"use strict"; 2290 2291 2292/* 2293 MIT License http://www.opensource.org/licenses/mit-license.php 2294 Author Tobias Koppers @sokra 2295*/ 2296// css base code, injected by the css-loader 2297// eslint-disable-next-line func-names 2298module.exports = function (cssWithMappingToString) { 2299 var list = []; // return the list of modules as css string 2300 2301 list.toString = function toString() { 2302 return this.map(function (item) { 2303 var content = cssWithMappingToString(item); 2304 2305 if (item[2]) { 2306 return "@media ".concat(item[2], " {").concat(content, "}"); 2307 } 2308 2309 return content; 2310 }).join(""); 2311 }; // import a list of modules into the list 2312 // eslint-disable-next-line func-names 2313 2314 2315 list.i = function (modules, mediaQuery, dedupe) { 2316 if (typeof modules === "string") { 2317 // eslint-disable-next-line no-param-reassign 2318 modules = [[null, modules, ""]]; 2319 } 2320 2321 var alreadyImportedModules = {}; 2322 2323 if (dedupe) { 2324 for (var i = 0; i < this.length; i++) { 2325 // eslint-disable-next-line prefer-destructuring 2326 var id = this[i][0]; 2327 2328 if (id != null) { 2329 alreadyImportedModules[id] = true; 2330 } 2331 } 2332 } 2333 2334 for (var _i = 0; _i < modules.length; _i++) { 2335 var item = [].concat(modules[_i]); 2336 2337 if (dedupe && alreadyImportedModules[item[0]]) { 2338 // eslint-disable-next-line no-continue 2339 continue; 2340 } 2341 2342 if (mediaQuery) { 2343 if (!item[2]) { 2344 item[2] = mediaQuery; 2345 } else { 2346 item[2] = "".concat(mediaQuery, " and ").concat(item[2]); 2347 } 2348 } 2349 2350 list.push(item); 2351 } 2352 }; 2353 2354 return list; 2355}; 2356 2357/***/ }), 2358
vendor: 285,755 bytes, lines 2359-13085
2359/***/ "./node_modules/jquery/dist/jquery.js": 2360/*!********************************************!*\ 2361 !*** ./node_modules/jquery/dist/jquery.js ***! 2362 \********************************************/ 2363/***/ (function(module, exports) { 2364 2365var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*! 2366 * jQuery JavaScript Library v3.7.1 2367 * https://jquery.com/ 2368 * 2369 * Copyright OpenJS Foundation and other contributors 2370 * Released under the MIT license 2371 * https://jquery.org/license 2372 * 2373 * Date: 2023-08-28T13:37Z 2374 */ 2375( function( global, factory ) { 2376 2377 "use strict"; 2378 2379 if ( true && typeof module.exports === "object" ) { 2380 2381 // For CommonJS and CommonJS-like environments where a proper `window` 2382 // is present, execute the factory and get jQuery. 2383 // For environments that do not have a `window` with a `document` 2384 // (such as Node.js), expose a factory as module.exports. 2385 // This accentuates the need for the creation of a real `window`. 2386 // e.g. var jQuery = require("jquery")(window); 2387 // See ticket trac-14549 for more info. 2388 module.exports = global.document ? 2389 factory( global, true ) : 2390 function( w ) { 2391 if ( !w.document ) { 2392 throw new Error( "jQuery requires a window with a document" ); 2393 } 2394 return factory( w ); 2395 }; 2396 } else { 2397 factory( global ); 2398 } 2399 2400// Pass this if window is not defined yet 2401} )( typeof window !== "undefined" ? window : this, function( window, noGlobal ) { 2402 2403// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1 2404// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode 2405// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common 2406// enough that all such attempts are guarded in a try block. 2407"use strict"; 2408 2409var arr = []; 2410 2411var getProto = Object.getPrototypeOf; 2412 2413var slice = arr.slice; 2414 2415var flat = arr.flat ? function( array ) { 2416 return arr.flat.call( array ); 2417} : function( array ) { 2418 return arr.concat.apply( [], array ); 2419}; 2420 2421 2422var push = arr.push; 2423 2424var indexOf = arr.indexOf; 2425 2426var class2type = {}; 2427 2428var toString = class2type.toString; 2429 2430var hasOwn = class2type.hasOwnProperty; 2431 2432var fnToString = hasOwn.toString; 2433 2434var ObjectFunctionString = fnToString.call( Object ); 2435 2436var support = {}; 2437 2438var isFunction = function isFunction( obj ) { 2439 2440 // Support: Chrome <=57, Firefox <=52 2441 // In some browsers, typeof returns "function" for HTML <object> elements 2442 // (i.e., `typeof document.createElement( "object" ) === "function"`). 2443 // We don't want to classify *any* DOM node as a function. 2444 // Support: QtWeb <=3.8.5, WebKit <=534.34, wkhtmltopdf tool <=0.12.5 2445 // Plus for old WebKit, typeof returns "function" for HTML collections 2446 // (e.g., `typeof document.getElementsByTagName("div") === "function"`). (gh-4756) 2447 return typeof obj === "function" && typeof obj.nodeType !== "number" && 2448 typeof obj.item !== "function"; 2449 }; 2450 2451 2452var isWindow = function isWindow( obj ) { 2453 return obj != null && obj === obj.window; 2454 }; 2455 2456 2457var document = window.document; 2458 2459 2460 2461 var preservedScriptAttributes = { 2462 type: true, 2463 src: true, 2464 nonce: true, 2465 noModule: true 2466 }; 2467 2468 function DOMEval( code, node, doc ) { 2469 doc = doc || document; 2470 2471 var i, val, 2472 script = doc.createElement( "script" ); 2473 2474 script.text = code; 2475 if ( node ) { 2476 for ( i in preservedScriptAttributes ) { 2477 2478 // Support: Firefox 64+, Edge 18+ 2479 // Some browsers don't support the "nonce" property on scripts. 2480 // On the other hand, just using `getAttribute` is not enough as 2481 // the `nonce` attribute is reset to an empty string whenever it 2482 // becomes browsing-context connected. 2483 // See https://github.com/whatwg/html/issues/2369 2484 // See https://html.spec.whatwg.org/#nonce-attributes 2485 // The `node.getAttribute` check was added for the sake of 2486 // `jQuery.globalEval` so that it can fake a nonce-containing node 2487 // via an object. 2488 val = node[ i ] || node.getAttribute && node.getAttribute( i ); 2489 if ( val ) { 2490 script.setAttribute( i, val ); 2491 } 2492 } 2493 } 2494 doc.head.appendChild( script ).parentNode.removeChild( script ); 2495 } 2496 2497 2498function toType( obj ) { 2499 if ( obj == null ) { 2500 return obj + ""; 2501 } 2502 2503 // Support: Android <=2.3 only (functionish RegExp) 2504 return typeof obj === "object" || typeof obj === "function" ? 2505 class2type[ toString.call( obj ) ] || "object" : 2506 typeof obj; 2507} 2508/* global Symbol */ 2509// Defining this global in .eslintrc.json would create a danger of using the global 2510// unguarded in another place, it seems safer to define global only for this module 2511 2512 2513 2514var version = "3.7.1", 2515 2516 rhtmlSuffix = /HTML$/i, 2517 2518 // Define a local copy of jQuery 2519 jQuery = function( selector, context ) { 2520 2521 // The jQuery object is actually just the init constructor 'enhanced' 2522 // Need init if jQuery is called (just allow error to be thrown if not included) 2523 return new jQuery.fn.init( selector, context ); 2524 }; 2525 2526jQuery.fn = jQuery.prototype = { 2527 2528 // The current version of jQuery being used 2529 jquery: version, 2530 2531 constructor: jQuery, 2532 2533 // The default length of a jQuery object is 0 2534 length: 0, 2535 2536 toArray: function() { 2537 return slice.call( this ); 2538 }, 2539 2540 // Get the Nth element in the matched element set OR 2541 // Get the whole matched element set as a clean array 2542 get: function( num ) { 2543 2544 // Return all the elements in a clean array 2545 if ( num == null ) { 2546 return slice.call( this ); 2547 } 2548 2549 // Return just the one element from the set 2550 return num < 0 ? this[ num + this.length ] : this[ num ]; 2551 }, 2552 2553 // Take an array of elements and push it onto the stack 2554 // (returning the new matched element set) 2555 pushStack: function( elems ) { 2556 2557 // Build a new jQuery matched element set 2558 var ret = jQuery.merge( this.constructor(), elems ); 2559 2560 // Add the old object onto the stack (as a reference) 2561 ret.prevObject = this; 2562 2563 // Return the newly-formed element set 2564 return ret; 2565 }, 2566 2567 // Execute a callback for every element in the matched set. 2568 each: function( callback ) { 2569 return jQuery.each( this, callback ); 2570 }, 2571 2572 map: function( callback ) { 2573 return this.pushStack( jQuery.map( this, function( elem, i ) { 2574 return callback.call( elem, i, elem ); 2575 } ) ); 2576 }, 2577 2578 slice: function() { 2579 return this.pushStack( slice.apply( this, arguments ) ); 2580 }, 2581 2582 first: function() { 2583 return this.eq( 0 ); 2584 }, 2585 2586 last: function() { 2587 return this.eq( -1 ); 2588 }, 2589 2590 even: function() { 2591 return this.pushStack( jQuery.grep( this, function( _elem, i ) { 2592 return ( i + 1 ) % 2; 2593 } ) ); 2594 }, 2595 2596 odd: function() { 2597 return this.pushStack( jQuery.grep( this, function( _elem, i ) { 2598 return i % 2; 2599 } ) ); 2600 }, 2601 2602 eq: function( i ) { 2603 var len = this.length, 2604 j = +i + ( i < 0 ? len : 0 ); 2605 return this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] ); 2606 }, 2607 2608 end: function() { 2609 return this.prevObject || this.constructor(); 2610 }, 2611 2612 // For internal use only. 2613 // Behaves like an Array's method, not like a jQuery method. 2614 push: push, 2615 sort: arr.sort, 2616 splice: arr.splice 2617}; 2618 2619jQuery.extend = jQuery.fn.extend = function() { 2620 var options, name, src, copy, copyIsArray, clone, 2621 target = arguments[ 0 ] || {}, 2622 i = 1, 2623 length = arguments.length, 2624 deep = false; 2625 2626 // Handle a deep copy situation 2627 if ( typeof target === "boolean" ) { 2628 deep = target; 2629 2630 // Skip the boolean and the target 2631 target = arguments[ i ] || {}; 2632 i++; 2633 } 2634 2635 // Handle case when target is a string or something (possible in deep copy) 2636 if ( typeof target !== "object" && !isFunction( target ) ) { 2637 target = {}; 2638 } 2639 2640 // Extend jQuery itself if only one argument is passed 2641 if ( i === length ) { 2642 target = this; 2643 i--; 2644 } 2645 2646 for ( ; i < length; i++ ) { 2647 2648 // Only deal with non-null/undefined values 2649 if ( ( options = arguments[ i ] ) != null ) { 2650 2651 // Extend the base object 2652 for ( name in options ) { 2653 copy = options[ name ]; 2654 2655 // Prevent Object.prototype pollution 2656 // Prevent never-ending loop 2657 if ( name === "__proto__" || target === copy ) { 2658 continue; 2659 } 2660 2661 // Recurse if we're merging plain objects or arrays 2662 if ( deep && copy && ( jQuery.isPlainObject( copy ) || 2663 ( copyIsArray = Array.isArray( copy ) ) ) ) { 2664 src = target[ name ]; 2665 2666 // Ensure proper type for the source value 2667 if ( copyIsArray && !Array.isArray( src ) ) { 2668 clone = []; 2669 } else if ( !copyIsArray && !jQuery.isPlainObject( src ) ) { 2670 clone = {}; 2671 } else { 2672 clone = src; 2673 } 2674 copyIsArray = false; 2675 2676 // Never move original objects, clone them 2677 target[ name ] = jQuery.extend( deep, clone, copy ); 2678 2679 // Don't bring in undefined values 2680 } else if ( copy !== undefined ) { 2681 target[ name ] = copy; 2682 } 2683 } 2684 } 2685 } 2686 2687 // Return the modified object 2688 return target; 2689}; 2690 2691jQuery.extend( { 2692 2693 // Unique for each copy of jQuery on the page 2694 expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ), 2695 2696 // Assume jQuery is ready without the ready module 2697 isReady: true, 2698 2699 error: function( msg ) { 2700 throw new Error( msg ); 2701 }, 2702 2703 noop: function() {}, 2704 2705 isPlainObject: function( obj ) { 2706 var proto, Ctor; 2707 2708 // Detect obvious negatives 2709 // Use toString instead of jQuery.type to catch host objects 2710 if ( !obj || toString.call( obj ) !== "[object Object]" ) { 2711 return false; 2712 } 2713 2714 proto = getProto( obj ); 2715 2716 // Objects with no prototype (e.g., `Object.create( null )`) are plain 2717 if ( !proto ) { 2718 return true; 2719 } 2720 2721 // Objects with prototype are plain iff they were constructed by a global Object function 2722 Ctor = hasOwn.call( proto, "constructor" ) && proto.constructor; 2723 return typeof Ctor === "function" && fnToString.call( Ctor ) === ObjectFunctionString; 2724 }, 2725 2726 isEmptyObject: function( obj ) { 2727 var name; 2728 2729 for ( name in obj ) { 2730 return false; 2731 } 2732 return true; 2733 }, 2734 2735 // Evaluates a script in a provided context; falls back to the global one 2736 // if not specified. 2737 globalEval: function( code, options, doc ) { 2738 DOMEval( code, { nonce: options && options.nonce }, doc ); 2739 }, 2740 2741 each: function( obj, callback ) { 2742 var length, i = 0; 2743 2744 if ( isArrayLike( obj ) ) { 2745 length = obj.length; 2746 for ( ; i < length; i++ ) { 2747 if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { 2748 break; 2749 } 2750 } 2751 } else { 2752 for ( i in obj ) { 2753 if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { 2754 break; 2755 } 2756 } 2757 } 2758 2759 return obj; 2760 }, 2761 2762 2763 // Retrieve the text value of an array of DOM nodes 2764 text: function( elem ) { 2765 var node, 2766 ret = "", 2767 i = 0, 2768 nodeType = elem.nodeType; 2769 2770 if ( !nodeType ) { 2771 2772 // If no nodeType, this is expected to be an array 2773 while ( ( node = elem[ i++ ] ) ) { 2774 2775 // Do not traverse comment nodes 2776 ret += jQuery.text( node ); 2777 } 2778 } 2779 if ( nodeType === 1 || nodeType === 11 ) { 2780 return elem.textContent; 2781 } 2782 if ( nodeType === 9 ) { 2783 return elem.documentElement.textContent; 2784 } 2785 if ( nodeType === 3 || nodeType === 4 ) { 2786 return elem.nodeValue; 2787 } 2788 2789 // Do not include comment or processing instruction nodes 2790 2791 return ret; 2792 }, 2793 2794 // results is for internal usage only 2795 makeArray: function( arr, results ) { 2796 var ret = results || []; 2797 2798 if ( arr != null ) { 2799 if ( isArrayLike( Object( arr ) ) ) { 2800 jQuery.merge( ret, 2801 typeof arr === "string" ? 2802 [ arr ] : arr 2803 ); 2804 } else { 2805 push.call( ret, arr ); 2806 } 2807 } 2808 2809 return ret; 2810 }, 2811 2812 inArray: function( elem, arr, i ) { 2813 return arr == null ? -1 : indexOf.call( arr, elem, i ); 2814 }, 2815 2816 isXMLDoc: function( elem ) { 2817 var namespace = elem && elem.namespaceURI, 2818 docElem = elem && ( elem.ownerDocument || elem ).documentElement; 2819 2820 // Assume HTML when documentElement doesn't yet exist, such as inside 2821 // document fragments. 2822 return !rhtmlSuffix.test( namespace || docElem && docElem.nodeName || "HTML" ); 2823 }, 2824 2825 // Support: Android <=4.0 only, PhantomJS 1 only 2826 // push.apply(_, arraylike) throws on ancient WebKit 2827 merge: function( first, second ) { 2828 var len = +second.length, 2829 j = 0, 2830 i = first.length; 2831 2832 for ( ; j < len; j++ ) { 2833 first[ i++ ] = second[ j ]; 2834 } 2835 2836 first.length = i; 2837 2838 return first; 2839 }, 2840 2841 grep: function( elems, callback, invert ) { 2842 var callbackInverse, 2843 matches = [], 2844 i = 0, 2845 length = elems.length, 2846 callbackExpect = !invert; 2847 2848 // Go through the array, only saving the items 2849 // that pass the validator function 2850 for ( ; i < length; i++ ) { 2851 callbackInverse = !callback( elems[ i ], i ); 2852 if ( callbackInverse !== callbackExpect ) { 2853 matches.push( elems[ i ] ); 2854 } 2855 } 2856 2857 return matches; 2858 }, 2859 2860 // arg is for internal usage only 2861 map: function( elems, callback, arg ) { 2862 var length, value, 2863 i = 0, 2864 ret = []; 2865 2866 // Go through the array, translating each of the items to their new values 2867 if ( isArrayLike( elems ) ) { 2868 length = elems.length; 2869 for ( ; i < length; i++ ) { 2870 value = callback( elems[ i ], i, arg ); 2871 2872 if ( value != null ) { 2873 ret.push( value ); 2874 } 2875 } 2876 2877 // Go through every key on the object, 2878 } else { 2879 for ( i in elems ) { 2880 value = callback( elems[ i ], i, arg ); 2881 2882 if ( value != null ) { 2883 ret.push( value ); 2884 } 2885 } 2886 } 2887 2888 // Flatten any nested arrays 2889 return flat( ret ); 2890 }, 2891 2892 // A global GUID counter for objects 2893 guid: 1, 2894 2895 // jQuery.support is not used in Core but other projects attach their 2896 // properties to it so it needs to exist. 2897 support: support 2898} ); 2899 2900if ( typeof Symbol === "function" ) { 2901 jQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ]; 2902} 2903 2904// Populate the class2type map 2905jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ), 2906 function( _i, name ) { 2907 class2type[ "[object " + name + "]" ] = name.toLowerCase(); 2908 } ); 2909 2910function isArrayLike( obj ) { 2911 2912 // Support: real iOS 8.2 only (not reproducible in simulator) 2913 // `in` check used to prevent JIT error (gh-2145) 2914 // hasOwn isn't used here due to false negatives 2915 // regarding Nodelist length in IE 2916 var length = !!obj && "length" in obj && obj.length, 2917 type = toType( obj ); 2918 2919 if ( isFunction( obj ) || isWindow( obj ) ) { 2920 return false; 2921 } 2922 2923 return type === "array" || length === 0 || 2924 typeof length === "number" && length > 0 && ( length - 1 ) in obj; 2925} 2926 2927 2928function nodeName( elem, name ) { 2929 2930 return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); 2931 2932} 2933var pop = arr.pop; 2934 2935 2936var sort = arr.sort; 2937 2938 2939var splice = arr.splice; 2940 2941 2942var whitespace = "[\\x20\\t\\r\\n\\f]"; 2943 2944 2945var rtrimCSS = new RegExp( 2946 "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", 2947 "g" 2948); 2949 2950 2951 2952 2953// Note: an element does not contain itself 2954jQuery.contains = function( a, b ) { 2955 var bup = b && b.parentNode; 2956 2957 return a === bup || !!( bup && bup.nodeType === 1 && ( 2958 2959 // Support: IE 9 - 11+ 2960 // IE doesn't have `contains` on SVG. 2961 a.contains ? 2962 a.contains( bup ) : 2963 a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16 2964 ) ); 2965}; 2966 2967 2968 2969 2970// CSS string/identifier serialization 2971// https://drafts.csswg.org/cssom/#common-serializing-idioms 2972var rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\x80-\uFFFF\w-]/g; 2973 2974function fcssescape( ch, asCodePoint ) { 2975 if ( asCodePoint ) { 2976 2977 // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER 2978 if ( ch === "\0" ) { 2979 return "\uFFFD"; 2980 } 2981 2982 // Control characters and (dependent upon position) numbers get escaped as code points 2983 return ch.slice( 0, -1 ) + "\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " "; 2984 } 2985 2986 // Other potentially-special ASCII characters get backslash-escaped 2987 return "\\" + ch; 2988} 2989 2990jQuery.escapeSelector = function( sel ) { 2991 return ( sel + "" ).replace( rcssescape, fcssescape ); 2992}; 2993 2994 2995 2996 2997var preferredDoc = document, 2998 pushNative = push; 2999 3000( function() { 3001 3002var i, 3003 Expr, 3004 outermostContext, 3005 sortInput, 3006 hasDuplicate, 3007 push = pushNative, 3008 3009 // Local document vars 3010 document, 3011 documentElement, 3012 documentIsHTML, 3013 rbuggyQSA, 3014 matches, 3015 3016 // Instance-specific data 3017 expando = jQuery.expando, 3018 dirruns = 0, 3019 done = 0, 3020 classCache = createCache(), 3021 tokenCache = createCache(), 3022 compilerCache = createCache(), 3023 nonnativeSelectorCache = createCache(), 3024 sortOrder = function( a, b ) { 3025 if ( a === b ) { 3026 hasDuplicate = true; 3027 } 3028 return 0; 3029 }, 3030 3031 booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|" + 3032 "loop|multiple|open|readonly|required|scoped", 3033 3034 // Regular expressions 3035 3036 // https://www.w3.org/TR/css-syntax-3/#ident-token-diagram 3037 identifier = "(?:\\\\[\\da-fA-F]{1,6}" + whitespace + 3038 "?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+", 3039 3040 // Attribute selectors: https://www.w3.org/TR/selectors/#attribute-selectors 3041 attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace + 3042 3043 // Operator (capture 2) 3044 "*([*^$|!~]?=)" + whitespace + 3045 3046 // "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]" 3047 "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + 3048 whitespace + "*\\]", 3049 3050 pseudos = ":(" + identifier + ")(?:\\((" + 3051 3052 // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments: 3053 // 1. quoted (capture 3; capture 4 or capture 5) 3054 "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" + 3055 3056 // 2. simple (capture 6) 3057 "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" + 3058 3059 // 3. anything else (capture 2) 3060 ".*" + 3061 ")\\)|)", 3062 3063 // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter 3064 rwhitespace = new RegExp( whitespace + "+", "g" ), 3065 3066 rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ), 3067 rleadingCombinator = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + 3068 whitespace + "*" ), 3069 rdescend = new RegExp( whitespace + "|>" ), 3070 3071 rpseudo = new RegExp( pseudos ), 3072 ridentifier = new RegExp( "^" + identifier + "$" ), 3073 3074 matchExpr = { 3075 ID: new RegExp( "^#(" + identifier + ")" ), 3076 CLASS: new RegExp( "^\\.(" + identifier + ")" ), 3077 TAG: new RegExp( "^(" + identifier + "|[*])" ), 3078 ATTR: new RegExp( "^" + attributes ), 3079 PSEUDO: new RegExp( "^" + pseudos ), 3080 CHILD: new RegExp( 3081 "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + 3082 whitespace + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + 3083 whitespace + "*(\\d+)|))" + whitespace + "*\\)|)", "i" ), 3084 bool: new RegExp( "^(?:" + booleans + ")$", "i" ), 3085 3086 // For use in libraries implementing .is() 3087 // We use this for POS matching in `select` 3088 needsContext: new RegExp( "^" + whitespace + 3089 "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + whitespace + 3090 "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" ) 3091 }, 3092 3093 rinputs = /^(?:input|select|textarea|button)$/i, 3094 rheader = /^h\d$/i, 3095 3096 // Easily-parseable/retrievable ID or TAG or CLASS selectors 3097 rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, 3098 3099 rsibling = /[+~]/, 3100 3101 // CSS escapes 3102 // https://www.w3.org/TR/CSS21/syndata.html#escaped-characters 3103 runescape = new RegExp( "\\\\[\\da-fA-F]{1,6}" + whitespace + 3104 "?|\\\\([^\\r\\n\\f])", "g" ), 3105 funescape = function( escape, nonHex ) { 3106 var high = "0x" + escape.slice( 1 ) - 0x10000; 3107 3108 if ( nonHex ) { 3109 3110 // Strip the backslash prefix from a non-hex escape sequence 3111 return nonHex; 3112 } 3113 3114 // Replace a hexadecimal escape sequence with the encoded Unicode code point 3115 // Support: IE <=11+ 3116 // For values outside the Basic Multilingual Plane (BMP), manually construct a 3117 // surrogate pair 3118 return high < 0 ? 3119 String.fromCharCode( high + 0x10000 ) : 3120 String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 ); 3121 }, 3122 3123 // Used for iframes; see `setDocument`. 3124 // Support: IE 9 - 11+, Edge 12 - 18+ 3125 // Removing the function wrapper causes a "Permission Denied" 3126 // error in IE/Edge. 3127 unloadHandler = function() { 3128 setDocument(); 3129 }, 3130 3131 inDisabledFieldset = addCombinator( 3132 function( elem ) { 3133 return elem.disabled === true && nodeName( elem, "fieldset" ); 3134 }, 3135 { dir: "parentNode", next: "legend" } 3136 ); 3137 3138// Support: IE <=9 only 3139// Accessing document.activeElement can throw unexpectedly 3140// https://bugs.jquery.com/ticket/13393 3141function safeActiveElement() { 3142 try { 3143 return document.activeElement; 3144 } catch ( err ) { } 3145} 3146 3147// Optimize for push.apply( _, NodeList ) 3148try { 3149 push.apply( 3150 ( arr = slice.call( preferredDoc.childNodes ) ), 3151 preferredDoc.childNodes 3152 ); 3153 3154 // Support: Android <=4.0 3155 // Detect silently failing push.apply 3156 // eslint-disable-next-line no-unused-expressions 3157 arr[ preferredDoc.childNodes.length ].nodeType; 3158} catch ( e ) { 3159 push = { 3160 apply: function( target, els ) { 3161 pushNative.apply( target, slice.call( els ) ); 3162 }, 3163 call: function( target ) { 3164 pushNative.apply( target, slice.call( arguments, 1 ) ); 3165 } 3166 }; 3167} 3168 3169function find( selector, context, results, seed ) { 3170 var m, i, elem, nid, match, groups, newSelector, 3171 newContext = context && context.ownerDocument, 3172 3173 // nodeType defaults to 9, since context defaults to document 3174 nodeType = context ? context.nodeType : 9; 3175 3176 results = results || []; 3177 3178 // Return early from calls with invalid selector or context 3179 if ( typeof selector !== "string" || !selector || 3180 nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) { 3181 3182 return results; 3183 } 3184 3185 // Try to shortcut find operations (as opposed to filters) in HTML documents 3186 if ( !seed ) { 3187 setDocument( context ); 3188 context = context || document; 3189 3190 if ( documentIsHTML ) { 3191 3192 // If the selector is sufficiently simple, try using a "get*By*" DOM method 3193 // (excepting DocumentFragment context, where the methods don't exist) 3194 if ( nodeType !== 11 && ( match = rquickExpr.exec( selector ) ) ) { 3195 3196 // ID selector 3197 if ( ( m = match[ 1 ] ) ) { 3198 3199 // Document context 3200 if ( nodeType === 9 ) { 3201 if ( ( elem = context.getElementById( m ) ) ) { 3202 3203 // Support: IE 9 only 3204 // getElementById can match elements by name instead of ID 3205 if ( elem.id === m ) { 3206 push.call( results, elem ); 3207 return results; 3208 } 3209 } else { 3210 return results; 3211 } 3212 3213 // Element context 3214 } else { 3215 3216 // Support: IE 9 only 3217 // getElementById can match elements by name instead of ID 3218 if ( newContext && ( elem = newContext.getElementById( m ) ) && 3219 find.contains( context, elem ) && 3220 elem.id === m ) { 3221 3222 push.call( results, elem ); 3223 return results; 3224 } 3225 } 3226 3227 // Type selector 3228 } else if ( match[ 2 ] ) { 3229 push.apply( results, context.getElementsByTagName( selector ) ); 3230 return results; 3231 3232 // Class selector 3233 } else if ( ( m = match[ 3 ] ) && context.getElementsByClassName ) { 3234 push.apply( results, context.getElementsByClassName( m ) ); 3235 return results; 3236 } 3237 } 3238 3239 // Take advantage of querySelectorAll 3240 if ( !nonnativeSelectorCache[ selector + " " ] && 3241 ( !rbuggyQSA || !rbuggyQSA.test( selector ) ) ) { 3242 3243 newSelector = selector; 3244 newContext = context; 3245 3246 // qSA considers elements outside a scoping root when evaluating child or 3247 // descendant combinators, which is not what we want. 3248 // In such cases, we work around the behavior by prefixing every selector in the 3249 // list with an ID selector referencing the scope context. 3250 // The technique has to be used as well when a leading combinator is used 3251 // as such selectors are not recognized by querySelectorAll. 3252 // Thanks to Andrew Dupont for this technique. 3253 if ( nodeType === 1 && 3254 ( rdescend.test( selector ) || rleadingCombinator.test( selector ) ) ) { 3255 3256 // Expand context for sibling selectors 3257 newContext = rsibling.test( selector ) && testContext( context.parentNode ) || 3258 context; 3259 3260 // We can use :scope instead of the ID hack if the browser 3261 // supports it & if we're not changing the context. 3262 // Support: IE 11+, Edge 17 - 18+ 3263 // IE/Edge sometimes throw a "Permission denied" error when 3264 // strict-comparing two documents; shallow comparisons work. 3265 // eslint-disable-next-line eqeqeq 3266 if ( newContext != context || !support.scope ) { 3267 3268 // Capture the context ID, setting it first if necessary 3269 if ( ( nid = context.getAttribute( "id" ) ) ) { 3270 nid = jQuery.escapeSelector( nid ); 3271 } else { 3272 context.setAttribute( "id", ( nid = expando ) ); 3273 } 3274 } 3275 3276 // Prefix every selector in the list 3277 groups = tokenize( selector ); 3278 i = groups.length; 3279 while ( i-- ) { 3280 groups[ i ] = ( nid ? "#" + nid : ":scope" ) + " " + 3281 toSelector( groups[ i ] ); 3282 } 3283 newSelector = groups.join( "," ); 3284 } 3285 3286 try { 3287 push.apply( results, 3288 newContext.querySelectorAll( newSelector ) 3289 ); 3290 return results; 3291 } catch ( qsaError ) { 3292 nonnativeSelectorCache( selector, true ); 3293 } finally { 3294 if ( nid === expando ) { 3295 context.removeAttribute( "id" ); 3296 } 3297 } 3298 } 3299 } 3300 } 3301 3302 // All others 3303 return select( selector.replace( rtrimCSS, "$1" ), context, results, seed ); 3304} 3305 3306/** 3307 * Create key-value caches of limited size 3308 * @returns {function(string, object)} Returns the Object data after storing it on itself with 3309 * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength) 3310 * deleting the oldest entry 3311 */ 3312function createCache() { 3313 var keys = []; 3314 3315 function cache( key, value ) { 3316 3317 // Use (key + " ") to avoid collision with native prototype properties 3318 // (see https://github.com/jquery/sizzle/issues/157) 3319 if ( keys.push( key + " " ) > Expr.cacheLength ) { 3320 3321 // Only keep the most recent entries 3322 delete cache[ keys.shift() ]; 3323 } 3324 return ( cache[ key + " " ] = value ); 3325 } 3326 return cache; 3327} 3328 3329/** 3330 * Mark a function for special use by jQuery selector module 3331 * @param {Function} fn The function to mark 3332 */ 3333function markFunction( fn ) { 3334 fn[ expando ] = true; 3335 return fn; 3336} 3337 3338/** 3339 * Support testing using an element 3340 * @param {Function} fn Passed the created element and returns a boolean result 3341 */ 3342function assert( fn ) { 3343 var el = document.createElement( "fieldset" ); 3344 3345 try { 3346 return !!fn( el ); 3347 } catch ( e ) { 3348 return false; 3349 } finally { 3350 3351 // Remove from its parent by default 3352 if ( el.parentNode ) { 3353 el.parentNode.removeChild( el ); 3354 } 3355 3356 // release memory in IE 3357 el = null; 3358 } 3359} 3360 3361/** 3362 * Returns a function to use in pseudos for input types 3363 * @param {String} type 3364 */ 3365function createInputPseudo( type ) { 3366 return function( elem ) { 3367 return nodeName( elem, "input" ) && elem.type === type; 3368 }; 3369} 3370 3371/** 3372 * Returns a function to use in pseudos for buttons 3373 * @param {String} type 3374 */ 3375function createButtonPseudo( type ) { 3376 return function( elem ) { 3377 return ( nodeName( elem, "input" ) || nodeName( elem, "button" ) ) && 3378 elem.type === type; 3379 }; 3380} 3381 3382/** 3383 * Returns a function to use in pseudos for :enabled/:disabled 3384 * @param {Boolean} disabled true for :disabled; false for :enabled 3385 */ 3386function createDisabledPseudo( disabled ) { 3387 3388 // Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable 3389 return function( elem ) { 3390 3391 // Only certain elements can match :enabled or :disabled 3392 // https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled 3393 // https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled 3394 if ( "form" in elem ) { 3395 3396 // Check for inherited disabledness on relevant non-disabled elements: 3397 // * listed form-associated elements in a disabled fieldset 3398 // https://html.spec.whatwg.org/multipage/forms.html#category-listed 3399 // https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled 3400 // * option elements in a disabled optgroup 3401 // https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled 3402 // All such elements have a "form" property. 3403 if ( elem.parentNode && elem.disabled === false ) { 3404 3405 // Option elements defer to a parent optgroup if present 3406 if ( "label" in elem ) { 3407 if ( "label" in elem.parentNode ) { 3408 return elem.parentNode.disabled === disabled; 3409 } else { 3410 return elem.disabled === disabled; 3411 } 3412 } 3413 3414 // Support: IE 6 - 11+ 3415 // Use the isDisabled shortcut property to check for disabled fieldset ancestors 3416 return elem.isDisabled === disabled || 3417 3418 // Where there is no isDisabled, check manually 3419 elem.isDisabled !== !disabled && 3420 inDisabledFieldset( elem ) === disabled; 3421 } 3422 3423 return elem.disabled === disabled; 3424 3425 // Try to winnow out elements that can't be disabled before trusting the disabled property. 3426 // Some victims get caught in our net (label, legend, menu, track), but it shouldn't 3427 // even exist on them, let alone have a boolean value. 3428 } else if ( "label" in elem ) { 3429 return elem.disabled === disabled; 3430 } 3431 3432 // Remaining elements are neither :enabled nor :disabled 3433 return false; 3434 }; 3435} 3436 3437/** 3438 * Returns a function to use in pseudos for positionals 3439 * @param {Function} fn 3440 */ 3441function createPositionalPseudo( fn ) { 3442 return markFunction( function( argument ) { 3443 argument = +argument; 3444 return markFunction( function( seed, matches ) { 3445 var j, 3446 matchIndexes = fn( [], seed.length, argument ), 3447 i = matchIndexes.length; 3448 3449 // Match elements found at the specified indexes 3450 while ( i-- ) { 3451 if ( seed[ ( j = matchIndexes[ i ] ) ] ) { 3452 seed[ j ] = !( matches[ j ] = seed[ j ] ); 3453 } 3454 } 3455 } ); 3456 } ); 3457} 3458 3459/** 3460 * Checks a node for validity as a jQuery selector context 3461 * @param {Element|Object=} context 3462 * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value 3463 */ 3464function testContext( context ) { 3465 return context && typeof context.getElementsByTagName !== "undefined" && context; 3466} 3467 3468/** 3469 * Sets document-related variables once based on the current document 3470 * @param {Element|Object} [node] An element or document object to use to set the document 3471 * @returns {Object} Returns the current document 3472 */ 3473function setDocument( node ) { 3474 var subWindow, 3475 doc = node ? node.ownerDocument || node : preferredDoc; 3476 3477 // Return early if doc is invalid or already selected 3478 // Support: IE 11+, Edge 17 - 18+ 3479 // IE/Edge sometimes throw a "Permission denied" error when strict-comparing 3480 // two documents; shallow comparisons work. 3481 // eslint-disable-next-line eqeqeq 3482 if ( doc == document || doc.nodeType !== 9 || !doc.documentElement ) { 3483 return document; 3484 } 3485 3486 // Update global variables 3487 document = doc; 3488 documentElement = document.documentElement; 3489 documentIsHTML = !jQuery.isXMLDoc( document ); 3490 3491 // Support: iOS 7 only, IE 9 - 11+ 3492 // Older browsers didn't support unprefixed `matches`. 3493 matches = documentElement.matches || 3494 documentElement.webkitMatchesSelector || 3495 documentElement.msMatchesSelector; 3496 3497 // Support: IE 9 - 11+, Edge 12 - 18+ 3498 // Accessing iframe documents after unload throws "permission denied" errors 3499 // (see trac-13936). 3500 // Limit the fix to IE & Edge Legacy; despite Edge 15+ implementing `matches`, 3501 // all IE 9+ and Edge Legacy versions implement `msMatchesSelector` as well. 3502 if ( documentElement.msMatchesSelector && 3503 3504 // Support: IE 11+, Edge 17 - 18+ 3505 // IE/Edge sometimes throw a "Permission denied" error when strict-comparing 3506 // two documents; shallow comparisons work. 3507 // eslint-disable-next-line eqeqeq 3508 preferredDoc != document && 3509 ( subWindow = document.defaultView ) && subWindow.top !== subWindow ) { 3510 3511 // Support: IE 9 - 11+, Edge 12 - 18+ 3512 subWindow.addEventListener( "unload", unloadHandler ); 3513 } 3514 3515 // Support: IE <10 3516 // Check if getElementById returns elements by name 3517 // The broken getElementById methods don't pick up programmatically-set names, 3518 // so use a roundabout getElementsByName test 3519 support.getById = assert( function( el ) { 3520 documentElement.appendChild( el ).id = jQuery.expando; 3521 return !document.getElementsByName || 3522 !document.getElementsByName( jQuery.expando ).length; 3523 } ); 3524 3525 // Support: IE 9 only 3526 // Check to see if it's possible to do matchesSelector 3527 // on a disconnected node. 3528 support.disconnectedMatch = assert( function( el ) { 3529 return matches.call( el, "*" ); 3530 } ); 3531 3532 // Support: IE 9 - 11+, Edge 12 - 18+ 3533 // IE/Edge don't support the :scope pseudo-class. 3534 support.scope = assert( function() { 3535 return document.querySelectorAll( ":scope" ); 3536 } ); 3537 3538 // Support: Chrome 105 - 111 only, Safari 15.4 - 16.3 only 3539 // Make sure the `:has()` argument is parsed unforgivingly. 3540 // We include `*` in the test to detect buggy implementations that are 3541 // _selectively_ forgiving (specifically when the list includes at least 3542 // one valid selector). 3543 // Note that we treat complete lack of support for `:has()` as if it were 3544 // spec-compliant support, which is fine because use of `:has()` in such 3545 // environments will fail in the qSA path and fall back to jQuery traversal 3546 // anyway. 3547 support.cssHas = assert( function() { 3548 try { 3549 document.querySelector( ":has(*,:jqfake)" ); 3550 return false; 3551 } catch ( e ) { 3552 return true; 3553 } 3554 } ); 3555 3556 // ID filter and find 3557 if ( support.getById ) { 3558 Expr.filter.ID = function( id ) { 3559 var attrId = id.replace( runescape, funescape ); 3560 return function( elem ) { 3561 return elem.getAttribute( "id" ) === attrId; 3562 }; 3563 }; 3564 Expr.find.ID = function( id, context ) { 3565 if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { 3566 var elem = context.getElementById( id ); 3567 return elem ? [ elem ] : []; 3568 } 3569 }; 3570 } else { 3571 Expr.filter.ID = function( id ) { 3572 var attrId = id.replace( runescape, funescape ); 3573 return function( elem ) { 3574 var node = typeof elem.getAttributeNode !== "undefined" && 3575 elem.getAttributeNode( "id" ); 3576 return node && node.value === attrId; 3577 }; 3578 }; 3579 3580 // Support: IE 6 - 7 only 3581 // getElementById is not reliable as a find shortcut 3582 Expr.find.ID = function( id, context ) { 3583 if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { 3584 var node, i, elems, 3585 elem = context.getElementById( id ); 3586 3587 if ( elem ) { 3588 3589 // Verify the id attribute 3590 node = elem.getAttributeNode( "id" ); 3591 if ( node && node.value === id ) { 3592 return [ elem ]; 3593 } 3594 3595 // Fall back on getElementsByName 3596 elems = context.getElementsByName( id ); 3597 i = 0; 3598 while ( ( elem = elems[ i++ ] ) ) { 3599 node = elem.getAttributeNode( "id" ); 3600 if ( node && node.value === id ) { 3601 return [ elem ]; 3602 } 3603 } 3604 } 3605 3606 return []; 3607 } 3608 }; 3609 } 3610 3611 // Tag 3612 Expr.find.TAG = function( tag, context ) { 3613 if ( typeof context.getElementsByTagName !== "undefined" ) { 3614 return context.getElementsByTagName( tag ); 3615 3616 // DocumentFragment nodes don't have gEBTN 3617 } else { 3618 return context.querySelectorAll( tag ); 3619 } 3620 }; 3621 3622 // Class 3623 Expr.find.CLASS = function( className, context ) { 3624 if ( typeof context.getElementsByClassName !== "undefined" && documentIsHTML ) { 3625 return context.getElementsByClassName( className ); 3626 } 3627 }; 3628 3629 /* QSA/matchesSelector 3630 ---------------------------------------------------------------------- */ 3631 3632 // QSA and matchesSelector support 3633 3634 rbuggyQSA = []; 3635 3636 // Build QSA regex 3637 // Regex strategy adopted from Diego Perini 3638 assert( function( el ) { 3639 3640 var input; 3641 3642 documentElement.appendChild( el ).innerHTML = 3643 "<a id='" + expando + "' href='' disabled='disabled'></a>" + 3644 "<select id='" + expando + "-\r\\' disabled='disabled'>" + 3645 "<option selected=''></option></select>"; 3646 3647 // Support: iOS <=7 - 8 only 3648 // Boolean attributes and "value" are not treated correctly in some XML documents 3649 if ( !el.querySelectorAll( "[selected]" ).length ) { 3650 rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" ); 3651 } 3652 3653 // Support: iOS <=7 - 8 only 3654 if ( !el.querySelectorAll( "[id~=" + expando + "-]" ).length ) { 3655 rbuggyQSA.push( "~=" ); 3656 } 3657 3658 // Support: iOS 8 only 3659 // https://bugs.webkit.org/show_bug.cgi?id=136851 3660 // In-page `selector#id sibling-combinator selector` fails 3661 if ( !el.querySelectorAll( "a#" + expando + "+*" ).length ) { 3662 rbuggyQSA.push( ".#.+[+~]" ); 3663 } 3664 3665 // Support: Chrome <=105+, Firefox <=104+, Safari <=15.4+ 3666 // In some of the document kinds, these selectors wouldn't work natively. 3667 // This is probably OK but for backwards compatibility we want to maintain 3668 // handling them through jQuery traversal in jQuery 3.x. 3669 if ( !el.querySelectorAll( ":checked" ).length ) { 3670 rbuggyQSA.push( ":checked" ); 3671 } 3672 3673 // Support: Windows 8 Native Apps 3674 // The type and name attributes are restricted during .innerHTML assignment 3675 input = document.createElement( "input" ); 3676 input.setAttribute( "type", "hidden" ); 3677 el.appendChild( input ).setAttribute( "name", "D" ); 3678 3679 // Support: IE 9 - 11+ 3680 // IE's :disabled selector does not pick up the children of disabled fieldsets 3681 // Support: Chrome <=105+, Firefox <=104+, Safari <=15.4+ 3682 // In some of the document kinds, these selectors wouldn't work natively. 3683 // This is probably OK but for backwards compatibility we want to maintain 3684 // handling them through jQuery traversal in jQuery 3.x. 3685 documentElement.appendChild( el ).disabled = true; 3686 if ( el.querySelectorAll( ":disabled" ).length !== 2 ) { 3687 rbuggyQSA.push( ":enabled", ":disabled" ); 3688 } 3689 3690 // Support: IE 11+, Edge 15 - 18+ 3691 // IE 11/Edge don't find elements on a `[name='']` query in some cases. 3692 // Adding a temporary attribute to the document before the selection works 3693 // around the issue. 3694 // Interestingly, IE 10 & older don't seem to have the issue. 3695 input = document.createElement( "input" ); 3696 input.setAttribute( "name", "" ); 3697 el.appendChild( input ); 3698 if ( !el.querySelectorAll( "[name='']" ).length ) { 3699 rbuggyQSA.push( "\\[" + whitespace + "*name" + whitespace + "*=" + 3700 whitespace + "*(?:''|\"\")" ); 3701 } 3702 } ); 3703 3704 if ( !support.cssHas ) { 3705 3706 // Support: Chrome 105 - 110+, Safari 15.4 - 16.3+ 3707 // Our regular `try-catch` mechanism fails to detect natively-unsupported 3708 // pseudo-classes inside `:has()` (such as `:has(:contains("Foo"))`) 3709 // in browsers that parse the `:has()` argument as a forgiving selector list. 3710 // https://drafts.csswg.org/selectors/#relational now requires the argument 3711 // to be parsed unforgivingly, but browsers have not yet fully adjusted. 3712 rbuggyQSA.push( ":has" ); 3713 } 3714 3715 rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join( "|" ) ); 3716 3717 /* Sorting 3718 ---------------------------------------------------------------------- */ 3719 3720 // Document order sorting 3721 sortOrder = function( a, b ) { 3722 3723 // Flag for duplicate removal 3724 if ( a === b ) { 3725 hasDuplicate = true; 3726 return 0; 3727 } 3728 3729 // Sort on method existence if only one input has compareDocumentPosition 3730 var compare = !a.compareDocumentPosition - !b.compareDocumentPosition; 3731 if ( compare ) { 3732 return compare; 3733 } 3734 3735 // Calculate position if both inputs belong to the same document 3736 // Support: IE 11+, Edge 17 - 18+ 3737 // IE/Edge sometimes throw a "Permission denied" error when strict-comparing 3738 // two documents; shallow comparisons work. 3739 // eslint-disable-next-line eqeqeq 3740 compare = ( a.ownerDocument || a ) == ( b.ownerDocument || b ) ? 3741 a.compareDocumentPosition( b ) : 3742 3743 // Otherwise we know they are disconnected 3744 1; 3745 3746 // Disconnected nodes 3747 if ( compare & 1 || 3748 ( !support.sortDetached && b.compareDocumentPosition( a ) === compare ) ) { 3749 3750 // Choose the first element that is related to our preferred document 3751 // Support: IE 11+, Edge 17 - 18+ 3752 // IE/Edge sometimes throw a "Permission denied" error when strict-comparing 3753 // two documents; shallow comparisons work. 3754 // eslint-disable-next-line eqeqeq 3755 if ( a === document || a.ownerDocument == preferredDoc && 3756 find.contains( preferredDoc, a ) ) { 3757 return -1; 3758 } 3759 3760 // Support: IE 11+, Edge 17 - 18+ 3761 // IE/Edge sometimes throw a "Permission denied" error when strict-comparing 3762 // two documents; shallow comparisons work. 3763 // eslint-disable-next-line eqeqeq 3764 if ( b === document || b.ownerDocument == preferredDoc && 3765 find.contains( preferredDoc, b ) ) { 3766 return 1; 3767 } 3768 3769 // Maintain original order 3770 return sortInput ? 3771 ( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) : 3772 0; 3773 } 3774 3775 return compare & 4 ? -1 : 1; 3776 }; 3777 3778 return document; 3779} 3780 3781find.matches = function( expr, elements ) { 3782 return find( expr, null, null, elements ); 3783}; 3784 3785find.matchesSelector = function( elem, expr ) { 3786 setDocument( elem ); 3787 3788 if ( documentIsHTML && 3789 !nonnativeSelectorCache[ expr + " " ] && 3790 ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) { 3791 3792 try { 3793 var ret = matches.call( elem, expr ); 3794 3795 // IE 9's matchesSelector returns false on disconnected nodes 3796 if ( ret || support.disconnectedMatch || 3797 3798 // As well, disconnected nodes are said to be in a document 3799 // fragment in IE 9 3800 elem.document && elem.document.nodeType !== 11 ) { 3801 return ret; 3802 } 3803 } catch ( e ) { 3804 nonnativeSelectorCache( expr, true ); 3805 } 3806 } 3807 3808 return find( expr, document, null, [ elem ] ).length > 0; 3809}; 3810 3811find.contains = function( context, elem ) { 3812 3813 // Set document vars if needed 3814 // Support: IE 11+, Edge 17 - 18+ 3815 // IE/Edge sometimes throw a "Permission denied" error when strict-comparing 3816 // two documents; shallow comparisons work. 3817 // eslint-disable-next-line eqeqeq 3818 if ( ( context.ownerDocument || context ) != document ) { 3819 setDocument( context ); 3820 } 3821 return jQuery.contains( context, elem ); 3822}; 3823 3824 3825find.attr = function( elem, name ) { 3826 3827 // Set document vars if needed 3828 // Support: IE 11+, Edge 17 - 18+ 3829 // IE/Edge sometimes throw a "Permission denied" error when strict-comparing 3830 // two documents; shallow comparisons work. 3831 // eslint-disable-next-line eqeqeq 3832 if ( ( elem.ownerDocument || elem ) != document ) { 3833 setDocument( elem ); 3834 } 3835 3836 var fn = Expr.attrHandle[ name.toLowerCase() ], 3837 3838 // Don't get fooled by Object.prototype properties (see trac-13807) 3839 val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ? 3840 fn( elem, name, !documentIsHTML ) : 3841 undefined; 3842 3843 if ( val !== undefined ) { 3844 return val; 3845 } 3846 3847 return elem.getAttribute( name ); 3848}; 3849 3850find.error = function( msg ) { 3851 throw new Error( "Syntax error, unrecognized expression: " + msg ); 3852}; 3853 3854/** 3855 * Document sorting and removing duplicates 3856 * @param {ArrayLike} results 3857 */ 3858jQuery.uniqueSort = function( results ) { 3859 var elem, 3860 duplicates = [], 3861 j = 0, 3862 i = 0; 3863 3864 // Unless we *know* we can detect duplicates, assume their presence 3865 // 3866 // Support: Android <=4.0+ 3867 // Testing for detecting duplicates is unpredictable so instead assume we can't 3868 // depend on duplicate detection in all browsers without a stable sort. 3869 hasDuplicate = !support.sortStable; 3870 sortInput = !support.sortStable && slice.call( results, 0 ); 3871 sort.call( results, sortOrder ); 3872 3873 if ( hasDuplicate ) { 3874 while ( ( elem = results[ i++ ] ) ) { 3875 if ( elem === results[ i ] ) { 3876 j = duplicates.push( i ); 3877 } 3878 } 3879 while ( j-- ) { 3880 splice.call( results, duplicates[ j ], 1 ); 3881 } 3882 } 3883 3884 // Clear input after sorting to release objects 3885 // See https://github.com/jquery/sizzle/pull/225 3886 sortInput = null; 3887 3888 return results; 3889}; 3890 3891jQuery.fn.uniqueSort = function() { 3892 return this.pushStack( jQuery.uniqueSort( slice.apply( this ) ) ); 3893}; 3894 3895Expr = jQuery.expr = { 3896 3897 // Can be adjusted by the user 3898 cacheLength: 50, 3899 3900 createPseudo: markFunction, 3901 3902 match: matchExpr, 3903 3904 attrHandle: {}, 3905 3906 find: {}, 3907 3908 relative: { 3909 ">": { dir: "parentNode", first: true }, 3910 " ": { dir: "parentNode" }, 3911 "+": { dir: "previousSibling", first: true }, 3912 "~": { dir: "previousSibling" } 3913 }, 3914 3915 preFilter: { 3916 ATTR: function( match ) { 3917 match[ 1 ] = match[ 1 ].replace( runescape, funescape ); 3918 3919 // Move the given value to match[3] whether quoted or unquoted 3920 match[ 3 ] = ( match[ 3 ] || match[ 4 ] || match[ 5 ] || "" ) 3921 .replace( runescape, funescape ); 3922 3923 if ( match[ 2 ] === "~=" ) { 3924 match[ 3 ] = " " + match[ 3 ] + " "; 3925 } 3926 3927 return match.slice( 0, 4 ); 3928 }, 3929 3930 CHILD: function( match ) { 3931 3932 /* matches from matchExpr["CHILD"] 3933 1 type (only|nth|...) 3934 2 what (child|of-type) 3935 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...) 3936 4 xn-component of xn+y argument ([+-]?\d*n|) 3937 5 sign of xn-component 3938 6 x of xn-component 3939 7 sign of y-component 3940 8 y of y-component 3941 */ 3942 match[ 1 ] = match[ 1 ].toLowerCase(); 3943 3944 if ( match[ 1 ].slice( 0, 3 ) === "nth" ) { 3945 3946 // nth-* requires argument 3947 if ( !match[ 3 ] ) { 3948 find.error( match[ 0 ] ); 3949 } 3950 3951 // numeric x and y parameters for Expr.filter.CHILD 3952 // remember that false/true cast respectively to 0/1 3953 match[ 4 ] = +( match[ 4 ] ? 3954 match[ 5 ] + ( match[ 6 ] || 1 ) : 3955 2 * ( match[ 3 ] === "even" || match[ 3 ] === "odd" ) 3956 ); 3957 match[ 5 ] = +( ( match[ 7 ] + match[ 8 ] ) || match[ 3 ] === "odd" ); 3958 3959 // other types prohibit arguments 3960 } else if ( match[ 3 ] ) { 3961 find.error( match[ 0 ] ); 3962 } 3963 3964 return match; 3965 }, 3966 3967 PSEUDO: function( match ) { 3968 var excess, 3969 unquoted = !match[ 6 ] && match[ 2 ]; 3970 3971 if ( matchExpr.CHILD.test( match[ 0 ] ) ) { 3972 return null; 3973 } 3974 3975 // Accept quoted arguments as-is 3976 if ( match[ 3 ] ) { 3977 match[ 2 ] = match[ 4 ] || match[ 5 ] || ""; 3978 3979 // Strip excess characters from unquoted arguments 3980 } else if ( unquoted && rpseudo.test( unquoted ) && 3981 3982 // Get excess from tokenize (recursively) 3983 ( excess = tokenize( unquoted, true ) ) && 3984 3985 // advance to the next closing parenthesis 3986 ( excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length ) ) { 3987 3988 // excess is a negative index 3989 match[ 0 ] = match[ 0 ].slice( 0, excess ); 3990 match[ 2 ] = unquoted.slice( 0, excess ); 3991 } 3992 3993 // Return only captures needed by the pseudo filter method (type and argument) 3994 return match.slice( 0, 3 ); 3995 } 3996 }, 3997 3998 filter: { 3999 4000 TAG: function( nodeNameSelector ) { 4001 var expectedNodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase(); 4002 return nodeNameSelector === "*" ? 4003 function() { 4004 return true; 4005 } : 4006 function( elem ) { 4007 return nodeName( elem, expectedNodeName ); 4008 }; 4009 }, 4010 4011 CLASS: function( className ) { 4012 var pattern = classCache[ className + " " ]; 4013 4014 return pattern || 4015 ( pattern = new RegExp( "(^|" + whitespace + ")" + className + 4016 "(" + whitespace + "|$)" ) ) && 4017 classCache( className, function( elem ) { 4018 return pattern.test( 4019 typeof elem.className === "string" && elem.className || 4020 typeof elem.getAttribute !== "undefined" && 4021 elem.getAttribute( "class" ) || 4022 "" 4023 ); 4024 } ); 4025 }, 4026 4027 ATTR: function( name, operator, check ) { 4028 return function( elem ) { 4029 var result = find.attr( elem, name ); 4030 4031 if ( result == null ) { 4032 return operator === "!="; 4033 } 4034 if ( !operator ) { 4035 return true; 4036 } 4037 4038 result += ""; 4039 4040 if ( operator === "=" ) { 4041 return result === check; 4042 } 4043 if ( operator === "!=" ) { 4044 return result !== check; 4045 } 4046 if ( operator === "^=" ) { 4047 return check && result.indexOf( check ) === 0; 4048 } 4049 if ( operator === "*=" ) { 4050 return check && result.indexOf( check ) > -1; 4051 } 4052 if ( operator === "$=" ) { 4053 return check && result.slice( -check.length ) === check; 4054 } 4055 if ( operator === "~=" ) { 4056 return ( " " + result.replace( rwhitespace, " " ) + " " ) 4057 .indexOf( check ) > -1; 4058 } 4059 if ( operator === "|=" ) { 4060 return result === check || result.slice( 0, check.length + 1 ) === check + "-"; 4061 } 4062 4063 return false; 4064 }; 4065 }, 4066 4067 CHILD: function( type, what, _argument, first, last ) { 4068 var simple = type.slice( 0, 3 ) !== "nth", 4069 forward = type.slice( -4 ) !== "last", 4070 ofType = what === "of-type"; 4071 4072 return first === 1 && last === 0 ? 4073 4074 // Shortcut for :nth-*(n) 4075 function( elem ) { 4076 return !!elem.parentNode; 4077 } : 4078 4079 function( elem, _context, xml ) { 4080 var cache, outerCache, node, nodeIndex, start, 4081 dir = simple !== forward ? "nextSibling" : "previousSibling", 4082 parent = elem.parentNode, 4083 name = ofType && elem.nodeName.toLowerCase(), 4084 useCache = !xml && !ofType, 4085 diff = false; 4086 4087 if ( parent ) { 4088 4089 // :(first|last|only)-(child|of-type) 4090 if ( simple ) { 4091 while ( dir ) { 4092 node = elem; 4093 while ( ( node = node[ dir ] ) ) { 4094 if ( ofType ? 4095 nodeName( node, name ) : 4096 node.nodeType === 1 ) { 4097 4098 return false; 4099 } 4100 } 4101 4102 // Reverse direction for :only-* (if we haven't yet done so) 4103 start = dir = type === "only" && !start && "nextSibling"; 4104 } 4105 return true; 4106 } 4107 4108 start = [ forward ? parent.firstChild : parent.lastChild ]; 4109 4110 // non-xml :nth-child(...) stores cache data on `parent` 4111 if ( forward && useCache ) { 4112 4113 // Seek `elem` from a previously-cached index 4114 outerCache = parent[ expando ] || ( parent[ expando ] = {} ); 4115 cache = outerCache[ type ] || []; 4116 nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; 4117 diff = nodeIndex && cache[ 2 ]; 4118 node = nodeIndex && parent.childNodes[ nodeIndex ]; 4119 4120 while ( ( node = ++nodeIndex && node && node[ dir ] || 4121 4122 // Fallback to seeking `elem` from the start 4123 ( diff = nodeIndex = 0 ) || start.pop() ) ) { 4124 4125 // When found, cache indexes on `parent` and break 4126 if ( node.nodeType === 1 && ++diff && node === elem ) { 4127 outerCache[ type ] = [ dirruns, nodeIndex, diff ]; 4128 break; 4129 } 4130 } 4131 4132 } else { 4133 4134 // Use previously-cached element index if available 4135 if ( useCache ) { 4136 outerCache = elem[ expando ] || ( elem[ expando ] = {} ); 4137 cache = outerCache[ type ] || []; 4138 nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; 4139 diff = nodeIndex; 4140 } 4141 4142 // xml :nth-child(...) 4143 // or :nth-last-child(...) or :nth(-last)?-of-type(...) 4144 if ( diff === false ) { 4145 4146 // Use the same loop as above to seek `elem` from the start 4147 while ( ( node = ++nodeIndex && node && node[ dir ] || 4148 ( diff = nodeIndex = 0 ) || start.pop() ) ) { 4149 4150 if ( ( ofType ? 4151 nodeName( node, name ) : 4152 node.nodeType === 1 ) && 4153 ++diff ) { 4154 4155 // Cache the index of each encountered element 4156 if ( useCache ) { 4157 outerCache = node[ expando ] || 4158 ( node[ expando ] = {} ); 4159 outerCache[ type ] = [ dirruns, diff ]; 4160 } 4161 4162 if ( node === elem ) { 4163 break; 4164 } 4165 } 4166 } 4167 } 4168 } 4169 4170 // Incorporate the offset, then check against cycle size 4171 diff -= last; 4172 return diff === first || ( diff % first === 0 && diff / first >= 0 ); 4173 } 4174 }; 4175 }, 4176 4177 PSEUDO: function( pseudo, argument ) { 4178 4179 // pseudo-class names are case-insensitive 4180 // https://www.w3.org/TR/selectors/#pseudo-classes 4181 // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters 4182 // Remember that setFilters inherits from pseudos 4183 var args, 4184 fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] || 4185 find.error( "unsupported pseudo: " + pseudo ); 4186 4187 // The user may use createPseudo to indicate that 4188 // arguments are needed to create the filter function 4189 // just as jQuery does 4190 if ( fn[ expando ] ) { 4191 return fn( argument ); 4192 } 4193 4194 // But maintain support for old signatures 4195 if ( fn.length > 1 ) { 4196 args = [ pseudo, pseudo, "", argument ]; 4197 return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ? 4198 markFunction( function( seed, matches ) { 4199 var idx, 4200 matched = fn( seed, argument ), 4201 i = matched.length; 4202 while ( i-- ) { 4203 idx = indexOf.call( seed, matched[ i ] ); 4204 seed[ idx ] = !( matches[ idx ] = matched[ i ] ); 4205 } 4206 } ) : 4207 function( elem ) { 4208 return fn( elem, 0, args ); 4209 }; 4210 } 4211 4212 return fn; 4213 } 4214 }, 4215 4216 pseudos: { 4217 4218 // Potentially complex pseudos 4219 not: markFunction( function( selector ) { 4220 4221 // Trim the selector passed to compile 4222 // to avoid treating leading and trailing 4223 // spaces as combinators 4224 var input = [], 4225 results = [], 4226 matcher = compile( selector.replace( rtrimCSS, "$1" ) ); 4227 4228 return matcher[ expando ] ? 4229 markFunction( function( seed, matches, _context, xml ) { 4230 var elem, 4231 unmatched = matcher( seed, null, xml, [] ), 4232 i = seed.length; 4233 4234 // Match elements unmatched by `matcher` 4235 while ( i-- ) { 4236 if ( ( elem = unmatched[ i ] ) ) { 4237 seed[ i ] = !( matches[ i ] = elem ); 4238 } 4239 } 4240 } ) : 4241 function( elem, _context, xml ) { 4242 input[ 0 ] = elem; 4243 matcher( input, null, xml, results ); 4244 4245 // Don't keep the element 4246 // (see https://github.com/jquery/sizzle/issues/299) 4247 input[ 0 ] = null; 4248 return !results.pop(); 4249 }; 4250 } ), 4251 4252 has: markFunction( function( selector ) { 4253 return function( elem ) { 4254 return find( selector, elem ).length > 0; 4255 }; 4256 } ), 4257 4258 contains: markFunction( function( text ) { 4259 text = text.replace( runescape, funescape ); 4260 return function( elem ) { 4261 return ( elem.textContent || jQuery.text( elem ) ).indexOf( text ) > -1; 4262 }; 4263 } ), 4264 4265 // "Whether an element is represented by a :lang() selector 4266 // is based solely on the element's language value 4267 // being equal to the identifier C, 4268 // or beginning with the identifier C immediately followed by "-". 4269 // The matching of C against the element's language value is performed case-insensitively. 4270 // The identifier C does not have to be a valid language name." 4271 // https://www.w3.org/TR/selectors/#lang-pseudo 4272 lang: markFunction( function( lang ) { 4273 4274 // lang value must be a valid identifier 4275 if ( !ridentifier.test( lang || "" ) ) { 4276 find.error( "unsupported lang: " + lang ); 4277 } 4278 lang = lang.replace( runescape, funescape ).toLowerCase(); 4279 return function( elem ) { 4280 var elemLang; 4281 do { 4282 if ( ( elemLang = documentIsHTML ? 4283 elem.lang : 4284 elem.getAttribute( "xml:lang" ) || elem.getAttribute( "lang" ) ) ) { 4285 4286 elemLang = elemLang.toLowerCase(); 4287 return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0; 4288 } 4289 } while ( ( elem = elem.parentNode ) && elem.nodeType === 1 ); 4290 return false; 4291 }; 4292 } ), 4293 4294 // Miscellaneous 4295 target: function( elem ) { 4296 var hash = window.location && window.location.hash; 4297 return hash && hash.slice( 1 ) === elem.id; 4298 }, 4299 4300 root: function( elem ) { 4301 return elem === documentElement; 4302 }, 4303 4304 focus: function( elem ) { 4305 return elem === safeActiveElement() && 4306 document.hasFocus() && 4307 !!( elem.type || elem.href || ~elem.tabIndex ); 4308 }, 4309 4310 // Boolean properties 4311 enabled: createDisabledPseudo( false ), 4312 disabled: createDisabledPseudo( true ), 4313 4314 checked: function( elem ) { 4315 4316 // In CSS3, :checked should return both checked and selected elements 4317 // https://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked 4318 return ( nodeName( elem, "input" ) && !!elem.checked ) || 4319 ( nodeName( elem, "option" ) && !!elem.selected ); 4320 }, 4321 4322 selected: function( elem ) { 4323 4324 // Support: IE <=11+ 4325 // Accessing the selectedIndex property 4326 // forces the browser to treat the default option as 4327 // selected when in an optgroup. 4328 if ( elem.parentNode ) { 4329 // eslint-disable-next-line no-unused-expressions 4330 elem.parentNode.selectedIndex; 4331 } 4332 4333 return elem.selected === true; 4334 }, 4335 4336 // Contents 4337 empty: function( elem ) { 4338 4339 // https://www.w3.org/TR/selectors/#empty-pseudo 4340 // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5), 4341 // but not by others (comment: 8; processing instruction: 7; etc.) 4342 // nodeType < 6 works because attributes (2) do not appear as children 4343 for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { 4344 if ( elem.nodeType < 6 ) { 4345 return false; 4346 } 4347 } 4348 return true; 4349 }, 4350 4351 parent: function( elem ) { 4352 return !Expr.pseudos.empty( elem ); 4353 }, 4354 4355 // Element/input types 4356 header: function( elem ) { 4357 return rheader.test( elem.nodeName ); 4358 }, 4359 4360 input: function( elem ) { 4361 return rinputs.test( elem.nodeName ); 4362 }, 4363 4364 button: function( elem ) { 4365 return nodeName( elem, "input" ) && elem.type === "button" || 4366 nodeName( elem, "button" ); 4367 }, 4368 4369 text: function( elem ) { 4370 var attr; 4371 return nodeName( elem, "input" ) && elem.type === "text" && 4372 4373 // Support: IE <10 only 4374 // New HTML5 attribute values (e.g., "search") appear 4375 // with elem.type === "text" 4376 ( ( attr = elem.getAttribute( "type" ) ) == null || 4377 attr.toLowerCase() === "text" ); 4378 }, 4379 4380 // Position-in-collection 4381 first: createPositionalPseudo( function() { 4382 return [ 0 ]; 4383 } ), 4384 4385 last: createPositionalPseudo( function( _matchIndexes, length ) { 4386 return [ length - 1 ]; 4387 } ), 4388 4389 eq: createPositionalPseudo( function( _matchIndexes, length, argument ) { 4390 return [ argument < 0 ? argument + length : argument ]; 4391 } ), 4392 4393 even: createPositionalPseudo( function( matchIndexes, length ) { 4394 var i = 0; 4395 for ( ; i < length; i += 2 ) { 4396 matchIndexes.push( i ); 4397 } 4398 return matchIndexes; 4399 } ), 4400 4401 odd: createPositionalPseudo( function( matchIndexes, length ) { 4402 var i = 1; 4403 for ( ; i < length; i += 2 ) { 4404 matchIndexes.push( i ); 4405 } 4406 return matchIndexes; 4407 } ), 4408 4409 lt: createPositionalPseudo( function( matchIndexes, length, argument ) { 4410 var i; 4411 4412 if ( argument < 0 ) { 4413 i = argument + length; 4414 } else if ( argument > length ) { 4415 i = length; 4416 } else { 4417 i = argument; 4418 } 4419 4420 for ( ; --i >= 0; ) { 4421 matchIndexes.push( i ); 4422 } 4423 return matchIndexes; 4424 } ), 4425 4426 gt: createPositionalPseudo( function( matchIndexes, length, argument ) { 4427 var i = argument < 0 ? argument + length : argument; 4428 for ( ; ++i < length; ) { 4429 matchIndexes.push( i ); 4430 } 4431 return matchIndexes; 4432 } ) 4433 } 4434}; 4435 4436Expr.pseudos.nth = Expr.pseudos.eq; 4437 4438// Add button/input type pseudos 4439for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) { 4440 Expr.pseudos[ i ] = createInputPseudo( i ); 4441} 4442for ( i in { submit: true, reset: true } ) { 4443 Expr.pseudos[ i ] = createButtonPseudo( i ); 4444} 4445 4446// Easy API for creating new setFilters 4447function setFilters() {} 4448setFilters.prototype = Expr.filters = Expr.pseudos; 4449Expr.setFilters = new setFilters(); 4450 4451function tokenize( selector, parseOnly ) { 4452 var matched, match, tokens, type, 4453 soFar, groups, preFilters, 4454 cached = tokenCache[ selector + " " ]; 4455 4456 if ( cached ) { 4457 return parseOnly ? 0 : cached.slice( 0 ); 4458 } 4459 4460 soFar = selector; 4461 groups = []; 4462 preFilters = Expr.preFilter; 4463 4464 while ( soFar ) { 4465 4466 // Comma and first run 4467 if ( !matched || ( match = rcomma.exec( soFar ) ) ) { 4468 if ( match ) { 4469 4470 // Don't consume trailing commas as valid 4471 soFar = soFar.slice( match[ 0 ].length ) || soFar; 4472 } 4473 groups.push( ( tokens = [] ) ); 4474 } 4475 4476 matched = false; 4477 4478 // Combinators 4479 if ( ( match = rleadingCombinator.exec( soFar ) ) ) { 4480 matched = match.shift(); 4481 tokens.push( { 4482 value: matched, 4483 4484 // Cast descendant combinators to space 4485 type: match[ 0 ].replace( rtrimCSS, " " ) 4486 } ); 4487 soFar = soFar.slice( matched.length ); 4488 } 4489 4490 // Filters 4491 for ( type in Expr.filter ) { 4492 if ( ( match = matchExpr[ type ].exec( soFar ) ) && ( !preFilters[ type ] || 4493 ( match = preFilters[ type ]( match ) ) ) ) { 4494 matched = match.shift(); 4495 tokens.push( { 4496 value: matched, 4497 type: type, 4498 matches: match 4499 } ); 4500 soFar = soFar.slice( matched.length ); 4501 } 4502 } 4503 4504 if ( !matched ) { 4505 break; 4506 } 4507 } 4508 4509 // Return the length of the invalid excess 4510 // if we're just parsing 4511 // Otherwise, throw an error or return tokens 4512 if ( parseOnly ) { 4513 return soFar.length; 4514 } 4515 4516 return soFar ? 4517 find.error( selector ) : 4518 4519 // Cache the tokens 4520 tokenCache( selector, groups ).slice( 0 ); 4521} 4522 4523function toSelector( tokens ) { 4524 var i = 0, 4525 len = tokens.length, 4526 selector = ""; 4527 for ( ; i < len; i++ ) { 4528 selector += tokens[ i ].value; 4529 } 4530 return selector; 4531} 4532 4533function addCombinator( matcher, combinator, base ) { 4534 var dir = combinator.dir, 4535 skip = combinator.next, 4536 key = skip || dir, 4537 checkNonElements = base && key === "parentNode", 4538 doneName = done++; 4539 4540 return combinator.first ? 4541 4542 // Check against closest ancestor/preceding element 4543 function( elem, context, xml ) { 4544 while ( ( elem = elem[ dir ] ) ) { 4545 if ( elem.nodeType === 1 || checkNonElements ) { 4546 return matcher( elem, context, xml ); 4547 } 4548 } 4549 return false; 4550 } : 4551 4552 // Check against all ancestor/preceding elements 4553 function( elem, context, xml ) { 4554 var oldCache, outerCache, 4555 newCache = [ dirruns, doneName ]; 4556 4557 // We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching 4558 if ( xml ) { 4559 while ( ( elem = elem[ dir ] ) ) { 4560 if ( elem.nodeType === 1 || checkNonElements ) { 4561 if ( matcher( elem, context, xml ) ) { 4562 return true; 4563 } 4564 } 4565 } 4566 } else { 4567 while ( ( elem = elem[ dir ] ) ) { 4568 if ( elem.nodeType === 1 || checkNonElements ) { 4569 outerCache = elem[ expando ] || ( elem[ expando ] = {} ); 4570 4571 if ( skip && nodeName( elem, skip ) ) { 4572 elem = elem[ dir ] || elem; 4573 } else if ( ( oldCache = outerCache[ key ] ) && 4574 oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) { 4575 4576 // Assign to newCache so results back-propagate to previous elements 4577 return ( newCache[ 2 ] = oldCache[ 2 ] ); 4578 } else { 4579 4580 // Reuse newcache so results back-propagate to previous elements 4581 outerCache[ key ] = newCache; 4582 4583 // A match means we're done; a fail means we have to keep checking 4584 if ( ( newCache[ 2 ] = matcher( elem, context, xml ) ) ) { 4585 return true; 4586 } 4587 } 4588 } 4589 } 4590 } 4591 return false; 4592 }; 4593} 4594 4595function elementMatcher( matchers ) { 4596 return matchers.length > 1 ? 4597 function( elem, context, xml ) { 4598 var i = matchers.length; 4599 while ( i-- ) { 4600 if ( !matchers[ i ]( elem, context, xml ) ) { 4601 return false; 4602 } 4603 } 4604 return true; 4605 } : 4606 matchers[ 0 ]; 4607} 4608 4609function multipleContexts( selector, contexts, results ) { 4610 var i = 0, 4611 len = contexts.length; 4612 for ( ; i < len; i++ ) { 4613 find( selector, contexts[ i ], results ); 4614 } 4615 return results; 4616} 4617 4618function condense( unmatched, map, filter, context, xml ) { 4619 var elem, 4620 newUnmatched = [], 4621 i = 0, 4622 len = unmatched.length, 4623 mapped = map != null; 4624 4625 for ( ; i < len; i++ ) { 4626 if ( ( elem = unmatched[ i ] ) ) { 4627 if ( !filter || filter( elem, context, xml ) ) { 4628 newUnmatched.push( elem ); 4629 if ( mapped ) { 4630 map.push( i ); 4631 } 4632 } 4633 } 4634 } 4635 4636 return newUnmatched; 4637} 4638 4639function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) { 4640 if ( postFilter && !postFilter[ expando ] ) { 4641 postFilter = setMatcher( postFilter ); 4642 } 4643 if ( postFinder && !postFinder[ expando ] ) { 4644 postFinder = setMatcher( postFinder, postSelector ); 4645 } 4646 return markFunction( function( seed, results, context, xml ) { 4647 var temp, i, elem, matcherOut, 4648 preMap = [], 4649 postMap = [], 4650 preexisting = results.length, 4651 4652 // Get initial elements from seed or context 4653 elems = seed || 4654 multipleContexts( selector || "*", 4655 context.nodeType ? [ context ] : context, [] ), 4656 4657 // Prefilter to get matcher input, preserving a map for seed-results synchronization 4658 matcherIn = preFilter && ( seed || !selector ) ? 4659 condense( elems, preMap, preFilter, context, xml ) : 4660 elems; 4661 4662 if ( matcher ) { 4663 4664 // If we have a postFinder, or filtered seed, or non-seed postFilter 4665 // or preexisting results, 4666 matcherOut = postFinder || ( seed ? preFilter : preexisting || postFilter ) ? 4667 4668 // ...intermediate processing is necessary 4669 [] : 4670 4671 // ...otherwise use results directly 4672 results; 4673 4674 // Find primary matches 4675 matcher( matcherIn, matcherOut, context, xml ); 4676 } else { 4677 matcherOut = matcherIn; 4678 } 4679 4680 // Apply postFilter 4681 if ( postFilter ) { 4682 temp = condense( matcherOut, postMap ); 4683 postFilter( temp, [], context, xml ); 4684 4685 // Un-match failing elements by moving them back to matcherIn 4686 i = temp.length; 4687 while ( i-- ) { 4688 if ( ( elem = temp[ i ] ) ) { 4689 matcherOut[ postMap[ i ] ] = !( matcherIn[ postMap[ i ] ] = elem ); 4690 } 4691 } 4692 } 4693 4694 if ( seed ) { 4695 if ( postFinder || preFilter ) { 4696 if ( postFinder ) { 4697 4698 // Get the final matcherOut by condensing this intermediate into postFinder contexts 4699 temp = []; 4700 i = matcherOut.length; 4701 while ( i-- ) { 4702 if ( ( elem = matcherOut[ i ] ) ) { 4703 4704 // Restore matcherIn since elem is not yet a final match 4705 temp.push( ( matcherIn[ i ] = elem ) ); 4706 } 4707 } 4708 postFinder( null, ( matcherOut = [] ), temp, xml ); 4709 } 4710 4711 // Move matched elements from seed to results to keep them synchronized 4712 i = matcherOut.length; 4713 while ( i-- ) { 4714 if ( ( elem = matcherOut[ i ] ) && 4715 ( temp = postFinder ? indexOf.call( seed, elem ) : preMap[ i ] ) > -1 ) { 4716 4717 seed[ temp ] = !( results[ temp ] = elem ); 4718 } 4719 } 4720 } 4721 4722 // Add elements to results, through postFinder if defined 4723 } else { 4724 matcherOut = condense( 4725 matcherOut === results ? 4726 matcherOut.splice( preexisting, matcherOut.length ) : 4727 matcherOut 4728 ); 4729 if ( postFinder ) { 4730 postFinder( null, results, matcherOut, xml ); 4731 } else { 4732 push.apply( results, matcherOut ); 4733 } 4734 } 4735 } ); 4736} 4737 4738function matcherFromTokens( tokens ) { 4739 var checkContext, matcher, j, 4740 len = tokens.length, 4741 leadingRelative = Expr.relative[ tokens[ 0 ].type ], 4742 implicitRelative = leadingRelative || Expr.relative[ " " ], 4743 i = leadingRelative ? 1 : 0, 4744 4745 // The foundational matcher ensures that elements are reachable from top-level context(s) 4746 matchContext = addCombinator( function( elem ) { 4747 return elem === checkContext; 4748 }, implicitRelative, true ), 4749 matchAnyContext = addCombinator( function( elem ) { 4750 return indexOf.call( checkContext, elem ) > -1; 4751 }, implicitRelative, true ), 4752 matchers = [ function( elem, context, xml ) { 4753 4754 // Support: IE 11+, Edge 17 - 18+ 4755 // IE/Edge sometimes throw a "Permission denied" error when strict-comparing 4756 // two documents; shallow comparisons work. 4757 // eslint-disable-next-line eqeqeq 4758 var ret = ( !leadingRelative && ( xml || context != outermostContext ) ) || ( 4759 ( checkContext = context ).nodeType ? 4760 matchContext( elem, context, xml ) : 4761 matchAnyContext( elem, context, xml ) ); 4762 4763 // Avoid hanging onto element 4764 // (see https://github.com/jquery/sizzle/issues/299) 4765 checkContext = null; 4766 return ret; 4767 } ]; 4768 4769 for ( ; i < len; i++ ) { 4770 if ( ( matcher = Expr.relative[ tokens[ i ].type ] ) ) { 4771 matchers = [ addCombinator( elementMatcher( matchers ), matcher ) ]; 4772 } else { 4773 matcher = Expr.filter[ tokens[ i ].type ].apply( null, tokens[ i ].matches ); 4774 4775 // Return special upon seeing a positional matcher 4776 if ( matcher[ expando ] ) { 4777 4778 // Find the next relative operator (if any) for proper handling 4779 j = ++i; 4780 for ( ; j < len; j++ ) { 4781 if ( Expr.relative[ tokens[ j ].type ] ) { 4782 break; 4783 } 4784 } 4785 return setMatcher( 4786 i > 1 && elementMatcher( matchers ), 4787 i > 1 && toSelector( 4788 4789 // If the preceding token was a descendant combinator, insert an implicit any-element `*` 4790 tokens.slice( 0, i - 1 ) 4791 .concat( { value: tokens[ i - 2 ].type === " " ? "*" : "" } ) 4792 ).replace( rtrimCSS, "$1" ), 4793 matcher, 4794 i < j && matcherFromTokens( tokens.slice( i, j ) ), 4795 j < len && matcherFromTokens( ( tokens = tokens.slice( j ) ) ), 4796 j < len && toSelector( tokens ) 4797 ); 4798 } 4799 matchers.push( matcher ); 4800 } 4801 } 4802 4803 return elementMatcher( matchers ); 4804} 4805 4806function matcherFromGroupMatchers( elementMatchers, setMatchers ) { 4807 var bySet = setMatchers.length > 0, 4808 byElement = elementMatchers.length > 0, 4809 superMatcher = function( seed, context, xml, results, outermost ) { 4810 var elem, j, matcher, 4811 matchedCount = 0, 4812 i = "0", 4813 unmatched = seed && [], 4814 setMatched = [], 4815 contextBackup = outermostContext, 4816 4817 // We must always have either seed elements or outermost context 4818 elems = seed || byElement && Expr.find.TAG( "*", outermost ), 4819 4820 // Use integer dirruns iff this is the outermost matcher 4821 dirrunsUnique = ( dirruns += contextBackup == null ? 1 : Math.random() || 0.1 ), 4822 len = elems.length; 4823 4824 if ( outermost ) { 4825 4826 // Support: IE 11+, Edge 17 - 18+ 4827 // IE/Edge sometimes throw a "Permission denied" error when strict-comparing 4828 // two documents; shallow comparisons work. 4829 // eslint-disable-next-line eqeqeq 4830 outermostContext = context == document || context || outermost; 4831 } 4832 4833 // Add elements passing elementMatchers directly to results 4834 // Support: iOS <=7 - 9 only 4835 // Tolerate NodeList properties (IE: "length"; Safari: <number>) matching 4836 // elements by id. (see trac-14142) 4837 for ( ; i !== len && ( elem = elems[ i ] ) != null; i++ ) { 4838 if ( byElement && elem ) { 4839 j = 0; 4840 4841 // Support: IE 11+, Edge 17 - 18+ 4842 // IE/Edge sometimes throw a "Permission denied" error when strict-comparing 4843 // two documents; shallow comparisons work. 4844 // eslint-disable-next-line eqeqeq 4845 if ( !context && elem.ownerDocument != document ) { 4846 setDocument( elem ); 4847 xml = !documentIsHTML; 4848 } 4849 while ( ( matcher = elementMatchers[ j++ ] ) ) { 4850 if ( matcher( elem, context || document, xml ) ) { 4851 push.call( results, elem ); 4852 break; 4853 } 4854 } 4855 if ( outermost ) { 4856 dirruns = dirrunsUnique; 4857 } 4858 } 4859 4860 // Track unmatched elements for set filters 4861 if ( bySet ) { 4862 4863 // They will have gone through all possible matchers 4864 if ( ( elem = !matcher && elem ) ) { 4865 matchedCount--; 4866 } 4867 4868 // Lengthen the array for every element, matched or not 4869 if ( seed ) { 4870 unmatched.push( elem ); 4871 } 4872 } 4873 } 4874 4875 // `i` is now the count of elements visited above, and adding it to `matchedCount` 4876 // makes the latter nonnegative. 4877 matchedCount += i; 4878 4879 // Apply set filters to unmatched elements 4880 // NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount` 4881 // equals `i`), unless we didn't visit _any_ elements in the above loop because we have 4882 // no element matchers and no seed. 4883 // Incrementing an initially-string "0" `i` allows `i` to remain a string only in that 4884 // case, which will result in a "00" `matchedCount` that differs from `i` but is also 4885 // numerically zero. 4886 if ( bySet && i !== matchedCount ) { 4887 j = 0; 4888 while ( ( matcher = setMatchers[ j++ ] ) ) { 4889 matcher( unmatched, setMatched, context, xml ); 4890 } 4891 4892 if ( seed ) { 4893 4894 // Reintegrate element matches to eliminate the need for sorting 4895 if ( matchedCount > 0 ) { 4896 while ( i-- ) { 4897 if ( !( unmatched[ i ] || setMatched[ i ] ) ) { 4898 setMatched[ i ] = pop.call( results ); 4899 } 4900 } 4901 } 4902 4903 // Discard index placeholder values to get only actual matches 4904 setMatched = condense( setMatched ); 4905 } 4906 4907 // Add matches to results 4908 push.apply( results, setMatched ); 4909 4910 // Seedless set matches succeeding multiple successful matchers stipulate sorting 4911 if ( outermost && !seed && setMatched.length > 0 && 4912 ( matchedCount + setMatchers.length ) > 1 ) { 4913 4914 jQuery.uniqueSort( results ); 4915 } 4916 } 4917 4918 // Override manipulation of globals by nested matchers 4919 if ( outermost ) { 4920 dirruns = dirrunsUnique; 4921 outermostContext = contextBackup; 4922 } 4923 4924 return unmatched; 4925 }; 4926 4927 return bySet ? 4928 markFunction( superMatcher ) : 4929 superMatcher; 4930} 4931 4932function compile( selector, match /* Internal Use Only */ ) { 4933 var i, 4934 setMatchers = [], 4935 elementMatchers = [], 4936 cached = compilerCache[ selector + " " ]; 4937 4938 if ( !cached ) { 4939 4940 // Generate a function of recursive functions that can be used to check each element 4941 if ( !match ) { 4942 match = tokenize( selector ); 4943 } 4944 i = match.length; 4945 while ( i-- ) { 4946 cached = matcherFromTokens( match[ i ] ); 4947 if ( cached[ expando ] ) { 4948 setMatchers.push( cached ); 4949 } else { 4950 elementMatchers.push( cached ); 4951 } 4952 } 4953 4954 // Cache the compiled function 4955 cached = compilerCache( selector, 4956 matcherFromGroupMatchers( elementMatchers, setMatchers ) ); 4957 4958 // Save selector and tokenization 4959 cached.selector = selector; 4960 } 4961 return cached; 4962} 4963 4964/** 4965 * A low-level selection function that works with jQuery's compiled 4966 * selector functions 4967 * @param {String|Function} selector A selector or a pre-compiled 4968 * selector function built with jQuery selector compile 4969 * @param {Element} context 4970 * @param {Array} [results] 4971 * @param {Array} [seed] A set of elements to match against 4972 */ 4973function select( selector, context, results, seed ) { 4974 var i, tokens, token, type, find, 4975 compiled = typeof selector === "function" && selector, 4976 match = !seed && tokenize( ( selector = compiled.selector || selector ) ); 4977 4978 results = results || []; 4979 4980 // Try to minimize operations if there is only one selector in the list and no seed 4981 // (the latter of which guarantees us context) 4982 if ( match.length === 1 ) { 4983 4984 // Reduce context if the leading compound selector is an ID 4985 tokens = match[ 0 ] = match[ 0 ].slice( 0 ); 4986 if ( tokens.length > 2 && ( token = tokens[ 0 ] ).type === "ID" && 4987 context.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[ 1 ].type ] ) { 4988 4989 context = ( Expr.find.ID( 4990 token.matches[ 0 ].replace( runescape, funescape ), 4991 context 4992 ) || [] )[ 0 ]; 4993 if ( !context ) { 4994 return results; 4995 4996 // Precompiled matchers will still verify ancestry, so step up a level 4997 } else if ( compiled ) { 4998 context = context.parentNode; 4999 } 5000 5001 selector = selector.slice( tokens.shift().value.length ); 5002 } 5003 5004 // Fetch a seed set for right-to-left matching 5005 i = matchExpr.needsContext.test( selector ) ? 0 : tokens.length; 5006 while ( i-- ) { 5007 token = tokens[ i ]; 5008 5009 // Abort if we hit a combinator 5010 if ( Expr.relative[ ( type = token.type ) ] ) { 5011 break; 5012 } 5013 if ( ( find = Expr.find[ type ] ) ) { 5014 5015 // Search, expanding context for leading sibling combinators 5016 if ( ( seed = find( 5017 token.matches[ 0 ].replace( runescape, funescape ), 5018 rsibling.test( tokens[ 0 ].type ) && 5019 testContext( context.parentNode ) || context 5020 ) ) ) { 5021 5022 // If seed is empty or no tokens remain, we can return early 5023 tokens.splice( i, 1 ); 5024 selector = seed.length && toSelector( tokens ); 5025 if ( !selector ) { 5026 push.apply( results, seed ); 5027 return results; 5028 } 5029 5030 break; 5031 } 5032 } 5033 } 5034 } 5035 5036 // Compile and execute a filtering function if one is not provided 5037 // Provide `match` to avoid retokenization if we modified the selector above 5038 ( compiled || compile( selector, match ) )( 5039 seed, 5040 context, 5041 !documentIsHTML, 5042 results, 5043 !context || rsibling.test( selector ) && testContext( context.parentNode ) || context 5044 ); 5045 return results; 5046} 5047 5048// One-time assignments 5049 5050// Support: Android <=4.0 - 4.1+ 5051// Sort stability 5052support.sortStable = expando.split( "" ).sort( sortOrder ).join( "" ) === expando; 5053 5054// Initialize against the default document 5055setDocument(); 5056 5057// Support: Android <=4.0 - 4.1+ 5058// Detached nodes confoundingly follow *each other* 5059support.sortDetached = assert( function( el ) { 5060 5061 // Should return 1, but returns 4 (following) 5062 return el.compareDocumentPosition( document.createElement( "fieldset" ) ) & 1; 5063} ); 5064 5065jQuery.find = find; 5066 5067// Deprecated 5068jQuery.expr[ ":" ] = jQuery.expr.pseudos; 5069jQuery.unique = jQuery.uniqueSort; 5070 5071// These have always been private, but they used to be documented as part of 5072// Sizzle so let's maintain them for now for backwards compatibility purposes. 5073find.compile = compile; 5074find.select = select; 5075find.setDocument = setDocument; 5076find.tokenize = tokenize; 5077 5078find.escape = jQuery.escapeSelector; 5079find.getText = jQuery.text; 5080find.isXML = jQuery.isXMLDoc; 5081find.selectors = jQuery.expr; 5082find.support = jQuery.support; 5083find.uniqueSort = jQuery.uniqueSort; 5084 5085 /* eslint-enable */ 5086 5087} )(); 5088 5089 5090var dir = function( elem, dir, until ) { 5091 var matched = [], 5092 truncate = until !== undefined; 5093 5094 while ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) { 5095 if ( elem.nodeType === 1 ) { 5096 if ( truncate && jQuery( elem ).is( until ) ) { 5097 break; 5098 } 5099 matched.push( elem ); 5100 } 5101 } 5102 return matched; 5103}; 5104 5105 5106var siblings = function( n, elem ) { 5107 var matched = []; 5108 5109 for ( ; n; n = n.nextSibling ) { 5110 if ( n.nodeType === 1 && n !== elem ) { 5111 matched.push( n ); 5112 } 5113 } 5114 5115 return matched; 5116}; 5117 5118 5119var rneedsContext = jQuery.expr.match.needsContext; 5120 5121var rsingleTag = ( /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i ); 5122 5123 5124 5125// Implement the identical functionality for filter and not 5126function winnow( elements, qualifier, not ) { 5127 if ( isFunction( qualifier ) ) { 5128 return jQuery.grep( elements, function( elem, i ) { 5129 return !!qualifier.call( elem, i, elem ) !== not; 5130 } ); 5131 } 5132 5133 // Single element 5134 if ( qualifier.nodeType ) { 5135 return jQuery.grep( elements, function( elem ) { 5136 return ( elem === qualifier ) !== not; 5137 } ); 5138 } 5139 5140 // Arraylike of elements (jQuery, arguments, Array) 5141 if ( typeof qualifier !== "string" ) { 5142 return jQuery.grep( elements, function( elem ) { 5143 return ( indexOf.call( qualifier, elem ) > -1 ) !== not; 5144 } ); 5145 } 5146 5147 // Filtered directly for both simple and complex selectors 5148 return jQuery.filter( qualifier, elements, not ); 5149} 5150 5151jQuery.filter = function( expr, elems, not ) { 5152 var elem = elems[ 0 ]; 5153 5154 if ( not ) { 5155 expr = ":not(" + expr + ")"; 5156 } 5157 5158 if ( elems.length === 1 && elem.nodeType === 1 ) { 5159 return jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : []; 5160 } 5161 5162 return jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) { 5163 return elem.nodeType === 1; 5164 } ) ); 5165}; 5166 5167jQuery.fn.extend( { 5168 find: function( selector ) { 5169 var i, ret, 5170 len = this.length, 5171 self = this; 5172 5173 if ( typeof selector !== "string" ) { 5174 return this.pushStack( jQuery( selector ).filter( function() { 5175 for ( i = 0; i < len; i++ ) { 5176 if ( jQuery.contains( self[ i ], this ) ) { 5177 return true; 5178 } 5179 } 5180 } ) ); 5181 } 5182 5183 ret = this.pushStack( [] ); 5184 5185 for ( i = 0; i < len; i++ ) { 5186 jQuery.find( selector, self[ i ], ret ); 5187 } 5188 5189 return len > 1 ? jQuery.uniqueSort( ret ) : ret; 5190 }, 5191 filter: function( selector ) { 5192 return this.pushStack( winnow( this, selector || [], false ) ); 5193 }, 5194 not: function( selector ) { 5195 return this.pushStack( winnow( this, selector || [], true ) ); 5196 }, 5197 is: function( selector ) { 5198 return !!winnow( 5199 this, 5200 5201 // If this is a positional/relative selector, check membership in the returned set 5202 // so $("p:first").is("p:last") won't return true for a doc with two "p". 5203 typeof selector === "string" && rneedsContext.test( selector ) ? 5204 jQuery( selector ) : 5205 selector || [], 5206 false 5207 ).length; 5208 } 5209} ); 5210 5211 5212// Initialize a jQuery object 5213 5214 5215// A central reference to the root jQuery(document) 5216var rootjQuery, 5217 5218 // A simple way to check for HTML strings 5219 // Prioritize #id over <tag> to avoid XSS via location.hash (trac-9521) 5220 // Strict HTML recognition (trac-11290: must start with <) 5221 // Shortcut simple #id case for speed 5222 rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/, 5223 5224 init = jQuery.fn.init = function( selector, context, root ) { 5225 var match, elem; 5226 5227 // HANDLE: $(""), $(null), $(undefined), $(false) 5228 if ( !selector ) { 5229 return this; 5230 } 5231 5232 // Method init() accepts an alternate rootjQuery 5233 // so migrate can support jQuery.sub (gh-2101) 5234 root = root || rootjQuery; 5235 5236 // Handle HTML strings 5237 if ( typeof selector === "string" ) { 5238 if ( selector[ 0 ] === "<" && 5239 selector[ selector.length - 1 ] === ">" && 5240 selector.length >= 3 ) { 5241 5242 // Assume that strings that start and end with <> are HTML and skip the regex check 5243 match = [ null, selector, null ]; 5244 5245 } else { 5246 match = rquickExpr.exec( selector ); 5247 } 5248 5249 // Match html or make sure no context is specified for #id 5250 if ( match && ( match[ 1 ] || !context ) ) { 5251 5252 // HANDLE: $(html) -> $(array) 5253 if ( match[ 1 ] ) { 5254 context = context instanceof jQuery ? context[ 0 ] : context; 5255 5256 // Option to run scripts is true for back-compat 5257 // Intentionally let the error be thrown if parseHTML is not present 5258 jQuery.merge( this, jQuery.parseHTML( 5259 match[ 1 ], 5260 context && context.nodeType ? context.ownerDocument || context : document, 5261 true 5262 ) ); 5263 5264 // HANDLE: $(html, props) 5265 if ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) { 5266 for ( match in context ) { 5267 5268 // Properties of context are called as methods if possible 5269 if ( isFunction( this[ match ] ) ) { 5270 this[ match ]( context[ match ] ); 5271 5272 // ...and otherwise set as attributes 5273 } else { 5274 this.attr( match, context[ match ] ); 5275 } 5276 } 5277 } 5278 5279 return this; 5280 5281 // HANDLE: $(#id) 5282 } else { 5283 elem = document.getElementById( match[ 2 ] ); 5284 5285 if ( elem ) { 5286 5287 // Inject the element directly into the jQuery object 5288 this[ 0 ] = elem; 5289 this.length = 1; 5290 } 5291 return this; 5292 } 5293 5294 // HANDLE: $(expr, $(...)) 5295 } else if ( !context || context.jquery ) { 5296 return ( context || root ).find( selector ); 5297 5298 // HANDLE: $(expr, context) 5299 // (which is just equivalent to: $(context).find(expr) 5300 } else { 5301 return this.constructor( context ).find( selector ); 5302 } 5303 5304 // HANDLE: $(DOMElement) 5305 } else if ( selector.nodeType ) { 5306 this[ 0 ] = selector; 5307 this.length = 1; 5308 return this; 5309 5310 // HANDLE: $(function) 5311 // Shortcut for document ready 5312 } else if ( isFunction( selector ) ) { 5313 return root.ready !== undefined ? 5314 root.ready( selector ) : 5315 5316 // Execute immediately if ready is not present 5317 selector( jQuery ); 5318 } 5319 5320 return jQuery.makeArray( selector, this ); 5321 }; 5322 5323// Give the init function the jQuery prototype for later instantiation 5324init.prototype = jQuery.fn; 5325 5326// Initialize central reference 5327rootjQuery = jQuery( document ); 5328 5329 5330var rparentsprev = /^(?:parents|prev(?:Until|All))/, 5331 5332 // Methods guaranteed to produce a unique set when starting from a unique set 5333 guaranteedUnique = { 5334 children: true, 5335 contents: true, 5336 next: true, 5337 prev: true 5338 }; 5339 5340jQuery.fn.extend( { 5341 has: function( target ) { 5342 var targets = jQuery( target, this ), 5343 l = targets.length; 5344 5345 return this.filter( function() { 5346 var i = 0; 5347 for ( ; i < l; i++ ) { 5348 if ( jQuery.contains( this, targets[ i ] ) ) { 5349 return true; 5350 } 5351 } 5352 } ); 5353 }, 5354 5355 closest: function( selectors, context ) { 5356 var cur, 5357 i = 0, 5358 l = this.length, 5359 matched = [], 5360 targets = typeof selectors !== "string" && jQuery( selectors ); 5361 5362 // Positional selectors never match, since there's no _selection_ context 5363 if ( !rneedsContext.test( selectors ) ) { 5364 for ( ; i < l; i++ ) { 5365 for ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) { 5366 5367 // Always skip document fragments 5368 if ( cur.nodeType < 11 && ( targets ? 5369 targets.index( cur ) > -1 : 5370 5371 // Don't pass non-elements to jQuery#find 5372 cur.nodeType === 1 && 5373 jQuery.find.matchesSelector( cur, selectors ) ) ) { 5374 5375 matched.push( cur ); 5376 break; 5377 } 5378 } 5379 } 5380 } 5381 5382 return this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched ); 5383 }, 5384 5385 // Determine the position of an element within the set 5386 index: function( elem ) { 5387 5388 // No argument, return index in parent 5389 if ( !elem ) { 5390 return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1; 5391 } 5392 5393 // Index in selector 5394 if ( typeof elem === "string" ) { 5395 return indexOf.call( jQuery( elem ), this[ 0 ] ); 5396 } 5397 5398 // Locate the position of the desired element 5399 return indexOf.call( this, 5400 5401 // If it receives a jQuery object, the first element is used 5402 elem.jquery ? elem[ 0 ] : elem 5403 ); 5404 }, 5405 5406 add: function( selector, context ) { 5407 return this.pushStack( 5408 jQuery.uniqueSort( 5409 jQuery.merge( this.get(), jQuery( selector, context ) ) 5410 ) 5411 ); 5412 }, 5413 5414 addBack: function( selector ) { 5415 return this.add( selector == null ? 5416 this.prevObject : this.prevObject.filter( selector ) 5417 ); 5418 } 5419} ); 5420 5421function sibling( cur, dir ) { 5422 while ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {} 5423 return cur; 5424} 5425 5426jQuery.each( { 5427 parent: function( elem ) { 5428 var parent = elem.parentNode; 5429 return parent && parent.nodeType !== 11 ? parent : null; 5430 }, 5431 parents: function( elem ) { 5432 return dir( elem, "parentNode" ); 5433 }, 5434 parentsUntil: function( elem, _i, until ) { 5435 return dir( elem, "parentNode", until ); 5436 }, 5437 next: function( elem ) { 5438 return sibling( elem, "nextSibling" ); 5439 }, 5440 prev: function( elem ) { 5441 return sibling( elem, "previousSibling" ); 5442 }, 5443 nextAll: function( elem ) { 5444 return dir( elem, "nextSibling" ); 5445 }, 5446 prevAll: function( elem ) { 5447 return dir( elem, "previousSibling" ); 5448 }, 5449 nextUntil: function( elem, _i, until ) { 5450 return dir( elem, "nextSibling", until ); 5451 }, 5452 prevUntil: function( elem, _i, until ) { 5453 return dir( elem, "previousSibling", until ); 5454 }, 5455 siblings: function( elem ) { 5456 return siblings( ( elem.parentNode || {} ).firstChild, elem ); 5457 }, 5458 children: function( elem ) { 5459 return siblings( elem.firstChild ); 5460 }, 5461 contents: function( elem ) { 5462 if ( elem.contentDocument != null && 5463 5464 // Support: IE 11+ 5465 // <object> elements with no `data` attribute has an object 5466 // `contentDocument` with a `null` prototype. 5467 getProto( elem.contentDocument ) ) { 5468 5469 return elem.contentDocument; 5470 } 5471 5472 // Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only 5473 // Treat the template element as a regular one in browsers that 5474 // don't support it. 5475 if ( nodeName( elem, "template" ) ) { 5476 elem = elem.content || elem; 5477 } 5478 5479 return jQuery.merge( [], elem.childNodes ); 5480 } 5481}, function( name, fn ) { 5482 jQuery.fn[ name ] = function( until, selector ) { 5483 var matched = jQuery.map( this, fn, until ); 5484 5485 if ( name.slice( -5 ) !== "Until" ) { 5486 selector = until; 5487 } 5488 5489 if ( selector && typeof selector === "string" ) { 5490 matched = jQuery.filter( selector, matched ); 5491 } 5492 5493 if ( this.length > 1 ) { 5494 5495 // Remove duplicates 5496 if ( !guaranteedUnique[ name ] ) { 5497 jQuery.uniqueSort( matched ); 5498 } 5499 5500 // Reverse order for parents* and prev-derivatives 5501 if ( rparentsprev.test( name ) ) { 5502 matched.reverse(); 5503 } 5504 } 5505 5506 return this.pushStack( matched ); 5507 }; 5508} ); 5509var rnothtmlwhite = ( /[^\x20\t\r\n\f]+/g ); 5510 5511 5512 5513// Convert String-formatted options into Object-formatted ones 5514function createOptions( options ) { 5515 var object = {}; 5516 jQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) { 5517 object[ flag ] = true; 5518 } ); 5519 return object; 5520} 5521 5522/* 5523 * Create a callback list using the following parameters: 5524 * 5525 * options: an optional list of space-separated options that will change how 5526 * the callback list behaves or a more traditional option object 5527 * 5528 * By default a callback list will act like an event callback list and can be 5529 * "fired" multiple times. 5530 * 5531 * Possible options: 5532 * 5533 * once: will ensure the callback list can only be fired once (like a Deferred) 5534 * 5535 * memory: will keep track of previous values and will call any callback added 5536 * after the list has been fired right away with the latest "memorized" 5537 * values (like a Deferred) 5538 * 5539 * unique: will ensure a callback can only be added once (no duplicate in the list) 5540 * 5541 * stopOnFalse: interrupt callings when a callback returns false 5542 * 5543 */ 5544jQuery.Callbacks = function( options ) { 5545 5546 // Convert options from String-formatted to Object-formatted if needed 5547 // (we check in cache first) 5548 options = typeof options === "string" ? 5549 createOptions( options ) : 5550 jQuery.extend( {}, options ); 5551 5552 var // Flag to know if list is currently firing 5553 firing, 5554 5555 // Last fire value for non-forgettable lists 5556 memory, 5557 5558 // Flag to know if list was already fired 5559 fired, 5560 5561 // Flag to prevent firing 5562 locked, 5563 5564 // Actual callback list 5565 list = [], 5566 5567 // Queue of execution data for repeatable lists 5568 queue = [], 5569 5570 // Index of currently firing callback (modified by add/remove as needed) 5571 firingIndex = -1, 5572 5573 // Fire callbacks 5574 fire = function() { 5575 5576 // Enforce single-firing 5577 locked = locked || options.once; 5578 5579 // Execute callbacks for all pending executions, 5580 // respecting firingIndex overrides and runtime changes 5581 fired = firing = true; 5582 for ( ; queue.length; firingIndex = -1 ) { 5583 memory = queue.shift(); 5584 while ( ++firingIndex < list.length ) { 5585 5586 // Run callback and check for early termination 5587 if ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false && 5588 options.stopOnFalse ) { 5589 5590 // Jump to end and forget the data so .add doesn't re-fire 5591 firingIndex = list.length; 5592 memory = false; 5593 } 5594 } 5595 } 5596 5597 // Forget the data if we're done with it 5598 if ( !options.memory ) { 5599 memory = false; 5600 } 5601 5602 firing = false; 5603 5604 // Clean up if we're done firing for good 5605 if ( locked ) { 5606 5607 // Keep an empty list if we have data for future add calls 5608 if ( memory ) { 5609 list = []; 5610 5611 // Otherwise, this object is spent 5612 } else { 5613 list = ""; 5614 } 5615 } 5616 }, 5617 5618 // Actual Callbacks object 5619 self = { 5620 5621 // Add a callback or a collection of callbacks to the list 5622 add: function() { 5623 if ( list ) { 5624 5625 // If we have memory from a past run, we should fire after adding 5626 if ( memory && !firing ) { 5627 firingIndex = list.length - 1; 5628 queue.push( memory ); 5629 } 5630 5631 ( function add( args ) { 5632 jQuery.each( args, function( _, arg ) { 5633 if ( isFunction( arg ) ) { 5634 if ( !options.unique || !self.has( arg ) ) { 5635 list.push( arg ); 5636 } 5637 } else if ( arg && arg.length && toType( arg ) !== "string" ) { 5638 5639 // Inspect recursively 5640 add( arg ); 5641 } 5642 } ); 5643 } )( arguments ); 5644 5645 if ( memory && !firing ) { 5646 fire(); 5647 } 5648 } 5649 return this; 5650 }, 5651 5652 // Remove a callback from the list 5653 remove: function() { 5654 jQuery.each( arguments, function( _, arg ) { 5655 var index; 5656 while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) { 5657 list.splice( index, 1 ); 5658 5659 // Handle firing indexes 5660 if ( index <= firingIndex ) { 5661 firingIndex--; 5662 } 5663 } 5664 } ); 5665 return this; 5666 }, 5667 5668 // Check if a given callback is in the list. 5669 // If no argument is given, return whether or not list has callbacks attached. 5670 has: function( fn ) { 5671 return fn ? 5672 jQuery.inArray( fn, list ) > -1 : 5673 list.length > 0; 5674 }, 5675 5676 // Remove all callbacks from the list 5677 empty: function() { 5678 if ( list ) { 5679 list = []; 5680 } 5681 return this; 5682 }, 5683 5684 // Disable .fire and .add 5685 // Abort any current/pending executions 5686 // Clear all callbacks and values 5687 disable: function() { 5688 locked = queue = []; 5689 list = memory = ""; 5690 return this; 5691 }, 5692 disabled: function() { 5693 return !list; 5694 }, 5695 5696 // Disable .fire 5697 // Also disable .add unless we have memory (since it would have no effect) 5698 // Abort any pending executions 5699 lock: function() { 5700 locked = queue = []; 5701 if ( !memory && !firing ) { 5702 list = memory = ""; 5703 } 5704 return this; 5705 }, 5706 locked: function() { 5707 return !!locked; 5708 }, 5709 5710 // Call all callbacks with the given context and arguments 5711 fireWith: function( context, args ) { 5712 if ( !locked ) { 5713 args = args || []; 5714 args = [ context, args.slice ? args.slice() : args ]; 5715 queue.push( args ); 5716 if ( !firing ) { 5717 fire(); 5718 } 5719 } 5720 return this; 5721 }, 5722 5723 // Call all the callbacks with the given arguments 5724 fire: function() { 5725 self.fireWith( this, arguments ); 5726 return this; 5727 }, 5728 5729 // To know if the callbacks have already been called at least once 5730 fired: function() { 5731 return !!fired; 5732 } 5733 }; 5734 5735 return self; 5736}; 5737 5738 5739function Identity( v ) { 5740 return v; 5741} 5742function Thrower( ex ) { 5743 throw ex; 5744} 5745 5746function adoptValue( value, resolve, reject, noValue ) { 5747 var method; 5748 5749 try { 5750 5751 // Check for promise aspect first to privilege synchronous behavior 5752 if ( value && isFunction( ( method = value.promise ) ) ) { 5753 method.call( value ).done( resolve ).fail( reject ); 5754 5755 // Other thenables 5756 } else if ( value && isFunction( ( method = value.then ) ) ) { 5757 method.call( value, resolve, reject ); 5758 5759 // Other non-thenables 5760 } else { 5761 5762 // Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer: 5763 // * false: [ value ].slice( 0 ) => resolve( value ) 5764 // * true: [ value ].slice( 1 ) => resolve() 5765 resolve.apply( undefined, [ value ].slice( noValue ) ); 5766 } 5767 5768 // For Promises/A+, convert exceptions into rejections 5769 // Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in 5770 // Deferred#then to conditionally suppress rejection. 5771 } catch ( value ) { 5772 5773 // Support: Android 4.0 only 5774 // Strict mode functions invoked without .call/.apply get global-object context 5775 reject.apply( undefined, [ value ] ); 5776 } 5777} 5778 5779jQuery.extend( { 5780 5781 Deferred: function( func ) { 5782 var tuples = [ 5783 5784 // action, add listener, callbacks, 5785 // ... .then handlers, argument index, [final state] 5786 [ "notify", "progress", jQuery.Callbacks( "memory" ), 5787 jQuery.Callbacks( "memory" ), 2 ], 5788 [ "resolve", "done", jQuery.Callbacks( "once memory" ), 5789 jQuery.Callbacks( "once memory" ), 0, "resolved" ], 5790 [ "reject", "fail", jQuery.Callbacks( "once memory" ), 5791 jQuery.Callbacks( "once memory" ), 1, "rejected" ] 5792 ], 5793 state = "pending", 5794 promise = { 5795 state: function() { 5796 return state; 5797 }, 5798 always: function() { 5799 deferred.done( arguments ).fail( arguments ); 5800 return this; 5801 }, 5802 "catch": function( fn ) { 5803 return promise.then( null, fn ); 5804 }, 5805 5806 // Keep pipe for back-compat 5807 pipe: function( /* fnDone, fnFail, fnProgress */ ) { 5808 var fns = arguments; 5809 5810 return jQuery.Deferred( function( newDefer ) { 5811 jQuery.each( tuples, function( _i, tuple ) { 5812 5813 // Map tuples (progress, done, fail) to arguments (done, fail, progress) 5814 var fn = isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ]; 5815 5816 // deferred.progress(function() { bind to newDefer or newDefer.notify }) 5817 // deferred.done(function() { bind to newDefer or newDefer.resolve }) 5818 // deferred.fail(function() { bind to newDefer or newDefer.reject }) 5819 deferred[ tuple[ 1 ] ]( function() { 5820 var returned = fn && fn.apply( this, arguments ); 5821 if ( returned && isFunction( returned.promise ) ) { 5822 returned.promise() 5823 .progress( newDefer.notify ) 5824 .done( newDefer.resolve ) 5825 .fail( newDefer.reject ); 5826 } else { 5827 newDefer[ tuple[ 0 ] + "With" ]( 5828 this, 5829 fn ? [ returned ] : arguments 5830 ); 5831 } 5832 } ); 5833 } ); 5834 fns = null; 5835 } ).promise(); 5836 }, 5837 then: function( onFulfilled, onRejected, onProgress ) { 5838 var maxDepth = 0; 5839 function resolve( depth, deferred, handler, special ) { 5840 return function() { 5841 var that = this, 5842 args = arguments, 5843 mightThrow = function() { 5844 var returned, then; 5845 5846 // Support: Promises/A+ section 2.3.3.3.3 5847 // https://promisesaplus.com/#point-59 5848 // Ignore double-resolution attempts 5849 if ( depth < maxDepth ) { 5850 return; 5851 } 5852 5853 returned = handler.apply( that, args ); 5854 5855 // Support: Promises/A+ section 2.3.1 5856 // https://promisesaplus.com/#point-48 5857 if ( returned === deferred.promise() ) { 5858 throw new TypeError( "Thenable self-resolution" ); 5859 } 5860 5861 // Support: Promises/A+ sections 2.3.3.1, 3.5 5862 // https://promisesaplus.com/#point-54 5863 // https://promisesaplus.com/#point-75 5864 // Retrieve `then` only once 5865 then = returned && 5866 5867 // Support: Promises/A+ section 2.3.4 5868 // https://promisesaplus.com/#point-64 5869 // Only check objects and functions for thenability 5870 ( typeof returned === "object" || 5871 typeof returned === "function" ) && 5872 returned.then; 5873 5874 // Handle a returned thenable 5875 if ( isFunction( then ) ) { 5876 5877 // Special processors (notify) just wait for resolution 5878 if ( special ) { 5879 then.call( 5880 returned, 5881 resolve( maxDepth, deferred, Identity, special ), 5882 resolve( maxDepth, deferred, Thrower, special ) 5883 ); 5884 5885 // Normal processors (resolve) also hook into progress 5886 } else { 5887 5888 // ...and disregard older resolution values 5889 maxDepth++; 5890 5891 then.call( 5892 returned, 5893 resolve( maxDepth, deferred, Identity, special ), 5894 resolve( maxDepth, deferred, Thrower, special ), 5895 resolve( maxDepth, deferred, Identity, 5896 deferred.notifyWith ) 5897 ); 5898 } 5899 5900 // Handle all other returned values 5901 } else { 5902 5903 // Only substitute handlers pass on context 5904 // and multiple values (non-spec behavior) 5905 if ( handler !== Identity ) { 5906 that = undefined; 5907 args = [ returned ]; 5908 } 5909 5910 // Process the value(s) 5911 // Default process is resolve 5912 ( special || deferred.resolveWith )( that, args ); 5913 } 5914 }, 5915 5916 // Only normal processors (resolve) catch and reject exceptions 5917 process = special ? 5918 mightThrow : 5919 function() { 5920 try { 5921 mightThrow(); 5922 } catch ( e ) { 5923 5924 if ( jQuery.Deferred.exceptionHook ) { 5925 jQuery.Deferred.exceptionHook( e, 5926 process.error ); 5927 } 5928 5929 // Support: Promises/A+ section 2.3.3.3.4.1 5930 // https://promisesaplus.com/#point-61 5931 // Ignore post-resolution exceptions 5932 if ( depth + 1 >= maxDepth ) { 5933 5934 // Only substitute handlers pass on context 5935 // and multiple values (non-spec behavior) 5936 if ( handler !== Thrower ) { 5937 that = undefined; 5938 args = [ e ]; 5939 } 5940 5941 deferred.rejectWith( that, args ); 5942 } 5943 } 5944 }; 5945 5946 // Support: Promises/A+ section 2.3.3.3.1 5947 // https://promisesaplus.com/#point-57 5948 // Re-resolve promises immediately to dodge false rejection from 5949 // subsequent errors 5950 if ( depth ) { 5951 process(); 5952 } else { 5953 5954 // Call an optional hook to record the error, in case of exception 5955 // since it's otherwise lost when execution goes async 5956 if ( jQuery.Deferred.getErrorHook ) { 5957 process.error = jQuery.Deferred.getErrorHook(); 5958 5959 // The deprecated alias of the above. While the name suggests 5960 // returning the stack, not an error instance, jQuery just passes 5961 // it directly to `console.warn` so both will work; an instance 5962 // just better cooperates with source maps. 5963 } else if ( jQuery.Deferred.getStackHook ) { 5964 process.error = jQuery.Deferred.getStackHook(); 5965 } 5966 window.setTimeout( process ); 5967 } 5968 }; 5969 } 5970 5971 return jQuery.Deferred( function( newDefer ) { 5972 5973 // progress_handlers.add( ... ) 5974 tuples[ 0 ][ 3 ].add( 5975 resolve( 5976 0, 5977 newDefer, 5978 isFunction( onProgress ) ? 5979 onProgress : 5980 Identity, 5981 newDefer.notifyWith 5982 ) 5983 ); 5984 5985 // fulfilled_handlers.add( ... ) 5986 tuples[ 1 ][ 3 ].add( 5987 resolve( 5988 0, 5989 newDefer, 5990 isFunction( onFulfilled ) ? 5991 onFulfilled : 5992 Identity 5993 ) 5994 ); 5995 5996 // rejected_handlers.add( ... ) 5997 tuples[ 2 ][ 3 ].add( 5998 resolve( 5999 0, 6000 newDefer, 6001 isFunction( onRejected ) ? 6002 onRejected : 6003 Thrower 6004 ) 6005 ); 6006 } ).promise(); 6007 }, 6008 6009 // Get a promise for this deferred 6010 // If obj is provided, the promise aspect is added to the object 6011 promise: function( obj ) { 6012 return obj != null ? jQuery.extend( obj, promise ) : promise; 6013 } 6014 }, 6015 deferred = {}; 6016 6017 // Add list-specific methods 6018 jQuery.each( tuples, function( i, tuple ) { 6019 var list = tuple[ 2 ], 6020 stateString = tuple[ 5 ]; 6021 6022 // promise.progress = list.add 6023 // promise.done = list.add 6024 // promise.fail = list.add 6025 promise[ tuple[ 1 ] ] = list.add; 6026 6027 // Handle state 6028 if ( stateString ) { 6029 list.add( 6030 function() { 6031 6032 // state = "resolved" (i.e., fulfilled) 6033 // state = "rejected" 6034 state = stateString; 6035 }, 6036 6037 // rejected_callbacks.disable 6038 // fulfilled_callbacks.disable 6039 tuples[ 3 - i ][ 2 ].disable, 6040 6041 // rejected_handlers.disable 6042 // fulfilled_handlers.disable 6043 tuples[ 3 - i ][ 3 ].disable, 6044 6045 // progress_callbacks.lock 6046 tuples[ 0 ][ 2 ].lock, 6047 6048 // progress_handlers.lock 6049 tuples[ 0 ][ 3 ].lock 6050 ); 6051 } 6052 6053 // progress_handlers.fire 6054 // fulfilled_handlers.fire 6055 // rejected_handlers.fire 6056 list.add( tuple[ 3 ].fire ); 6057 6058 // deferred.notify = function() { deferred.notifyWith(...) } 6059 // deferred.resolve = function() { deferred.resolveWith(...) } 6060 // deferred.reject = function() { deferred.rejectWith(...) } 6061 deferred[ tuple[ 0 ] ] = function() { 6062 deferred[ tuple[ 0 ] + "With" ]( this === deferred ? undefined : this, arguments ); 6063 return this; 6064 }; 6065 6066 // deferred.notifyWith = list.fireWith 6067 // deferred.resolveWith = list.fireWith 6068 // deferred.rejectWith = list.fireWith 6069 deferred[ tuple[ 0 ] + "With" ] = list.fireWith; 6070 } ); 6071 6072 // Make the deferred a promise 6073 promise.promise( deferred ); 6074 6075 // Call given func if any 6076 if ( func ) { 6077 func.call( deferred, deferred ); 6078 } 6079 6080 // All done! 6081 return deferred; 6082 }, 6083 6084 // Deferred helper 6085 when: function( singleValue ) { 6086 var 6087 6088 // count of uncompleted subordinates 6089 remaining = arguments.length, 6090 6091 // count of unprocessed arguments 6092 i = remaining, 6093 6094 // subordinate fulfillment data 6095 resolveContexts = Array( i ), 6096 resolveValues = slice.call( arguments ), 6097 6098 // the primary Deferred 6099 primary = jQuery.Deferred(), 6100 6101 // subordinate callback factory 6102 updateFunc = function( i ) { 6103 return function( value ) { 6104 resolveContexts[ i ] = this; 6105 resolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value; 6106 if ( !( --remaining ) ) { 6107 primary.resolveWith( resolveContexts, resolveValues ); 6108 } 6109 }; 6110 }; 6111 6112 // Single- and empty arguments are adopted like Promise.resolve 6113 if ( remaining <= 1 ) { 6114 adoptValue( singleValue, primary.done( updateFunc( i ) ).resolve, primary.reject, 6115 !remaining ); 6116 6117 // Use .then() to unwrap secondary thenables (cf. gh-3000) 6118 if ( primary.state() === "pending" || 6119 isFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) { 6120 6121 return primary.then(); 6122 } 6123 } 6124 6125 // Multiple arguments are aggregated like Promise.all array elements 6126 while ( i-- ) { 6127 adoptValue( resolveValues[ i ], updateFunc( i ), primary.reject ); 6128 } 6129 6130 return primary.promise(); 6131 } 6132} ); 6133 6134 6135// These usually indicate a programmer mistake during development, 6136// warn about them ASAP rather than swallowing them by default. 6137var rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/; 6138 6139// If `jQuery.Deferred.getErrorHook` is defined, `asyncError` is an error 6140// captured before the async barrier to get the original error cause 6141// which may otherwise be hidden. 6142jQuery.Deferred.exceptionHook = function( error, asyncError ) { 6143 6144 // Support: IE 8 - 9 only 6145 // Console exists when dev tools are open, which can happen at any time 6146 if ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) { 6147 window.console.warn( "jQuery.Deferred exception: " + error.message, 6148 error.stack, asyncError ); 6149 } 6150}; 6151 6152 6153 6154 6155jQuery.readyException = function( error ) { 6156 window.setTimeout( function() { 6157 throw error; 6158 } ); 6159}; 6160 6161 6162 6163 6164// The deferred used on DOM ready 6165var readyList = jQuery.Deferred(); 6166 6167jQuery.fn.ready = function( fn ) { 6168 6169 readyList 6170 .then( fn ) 6171 6172 // Wrap jQuery.readyException in a function so that the lookup 6173 // happens at the time of error handling instead of callback 6174 // registration. 6175 .catch( function( error ) { 6176 jQuery.readyException( error ); 6177 } ); 6178 6179 return this; 6180}; 6181 6182jQuery.extend( { 6183 6184 // Is the DOM ready to be used? Set to true once it occurs. 6185 isReady: false, 6186 6187 // A counter to track how many items to wait for before 6188 // the ready event fires. See trac-6781 6189 readyWait: 1, 6190 6191 // Handle when the DOM is ready 6192 ready: function( wait ) { 6193 6194 // Abort if there are pending holds or we're already ready 6195 if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) { 6196 return; 6197 } 6198 6199 // Remember that the DOM is ready 6200 jQuery.isReady = true; 6201 6202 // If a normal DOM Ready event fired, decrement, and wait if need be 6203 if ( wait !== true && --jQuery.readyWait > 0 ) { 6204 return; 6205 } 6206 6207 // If there are functions bound, to execute 6208 readyList.resolveWith( document, [ jQuery ] ); 6209 } 6210} ); 6211 6212jQuery.ready.then = readyList.then; 6213 6214// The ready event handler and self cleanup method 6215function completed() { 6216 document.removeEventListener( "DOMContentLoaded", completed ); 6217 window.removeEventListener( "load", completed ); 6218 jQuery.ready(); 6219} 6220 6221// Catch cases where $(document).ready() is called 6222// after the browser event has already occurred. 6223// Support: IE <=9 - 10 only 6224// Older IE sometimes signals "interactive" too soon 6225if ( document.readyState === "complete" || 6226 ( document.readyState !== "loading" && !document.documentElement.doScroll ) ) { 6227 6228 // Handle it asynchronously to allow scripts the opportunity to delay ready 6229 window.setTimeout( jQuery.ready ); 6230 6231} else { 6232 6233 // Use the handy event callback 6234 document.addEventListener( "DOMContentLoaded", completed ); 6235 6236 // A fallback to window.onload, that will always work 6237 window.addEventListener( "load", completed ); 6238} 6239 6240 6241 6242 6243// Multifunctional method to get and set values of a collection 6244// The value/s can optionally be executed if it's a function 6245var access = function( elems, fn, key, value, chainable, emptyGet, raw ) { 6246 var i = 0, 6247 len = elems.length, 6248 bulk = key == null; 6249 6250 // Sets many values 6251 if ( toType( key ) === "object" ) { 6252 chainable = true; 6253 for ( i in key ) { 6254 access( elems, fn, i, key[ i ], true, emptyGet, raw ); 6255 } 6256 6257 // Sets one value 6258 } else if ( value !== undefined ) { 6259 chainable = true; 6260 6261 if ( !isFunction( value ) ) { 6262 raw = true; 6263 } 6264 6265 if ( bulk ) { 6266 6267 // Bulk operations run against the entire set 6268 if ( raw ) { 6269 fn.call( elems, value ); 6270 fn = null; 6271 6272 // ...except when executing function values 6273 } else { 6274 bulk = fn; 6275 fn = function( elem, _key, value ) { 6276 return bulk.call( jQuery( elem ), value ); 6277 }; 6278 } 6279 } 6280 6281 if ( fn ) { 6282 for ( ; i < len; i++ ) { 6283 fn( 6284 elems[ i ], key, raw ? 6285 value : 6286 value.call( elems[ i ], i, fn( elems[ i ], key ) ) 6287 ); 6288 } 6289 } 6290 } 6291 6292 if ( chainable ) { 6293 return elems; 6294 } 6295 6296 // Gets 6297 if ( bulk ) { 6298 return fn.call( elems ); 6299 } 6300 6301 return len ? fn( elems[ 0 ], key ) : emptyGet; 6302}; 6303 6304 6305// Matches dashed string for camelizing 6306var rmsPrefix = /^-ms-/, 6307 rdashAlpha = /-([a-z])/g; 6308 6309// Used by camelCase as callback to replace() 6310function fcamelCase( _all, letter ) { 6311 return letter.toUpperCase(); 6312} 6313 6314// Convert dashed to camelCase; used by the css and data modules 6315// Support: IE <=9 - 11, Edge 12 - 15 6316// Microsoft forgot to hump their vendor prefix (trac-9572) 6317function camelCase( string ) { 6318 return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); 6319} 6320var acceptData = function( owner ) { 6321 6322 // Accepts only: 6323 // - Node 6324 // - Node.ELEMENT_NODE 6325 // - Node.DOCUMENT_NODE 6326 // - Object 6327 // - Any 6328 return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType ); 6329}; 6330 6331 6332 6333 6334function Data() { 6335 this.expando = jQuery.expando + Data.uid++; 6336} 6337 6338Data.uid = 1; 6339 6340Data.prototype = { 6341 6342 cache: function( owner ) { 6343 6344 // Check if the owner object already has a cache 6345 var value = owner[ this.expando ]; 6346 6347 // If not, create one 6348 if ( !value ) { 6349 value = {}; 6350 6351 // We can accept data for non-element nodes in modern browsers, 6352 // but we should not, see trac-8335. 6353 // Always return an empty object. 6354 if ( acceptData( owner ) ) { 6355 6356 // If it is a node unlikely to be stringify-ed or looped over 6357 // use plain assignment 6358 if ( owner.nodeType ) { 6359 owner[ this.expando ] = value; 6360 6361 // Otherwise secure it in a non-enumerable property 6362 // configurable must be true to allow the property to be 6363 // deleted when data is removed 6364 } else { 6365 Object.defineProperty( owner, this.expando, { 6366 value: value, 6367 configurable: true 6368 } ); 6369 } 6370 } 6371 } 6372 6373 return value; 6374 }, 6375 set: function( owner, data, value ) { 6376 var prop, 6377 cache = this.cache( owner ); 6378 6379 // Handle: [ owner, key, value ] args 6380 // Always use camelCase key (gh-2257) 6381 if ( typeof data === "string" ) { 6382 cache[ camelCase( data ) ] = value; 6383 6384 // Handle: [ owner, { properties } ] args 6385 } else { 6386 6387 // Copy the properties one-by-one to the cache object 6388 for ( prop in data ) { 6389 cache[ camelCase( prop ) ] = data[ prop ]; 6390 } 6391 } 6392 return cache; 6393 }, 6394 get: function( owner, key ) { 6395 return key === undefined ? 6396 this.cache( owner ) : 6397 6398 // Always use camelCase key (gh-2257) 6399 owner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ]; 6400 }, 6401 access: function( owner, key, value ) { 6402 6403 // In cases where either: 6404 // 6405 // 1. No key was specified 6406 // 2. A string key was specified, but no value provided 6407 // 6408 // Take the "read" path and allow the get method to determine 6409 // which value to return, respectively either: 6410 // 6411 // 1. The entire cache object 6412 // 2. The data stored at the key 6413 // 6414 if ( key === undefined || 6415 ( ( key && typeof key === "string" ) && value === undefined ) ) { 6416 6417 return this.get( owner, key ); 6418 } 6419 6420 // When the key is not a string, or both a key and value 6421 // are specified, set or extend (existing objects) with either: 6422 // 6423 // 1. An object of properties 6424 // 2. A key and value 6425 // 6426 this.set( owner, key, value ); 6427 6428 // Since the "set" path can have two possible entry points 6429 // return the expected data based on which path was taken[*] 6430 return value !== undefined ? value : key; 6431 }, 6432 remove: function( owner, key ) { 6433 var i, 6434 cache = owner[ this.expando ]; 6435 6436 if ( cache === undefined ) { 6437 return; 6438 } 6439 6440 if ( key !== undefined ) { 6441 6442 // Support array or space separated string of keys 6443 if ( Array.isArray( key ) ) { 6444 6445 // If key is an array of keys... 6446 // We always set camelCase keys, so remove that. 6447 key = key.map( camelCase ); 6448 } else { 6449 key = camelCase( key ); 6450 6451 // If a key with the spaces exists, use it. 6452 // Otherwise, create an array by matching non-whitespace 6453 key = key in cache ? 6454 [ key ] : 6455 ( key.match( rnothtmlwhite ) || [] ); 6456 } 6457 6458 i = key.length; 6459 6460 while ( i-- ) { 6461 delete cache[ key[ i ] ]; 6462 } 6463 } 6464 6465 // Remove the expando if there's no more data 6466 if ( key === undefined || jQuery.isEmptyObject( cache ) ) { 6467 6468 // Support: Chrome <=35 - 45 6469 // Webkit & Blink performance suffers when deleting properties 6470 // from DOM nodes, so set to undefined instead 6471 // https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted) 6472 if ( owner.nodeType ) { 6473 owner[ this.expando ] = undefined; 6474 } else { 6475 delete owner[ this.expando ]; 6476 } 6477 } 6478 }, 6479 hasData: function( owner ) { 6480 var cache = owner[ this.expando ]; 6481 return cache !== undefined && !jQuery.isEmptyObject( cache ); 6482 } 6483}; 6484var dataPriv = new Data(); 6485 6486var dataUser = new Data(); 6487 6488 6489 6490// Implementation Summary 6491// 6492// 1. Enforce API surface and semantic compatibility with 1.9.x branch 6493// 2. Improve the module's maintainability by reducing the storage 6494// paths to a single mechanism. 6495// 3. Use the same single mechanism to support "private" and "user" data. 6496// 4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData) 6497// 5. Avoid exposing implementation details on user objects (eg. expando properties) 6498// 6. Provide a clear path for implementation upgrade to WeakMap in 2014 6499 6500var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/, 6501 rmultiDash = /[A-Z]/g; 6502 6503function getData( data ) { 6504 if ( data === "true" ) { 6505 return true; 6506 } 6507 6508 if ( data === "false" ) { 6509 return false; 6510 } 6511 6512 if ( data === "null" ) { 6513 return null; 6514 } 6515 6516 // Only convert to a number if it doesn't change the string 6517 if ( data === +data + "" ) { 6518 return +data; 6519 } 6520 6521 if ( rbrace.test( data ) ) { 6522 return JSON.parse( data ); 6523 } 6524 6525 return data; 6526} 6527 6528function dataAttr( elem, key, data ) { 6529 var name; 6530 6531 // If nothing was found internally, try to fetch any 6532 // data from the HTML5 data-* attribute 6533 if ( data === undefined && elem.nodeType === 1 ) { 6534 name = "data-" + key.replace( rmultiDash, "-$&" ).toLowerCase(); 6535 data = elem.getAttribute( name ); 6536 6537 if ( typeof data === "string" ) { 6538 try { 6539 data = getData( data ); 6540 } catch ( e ) {} 6541 6542 // Make sure we set the data so it isn't changed later 6543 dataUser.set( elem, key, data ); 6544 } else { 6545 data = undefined; 6546 } 6547 } 6548 return data; 6549} 6550 6551jQuery.extend( { 6552 hasData: function( elem ) { 6553 return dataUser.hasData( elem ) || dataPriv.hasData( elem ); 6554 }, 6555 6556 data: function( elem, name, data ) { 6557 return dataUser.access( elem, name, data ); 6558 }, 6559 6560 removeData: function( elem, name ) { 6561 dataUser.remove( elem, name ); 6562 }, 6563 6564 // TODO: Now that all calls to _data and _removeData have been replaced 6565 // with direct calls to dataPriv methods, these can be deprecated. 6566 _data: function( elem, name, data ) { 6567 return dataPriv.access( elem, name, data ); 6568 }, 6569 6570 _removeData: function( elem, name ) { 6571 dataPriv.remove( elem, name ); 6572 } 6573} ); 6574 6575jQuery.fn.extend( { 6576 data: function( key, value ) { 6577 var i, name, data, 6578 elem = this[ 0 ], 6579 attrs = elem && elem.attributes; 6580 6581 // Gets all values 6582 if ( key === undefined ) { 6583 if ( this.length ) { 6584 data = dataUser.get( elem ); 6585 6586 if ( elem.nodeType === 1 && !dataPriv.get( elem, "hasDataAttrs" ) ) { 6587 i = attrs.length; 6588 while ( i-- ) { 6589 6590 // Support: IE 11 only 6591 // The attrs elements can be null (trac-14894) 6592 if ( attrs[ i ] ) { 6593 name = attrs[ i ].name; 6594 if ( name.indexOf( "data-" ) === 0 ) { 6595 name = camelCase( name.slice( 5 ) ); 6596 dataAttr( elem, name, data[ name ] ); 6597 } 6598 } 6599 } 6600 dataPriv.set( elem, "hasDataAttrs", true ); 6601 } 6602 } 6603 6604 return data; 6605 } 6606 6607 // Sets multiple values 6608 if ( typeof key === "object" ) { 6609 return this.each( function() { 6610 dataUser.set( this, key ); 6611 } ); 6612 } 6613 6614 return access( this, function( value ) { 6615 var data; 6616 6617 // The calling jQuery object (element matches) is not empty 6618 // (and therefore has an element appears at this[ 0 ]) and the 6619 // `value` parameter was not undefined. An empty jQuery object 6620 // will result in `undefined` for elem = this[ 0 ] which will 6621 // throw an exception if an attempt to read a data cache is made. 6622 if ( elem && value === undefined ) { 6623 6624 // Attempt to get data from the cache 6625 // The key will always be camelCased in Data 6626 data = dataUser.get( elem, key ); 6627 if ( data !== undefined ) { 6628 return data; 6629 } 6630 6631 // Attempt to "discover" the data in 6632 // HTML5 custom data-* attrs 6633 data = dataAttr( elem, key ); 6634 if ( data !== undefined ) { 6635 return data; 6636 } 6637 6638 // We tried really hard, but the data doesn't exist. 6639 return; 6640 } 6641 6642 // Set the data... 6643 this.each( function() { 6644 6645 // We always store the camelCased key 6646 dataUser.set( this, key, value ); 6647 } ); 6648 }, null, value, arguments.length > 1, null, true ); 6649 }, 6650 6651 removeData: function( key ) { 6652 return this.each( function() { 6653 dataUser.remove( this, key ); 6654 } ); 6655 } 6656} ); 6657 6658 6659jQuery.extend( { 6660 queue: function( elem, type, data ) { 6661 var queue; 6662 6663 if ( elem ) { 6664 type = ( type || "fx" ) + "queue"; 6665 queue = dataPriv.get( elem, type ); 6666 6667 // Speed up dequeue by getting out quickly if this is just a lookup 6668 if ( data ) { 6669 if ( !queue || Array.isArray( data ) ) { 6670 queue = dataPriv.access( elem, type, jQuery.makeArray( data ) ); 6671 } else { 6672 queue.push( data ); 6673 } 6674 } 6675 return queue || []; 6676 } 6677 }, 6678 6679 dequeue: function( elem, type ) { 6680 type = type || "fx"; 6681 6682 var queue = jQuery.queue( elem, type ), 6683 startLength = queue.length, 6684 fn = queue.shift(), 6685 hooks = jQuery._queueHooks( elem, type ), 6686 next = function() { 6687 jQuery.dequeue( elem, type ); 6688 }; 6689 6690 // If the fx queue is dequeued, always remove the progress sentinel 6691 if ( fn === "inprogress" ) { 6692 fn = queue.shift(); 6693 startLength--; 6694 } 6695 6696 if ( fn ) { 6697 6698 // Add a progress sentinel to prevent the fx queue from being 6699 // automatically dequeued 6700 if ( type === "fx" ) { 6701 queue.unshift( "inprogress" ); 6702 } 6703 6704 // Clear up the last queue stop function 6705 delete hooks.stop; 6706 fn.call( elem, next, hooks ); 6707 } 6708 6709 if ( !startLength && hooks ) { 6710 hooks.empty.fire(); 6711 } 6712 }, 6713 6714 // Not public - generate a queueHooks object, or return the current one 6715 _queueHooks: function( elem, type ) { 6716 var key = type + "queueHooks"; 6717 return dataPriv.get( elem, key ) || dataPriv.access( elem, key, { 6718 empty: jQuery.Callbacks( "once memory" ).add( function() { 6719 dataPriv.remove( elem, [ type + "queue", key ] ); 6720 } ) 6721 } ); 6722 } 6723} ); 6724 6725jQuery.fn.extend( { 6726 queue: function( type, data ) { 6727 var setter = 2; 6728 6729 if ( typeof type !== "string" ) { 6730 data = type; 6731 type = "fx"; 6732 setter--; 6733 } 6734 6735 if ( arguments.length < setter ) { 6736 return jQuery.queue( this[ 0 ], type ); 6737 } 6738 6739 return data === undefined ? 6740 this : 6741 this.each( function() { 6742 var queue = jQuery.queue( this, type, data ); 6743 6744 // Ensure a hooks for this queue 6745 jQuery._queueHooks( this, type ); 6746 6747 if ( type === "fx" && queue[ 0 ] !== "inprogress" ) { 6748 jQuery.dequeue( this, type ); 6749 } 6750 } ); 6751 }, 6752 dequeue: function( type ) { 6753 return this.each( function() { 6754 jQuery.dequeue( this, type ); 6755 } ); 6756 }, 6757 clearQueue: function( type ) { 6758 return this.queue( type || "fx", [] ); 6759 }, 6760 6761 // Get a promise resolved when queues of a certain type 6762 // are emptied (fx is the type by default) 6763 promise: function( type, obj ) { 6764 var tmp, 6765 count = 1, 6766 defer = jQuery.Deferred(), 6767 elements = this, 6768 i = this.length, 6769 resolve = function() { 6770 if ( !( --count ) ) { 6771 defer.resolveWith( elements, [ elements ] ); 6772 } 6773 }; 6774 6775 if ( typeof type !== "string" ) { 6776 obj = type; 6777 type = undefined; 6778 } 6779 type = type || "fx"; 6780 6781 while ( i-- ) { 6782 tmp = dataPriv.get( elements[ i ], type + "queueHooks" ); 6783 if ( tmp && tmp.empty ) { 6784 count++; 6785 tmp.empty.add( resolve ); 6786 } 6787 } 6788 resolve(); 6789 return defer.promise( obj ); 6790 } 6791} ); 6792var pnum = ( /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/ ).source; 6793 6794var rcssNum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" ); 6795 6796 6797var cssExpand = [ "Top", "Right", "Bottom", "Left" ]; 6798 6799var documentElement = document.documentElement; 6800 6801 6802 6803 var isAttached = function( elem ) { 6804 return jQuery.contains( elem.ownerDocument, elem ); 6805 }, 6806 composed = { composed: true }; 6807 6808 // Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only 6809 // Check attachment across shadow DOM boundaries when possible (gh-3504) 6810 // Support: iOS 10.0-10.2 only 6811 // Early iOS 10 versions support `attachShadow` but not `getRootNode`, 6812 // leading to errors. We need to check for `getRootNode`. 6813 if ( documentElement.getRootNode ) { 6814 isAttached = function( elem ) { 6815 return jQuery.contains( elem.ownerDocument, elem ) || 6816 elem.getRootNode( composed ) === elem.ownerDocument; 6817 }; 6818 } 6819var isHiddenWithinTree = function( elem, el ) { 6820 6821 // isHiddenWithinTree might be called from jQuery#filter function; 6822 // in that case, element will be second argument 6823 elem = el || elem; 6824 6825 // Inline style trumps all 6826 return elem.style.display === "none" || 6827 elem.style.display === "" && 6828 6829 // Otherwise, check computed style 6830 // Support: Firefox <=43 - 45 6831 // Disconnected elements can have computed display: none, so first confirm that elem is 6832 // in the document. 6833 isAttached( elem ) && 6834 6835 jQuery.css( elem, "display" ) === "none"; 6836 }; 6837 6838 6839 6840function adjustCSS( elem, prop, valueParts, tween ) { 6841 var adjusted, scale, 6842 maxIterations = 20, 6843 currentValue = tween ? 6844 function() { 6845 return tween.cur(); 6846 } : 6847 function() { 6848 return jQuery.css( elem, prop, "" ); 6849 }, 6850 initial = currentValue(), 6851 unit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ), 6852 6853 // Starting value computation is required for potential unit mismatches 6854 initialInUnit = elem.nodeType && 6855 ( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) && 6856 rcssNum.exec( jQuery.css( elem, prop ) ); 6857 6858 if ( initialInUnit && initialInUnit[ 3 ] !== unit ) { 6859 6860 // Support: Firefox <=54 6861 // Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144) 6862 initial = initial / 2; 6863 6864 // Trust units reported by jQuery.css 6865 unit = unit || initialInUnit[ 3 ]; 6866 6867 // Iteratively approximate from a nonzero starting point 6868 initialInUnit = +initial || 1; 6869 6870 while ( maxIterations-- ) { 6871 6872 // Evaluate and update our best guess (doubling guesses that zero out). 6873 // Finish if the scale equals or crosses 1 (making the old*new product non-positive). 6874 jQuery.style( elem, prop, initialInUnit + unit ); 6875 if ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) { 6876 maxIterations = 0; 6877 } 6878 initialInUnit = initialInUnit / scale; 6879 6880 } 6881 6882 initialInUnit = initialInUnit * 2; 6883 jQuery.style( elem, prop, initialInUnit + unit ); 6884 6885 // Make sure we update the tween properties later on 6886 valueParts = valueParts || []; 6887 } 6888 6889 if ( valueParts ) { 6890 initialInUnit = +initialInUnit || +initial || 0; 6891 6892 // Apply relative offset (+=/-=) if specified 6893 adjusted = valueParts[ 1 ] ? 6894 initialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] : 6895 +valueParts[ 2 ]; 6896 if ( tween ) { 6897 tween.unit = unit; 6898 tween.start = initialInUnit; 6899 tween.end = adjusted; 6900 } 6901 } 6902 return adjusted; 6903} 6904 6905 6906var defaultDisplayMap = {}; 6907 6908function getDefaultDisplay( elem ) { 6909 var temp, 6910 doc = elem.ownerDocument, 6911 nodeName = elem.nodeName, 6912 display = defaultDisplayMap[ nodeName ]; 6913 6914 if ( display ) { 6915 return display; 6916 } 6917 6918 temp = doc.body.appendChild( doc.createElement( nodeName ) ); 6919 display = jQuery.css( temp, "display" ); 6920 6921 temp.parentNode.removeChild( temp ); 6922 6923 if ( display === "none" ) { 6924 display = "block"; 6925 } 6926 defaultDisplayMap[ nodeName ] = display; 6927 6928 return display; 6929} 6930 6931function showHide( elements, show ) { 6932 var display, elem, 6933 values = [], 6934 index = 0, 6935 length = elements.length; 6936 6937 // Determine new display value for elements that need to change 6938 for ( ; index < length; index++ ) { 6939 elem = elements[ index ]; 6940 if ( !elem.style ) { 6941 continue; 6942 } 6943 6944 display = elem.style.display; 6945 if ( show ) { 6946 6947 // Since we force visibility upon cascade-hidden elements, an immediate (and slow) 6948 // check is required in this first loop unless we have a nonempty display value (either 6949 // inline or about-to-be-restored) 6950 if ( display === "none" ) { 6951 values[ index ] = dataPriv.get( elem, "display" ) || null; 6952 if ( !values[ index ] ) { 6953 elem.style.display = ""; 6954 } 6955 } 6956 if ( elem.style.display === "" && isHiddenWithinTree( elem ) ) { 6957 values[ index ] = getDefaultDisplay( elem ); 6958 } 6959 } else { 6960 if ( display !== "none" ) { 6961 values[ index ] = "none"; 6962 6963 // Remember what we're overwriting 6964 dataPriv.set( elem, "display", display ); 6965 } 6966 } 6967 } 6968 6969 // Set the display of the elements in a second loop to avoid constant reflow 6970 for ( index = 0; index < length; index++ ) { 6971 if ( values[ index ] != null ) { 6972 elements[ index ].style.display = values[ index ]; 6973 } 6974 } 6975 6976 return elements; 6977} 6978 6979jQuery.fn.extend( { 6980 show: function() { 6981 return showHide( this, true ); 6982 }, 6983 hide: function() { 6984 return showHide( this ); 6985 }, 6986 toggle: function( state ) { 6987 if ( typeof state === "boolean" ) { 6988 return state ? this.show() : this.hide(); 6989 } 6990 6991 return this.each( function() { 6992 if ( isHiddenWithinTree( this ) ) { 6993 jQuery( this ).show(); 6994 } else { 6995 jQuery( this ).hide(); 6996 } 6997 } ); 6998 } 6999} ); 7000var rcheckableType = ( /^(?:checkbox|radio)$/i ); 7001 7002var rtagName = ( /<([a-z][^\/\0>\x20\t\r\n\f]*)/i ); 7003 7004var rscriptType = ( /^$|^module$|\/(?:java|ecma)script/i ); 7005 7006 7007 7008( function() { 7009 var fragment = document.createDocumentFragment(), 7010 div = fragment.appendChild( document.createElement( "div" ) ), 7011 input = document.createElement( "input" ); 7012 7013 // Support: Android 4.0 - 4.3 only 7014 // Check state lost if the name is set (trac-11217) 7015 // Support: Windows Web Apps (WWA) 7016 // `name` and `type` must use .setAttribute for WWA (trac-14901) 7017 input.setAttribute( "type", "radio" ); 7018 input.setAttribute( "checked", "checked" ); 7019 input.setAttribute( "name", "t" ); 7020 7021 div.appendChild( input ); 7022 7023 // Support: Android <=4.1 only 7024 // Older WebKit doesn't clone checked state correctly in fragments 7025 support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked; 7026 7027 // Support: IE <=11 only 7028 // Make sure textarea (and checkbox) defaultValue is properly cloned 7029 div.innerHTML = "<textarea>x</textarea>"; 7030 support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue; 7031 7032 // Support: IE <=9 only 7033 // IE <=9 replaces <option> tags with their contents when inserted outside of 7034 // the select element. 7035 div.innerHTML = "<option></option>"; 7036 support.option = !!div.lastChild; 7037} )(); 7038 7039 7040// We have to close these tags to support XHTML (trac-13200) 7041var wrapMap = { 7042 7043 // XHTML parsers do not magically insert elements in the 7044 // same way that tag soup parsers do. So we cannot shorten 7045 // this by omitting <tbody> or other required elements. 7046 thead: [ 1, "<table>", "</table>" ], 7047 col: [ 2, "<table><colgroup>", "</colgroup></table>" ], 7048 tr: [ 2, "<table><tbody>", "</tbody></table>" ], 7049 td: [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ], 7050 7051 _default: [ 0, "", "" ] 7052}; 7053 7054wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; 7055wrapMap.th = wrapMap.td; 7056 7057// Support: IE <=9 only 7058if ( !support.option ) { 7059 wrapMap.optgroup = wrapMap.option = [ 1, "<select multiple='multiple'>", "</select>" ]; 7060} 7061 7062 7063function getAll( context, tag ) { 7064 7065 // Support: IE <=9 - 11 only 7066 // Use typeof to avoid zero-argument method invocation on host objects (trac-15151) 7067 var ret; 7068 7069 if ( typeof context.getElementsByTagName !== "undefined" ) { 7070 ret = context.getElementsByTagName( tag || "*" ); 7071 7072 } else if ( typeof context.querySelectorAll !== "undefined" ) { 7073 ret = context.querySelectorAll( tag || "*" ); 7074 7075 } else { 7076 ret = []; 7077 } 7078 7079 if ( tag === undefined || tag && nodeName( context, tag ) ) { 7080 return jQuery.merge( [ context ], ret ); 7081 } 7082 7083 return ret; 7084} 7085 7086 7087// Mark scripts as having already been evaluated 7088function setGlobalEval( elems, refElements ) { 7089 var i = 0, 7090 l = elems.length; 7091 7092 for ( ; i < l; i++ ) { 7093 dataPriv.set( 7094 elems[ i ], 7095 "globalEval", 7096 !refElements || dataPriv.get( refElements[ i ], "globalEval" ) 7097 ); 7098 } 7099} 7100 7101 7102var rhtml = /<|&#?\w+;/; 7103 7104function buildFragment( elems, context, scripts, selection, ignored ) { 7105 var elem, tmp, tag, wrap, attached, j, 7106 fragment = context.createDocumentFragment(), 7107 nodes = [], 7108 i = 0, 7109 l = elems.length; 7110 7111 for ( ; i < l; i++ ) { 7112 elem = elems[ i ]; 7113 7114 if ( elem || elem === 0 ) { 7115 7116 // Add nodes directly 7117 if ( toType( elem ) === "object" ) { 7118 7119 // Support: Android <=4.0 only, PhantomJS 1 only 7120 // push.apply(_, arraylike) throws on ancient WebKit 7121 jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem ); 7122 7123 // Convert non-html into a text node 7124 } else if ( !rhtml.test( elem ) ) { 7125 nodes.push( context.createTextNode( elem ) ); 7126 7127 // Convert html into DOM nodes 7128 } else { 7129 tmp = tmp || fragment.appendChild( context.createElement( "div" ) ); 7130 7131 // Deserialize a standard representation 7132 tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase(); 7133 wrap = wrapMap[ tag ] || wrapMap._default; 7134 tmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ]; 7135 7136 // Descend through wrappers to the right content 7137 j = wrap[ 0 ]; 7138 while ( j-- ) { 7139 tmp = tmp.lastChild; 7140 } 7141 7142 // Support: Android <=4.0 only, PhantomJS 1 only 7143 // push.apply(_, arraylike) throws on ancient WebKit 7144 jQuery.merge( nodes, tmp.childNodes ); 7145 7146 // Remember the top-level container 7147 tmp = fragment.firstChild; 7148 7149 // Ensure the created nodes are orphaned (trac-12392) 7150 tmp.textContent = ""; 7151 } 7152 } 7153 } 7154 7155 // Remove wrapper from fragment 7156 fragment.textContent = ""; 7157 7158 i = 0; 7159 while ( ( elem = nodes[ i++ ] ) ) { 7160 7161 // Skip elements already in the context collection (trac-4087) 7162 if ( selection && jQuery.inArray( elem, selection ) > -1 ) { 7163 if ( ignored ) { 7164 ignored.push( elem ); 7165 } 7166 continue; 7167 } 7168 7169 attached = isAttached( elem ); 7170 7171 // Append to fragment 7172 tmp = getAll( fragment.appendChild( elem ), "script" ); 7173 7174 // Preserve script evaluation history 7175 if ( attached ) { 7176 setGlobalEval( tmp ); 7177 } 7178 7179 // Capture executables 7180 if ( scripts ) { 7181 j = 0; 7182 while ( ( elem = tmp[ j++ ] ) ) { 7183 if ( rscriptType.test( elem.type || "" ) ) { 7184 scripts.push( elem ); 7185 } 7186 } 7187 } 7188 } 7189 7190 return fragment; 7191} 7192 7193 7194var rtypenamespace = /^([^.]*)(?:\.(.+)|)/; 7195 7196function returnTrue() { 7197 return true; 7198} 7199 7200function returnFalse() { 7201 return false; 7202} 7203 7204function on( elem, types, selector, data, fn, one ) { 7205 var origFn, type; 7206 7207 // Types can be a map of types/handlers 7208 if ( typeof types === "object" ) { 7209 7210 // ( types-Object, selector, data ) 7211 if ( typeof selector !== "string" ) { 7212 7213 // ( types-Object, data ) 7214 data = data || selector; 7215 selector = undefined; 7216 } 7217 for ( type in types ) { 7218 on( elem, type, selector, data, types[ type ], one ); 7219 } 7220 return elem; 7221 } 7222 7223 if ( data == null && fn == null ) { 7224 7225 // ( types, fn ) 7226 fn = selector; 7227 data = selector = undefined; 7228 } else if ( fn == null ) { 7229 if ( typeof selector === "string" ) { 7230 7231 // ( types, selector, fn ) 7232 fn = data; 7233 data = undefined; 7234 } else { 7235 7236 // ( types, data, fn ) 7237 fn = data; 7238 data = selector; 7239 selector = undefined; 7240 } 7241 } 7242 if ( fn === false ) { 7243 fn = returnFalse; 7244 } else if ( !fn ) { 7245 return elem; 7246 } 7247 7248 if ( one === 1 ) { 7249 origFn = fn; 7250 fn = function( event ) { 7251 7252 // Can use an empty set, since event contains the info 7253 jQuery().off( event ); 7254 return origFn.apply( this, arguments ); 7255 }; 7256 7257 // Use same guid so caller can remove using origFn 7258 fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ ); 7259 } 7260 return elem.each( function() { 7261 jQuery.event.add( this, types, fn, data, selector ); 7262 } ); 7263} 7264 7265/* 7266 * Helper functions for managing events -- not part of the public interface. 7267 * Props to Dean Edwards' addEvent library for many of the ideas. 7268 */ 7269jQuery.event = { 7270 7271 global: {}, 7272 7273 add: function( elem, types, handler, data, selector ) { 7274 7275 var handleObjIn, eventHandle, tmp, 7276 events, t, handleObj, 7277 special, handlers, type, namespaces, origType, 7278 elemData = dataPriv.get( elem ); 7279 7280 // Only attach events to objects that accept data 7281 if ( !acceptData( elem ) ) { 7282 return; 7283 } 7284 7285 // Caller can pass in an object of custom data in lieu of the handler 7286 if ( handler.handler ) { 7287 handleObjIn = handler; 7288 handler = handleObjIn.handler; 7289 selector = handleObjIn.selector; 7290 } 7291 7292 // Ensure that invalid selectors throw exceptions at attach time 7293 // Evaluate against documentElement in case elem is a non-element node (e.g., document) 7294 if ( selector ) { 7295 jQuery.find.matchesSelector( documentElement, selector ); 7296 } 7297 7298 // Make sure that the handler has a unique ID, used to find/remove it later 7299 if ( !handler.guid ) { 7300 handler.guid = jQuery.guid++; 7301 } 7302 7303 // Init the element's event structure and main handler, if this is the first 7304 if ( !( events = elemData.events ) ) { 7305 events = elemData.events = Object.create( null ); 7306 } 7307 if ( !( eventHandle = elemData.handle ) ) { 7308 eventHandle = elemData.handle = function( e ) { 7309 7310 // Discard the second event of a jQuery.event.trigger() and 7311 // when an event is called after a page has unloaded 7312 return typeof jQuery !== "undefined" && jQuery.event.triggered !== e.type ? 7313 jQuery.event.dispatch.apply( elem, arguments ) : undefined; 7314 }; 7315 } 7316 7317 // Handle multiple events separated by a space 7318 types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; 7319 t = types.length; 7320 while ( t-- ) { 7321 tmp = rtypenamespace.exec( types[ t ] ) || []; 7322 type = origType = tmp[ 1 ]; 7323 namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); 7324 7325 // There *must* be a type, no attaching namespace-only handlers 7326 if ( !type ) { 7327 continue; 7328 } 7329 7330 // If event changes its type, use the special event handlers for the changed type 7331 special = jQuery.event.special[ type ] || {}; 7332 7333 // If selector defined, determine special event api type, otherwise given type 7334 type = ( selector ? special.delegateType : special.bindType ) || type; 7335 7336 // Update special based on newly reset type 7337 special = jQuery.event.special[ type ] || {}; 7338 7339 // handleObj is passed to all event handlers 7340 handleObj = jQuery.extend( { 7341 type: type, 7342 origType: origType, 7343 data: data, 7344 handler: handler, 7345 guid: handler.guid, 7346 selector: selector, 7347 needsContext: selector && jQuery.expr.match.needsContext.test( selector ), 7348 namespace: namespaces.join( "." ) 7349 }, handleObjIn ); 7350 7351 // Init the event handler queue if we're the first 7352 if ( !( handlers = events[ type ] ) ) { 7353 handlers = events[ type ] = []; 7354 handlers.delegateCount = 0; 7355 7356 // Only use addEventListener if the special events handler returns false 7357 if ( !special.setup || 7358 special.setup.call( elem, data, namespaces, eventHandle ) === false ) { 7359 7360 if ( elem.addEventListener ) { 7361 elem.addEventListener( type, eventHandle ); 7362 } 7363 } 7364 } 7365 7366 if ( special.add ) { 7367 special.add.call( elem, handleObj ); 7368 7369 if ( !handleObj.handler.guid ) { 7370 handleObj.handler.guid = handler.guid; 7371 } 7372 } 7373 7374 // Add to the element's handler list, delegates in front 7375 if ( selector ) { 7376 handlers.splice( handlers.delegateCount++, 0, handleObj ); 7377 } else { 7378 handlers.push( handleObj ); 7379 } 7380 7381 // Keep track of which events have ever been used, for event optimization 7382 jQuery.event.global[ type ] = true; 7383 } 7384 7385 }, 7386 7387 // Detach an event or set of events from an element 7388 remove: function( elem, types, handler, selector, mappedTypes ) { 7389 7390 var j, origCount, tmp, 7391 events, t, handleObj, 7392 special, handlers, type, namespaces, origType, 7393 elemData = dataPriv.hasData( elem ) && dataPriv.get( elem ); 7394 7395 if ( !elemData || !( events = elemData.events ) ) { 7396 return; 7397 } 7398 7399 // Once for each type.namespace in types; type may be omitted 7400 types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; 7401 t = types.length; 7402 while ( t-- ) { 7403 tmp = rtypenamespace.exec( types[ t ] ) || []; 7404 type = origType = tmp[ 1 ]; 7405 namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); 7406 7407 // Unbind all events (on this namespace, if provided) for the element 7408 if ( !type ) { 7409 for ( type in events ) { 7410 jQuery.event.remove( elem, type + types[ t ], handler, selector, true ); 7411 } 7412 continue; 7413 } 7414 7415 special = jQuery.event.special[ type ] || {}; 7416 type = ( selector ? special.delegateType : special.bindType ) || type; 7417 handlers = events[ type ] || []; 7418 tmp = tmp[ 2 ] && 7419 new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ); 7420 7421 // Remove matching events 7422 origCount = j = handlers.length; 7423 while ( j-- ) { 7424 handleObj = handlers[ j ]; 7425 7426 if ( ( mappedTypes || origType === handleObj.origType ) && 7427 ( !handler || handler.guid === handleObj.guid ) && 7428 ( !tmp || tmp.test( handleObj.namespace ) ) && 7429 ( !selector || selector === handleObj.selector || 7430 selector === "**" && handleObj.selector ) ) { 7431 handlers.splice( j, 1 ); 7432 7433 if ( handleObj.selector ) { 7434 handlers.delegateCount--; 7435 } 7436 if ( special.remove ) { 7437 special.remove.call( elem, handleObj ); 7438 } 7439 } 7440 } 7441 7442 // Remove generic event handler if we removed something and no more handlers exist 7443 // (avoids potential for endless recursion during removal of special event handlers) 7444 if ( origCount && !handlers.length ) { 7445 if ( !special.teardown || 7446 special.teardown.call( elem, namespaces, elemData.handle ) === false ) { 7447 7448 jQuery.removeEvent( elem, type, elemData.handle ); 7449 } 7450 7451 delete events[ type ]; 7452 } 7453 } 7454 7455 // Remove data and the expando if it's no longer used 7456 if ( jQuery.isEmptyObject( events ) ) { 7457 dataPriv.remove( elem, "handle events" ); 7458 } 7459 }, 7460 7461 dispatch: function( nativeEvent ) { 7462 7463 var i, j, ret, matched, handleObj, handlerQueue, 7464 args = new Array( arguments.length ), 7465 7466 // Make a writable jQuery.Event from the native event object 7467 event = jQuery.event.fix( nativeEvent ), 7468 7469 handlers = ( 7470 dataPriv.get( this, "events" ) || Object.create( null ) 7471 )[ event.type ] || [], 7472 special = jQuery.event.special[ event.type ] || {}; 7473 7474 // Use the fix-ed jQuery.Event rather than the (read-only) native event 7475 args[ 0 ] = event; 7476 7477 for ( i = 1; i < arguments.length; i++ ) { 7478 args[ i ] = arguments[ i ]; 7479 } 7480 7481 event.delegateTarget = this; 7482 7483 // Call the preDispatch hook for the mapped type, and let it bail if desired 7484 if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) { 7485 return; 7486 } 7487 7488 // Determine handlers 7489 handlerQueue = jQuery.event.handlers.call( this, event, handlers ); 7490 7491 // Run delegates first; they may want to stop propagation beneath us 7492 i = 0; 7493 while ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) { 7494 event.currentTarget = matched.elem; 7495 7496 j = 0; 7497 while ( ( handleObj = matched.handlers[ j++ ] ) && 7498 !event.isImmediatePropagationStopped() ) { 7499 7500 // If the event is namespaced, then each handler is only invoked if it is 7501 // specially universal or its namespaces are a superset of the event's. 7502 if ( !event.rnamespace || handleObj.namespace === false || 7503 event.rnamespace.test( handleObj.namespace ) ) { 7504 7505 event.handleObj = handleObj; 7506 event.data = handleObj.data; 7507 7508 ret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle || 7509 handleObj.handler ).apply( matched.elem, args ); 7510 7511 if ( ret !== undefined ) { 7512 if ( ( event.result = ret ) === false ) { 7513 event.preventDefault(); 7514 event.stopPropagation(); 7515 } 7516 } 7517 } 7518 } 7519 } 7520 7521 // Call the postDispatch hook for the mapped type 7522 if ( special.postDispatch ) { 7523 special.postDispatch.call( this, event ); 7524 } 7525 7526 return event.result; 7527 }, 7528 7529 handlers: function( event, handlers ) { 7530 var i, handleObj, sel, matchedHandlers, matchedSelectors, 7531 handlerQueue = [], 7532 delegateCount = handlers.delegateCount, 7533 cur = event.target; 7534 7535 // Find delegate handlers 7536 if ( delegateCount && 7537 7538 // Support: IE <=9 7539 // Black-hole SVG <use> instance trees (trac-13180) 7540 cur.nodeType && 7541 7542 // Support: Firefox <=42 7543 // Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861) 7544 // https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click 7545 // Support: IE 11 only 7546 // ...but not arrow key "clicks" of radio inputs, which can have `button` -1 (gh-2343) 7547 !( event.type === "click" && event.button >= 1 ) ) { 7548 7549 for ( ; cur !== this; cur = cur.parentNode || this ) { 7550 7551 // Don't check non-elements (trac-13208) 7552 // Don't process clicks on disabled elements (trac-6911, trac-8165, trac-11382, trac-11764) 7553 if ( cur.nodeType === 1 && !( event.type === "click" && cur.disabled === true ) ) { 7554 matchedHandlers = []; 7555 matchedSelectors = {}; 7556 for ( i = 0; i < delegateCount; i++ ) { 7557 handleObj = handlers[ i ]; 7558 7559 // Don't conflict with Object.prototype properties (trac-13203) 7560 sel = handleObj.selector + " "; 7561 7562 if ( matchedSelectors[ sel ] === undefined ) { 7563 matchedSelectors[ sel ] = handleObj.needsContext ? 7564 jQuery( sel, this ).index( cur ) > -1 : 7565 jQuery.find( sel, this, null, [ cur ] ).length; 7566 } 7567 if ( matchedSelectors[ sel ] ) { 7568 matchedHandlers.push( handleObj ); 7569 } 7570 } 7571 if ( matchedHandlers.length ) { 7572 handlerQueue.push( { elem: cur, handlers: matchedHandlers } ); 7573 } 7574 } 7575 } 7576 } 7577 7578 // Add the remaining (directly-bound) handlers 7579 cur = this; 7580 if ( delegateCount < handlers.length ) { 7581 handlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } ); 7582 } 7583 7584 return handlerQueue; 7585 }, 7586 7587 addProp: function( name, hook ) { 7588 Object.defineProperty( jQuery.Event.prototype, name, { 7589 enumerable: true, 7590 configurable: true, 7591 7592 get: isFunction( hook ) ? 7593 function() { 7594 if ( this.originalEvent ) { 7595 return hook( this.originalEvent ); 7596 } 7597 } : 7598 function() { 7599 if ( this.originalEvent ) { 7600 return this.originalEvent[ name ]; 7601 } 7602 }, 7603 7604 set: function( value ) { 7605 Object.defineProperty( this, name, { 7606 enumerable: true, 7607 configurable: true, 7608 writable: true, 7609 value: value 7610 } ); 7611 } 7612 } ); 7613 }, 7614 7615 fix: function( originalEvent ) { 7616 return originalEvent[ jQuery.expando ] ? 7617 originalEvent : 7618 new jQuery.Event( originalEvent ); 7619 }, 7620 7621 special: { 7622 load: { 7623 7624 // Prevent triggered image.load events from bubbling to window.load 7625 noBubble: true 7626 }, 7627 click: { 7628 7629 // Utilize native event to ensure correct state for checkable inputs 7630 setup: function( data ) { 7631 7632 // For mutual compressibility with _default, replace `this` access with a local var. 7633 // `|| data` is dead code meant only to preserve the variable through minification. 7634 var el = this || data; 7635 7636 // Claim the first handler 7637 if ( rcheckableType.test( el.type ) && 7638 el.click && nodeName( el, "input" ) ) { 7639 7640 // dataPriv.set( el, "click", ... ) 7641 leverageNative( el, "click", true ); 7642 } 7643 7644 // Return false to allow normal processing in the caller 7645 return false; 7646 }, 7647 trigger: function( data ) { 7648 7649 // For mutual compressibility with _default, replace `this` access with a local var. 7650 // `|| data` is dead code meant only to preserve the variable through minification. 7651 var el = this || data; 7652 7653 // Force setup before triggering a click 7654 if ( rcheckableType.test( el.type ) && 7655 el.click && nodeName( el, "input" ) ) { 7656 7657 leverageNative( el, "click" ); 7658 } 7659 7660 // Return non-false to allow normal event-path propagation 7661 return true; 7662 }, 7663 7664 // For cross-browser consistency, suppress native .click() on links 7665 // Also prevent it if we're currently inside a leveraged native-event stack 7666 _default: function( event ) { 7667 var target = event.target; 7668 return rcheckableType.test( target.type ) && 7669 target.click && nodeName( target, "input" ) && 7670 dataPriv.get( target, "click" ) || 7671 nodeName( target, "a" ); 7672 } 7673 }, 7674 7675 beforeunload: { 7676 postDispatch: function( event ) { 7677 7678 // Support: Firefox 20+ 7679 // Firefox doesn't alert if the returnValue field is not set. 7680 if ( event.result !== undefined && event.originalEvent ) { 7681 event.originalEvent.returnValue = event.result; 7682 } 7683 } 7684 } 7685 } 7686}; 7687 7688// Ensure the presence of an event listener that handles manually-triggered 7689// synthetic events by interrupting progress until reinvoked in response to 7690// *native* events that it fires directly, ensuring that state changes have 7691// already occurred before other listeners are invoked. 7692function leverageNative( el, type, isSetup ) { 7693 7694 // Missing `isSetup` indicates a trigger call, which must force setup through jQuery.event.add 7695 if ( !isSetup ) { 7696 if ( dataPriv.get( el, type ) === undefined ) { 7697 jQuery.event.add( el, type, returnTrue ); 7698 } 7699 return; 7700 } 7701 7702 // Register the controller as a special universal handler for all event namespaces 7703 dataPriv.set( el, type, false ); 7704 jQuery.event.add( el, type, { 7705 namespace: false, 7706 handler: function( event ) { 7707 var result, 7708 saved = dataPriv.get( this, type ); 7709 7710 if ( ( event.isTrigger & 1 ) && this[ type ] ) { 7711 7712 // Interrupt processing of the outer synthetic .trigger()ed event 7713 if ( !saved ) { 7714 7715 // Store arguments for use when handling the inner native event 7716 // There will always be at least one argument (an event object), so this array 7717 // will not be confused with a leftover capture object. 7718 saved = slice.call( arguments ); 7719 dataPriv.set( this, type, saved ); 7720 7721 // Trigger the native event and capture its result 7722 this[ type ](); 7723 result = dataPriv.get( this, type ); 7724 dataPriv.set( this, type, false ); 7725 7726 if ( saved !== result ) { 7727 7728 // Cancel the outer synthetic event 7729 event.stopImmediatePropagation(); 7730 event.preventDefault(); 7731 7732 return result; 7733 } 7734 7735 // If this is an inner synthetic event for an event with a bubbling surrogate 7736 // (focus or blur), assume that the surrogate already propagated from triggering 7737 // the native event and prevent that from happening again here. 7738 // This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the 7739 // bubbling surrogate propagates *after* the non-bubbling base), but that seems 7740 // less bad than duplication. 7741 } else if ( ( jQuery.event.special[ type ] || {} ).delegateType ) { 7742 event.stopPropagation(); 7743 } 7744 7745 // If this is a native event triggered above, everything is now in order 7746 // Fire an inner synthetic event with the original arguments 7747 } else if ( saved ) { 7748 7749 // ...and capture the result 7750 dataPriv.set( this, type, jQuery.event.trigger( 7751 saved[ 0 ], 7752 saved.slice( 1 ), 7753 this 7754 ) ); 7755 7756 // Abort handling of the native event by all jQuery handlers while allowing 7757 // native handlers on the same element to run. On target, this is achieved 7758 // by stopping immediate propagation just on the jQuery event. However, 7759 // the native event is re-wrapped by a jQuery one on each level of the 7760 // propagation so the only way to stop it for jQuery is to stop it for 7761 // everyone via native `stopPropagation()`. This is not a problem for 7762 // focus/blur which don't bubble, but it does also stop click on checkboxes 7763 // and radios. We accept this limitation. 7764 event.stopPropagation(); 7765 event.isImmediatePropagationStopped = returnTrue; 7766 } 7767 } 7768 } ); 7769} 7770 7771jQuery.removeEvent = function( elem, type, handle ) { 7772 7773 // This "if" is needed for plain objects 7774 if ( elem.removeEventListener ) { 7775 elem.removeEventListener( type, handle ); 7776 } 7777}; 7778 7779jQuery.Event = function( src, props ) { 7780 7781 // Allow instantiation without the 'new' keyword 7782 if ( !( this instanceof jQuery.Event ) ) { 7783 return new jQuery.Event( src, props ); 7784 } 7785 7786 // Event object 7787 if ( src && src.type ) { 7788 this.originalEvent = src; 7789 this.type = src.type; 7790 7791 // Events bubbling up the document may have been marked as prevented 7792 // by a handler lower down the tree; reflect the correct value. 7793 this.isDefaultPrevented = src.defaultPrevented || 7794 src.defaultPrevented === undefined && 7795 7796 // Support: Android <=2.3 only 7797 src.returnValue === false ? 7798 returnTrue : 7799 returnFalse; 7800 7801 // Create target properties 7802 // Support: Safari <=6 - 7 only 7803 // Target should not be a text node (trac-504, trac-13143) 7804 this.target = ( src.target && src.target.nodeType === 3 ) ? 7805 src.target.parentNode : 7806 src.target; 7807 7808 this.currentTarget = src.currentTarget; 7809 this.relatedTarget = src.relatedTarget; 7810 7811 // Event type 7812 } else { 7813 this.type = src; 7814 } 7815 7816 // Put explicitly provided properties onto the event object 7817 if ( props ) { 7818 jQuery.extend( this, props ); 7819 } 7820 7821 // Create a timestamp if incoming event doesn't have one 7822 this.timeStamp = src && src.timeStamp || Date.now(); 7823 7824 // Mark it as fixed 7825 this[ jQuery.expando ] = true; 7826}; 7827 7828// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding 7829// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html 7830jQuery.Event.prototype = { 7831 constructor: jQuery.Event, 7832 isDefaultPrevented: returnFalse, 7833 isPropagationStopped: returnFalse, 7834 isImmediatePropagationStopped: returnFalse, 7835 isSimulated: false, 7836 7837 preventDefault: function() { 7838 var e = this.originalEvent; 7839 7840 this.isDefaultPrevented = returnTrue; 7841 7842 if ( e && !this.isSimulated ) { 7843 e.preventDefault(); 7844 } 7845 }, 7846 stopPropagation: function() { 7847 var e = this.originalEvent; 7848 7849 this.isPropagationStopped = returnTrue; 7850 7851 if ( e && !this.isSimulated ) { 7852 e.stopPropagation(); 7853 } 7854 }, 7855 stopImmediatePropagation: function() { 7856 var e = this.originalEvent; 7857 7858 this.isImmediatePropagationStopped = returnTrue; 7859 7860 if ( e && !this.isSimulated ) { 7861 e.stopImmediatePropagation(); 7862 } 7863 7864 this.stopPropagation(); 7865 } 7866}; 7867 7868// Includes all common event props including KeyEvent and MouseEvent specific props 7869jQuery.each( { 7870 altKey: true, 7871 bubbles: true, 7872 cancelable: true, 7873 changedTouches: true, 7874 ctrlKey: true, 7875 detail: true, 7876 eventPhase: true, 7877 metaKey: true, 7878 pageX: true, 7879 pageY: true, 7880 shiftKey: true, 7881 view: true, 7882 "char": true, 7883 code: true, 7884 charCode: true, 7885 key: true, 7886 keyCode: true, 7887 button: true, 7888 buttons: true, 7889 clientX: true, 7890 clientY: true, 7891 offsetX: true, 7892 offsetY: true, 7893 pointerId: true, 7894 pointerType: true, 7895 screenX: true, 7896 screenY: true, 7897 targetTouches: true, 7898 toElement: true, 7899 touches: true, 7900 which: true 7901}, jQuery.event.addProp ); 7902 7903jQuery.each( { focus: "focusin", blur: "focusout" }, function( type, delegateType ) { 7904 7905 function focusMappedHandler( nativeEvent ) { 7906 if ( document.documentMode ) { 7907 7908 // Support: IE 11+ 7909 // Attach a single focusin/focusout handler on the document while someone wants 7910 // focus/blur. This is because the former are synchronous in IE while the latter 7911 // are async. In other browsers, all those handlers are invoked synchronously. 7912 7913 // `handle` from private data would already wrap the event, but we need 7914 // to change the `type` here. 7915 var handle = dataPriv.get( this, "handle" ), 7916 event = jQuery.event.fix( nativeEvent ); 7917 event.type = nativeEvent.type === "focusin" ? "focus" : "blur"; 7918 event.isSimulated = true; 7919 7920 // First, handle focusin/focusout 7921 handle( nativeEvent ); 7922 7923 // ...then, handle focus/blur 7924 // 7925 // focus/blur don't bubble while focusin/focusout do; simulate the former by only 7926 // invoking the handler at the lower level. 7927 if ( event.target === event.currentTarget ) { 7928 7929 // The setup part calls `leverageNative`, which, in turn, calls 7930 // `jQuery.event.add`, so event handle will already have been set 7931 // by this point. 7932 handle( event ); 7933 } 7934 } else { 7935 7936 // For non-IE browsers, attach a single capturing handler on the document 7937 // while someone wants focusin/focusout. 7938 jQuery.event.simulate( delegateType, nativeEvent.target, 7939 jQuery.event.fix( nativeEvent ) ); 7940 } 7941 } 7942 7943 jQuery.event.special[ type ] = { 7944 7945 // Utilize native event if possible so blur/focus sequence is correct 7946 setup: function() { 7947 7948 var attaches; 7949 7950 // Claim the first handler 7951 // dataPriv.set( this, "focus", ... ) 7952 // dataPriv.set( this, "blur", ... ) 7953 leverageNative( this, type, true ); 7954 7955 if ( document.documentMode ) { 7956 7957 // Support: IE 9 - 11+ 7958 // We use the same native handler for focusin & focus (and focusout & blur) 7959 // so we need to coordinate setup & teardown parts between those events. 7960 // Use `delegateType` as the key as `type` is already used by `leverageNative`. 7961 attaches = dataPriv.get( this, delegateType ); 7962 if ( !attaches ) { 7963 this.addEventListener( delegateType, focusMappedHandler ); 7964 } 7965 dataPriv.set( this, delegateType, ( attaches || 0 ) + 1 ); 7966 } else { 7967 7968 // Return false to allow normal processing in the caller 7969 return false; 7970 } 7971 }, 7972 trigger: function() { 7973 7974 // Force setup before trigger 7975 leverageNative( this, type ); 7976 7977 // Return non-false to allow normal event-path propagation 7978 return true; 7979 }, 7980 7981 teardown: function() { 7982 var attaches; 7983 7984 if ( document.documentMode ) { 7985 attaches = dataPriv.get( this, delegateType ) - 1; 7986 if ( !attaches ) { 7987 this.removeEventListener( delegateType, focusMappedHandler ); 7988 dataPriv.remove( this, delegateType ); 7989 } else { 7990 dataPriv.set( this, delegateType, attaches ); 7991 } 7992 } else { 7993 7994 // Return false to indicate standard teardown should be applied 7995 return false; 7996 } 7997 }, 7998 7999 // Suppress native focus or blur if we're currently inside 8000 // a leveraged native-event stack 8001 _default: function( event ) { 8002 return dataPriv.get( event.target, type ); 8003 }, 8004 8005 delegateType: delegateType 8006 }; 8007 8008 // Support: Firefox <=44 8009 // Firefox doesn't have focus(in | out) events 8010 // Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787 8011 // 8012 // Support: Chrome <=48 - 49, Safari <=9.0 - 9.1 8013 // focus(in | out) events fire after focus & blur events, 8014 // which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order 8015 // Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857 8016 // 8017 // Support: IE 9 - 11+ 8018 // To preserve relative focusin/focus & focusout/blur event order guaranteed on the 3.x branch, 8019 // attach a single handler for both events in IE. 8020 jQuery.event.special[ delegateType ] = { 8021 setup: function() { 8022 8023 // Handle: regular nodes (via `this.ownerDocument`), window 8024 // (via `this.document`) & document (via `this`). 8025 var doc = this.ownerDocument || this.document || this, 8026 dataHolder = document.documentMode ? this : doc, 8027 attaches = dataPriv.get( dataHolder, delegateType ); 8028 8029 // Support: IE 9 - 11+ 8030 // We use the same native handler for focusin & focus (and focusout & blur) 8031 // so we need to coordinate setup & teardown parts between those events. 8032 // Use `delegateType` as the key as `type` is already used by `leverageNative`. 8033 if ( !attaches ) { 8034 if ( document.documentMode ) { 8035 this.addEventListener( delegateType, focusMappedHandler ); 8036 } else { 8037 doc.addEventListener( type, focusMappedHandler, true ); 8038 } 8039 } 8040 dataPriv.set( dataHolder, delegateType, ( attaches || 0 ) + 1 ); 8041 }, 8042 teardown: function() { 8043 var doc = this.ownerDocument || this.document || this, 8044 dataHolder = document.documentMode ? this : doc, 8045 attaches = dataPriv.get( dataHolder, delegateType ) - 1; 8046 8047 if ( !attaches ) { 8048 if ( document.documentMode ) { 8049 this.removeEventListener( delegateType, focusMappedHandler ); 8050 } else { 8051 doc.removeEventListener( type, focusMappedHandler, true ); 8052 } 8053 dataPriv.remove( dataHolder, delegateType ); 8054 } else { 8055 dataPriv.set( dataHolder, delegateType, attaches ); 8056 } 8057 } 8058 }; 8059} ); 8060 8061// Create mouseenter/leave events using mouseover/out and event-time checks 8062// so that event delegation works in jQuery. 8063// Do the same for pointerenter/pointerleave and pointerover/pointerout 8064// 8065// Support: Safari 7 only 8066// Safari sends mouseenter too often; see: 8067// https://bugs.chromium.org/p/chromium/issues/detail?id=470258 8068// for the description of the bug (it existed in older Chrome versions as well). 8069jQuery.each( { 8070 mouseenter: "mouseover", 8071 mouseleave: "mouseout", 8072 pointerenter: "pointerover", 8073 pointerleave: "pointerout" 8074}, function( orig, fix ) { 8075 jQuery.event.special[ orig ] = { 8076 delegateType: fix, 8077 bindType: fix, 8078 8079 handle: function( event ) { 8080 var ret, 8081 target = this, 8082 related = event.relatedTarget, 8083 handleObj = event.handleObj; 8084 8085 // For mouseenter/leave call the handler if related is outside the target. 8086 // NB: No relatedTarget if the mouse left/entered the browser window 8087 if ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) { 8088 event.type = handleObj.origType; 8089 ret = handleObj.handler.apply( this, arguments ); 8090 event.type = fix; 8091 } 8092 return ret; 8093 } 8094 }; 8095} ); 8096 8097jQuery.fn.extend( { 8098 8099 on: function( types, selector, data, fn ) { 8100 return on( this, types, selector, data, fn ); 8101 }, 8102 one: function( types, selector, data, fn ) { 8103 return on( this, types, selector, data, fn, 1 ); 8104 }, 8105 off: function( types, selector, fn ) { 8106 var handleObj, type; 8107 if ( types && types.preventDefault && types.handleObj ) { 8108 8109 // ( event ) dispatched jQuery.Event 8110 handleObj = types.handleObj; 8111 jQuery( types.delegateTarget ).off( 8112 handleObj.namespace ? 8113 handleObj.origType + "." + handleObj.namespace : 8114 handleObj.origType, 8115 handleObj.selector, 8116 handleObj.handler 8117 ); 8118 return this; 8119 } 8120 if ( typeof types === "object" ) { 8121 8122 // ( types-object [, selector] ) 8123 for ( type in types ) { 8124 this.off( type, selector, types[ type ] ); 8125 } 8126 return this; 8127 } 8128 if ( selector === false || typeof selector === "function" ) { 8129 8130 // ( types [, fn] ) 8131 fn = selector; 8132 selector = undefined; 8133 } 8134 if ( fn === false ) { 8135 fn = returnFalse; 8136 } 8137 return this.each( function() { 8138 jQuery.event.remove( this, types, fn, selector ); 8139 } ); 8140 } 8141} ); 8142 8143 8144var 8145 8146 // Support: IE <=10 - 11, Edge 12 - 13 only 8147 // In IE/Edge using regex groups here causes severe slowdowns. 8148 // See https://connect.microsoft.com/IE/feedback/details/1736512/ 8149 rnoInnerhtml = /<script|<style|<link/i, 8150 8151 // checked="checked" or checked 8152 rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i, 8153 8154 rcleanScript = /^\s*<!\[CDATA\[|\]\]>\s*$/g; 8155 8156// Prefer a tbody over its parent table for containing new rows 8157function manipulationTarget( elem, content ) { 8158 if ( nodeName( elem, "table" ) && 8159 nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ) { 8160 8161 return jQuery( elem ).children( "tbody" )[ 0 ] || elem; 8162 } 8163 8164 return elem; 8165} 8166 8167// Replace/restore the type attribute of script elements for safe DOM manipulation 8168function disableScript( elem ) { 8169 elem.type = ( elem.getAttribute( "type" ) !== null ) + "/" + elem.type; 8170 return elem; 8171} 8172function restoreScript( elem ) { 8173 if ( ( elem.type || "" ).slice( 0, 5 ) === "true/" ) { 8174 elem.type = elem.type.slice( 5 ); 8175 } else { 8176 elem.removeAttribute( "type" ); 8177 } 8178 8179 return elem; 8180} 8181 8182function cloneCopyEvent( src, dest ) { 8183 var i, l, type, pdataOld, udataOld, udataCur, events; 8184 8185 if ( dest.nodeType !== 1 ) { 8186 return; 8187 } 8188 8189 // 1. Copy private data: events, handlers, etc. 8190 if ( dataPriv.hasData( src ) ) { 8191 pdataOld = dataPriv.get( src ); 8192 events = pdataOld.events; 8193 8194 if ( events ) { 8195 dataPriv.remove( dest, "handle events" ); 8196 8197 for ( type in events ) { 8198 for ( i = 0, l = events[ type ].length; i < l; i++ ) { 8199 jQuery.event.add( dest, type, events[ type ][ i ] ); 8200 } 8201 } 8202 } 8203 } 8204 8205 // 2. Copy user data 8206 if ( dataUser.hasData( src ) ) { 8207 udataOld = dataUser.access( src ); 8208 udataCur = jQuery.extend( {}, udataOld ); 8209 8210 dataUser.set( dest, udataCur ); 8211 } 8212} 8213 8214// Fix IE bugs, see support tests 8215function fixInput( src, dest ) { 8216 var nodeName = dest.nodeName.toLowerCase(); 8217 8218 // Fails to persist the checked state of a cloned checkbox or radio button. 8219 if ( nodeName === "input" && rcheckableType.test( src.type ) ) { 8220 dest.checked = src.checked; 8221 8222 // Fails to return the selected option to the default selected state when cloning options 8223 } else if ( nodeName === "input" || nodeName === "textarea" ) { 8224 dest.defaultValue = src.defaultValue; 8225 } 8226} 8227 8228function domManip( collection, args, callback, ignored ) { 8229 8230 // Flatten any nested arrays 8231 args = flat( args ); 8232 8233 var fragment, first, scripts, hasScripts, node, doc, 8234 i = 0, 8235 l = collection.length, 8236 iNoClone = l - 1, 8237 value = args[ 0 ], 8238 valueIsFunction = isFunction( value ); 8239 8240 // We can't cloneNode fragments that contain checked, in WebKit 8241 if ( valueIsFunction || 8242 ( l > 1 && typeof value === "string" && 8243 !support.checkClone && rchecked.test( value ) ) ) { 8244 return collection.each( function( index ) { 8245 var self = collection.eq( index ); 8246 if ( valueIsFunction ) { 8247 args[ 0 ] = value.call( this, index, self.html() ); 8248 } 8249 domManip( self, args, callback, ignored ); 8250 } ); 8251 } 8252 8253 if ( l ) { 8254 fragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored ); 8255 first = fragment.firstChild; 8256 8257 if ( fragment.childNodes.length === 1 ) { 8258 fragment = first; 8259 } 8260 8261 // Require either new content or an interest in ignored elements to invoke the callback 8262 if ( first || ignored ) { 8263 scripts = jQuery.map( getAll( fragment, "script" ), disableScript ); 8264 hasScripts = scripts.length; 8265 8266 // Use the original fragment for the last item 8267 // instead of the first because it can end up 8268 // being emptied incorrectly in certain situations (trac-8070). 8269 for ( ; i < l; i++ ) { 8270 node = fragment; 8271 8272 if ( i !== iNoClone ) { 8273 node = jQuery.clone( node, true, true ); 8274 8275 // Keep references to cloned scripts for later restoration 8276 if ( hasScripts ) { 8277 8278 // Support: Android <=4.0 only, PhantomJS 1 only 8279 // push.apply(_, arraylike) throws on ancient WebKit 8280 jQuery.merge( scripts, getAll( node, "script" ) ); 8281 } 8282 } 8283 8284 callback.call( collection[ i ], node, i ); 8285 } 8286 8287 if ( hasScripts ) { 8288 doc = scripts[ scripts.length - 1 ].ownerDocument; 8289 8290 // Re-enable scripts 8291 jQuery.map( scripts, restoreScript ); 8292 8293 // Evaluate executable scripts on first document insertion 8294 for ( i = 0; i < hasScripts; i++ ) { 8295 node = scripts[ i ]; 8296 if ( rscriptType.test( node.type || "" ) && 8297 !dataPriv.access( node, "globalEval" ) && 8298 jQuery.contains( doc, node ) ) { 8299 8300 if ( node.src && ( node.type || "" ).toLowerCase() !== "module" ) { 8301 8302 // Optional AJAX dependency, but won't run scripts if not present 8303 if ( jQuery._evalUrl && !node.noModule ) { 8304 jQuery._evalUrl( node.src, { 8305 nonce: node.nonce || node.getAttribute( "nonce" ) 8306 }, doc ); 8307 } 8308 } else { 8309 8310 // Unwrap a CDATA section containing script contents. This shouldn't be 8311 // needed as in XML documents they're already not visible when 8312 // inspecting element contents and in HTML documents they have no 8313 // meaning but we're preserving that logic for backwards compatibility. 8314 // This will be removed completely in 4.0. See gh-4904. 8315 DOMEval( node.textContent.replace( rcleanScript, "" ), node, doc ); 8316 } 8317 } 8318 } 8319 } 8320 } 8321 } 8322 8323 return collection; 8324} 8325 8326function remove( elem, selector, keepData ) { 8327 var node, 8328 nodes = selector ? jQuery.filter( selector, elem ) : elem, 8329 i = 0; 8330 8331 for ( ; ( node = nodes[ i ] ) != null; i++ ) { 8332 if ( !keepData && node.nodeType === 1 ) { 8333 jQuery.cleanData( getAll( node ) ); 8334 } 8335 8336 if ( node.parentNode ) { 8337 if ( keepData && isAttached( node ) ) { 8338 setGlobalEval( getAll( node, "script" ) ); 8339 } 8340 node.parentNode.removeChild( node ); 8341 } 8342 } 8343 8344 return elem; 8345} 8346 8347jQuery.extend( { 8348 htmlPrefilter: function( html ) { 8349 return html; 8350 }, 8351 8352 clone: function( elem, dataAndEvents, deepDataAndEvents ) { 8353 var i, l, srcElements, destElements, 8354 clone = elem.cloneNode( true ), 8355 inPage = isAttached( elem ); 8356 8357 // Fix IE cloning issues 8358 if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) && 8359 !jQuery.isXMLDoc( elem ) ) { 8360 8361 // We eschew jQuery#find here for performance reasons: 8362 // https://jsperf.com/getall-vs-sizzle/2 8363 destElements = getAll( clone ); 8364 srcElements = getAll( elem ); 8365 8366 for ( i = 0, l = srcElements.length; i < l; i++ ) { 8367 fixInput( srcElements[ i ], destElements[ i ] ); 8368 } 8369 } 8370 8371 // Copy the events from the original to the clone 8372 if ( dataAndEvents ) { 8373 if ( deepDataAndEvents ) { 8374 srcElements = srcElements || getAll( elem ); 8375 destElements = destElements || getAll( clone ); 8376 8377 for ( i = 0, l = srcElements.length; i < l; i++ ) { 8378 cloneCopyEvent( srcElements[ i ], destElements[ i ] ); 8379 } 8380 } else { 8381 cloneCopyEvent( elem, clone ); 8382 } 8383 } 8384 8385 // Preserve script evaluation history 8386 destElements = getAll( clone, "script" ); 8387 if ( destElements.length > 0 ) { 8388 setGlobalEval( destElements, !inPage && getAll( elem, "script" ) ); 8389 } 8390 8391 // Return the cloned set 8392 return clone; 8393 }, 8394 8395 cleanData: function( elems ) { 8396 var data, elem, type, 8397 special = jQuery.event.special, 8398 i = 0; 8399 8400 for ( ; ( elem = elems[ i ] ) !== undefined; i++ ) { 8401 if ( acceptData( elem ) ) { 8402 if ( ( data = elem[ dataPriv.expando ] ) ) { 8403 if ( data.events ) { 8404 for ( type in data.events ) { 8405 if ( special[ type ] ) { 8406 jQuery.event.remove( elem, type ); 8407 8408 // This is a shortcut to avoid jQuery.event.remove's overhead 8409 } else { 8410 jQuery.removeEvent( elem, type, data.handle ); 8411 } 8412 } 8413 } 8414 8415 // Support: Chrome <=35 - 45+ 8416 // Assign undefined instead of using delete, see Data#remove 8417 elem[ dataPriv.expando ] = undefined; 8418 } 8419 if ( elem[ dataUser.expando ] ) { 8420 8421 // Support: Chrome <=35 - 45+ 8422 // Assign undefined instead of using delete, see Data#remove 8423 elem[ dataUser.expando ] = undefined; 8424 } 8425 } 8426 } 8427 } 8428} ); 8429 8430jQuery.fn.extend( { 8431 detach: function( selector ) { 8432 return remove( this, selector, true ); 8433 }, 8434 8435 remove: function( selector ) { 8436 return remove( this, selector ); 8437 }, 8438 8439 text: function( value ) { 8440 return access( this, function( value ) { 8441 return value === undefined ? 8442 jQuery.text( this ) : 8443 this.empty().each( function() { 8444 if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { 8445 this.textContent = value; 8446 } 8447 } ); 8448 }, null, value, arguments.length ); 8449 }, 8450 8451 append: function() { 8452 return domManip( this, arguments, function( elem ) { 8453 if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { 8454 var target = manipulationTarget( this, elem ); 8455 target.appendChild( elem ); 8456 } 8457 } ); 8458 }, 8459 8460 prepend: function() { 8461 return domManip( this, arguments, function( elem ) { 8462 if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { 8463 var target = manipulationTarget( this, elem ); 8464 target.insertBefore( elem, target.firstChild ); 8465 } 8466 } ); 8467 }, 8468 8469 before: function() { 8470 return domManip( this, arguments, function( elem ) { 8471 if ( this.parentNode ) { 8472 this.parentNode.insertBefore( elem, this ); 8473 } 8474 } ); 8475 }, 8476 8477 after: function() { 8478 return domManip( this, arguments, function( elem ) { 8479 if ( this.parentNode ) { 8480 this.parentNode.insertBefore( elem, this.nextSibling ); 8481 } 8482 } ); 8483 }, 8484 8485 empty: function() { 8486 var elem, 8487 i = 0; 8488 8489 for ( ; ( elem = this[ i ] ) != null; i++ ) { 8490 if ( elem.nodeType === 1 ) { 8491 8492 // Prevent memory leaks 8493 jQuery.cleanData( getAll( elem, false ) ); 8494 8495 // Remove any remaining nodes 8496 elem.textContent = ""; 8497 } 8498 } 8499 8500 return this; 8501 }, 8502 8503 clone: function( dataAndEvents, deepDataAndEvents ) { 8504 dataAndEvents = dataAndEvents == null ? false : dataAndEvents; 8505 deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents; 8506 8507 return this.map( function() { 8508 return jQuery.clone( this, dataAndEvents, deepDataAndEvents ); 8509 } ); 8510 }, 8511 8512 html: function( value ) { 8513 return access( this, function( value ) { 8514 var elem = this[ 0 ] || {}, 8515 i = 0, 8516 l = this.length; 8517 8518 if ( value === undefined && elem.nodeType === 1 ) { 8519 return elem.innerHTML; 8520 } 8521 8522 // See if we can take a shortcut and just use innerHTML 8523 if ( typeof value === "string" && !rnoInnerhtml.test( value ) && 8524 !wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) { 8525 8526 value = jQuery.htmlPrefilter( value ); 8527 8528 try { 8529 for ( ; i < l; i++ ) { 8530 elem = this[ i ] || {}; 8531 8532 // Remove element nodes and prevent memory leaks 8533 if ( elem.nodeType === 1 ) { 8534 jQuery.cleanData( getAll( elem, false ) ); 8535 elem.innerHTML = value; 8536 } 8537 } 8538 8539 elem = 0; 8540 8541 // If using innerHTML throws an exception, use the fallback method 8542 } catch ( e ) {} 8543 } 8544 8545 if ( elem ) { 8546 this.empty().append( value ); 8547 } 8548 }, null, value, arguments.length ); 8549 }, 8550 8551 replaceWith: function() { 8552 var ignored = []; 8553 8554 // Make the changes, replacing each non-ignored context element with the new content 8555 return domManip( this, arguments, function( elem ) { 8556 var parent = this.parentNode; 8557 8558 if ( jQuery.inArray( this, ignored ) < 0 ) { 8559 jQuery.cleanData( getAll( this ) ); 8560 if ( parent ) { 8561 parent.replaceChild( elem, this ); 8562 } 8563 } 8564 8565 // Force callback invocation 8566 }, ignored ); 8567 } 8568} ); 8569 8570jQuery.each( { 8571 appendTo: "append", 8572 prependTo: "prepend", 8573 insertBefore: "before", 8574 insertAfter: "after", 8575 replaceAll: "replaceWith" 8576}, function( name, original ) { 8577 jQuery.fn[ name ] = function( selector ) { 8578 var elems, 8579 ret = [], 8580 insert = jQuery( selector ), 8581 last = insert.length - 1, 8582 i = 0; 8583 8584 for ( ; i <= last; i++ ) { 8585 elems = i === last ? this : this.clone( true ); 8586 jQuery( insert[ i ] )[ original ]( elems ); 8587 8588 // Support: Android <=4.0 only, PhantomJS 1 only 8589 // .get() because push.apply(_, arraylike) throws on ancient WebKit 8590 push.apply( ret, elems.get() ); 8591 } 8592 8593 return this.pushStack( ret ); 8594 }; 8595} ); 8596var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" ); 8597 8598var rcustomProp = /^--/; 8599 8600 8601var getStyles = function( elem ) { 8602 8603 // Support: IE <=11 only, Firefox <=30 (trac-15098, trac-14150) 8604 // IE throws on elements created in popups 8605 // FF meanwhile throws on frame elements through "defaultView.getComputedStyle" 8606 var view = elem.ownerDocument.defaultView; 8607 8608 if ( !view || !view.opener ) { 8609 view = window; 8610 } 8611 8612 return view.getComputedStyle( elem ); 8613 }; 8614 8615var swap = function( elem, options, callback ) { 8616 var ret, name, 8617 old = {}; 8618 8619 // Remember the old values, and insert the new ones 8620 for ( name in options ) { 8621 old[ name ] = elem.style[ name ]; 8622 elem.style[ name ] = options[ name ]; 8623 } 8624 8625 ret = callback.call( elem ); 8626 8627 // Revert the old values 8628 for ( name in options ) { 8629 elem.style[ name ] = old[ name ]; 8630 } 8631 8632 return ret; 8633}; 8634 8635 8636var rboxStyle = new RegExp( cssExpand.join( "|" ), "i" ); 8637 8638 8639 8640( function() { 8641 8642 // Executing both pixelPosition & boxSizingReliable tests require only one layout 8643 // so they're executed at the same time to save the second computation. 8644 function computeStyleTests() { 8645 8646 // This is a singleton, we need to execute it only once 8647 if ( !div ) { 8648 return; 8649 } 8650 8651 container.style.cssText = "position:absolute;left:-11111px;width:60px;" + 8652 "margin-top:1px;padding:0;border:0"; 8653 div.style.cssText = 8654 "position:relative;display:block;box-sizing:border-box;overflow:scroll;" + 8655 "margin:auto;border:1px;padding:1px;" + 8656 "width:60%;top:1%"; 8657 documentElement.appendChild( container ).appendChild( div ); 8658 8659 var divStyle = window.getComputedStyle( div ); 8660 pixelPositionVal = divStyle.top !== "1%"; 8661 8662 // Support: Android 4.0 - 4.3 only, Firefox <=3 - 44 8663 reliableMarginLeftVal = roundPixelMeasures( divStyle.marginLeft ) === 12; 8664 8665 // Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3 8666 // Some styles come back with percentage values, even though they shouldn't 8667 div.style.right = "60%"; 8668 pixelBoxStylesVal = roundPixelMeasures( divStyle.right ) === 36; 8669 8670 // Support: IE 9 - 11 only 8671 // Detect misreporting of content dimensions for box-sizing:border-box elements 8672 boxSizingReliableVal = roundPixelMeasures( divStyle.width ) === 36; 8673 8674 // Support: IE 9 only 8675 // Detect overflow:scroll screwiness (gh-3699) 8676 // Support: Chrome <=64 8677 // Don't get tricked when zoom affects offsetWidth (gh-4029) 8678 div.style.position = "absolute"; 8679 scrollboxSizeVal = roundPixelMeasures( div.offsetWidth / 3 ) === 12; 8680 8681 documentElement.removeChild( container ); 8682 8683 // Nullify the div so it wouldn't be stored in the memory and 8684 // it will also be a sign that checks already performed 8685 div = null; 8686 } 8687 8688 function roundPixelMeasures( measure ) { 8689 return Math.round( parseFloat( measure ) ); 8690 } 8691 8692 var pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal, 8693 reliableTrDimensionsVal, reliableMarginLeftVal, 8694 container = document.createElement( "div" ), 8695 div = document.createElement( "div" ); 8696 8697 // Finish early in limited (non-browser) environments 8698 if ( !div.style ) { 8699 return; 8700 } 8701 8702 // Support: IE <=9 - 11 only 8703 // Style of cloned element affects source element cloned (trac-8908) 8704 div.style.backgroundClip = "content-box"; 8705 div.cloneNode( true ).style.backgroundClip = ""; 8706 support.clearCloneStyle = div.style.backgroundClip === "content-box"; 8707 8708 jQuery.extend( support, { 8709 boxSizingReliable: function() { 8710 computeStyleTests(); 8711 return boxSizingReliableVal; 8712 }, 8713 pixelBoxStyles: function() { 8714 computeStyleTests(); 8715 return pixelBoxStylesVal; 8716 }, 8717 pixelPosition: function() { 8718 computeStyleTests(); 8719 return pixelPositionVal; 8720 }, 8721 reliableMarginLeft: function() { 8722 computeStyleTests(); 8723 return reliableMarginLeftVal; 8724 }, 8725 scrollboxSize: function() { 8726 computeStyleTests(); 8727 return scrollboxSizeVal; 8728 }, 8729 8730 // Support: IE 9 - 11+, Edge 15 - 18+ 8731 // IE/Edge misreport `getComputedStyle` of table rows with width/height 8732 // set in CSS while `offset*` properties report correct values. 8733 // Behavior in IE 9 is more subtle than in newer versions & it passes 8734 // some versions of this test; make sure not to make it pass there! 8735 // 8736 // Support: Firefox 70+ 8737 // Only Firefox includes border widths 8738 // in computed dimensions. (gh-4529) 8739 reliableTrDimensions: function() { 8740 var table, tr, trChild, trStyle; 8741 if ( reliableTrDimensionsVal == null ) { 8742 table = document.createElement( "table" ); 8743 tr = document.createElement( "tr" ); 8744 trChild = document.createElement( "div" ); 8745 8746 table.style.cssText = "position:absolute;left:-11111px;border-collapse:separate"; 8747 tr.style.cssText = "box-sizing:content-box;border:1px solid"; 8748 8749 // Support: Chrome 86+ 8750 // Height set through cssText does not get applied. 8751 // Computed height then comes back as 0. 8752 tr.style.height = "1px"; 8753 trChild.style.height = "9px"; 8754 8755 // Support: Android 8 Chrome 86+ 8756 // In our bodyBackground.html iframe, 8757 // display for all div elements is set to "inline", 8758 // which causes a problem only in Android 8 Chrome 86. 8759 // Ensuring the div is `display: block` 8760 // gets around this issue. 8761 trChild.style.display = "block"; 8762 8763 documentElement 8764 .appendChild( table ) 8765 .appendChild( tr ) 8766 .appendChild( trChild ); 8767 8768 trStyle = window.getComputedStyle( tr ); 8769 reliableTrDimensionsVal = ( parseInt( trStyle.height, 10 ) + 8770 parseInt( trStyle.borderTopWidth, 10 ) + 8771 parseInt( trStyle.borderBottomWidth, 10 ) ) === tr.offsetHeight; 8772 8773 documentElement.removeChild( table ); 8774 } 8775 return reliableTrDimensionsVal; 8776 } 8777 } ); 8778} )(); 8779 8780 8781function curCSS( elem, name, computed ) { 8782 var width, minWidth, maxWidth, ret, 8783 isCustomProp = rcustomProp.test( name ), 8784 8785 // Support: Firefox 51+ 8786 // Retrieving style before computed somehow 8787 // fixes an issue with getting wrong values 8788 // on detached elements 8789 style = elem.style; 8790 8791 computed = computed || getStyles( elem ); 8792 8793 // getPropertyValue is needed for: 8794 // .css('filter') (IE 9 only, trac-12537) 8795 // .css('--customProperty) (gh-3144) 8796 if ( computed ) { 8797 8798 // Support: IE <=9 - 11+ 8799 // IE only supports `"float"` in `getPropertyValue`; in computed styles 8800 // it's only available as `"cssFloat"`. We no longer modify properties 8801 // sent to `.css()` apart from camelCasing, so we need to check both. 8802 // Normally, this would create difference in behavior: if 8803 // `getPropertyValue` returns an empty string, the value returned 8804 // by `.css()` would be `undefined`. This is usually the case for 8805 // disconnected elements. However, in IE even disconnected elements 8806 // with no styles return `"none"` for `getPropertyValue( "float" )` 8807 ret = computed.getPropertyValue( name ) || computed[ name ]; 8808 8809 if ( isCustomProp && ret ) { 8810 8811 // Support: Firefox 105+, Chrome <=105+ 8812 // Spec requires trimming whitespace for custom properties (gh-4926). 8813 // Firefox only trims leading whitespace. Chrome just collapses 8814 // both leading & trailing whitespace to a single space. 8815 // 8816 // Fall back to `undefined` if empty string returned. 8817 // This collapses a missing definition with property defined 8818 // and set to an empty string but there's no standard API 8819 // allowing us to differentiate them without a performance penalty 8820 // and returning `undefined` aligns with older jQuery. 8821 // 8822 // rtrimCSS treats U+000D CARRIAGE RETURN and U+000C FORM FEED 8823 // as whitespace while CSS does not, but this is not a problem 8824 // because CSS preprocessing replaces them with U+000A LINE FEED 8825 // (which *is* CSS whitespace) 8826 // https://www.w3.org/TR/css-syntax-3/#input-preprocessing 8827 ret = ret.replace( rtrimCSS, "$1" ) || undefined; 8828 } 8829 8830 if ( ret === "" && !isAttached( elem ) ) { 8831 ret = jQuery.style( elem, name ); 8832 } 8833 8834 // A tribute to the "awesome hack by Dean Edwards" 8835 // Android Browser returns percentage for some values, 8836 // but width seems to be reliably pixels. 8837 // This is against the CSSOM draft spec: 8838 // https://drafts.csswg.org/cssom/#resolved-values 8839 if ( !support.pixelBoxStyles() && rnumnonpx.test( ret ) && rboxStyle.test( name ) ) { 8840 8841 // Remember the original values 8842 width = style.width; 8843 minWidth = style.minWidth; 8844 maxWidth = style.maxWidth; 8845 8846 // Put in the new values to get a computed value out 8847 style.minWidth = style.maxWidth = style.width = ret; 8848 ret = computed.width; 8849 8850 // Revert the changed values 8851 style.width = width; 8852 style.minWidth = minWidth; 8853 style.maxWidth = maxWidth; 8854 } 8855 } 8856 8857 return ret !== undefined ? 8858 8859 // Support: IE <=9 - 11 only 8860 // IE returns zIndex value as an integer. 8861 ret + "" : 8862 ret; 8863} 8864 8865 8866function addGetHookIf( conditionFn, hookFn ) { 8867 8868 // Define the hook, we'll check on the first run if it's really needed. 8869 return { 8870 get: function() { 8871 if ( conditionFn() ) { 8872 8873 // Hook not needed (or it's not possible to use it due 8874 // to missing dependency), remove it. 8875 delete this.get; 8876 return; 8877 } 8878 8879 // Hook needed; redefine it so that the support test is not executed again. 8880 return ( this.get = hookFn ).apply( this, arguments ); 8881 } 8882 }; 8883} 8884 8885 8886var cssPrefixes = [ "Webkit", "Moz", "ms" ], 8887 emptyStyle = document.createElement( "div" ).style, 8888 vendorProps = {}; 8889 8890// Return a vendor-prefixed property or undefined 8891function vendorPropName( name ) { 8892 8893 // Check for vendor prefixed names 8894 var capName = name[ 0 ].toUpperCase() + name.slice( 1 ), 8895 i = cssPrefixes.length; 8896 8897 while ( i-- ) { 8898 name = cssPrefixes[ i ] + capName; 8899 if ( name in emptyStyle ) { 8900 return name; 8901 } 8902 } 8903} 8904 8905// Return a potentially-mapped jQuery.cssProps or vendor prefixed property 8906function finalPropName( name ) { 8907 var final = jQuery.cssProps[ name ] || vendorProps[ name ]; 8908 8909 if ( final ) { 8910 return final; 8911 } 8912 if ( name in emptyStyle ) { 8913 return name; 8914 } 8915 return vendorProps[ name ] = vendorPropName( name ) || name; 8916} 8917 8918 8919var 8920 8921 // Swappable if display is none or starts with table 8922 // except "table", "table-cell", or "table-caption" 8923 // See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display 8924 rdisplayswap = /^(none|table(?!-c[ea]).+)/, 8925 cssShow = { position: "absolute", visibility: "hidden", display: "block" }, 8926 cssNormalTransform = { 8927 letterSpacing: "0", 8928 fontWeight: "400" 8929 }; 8930 8931function setPositiveNumber( _elem, value, subtract ) { 8932 8933 // Any relative (+/-) values have already been 8934 // normalized at this point 8935 var matches = rcssNum.exec( value ); 8936 return matches ? 8937 8938 // Guard against undefined "subtract", e.g., when used as in cssHooks 8939 Math.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || "px" ) : 8940 value; 8941} 8942 8943function boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) { 8944 var i = dimension === "width" ? 1 : 0, 8945 extra = 0, 8946 delta = 0, 8947 marginDelta = 0; 8948 8949 // Adjustment may not be necessary 8950 if ( box === ( isBorderBox ? "border" : "content" ) ) { 8951 return 0; 8952 } 8953 8954 for ( ; i < 4; i += 2 ) { 8955 8956 // Both box models exclude margin 8957 // Count margin delta separately to only add it after scroll gutter adjustment. 8958 // This is needed to make negative margins work with `outerHeight( true )` (gh-3982). 8959 if ( box === "margin" ) { 8960 marginDelta += jQuery.css( elem, box + cssExpand[ i ], true, styles ); 8961 } 8962 8963 // If we get here with a content-box, we're seeking "padding" or "border" or "margin" 8964 if ( !isBorderBox ) { 8965 8966 // Add padding 8967 delta += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); 8968 8969 // For "border" or "margin", add border 8970 if ( box !== "padding" ) { 8971 delta += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); 8972 8973 // But still keep track of it otherwise 8974 } else { 8975 extra += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); 8976 } 8977 8978 // If we get here with a border-box (content + padding + border), we're seeking "content" or 8979 // "padding" or "margin" 8980 } else { 8981 8982 // For "content", subtract padding 8983 if ( box === "content" ) { 8984 delta -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); 8985 } 8986 8987 // For "content" or "padding", subtract border 8988 if ( box !== "margin" ) { 8989 delta -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); 8990 } 8991 } 8992 } 8993 8994 // Account for positive content-box scroll gutter when requested by providing computedVal 8995 if ( !isBorderBox && computedVal >= 0 ) { 8996 8997 // offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border 8998 // Assuming integer scroll gutter, subtract the rest and round down 8999 delta += Math.max( 0, Math.ceil( 9000 elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] - 9001 computedVal - 9002 delta - 9003 extra - 9004 0.5 9005 9006 // If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter 9007 // Use an explicit zero to avoid NaN (gh-3964) 9008 ) ) || 0; 9009 } 9010 9011 return delta + marginDelta; 9012} 9013 9014function getWidthOrHeight( elem, dimension, extra ) { 9015 9016 // Start with computed style 9017 var styles = getStyles( elem ), 9018 9019 // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322). 9020 // Fake content-box until we know it's needed to know the true value. 9021 boxSizingNeeded = !support.boxSizingReliable() || extra, 9022 isBorderBox = boxSizingNeeded && 9023 jQuery.css( elem, "boxSizing", false, styles ) === "border-box", 9024 valueIsBorderBox = isBorderBox, 9025 9026 val = curCSS( elem, dimension, styles ), 9027 offsetProp = "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ); 9028 9029 // Support: Firefox <=54 9030 // Return a confounding non-pixel value or feign ignorance, as appropriate. 9031 if ( rnumnonpx.test( val ) ) { 9032 if ( !extra ) { 9033 return val; 9034 } 9035 val = "auto"; 9036 } 9037 9038 9039 // Support: IE 9 - 11 only 9040 // Use offsetWidth/offsetHeight for when box sizing is unreliable. 9041 // In those cases, the computed value can be trusted to be border-box. 9042 if ( ( !support.boxSizingReliable() && isBorderBox || 9043 9044 // Support: IE 10 - 11+, Edge 15 - 18+ 9045 // IE/Edge misreport `getComputedStyle` of table rows with width/height 9046 // set in CSS while `offset*` properties report correct values. 9047 // Interestingly, in some cases IE 9 doesn't suffer from this issue. 9048 !support.reliableTrDimensions() && nodeName( elem, "tr" ) || 9049 9050 // Fall back to offsetWidth/offsetHeight when value is "auto" 9051 // This happens for inline elements with no explicit setting (gh-3571) 9052 val === "auto" || 9053 9054 // Support: Android <=4.1 - 4.3 only 9055 // Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602) 9056 !parseFloat( val ) && jQuery.css( elem, "display", false, styles ) === "inline" ) && 9057 9058 // Make sure the element is visible & connected 9059 elem.getClientRects().length ) { 9060 9061 isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box"; 9062 9063 // Where available, offsetWidth/offsetHeight approximate border box dimensions. 9064 // Where not available (e.g., SVG), assume unreliable box-sizing and interpret the 9065 // retrieved value as a content box dimension. 9066 valueIsBorderBox = offsetProp in elem; 9067 if ( valueIsBorderBox ) { 9068 val = elem[ offsetProp ]; 9069 } 9070 } 9071 9072 // Normalize "" and auto 9073 val = parseFloat( val ) || 0; 9074 9075 // Adjust for the element's box model 9076 return ( val + 9077 boxModelAdjustment( 9078 elem, 9079 dimension, 9080 extra || ( isBorderBox ? "border" : "content" ), 9081 valueIsBorderBox, 9082 styles, 9083 9084 // Provide the current computed size to request scroll gutter calculation (gh-3589) 9085 val 9086 ) 9087 ) + "px"; 9088} 9089 9090jQuery.extend( { 9091 9092 // Add in style property hooks for overriding the default 9093 // behavior of getting and setting a style property 9094 cssHooks: { 9095 opacity: { 9096 get: function( elem, computed ) { 9097 if ( computed ) { 9098 9099 // We should always get a number back from opacity 9100 var ret = curCSS( elem, "opacity" ); 9101 return ret === "" ? "1" : ret; 9102 } 9103 } 9104 } 9105 }, 9106 9107 // Don't automatically add "px" to these possibly-unitless properties 9108 cssNumber: { 9109 animationIterationCount: true, 9110 aspectRatio: true, 9111 borderImageSlice: true, 9112 columnCount: true, 9113 flexGrow: true, 9114 flexShrink: true, 9115 fontWeight: true, 9116 gridArea: true, 9117 gridColumn: true, 9118 gridColumnEnd: true, 9119 gridColumnStart: true, 9120 gridRow: true, 9121 gridRowEnd: true, 9122 gridRowStart: true, 9123 lineHeight: true, 9124 opacity: true, 9125 order: true, 9126 orphans: true, 9127 scale: true, 9128 widows: true, 9129 zIndex: true, 9130 zoom: true, 9131 9132 // SVG-related 9133 fillOpacity: true, 9134 floodOpacity: true, 9135 stopOpacity: true, 9136 strokeMiterlimit: true, 9137 strokeOpacity: true 9138 }, 9139 9140 // Add in properties whose names you wish to fix before 9141 // setting or getting the value 9142 cssProps: {}, 9143 9144 // Get and set the style property on a DOM Node 9145 style: function( elem, name, value, extra ) { 9146 9147 // Don't set styles on text and comment nodes 9148 if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) { 9149 return; 9150 } 9151 9152 // Make sure that we're working with the right name 9153 var ret, type, hooks, 9154 origName = camelCase( name ), 9155 isCustomProp = rcustomProp.test( name ), 9156 style = elem.style; 9157 9158 // Make sure that we're working with the right name. We don't 9159 // want to query the value if it is a CSS custom property 9160 // since they are user-defined. 9161 if ( !isCustomProp ) { 9162 name = finalPropName( origName ); 9163 } 9164 9165 // Gets hook for the prefixed version, then unprefixed version 9166 hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; 9167 9168 // Check if we're setting a value 9169 if ( value !== undefined ) { 9170 type = typeof value; 9171 9172 // Convert "+=" or "-=" to relative numbers (trac-7345) 9173 if ( type === "string" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) { 9174 value = adjustCSS( elem, name, ret ); 9175 9176 // Fixes bug trac-9237 9177 type = "number"; 9178 } 9179 9180 // Make sure that null and NaN values aren't set (trac-7116) 9181 if ( value == null || value !== value ) { 9182 return; 9183 } 9184 9185 // If a number was passed in, add the unit (except for certain CSS properties) 9186 // The isCustomProp check can be removed in jQuery 4.0 when we only auto-append 9187 // "px" to a few hardcoded values. 9188 if ( type === "number" && !isCustomProp ) { 9189 value += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? "" : "px" ); 9190 } 9191 9192 // background-* props affect original clone's values 9193 if ( !support.clearCloneStyle && value === "" && name.indexOf( "background" ) === 0 ) { 9194 style[ name ] = "inherit"; 9195 } 9196 9197 // If a hook was provided, use that value, otherwise just set the specified value 9198 if ( !hooks || !( "set" in hooks ) || 9199 ( value = hooks.set( elem, value, extra ) ) !== undefined ) { 9200 9201 if ( isCustomProp ) { 9202 style.setProperty( name, value ); 9203 } else { 9204 style[ name ] = value; 9205 } 9206 } 9207 9208 } else { 9209 9210 // If a hook was provided get the non-computed value from there 9211 if ( hooks && "get" in hooks && 9212 ( ret = hooks.get( elem, false, extra ) ) !== undefined ) { 9213 9214 return ret; 9215 } 9216 9217 // Otherwise just get the value from the style object 9218 return style[ name ]; 9219 } 9220 }, 9221 9222 css: function( elem, name, extra, styles ) { 9223 var val, num, hooks, 9224 origName = camelCase( name ), 9225 isCustomProp = rcustomProp.test( name ); 9226 9227 // Make sure that we're working with the right name. We don't 9228 // want to modify the value if it is a CSS custom property 9229 // since they are user-defined. 9230 if ( !isCustomProp ) { 9231 name = finalPropName( origName ); 9232 } 9233 9234 // Try prefixed name followed by the unprefixed name 9235 hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; 9236 9237 // If a hook was provided get the computed value from there 9238 if ( hooks && "get" in hooks ) { 9239 val = hooks.get( elem, true, extra ); 9240 } 9241 9242 // Otherwise, if a way to get the computed value exists, use that 9243 if ( val === undefined ) { 9244 val = curCSS( elem, name, styles ); 9245 } 9246 9247 // Convert "normal" to computed value 9248 if ( val === "normal" && name in cssNormalTransform ) { 9249 val = cssNormalTransform[ name ]; 9250 } 9251 9252 // Make numeric if forced or a qualifier was provided and val looks numeric 9253 if ( extra === "" || extra ) { 9254 num = parseFloat( val ); 9255 return extra === true || isFinite( num ) ? num || 0 : val; 9256 } 9257 9258 return val; 9259 } 9260} ); 9261 9262jQuery.each( [ "height", "width" ], function( _i, dimension ) { 9263 jQuery.cssHooks[ dimension ] = { 9264 get: function( elem, computed, extra ) { 9265 if ( computed ) { 9266 9267 // Certain elements can have dimension info if we invisibly show them 9268 // but it must have a current display style that would benefit 9269 return rdisplayswap.test( jQuery.css( elem, "display" ) ) && 9270 9271 // Support: Safari 8+ 9272 // Table columns in Safari have non-zero offsetWidth & zero 9273 // getBoundingClientRect().width unless display is changed. 9274 // Support: IE <=11 only 9275 // Running getBoundingClientRect on a disconnected node 9276 // in IE throws an error. 9277 ( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ? 9278 swap( elem, cssShow, function() { 9279 return getWidthOrHeight( elem, dimension, extra ); 9280 } ) : 9281 getWidthOrHeight( elem, dimension, extra ); 9282 } 9283 }, 9284 9285 set: function( elem, value, extra ) { 9286 var matches, 9287 styles = getStyles( elem ), 9288 9289 // Only read styles.position if the test has a chance to fail 9290 // to avoid forcing a reflow. 9291 scrollboxSizeBuggy = !support.scrollboxSize() && 9292 styles.position === "absolute", 9293 9294 // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991) 9295 boxSizingNeeded = scrollboxSizeBuggy || extra, 9296 isBorderBox = boxSizingNeeded && 9297 jQuery.css( elem, "boxSizing", false, styles ) === "border-box", 9298 subtract = extra ? 9299 boxModelAdjustment( 9300 elem, 9301 dimension, 9302 extra, 9303 isBorderBox, 9304 styles 9305 ) : 9306 0; 9307 9308 // Account for unreliable border-box dimensions by comparing offset* to computed and 9309 // faking a content-box to get border and padding (gh-3699) 9310 if ( isBorderBox && scrollboxSizeBuggy ) { 9311 subtract -= Math.ceil( 9312 elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] - 9313 parseFloat( styles[ dimension ] ) - 9314 boxModelAdjustment( elem, dimension, "border", false, styles ) - 9315 0.5 9316 ); 9317 } 9318 9319 // Convert to pixels if value adjustment is needed 9320 if ( subtract && ( matches = rcssNum.exec( value ) ) && 9321 ( matches[ 3 ] || "px" ) !== "px" ) { 9322 9323 elem.style[ dimension ] = value; 9324 value = jQuery.css( elem, dimension ); 9325 } 9326 9327 return setPositiveNumber( elem, value, subtract ); 9328 } 9329 }; 9330} ); 9331 9332jQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft, 9333 function( elem, computed ) { 9334 if ( computed ) { 9335 return ( parseFloat( curCSS( elem, "marginLeft" ) ) || 9336 elem.getBoundingClientRect().left - 9337 swap( elem, { marginLeft: 0 }, function() { 9338 return elem.getBoundingClientRect().left; 9339 } ) 9340 ) + "px"; 9341 } 9342 } 9343); 9344 9345// These hooks are used by animate to expand properties 9346jQuery.each( { 9347 margin: "", 9348 padding: "", 9349 border: "Width" 9350}, function( prefix, suffix ) { 9351 jQuery.cssHooks[ prefix + suffix ] = { 9352 expand: function( value ) { 9353 var i = 0, 9354 expanded = {}, 9355 9356 // Assumes a single number if not a string 9357 parts = typeof value === "string" ? value.split( " " ) : [ value ]; 9358 9359 for ( ; i < 4; i++ ) { 9360 expanded[ prefix + cssExpand[ i ] + suffix ] = 9361 parts[ i ] || parts[ i - 2 ] || parts[ 0 ]; 9362 } 9363 9364 return expanded; 9365 } 9366 }; 9367 9368 if ( prefix !== "margin" ) { 9369 jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber; 9370 } 9371} ); 9372 9373jQuery.fn.extend( { 9374 css: function( name, value ) { 9375 return access( this, function( elem, name, value ) { 9376 var styles, len, 9377 map = {}, 9378 i = 0; 9379 9380 if ( Array.isArray( name ) ) { 9381 styles = getStyles( elem ); 9382 len = name.length; 9383 9384 for ( ; i < len; i++ ) { 9385 map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles ); 9386 } 9387 9388 return map; 9389 } 9390 9391 return value !== undefined ? 9392 jQuery.style( elem, name, value ) : 9393 jQuery.css( elem, name ); 9394 }, name, value, arguments.length > 1 ); 9395 } 9396} ); 9397 9398 9399function Tween( elem, options, prop, end, easing ) { 9400 return new Tween.prototype.init( elem, options, prop, end, easing ); 9401} 9402jQuery.Tween = Tween; 9403 9404Tween.prototype = { 9405 constructor: Tween, 9406 init: function( elem, options, prop, end, easing, unit ) { 9407 this.elem = elem; 9408 this.prop = prop; 9409 this.easing = easing || jQuery.easing._default; 9410 this.options = options; 9411 this.start = this.now = this.cur(); 9412 this.end = end; 9413 this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" ); 9414 }, 9415 cur: function() { 9416 var hooks = Tween.propHooks[ this.prop ]; 9417 9418 return hooks && hooks.get ? 9419 hooks.get( this ) : 9420 Tween.propHooks._default.get( this ); 9421 }, 9422 run: function( percent ) { 9423 var eased, 9424 hooks = Tween.propHooks[ this.prop ]; 9425 9426 if ( this.options.duration ) { 9427 this.pos = eased = jQuery.easing[ this.easing ]( 9428 percent, this.options.duration * percent, 0, 1, this.options.duration 9429 ); 9430 } else { 9431 this.pos = eased = percent; 9432 } 9433 this.now = ( this.end - this.start ) * eased + this.start; 9434 9435 if ( this.options.step ) { 9436 this.options.step.call( this.elem, this.now, this ); 9437 } 9438 9439 if ( hooks && hooks.set ) { 9440 hooks.set( this ); 9441 } else { 9442 Tween.propHooks._default.set( this ); 9443 } 9444 return this; 9445 } 9446}; 9447 9448Tween.prototype.init.prototype = Tween.prototype; 9449 9450Tween.propHooks = { 9451 _default: { 9452 get: function( tween ) { 9453 var result; 9454 9455 // Use a property on the element directly when it is not a DOM element, 9456 // or when there is no matching style property that exists. 9457 if ( tween.elem.nodeType !== 1 || 9458 tween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) { 9459 return tween.elem[ tween.prop ]; 9460 } 9461 9462 // Passing an empty string as a 3rd parameter to .css will automatically 9463 // attempt a parseFloat and fallback to a string if the parse fails. 9464 // Simple values such as "10px" are parsed to Float; 9465 // complex values such as "rotate(1rad)" are returned as-is. 9466 result = jQuery.css( tween.elem, tween.prop, "" ); 9467 9468 // Empty strings, null, undefined and "auto" are converted to 0. 9469 return !result || result === "auto" ? 0 : result; 9470 }, 9471 set: function( tween ) { 9472 9473 // Use step hook for back compat. 9474 // Use cssHook if its there. 9475 // Use .style if available and use plain properties where available. 9476 if ( jQuery.fx.step[ tween.prop ] ) { 9477 jQuery.fx.step[ tween.prop ]( tween ); 9478 } else if ( tween.elem.nodeType === 1 && ( 9479 jQuery.cssHooks[ tween.prop ] || 9480 tween.elem.style[ finalPropName( tween.prop ) ] != null ) ) { 9481 jQuery.style( tween.elem, tween.prop, tween.now + tween.unit ); 9482 } else { 9483 tween.elem[ tween.prop ] = tween.now; 9484 } 9485 } 9486 } 9487}; 9488 9489// Support: IE <=9 only 9490// Panic based approach to setting things on disconnected nodes 9491Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = { 9492 set: function( tween ) { 9493 if ( tween.elem.nodeType && tween.elem.parentNode ) { 9494 tween.elem[ tween.prop ] = tween.now; 9495 } 9496 } 9497}; 9498 9499jQuery.easing = { 9500 linear: function( p ) { 9501 return p; 9502 }, 9503 swing: function( p ) { 9504 return 0.5 - Math.cos( p * Math.PI ) / 2; 9505 }, 9506 _default: "swing" 9507}; 9508 9509jQuery.fx = Tween.prototype.init; 9510 9511// Back compat <1.8 extension point 9512jQuery.fx.step = {}; 9513 9514 9515 9516 9517var 9518 fxNow, inProgress, 9519 rfxtypes = /^(?:toggle|show|hide)$/, 9520 rrun = /queueHooks$/; 9521 9522function schedule() { 9523 if ( inProgress ) { 9524 if ( document.hidden === false && window.requestAnimationFrame ) { 9525 window.requestAnimationFrame( schedule ); 9526 } else { 9527 window.setTimeout( schedule, jQuery.fx.interval ); 9528 } 9529 9530 jQuery.fx.tick(); 9531 } 9532} 9533 9534// Animations created synchronously will run synchronously 9535function createFxNow() { 9536 window.setTimeout( function() { 9537 fxNow = undefined; 9538 } ); 9539 return ( fxNow = Date.now() ); 9540} 9541 9542// Generate parameters to create a standard animation 9543function genFx( type, includeWidth ) { 9544 var which, 9545 i = 0, 9546 attrs = { height: type }; 9547 9548 // If we include width, step value is 1 to do all cssExpand values, 9549 // otherwise step value is 2 to skip over Left and Right 9550 includeWidth = includeWidth ? 1 : 0; 9551 for ( ; i < 4; i += 2 - includeWidth ) { 9552 which = cssExpand[ i ]; 9553 attrs[ "margin" + which ] = attrs[ "padding" + which ] = type; 9554 } 9555 9556 if ( includeWidth ) { 9557 attrs.opacity = attrs.width = type; 9558 } 9559 9560 return attrs; 9561} 9562 9563function createTween( value, prop, animation ) { 9564 var tween, 9565 collection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ "*" ] ), 9566 index = 0, 9567 length = collection.length; 9568 for ( ; index < length; index++ ) { 9569 if ( ( tween = collection[ index ].call( animation, prop, value ) ) ) { 9570 9571 // We're done with this property 9572 return tween; 9573 } 9574 } 9575} 9576 9577function defaultPrefilter( elem, props, opts ) { 9578 var prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display, 9579 isBox = "width" in props || "height" in props, 9580 anim = this, 9581 orig = {}, 9582 style = elem.style, 9583 hidden = elem.nodeType && isHiddenWithinTree( elem ), 9584 dataShow = dataPriv.get( elem, "fxshow" ); 9585 9586 // Queue-skipping animations hijack the fx hooks 9587 if ( !opts.queue ) { 9588 hooks = jQuery._queueHooks( elem, "fx" ); 9589 if ( hooks.unqueued == null ) { 9590 hooks.unqueued = 0; 9591 oldfire = hooks.empty.fire; 9592 hooks.empty.fire = function() { 9593 if ( !hooks.unqueued ) { 9594 oldfire(); 9595 } 9596 }; 9597 } 9598 hooks.unqueued++; 9599 9600 anim.always( function() { 9601 9602 // Ensure the complete handler is called before this completes 9603 anim.always( function() { 9604 hooks.unqueued--; 9605 if ( !jQuery.queue( elem, "fx" ).length ) { 9606 hooks.empty.fire(); 9607 } 9608 } ); 9609 } ); 9610 } 9611 9612 // Detect show/hide animations 9613 for ( prop in props ) { 9614 value = props[ prop ]; 9615 if ( rfxtypes.test( value ) ) { 9616 delete props[ prop ]; 9617 toggle = toggle || value === "toggle"; 9618 if ( value === ( hidden ? "hide" : "show" ) ) { 9619 9620 // Pretend to be hidden if this is a "show" and 9621 // there is still data from a stopped show/hide 9622 if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) { 9623 hidden = true; 9624 9625 // Ignore all other no-op show/hide data 9626 } else { 9627 continue; 9628 } 9629 } 9630 orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop ); 9631 } 9632 } 9633 9634 // Bail out if this is a no-op like .hide().hide() 9635 propTween = !jQuery.isEmptyObject( props ); 9636 if ( !propTween && jQuery.isEmptyObject( orig ) ) { 9637 return; 9638 } 9639 9640 // Restrict "overflow" and "display" styles during box animations 9641 if ( isBox && elem.nodeType === 1 ) { 9642 9643 // Support: IE <=9 - 11, Edge 12 - 15 9644 // Record all 3 overflow attributes because IE does not infer the shorthand 9645 // from identically-valued overflowX and overflowY and Edge just mirrors 9646 // the overflowX value there. 9647 opts.overflow = [ style.overflow, style.overflowX, style.overflowY ]; 9648 9649 // Identify a display type, preferring old show/hide data over the CSS cascade 9650 restoreDisplay = dataShow && dataShow.display; 9651 if ( restoreDisplay == null ) { 9652 restoreDisplay = dataPriv.get( elem, "display" ); 9653 } 9654 display = jQuery.css( elem, "display" ); 9655 if ( display === "none" ) { 9656 if ( restoreDisplay ) { 9657 display = restoreDisplay; 9658 } else { 9659 9660 // Get nonempty value(s) by temporarily forcing visibility 9661 showHide( [ elem ], true ); 9662 restoreDisplay = elem.style.display || restoreDisplay; 9663 display = jQuery.css( elem, "display" ); 9664 showHide( [ elem ] ); 9665 } 9666 } 9667 9668 // Animate inline elements as inline-block 9669 if ( display === "inline" || display === "inline-block" && restoreDisplay != null ) { 9670 if ( jQuery.css( elem, "float" ) === "none" ) { 9671 9672 // Restore the original display value at the end of pure show/hide animations 9673 if ( !propTween ) { 9674 anim.done( function() { 9675 style.display = restoreDisplay; 9676 } ); 9677 if ( restoreDisplay == null ) { 9678 display = style.display; 9679 restoreDisplay = display === "none" ? "" : display; 9680 } 9681 } 9682 style.display = "inline-block"; 9683 } 9684 } 9685 } 9686 9687 if ( opts.overflow ) { 9688 style.overflow = "hidden"; 9689 anim.always( function() { 9690 style.overflow = opts.overflow[ 0 ]; 9691 style.overflowX = opts.overflow[ 1 ]; 9692 style.overflowY = opts.overflow[ 2 ]; 9693 } ); 9694 } 9695 9696 // Implement show/hide animations 9697 propTween = false; 9698 for ( prop in orig ) { 9699 9700 // General show/hide setup for this element animation 9701 if ( !propTween ) { 9702 if ( dataShow ) { 9703 if ( "hidden" in dataShow ) { 9704 hidden = dataShow.hidden; 9705 } 9706 } else { 9707 dataShow = dataPriv.access( elem, "fxshow", { display: restoreDisplay } ); 9708 } 9709 9710 // Store hidden/visible for toggle so `.stop().toggle()` "reverses" 9711 if ( toggle ) { 9712 dataShow.hidden = !hidden; 9713 } 9714 9715 // Show elements before animating them 9716 if ( hidden ) { 9717 showHide( [ elem ], true ); 9718 } 9719 9720 /* eslint-disable no-loop-func */ 9721 9722 anim.done( function() { 9723 9724 /* eslint-enable no-loop-func */ 9725 9726 // The final step of a "hide" animation is actually hiding the element 9727 if ( !hidden ) { 9728 showHide( [ elem ] ); 9729 } 9730 dataPriv.remove( elem, "fxshow" ); 9731 for ( prop in orig ) { 9732 jQuery.style( elem, prop, orig[ prop ] ); 9733 } 9734 } ); 9735 } 9736 9737 // Per-property setup 9738 propTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim ); 9739 if ( !( prop in dataShow ) ) { 9740 dataShow[ prop ] = propTween.start; 9741 if ( hidden ) { 9742 propTween.end = propTween.start; 9743 propTween.start = 0; 9744 } 9745 } 9746 } 9747} 9748 9749function propFilter( props, specialEasing ) { 9750 var index, name, easing, value, hooks; 9751 9752 // camelCase, specialEasing and expand cssHook pass 9753 for ( index in props ) { 9754 name = camelCase( index ); 9755 easing = specialEasing[ name ]; 9756 value = props[ index ]; 9757 if ( Array.isArray( value ) ) { 9758 easing = value[ 1 ]; 9759 value = props[ index ] = value[ 0 ]; 9760 } 9761 9762 if ( index !== name ) { 9763 props[ name ] = value; 9764 delete props[ index ]; 9765 } 9766 9767 hooks = jQuery.cssHooks[ name ]; 9768 if ( hooks && "expand" in hooks ) { 9769 value = hooks.expand( value ); 9770 delete props[ name ]; 9771 9772 // Not quite $.extend, this won't overwrite existing keys. 9773 // Reusing 'index' because we have the correct "name" 9774 for ( index in value ) { 9775 if ( !( index in props ) ) { 9776 props[ index ] = value[ index ]; 9777 specialEasing[ index ] = easing; 9778 } 9779 } 9780 } else { 9781 specialEasing[ name ] = easing; 9782 } 9783 } 9784} 9785 9786function Animation( elem, properties, options ) { 9787 var result, 9788 stopped, 9789 index = 0, 9790 length = Animation.prefilters.length, 9791 deferred = jQuery.Deferred().always( function() { 9792 9793 // Don't match elem in the :animated selector 9794 delete tick.elem; 9795 } ), 9796 tick = function() { 9797 if ( stopped ) { 9798 return false; 9799 } 9800 var currentTime = fxNow || createFxNow(), 9801 remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ), 9802 9803 // Support: Android 2.3 only 9804 // Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (trac-12497) 9805 temp = remaining / animation.duration || 0, 9806 percent = 1 - temp, 9807 index = 0, 9808 length = animation.tweens.length; 9809 9810 for ( ; index < length; index++ ) { 9811 animation.tweens[ index ].run( percent ); 9812 } 9813 9814 deferred.notifyWith( elem, [ animation, percent, remaining ] ); 9815 9816 // If there's more to do, yield 9817 if ( percent < 1 && length ) { 9818 return remaining; 9819 } 9820 9821 // If this was an empty animation, synthesize a final progress notification 9822 if ( !length ) { 9823 deferred.notifyWith( elem, [ animation, 1, 0 ] ); 9824 } 9825 9826 // Resolve the animation and report its conclusion 9827 deferred.resolveWith( elem, [ animation ] ); 9828 return false; 9829 }, 9830 animation = deferred.promise( { 9831 elem: elem, 9832 props: jQuery.extend( {}, properties ), 9833 opts: jQuery.extend( true, { 9834 specialEasing: {}, 9835 easing: jQuery.easing._default 9836 }, options ), 9837 originalProperties: properties, 9838 originalOptions: options, 9839 startTime: fxNow || createFxNow(), 9840 duration: options.duration, 9841 tweens: [], 9842 createTween: function( prop, end ) { 9843 var tween = jQuery.Tween( elem, animation.opts, prop, end, 9844 animation.opts.specialEasing[ prop ] || animation.opts.easing ); 9845 animation.tweens.push( tween ); 9846 return tween; 9847 }, 9848 stop: function( gotoEnd ) { 9849 var index = 0, 9850 9851 // If we are going to the end, we want to run all the tweens 9852 // otherwise we skip this part 9853 length = gotoEnd ? animation.tweens.length : 0; 9854 if ( stopped ) { 9855 return this; 9856 } 9857 stopped = true; 9858 for ( ; index < length; index++ ) { 9859 animation.tweens[ index ].run( 1 ); 9860 } 9861 9862 // Resolve when we played the last frame; otherwise, reject 9863 if ( gotoEnd ) { 9864 deferred.notifyWith( elem, [ animation, 1, 0 ] ); 9865 deferred.resolveWith( elem, [ animation, gotoEnd ] ); 9866 } else { 9867 deferred.rejectWith( elem, [ animation, gotoEnd ] ); 9868 } 9869 return this; 9870 } 9871 } ), 9872 props = animation.props; 9873 9874 propFilter( props, animation.opts.specialEasing ); 9875 9876 for ( ; index < length; index++ ) { 9877 result = Animation.prefilters[ index ].call( animation, elem, props, animation.opts ); 9878 if ( result ) { 9879 if ( isFunction( result.stop ) ) { 9880 jQuery._queueHooks( animation.elem, animation.opts.queue ).stop = 9881 result.stop.bind( result ); 9882 } 9883 return result; 9884 } 9885 } 9886 9887 jQuery.map( props, createTween, animation ); 9888 9889 if ( isFunction( animation.opts.start ) ) { 9890 animation.opts.start.call( elem, animation ); 9891 } 9892 9893 // Attach callbacks from options 9894 animation 9895 .progress( animation.opts.progress ) 9896 .done( animation.opts.done, animation.opts.complete ) 9897 .fail( animation.opts.fail ) 9898 .always( animation.opts.always ); 9899 9900 jQuery.fx.timer( 9901 jQuery.extend( tick, { 9902 elem: elem, 9903 anim: animation, 9904 queue: animation.opts.queue 9905 } ) 9906 ); 9907 9908 return animation; 9909} 9910 9911jQuery.Animation = jQuery.extend( Animation, { 9912 9913 tweeners: { 9914 "*": [ function( prop, value ) { 9915 var tween = this.createTween( prop, value ); 9916 adjustCSS( tween.elem, prop, rcssNum.exec( value ), tween ); 9917 return tween; 9918 } ] 9919 }, 9920 9921 tweener: function( props, callback ) { 9922 if ( isFunction( props ) ) { 9923 callback = props; 9924 props = [ "*" ]; 9925 } else { 9926 props = props.match( rnothtmlwhite ); 9927 } 9928 9929 var prop, 9930 index = 0, 9931 length = props.length; 9932 9933 for ( ; index < length; index++ ) { 9934 prop = props[ index ]; 9935 Animation.tweeners[ prop ] = Animation.tweeners[ prop ] || []; 9936 Animation.tweeners[ prop ].unshift( callback ); 9937 } 9938 }, 9939 9940 prefilters: [ defaultPrefilter ], 9941 9942 prefilter: function( callback, prepend ) { 9943 if ( prepend ) { 9944 Animation.prefilters.unshift( callback ); 9945 } else { 9946 Animation.prefilters.push( callback ); 9947 } 9948 } 9949} ); 9950 9951jQuery.speed = function( speed, easing, fn ) { 9952 var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : { 9953 complete: fn || !fn && easing || 9954 isFunction( speed ) && speed, 9955 duration: speed, 9956 easing: fn && easing || easing && !isFunction( easing ) && easing 9957 }; 9958 9959 // Go to the end state if fx are off 9960 if ( jQuery.fx.off ) { 9961 opt.duration = 0; 9962 9963 } else { 9964 if ( typeof opt.duration !== "number" ) { 9965 if ( opt.duration in jQuery.fx.speeds ) { 9966 opt.duration = jQuery.fx.speeds[ opt.duration ]; 9967 9968 } else { 9969 opt.duration = jQuery.fx.speeds._default; 9970 } 9971 } 9972 } 9973 9974 // Normalize opt.queue - true/undefined/null -> "fx" 9975 if ( opt.queue == null || opt.queue === true ) { 9976 opt.queue = "fx"; 9977 } 9978 9979 // Queueing 9980 opt.old = opt.complete; 9981 9982 opt.complete = function() { 9983 if ( isFunction( opt.old ) ) { 9984 opt.old.call( this ); 9985 } 9986 9987 if ( opt.queue ) { 9988 jQuery.dequeue( this, opt.queue ); 9989 } 9990 }; 9991 9992 return opt; 9993}; 9994 9995jQuery.fn.extend( { 9996 fadeTo: function( speed, to, easing, callback ) { 9997 9998 // Show any hidden elements after setting opacity to 0 9999 return this.filter( isHiddenWithinTree ).css( "opacity", 0 ).show() 10000 10001 // Animate to the value specified 10002 .end().animate( { opacity: to }, speed, easing, callback ); 10003 }, 10004 animate: function( prop, speed, easing, callback ) { 10005 var empty = jQuery.isEmptyObject( prop ), 10006 optall = jQuery.speed( speed, easing, callback ), 10007 doAnimation = function() { 10008 10009 // Operate on a copy of prop so per-property easing won't be lost 10010 var anim = Animation( this, jQuery.extend( {}, prop ), optall ); 10011 10012 // Empty animations, or finishing resolves immediately 10013 if ( empty || dataPriv.get( this, "finish" ) ) { 10014 anim.stop( true ); 10015 } 10016 }; 10017 10018 doAnimation.finish = doAnimation; 10019 10020 return empty || optall.queue === false ? 10021 this.each( doAnimation ) : 10022 this.queue( optall.queue, doAnimation ); 10023 }, 10024 stop: function( type, clearQueue, gotoEnd ) { 10025 var stopQueue = function( hooks ) { 10026 var stop = hooks.stop; 10027 delete hooks.stop; 10028 stop( gotoEnd ); 10029 }; 10030 10031 if ( typeof type !== "string" ) { 10032 gotoEnd = clearQueue; 10033 clearQueue = type; 10034 type = undefined; 10035 } 10036 if ( clearQueue ) { 10037 this.queue( type || "fx", [] ); 10038 } 10039 10040 return this.each( function() { 10041 var dequeue = true, 10042 index = type != null && type + "queueHooks", 10043 timers = jQuery.timers, 10044 data = dataPriv.get( this ); 10045 10046 if ( index ) { 10047 if ( data[ index ] && data[ index ].stop ) { 10048 stopQueue( data[ index ] ); 10049 } 10050 } else { 10051 for ( index in data ) { 10052 if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) { 10053 stopQueue( data[ index ] ); 10054 } 10055 } 10056 } 10057 10058 for ( index = timers.length; index--; ) { 10059 if ( timers[ index ].elem === this && 10060 ( type == null || timers[ index ].queue === type ) ) { 10061 10062 timers[ index ].anim.stop( gotoEnd ); 10063 dequeue = false; 10064 timers.splice( index, 1 ); 10065 } 10066 } 10067 10068 // Start the next in the queue if the last step wasn't forced. 10069 // Timers currently will call their complete callbacks, which 10070 // will dequeue but only if they were gotoEnd. 10071 if ( dequeue || !gotoEnd ) { 10072 jQuery.dequeue( this, type ); 10073 } 10074 } ); 10075 }, 10076 finish: function( type ) { 10077 if ( type !== false ) { 10078 type = type || "fx"; 10079 } 10080 return this.each( function() { 10081 var index, 10082 data = dataPriv.get( this ), 10083 queue = data[ type + "queue" ], 10084 hooks = data[ type + "queueHooks" ], 10085 timers = jQuery.timers, 10086 length = queue ? queue.length : 0; 10087 10088 // Enable finishing flag on private data 10089 data.finish = true; 10090 10091 // Empty the queue first 10092 jQuery.queue( this, type, [] ); 10093 10094 if ( hooks && hooks.stop ) { 10095 hooks.stop.call( this, true ); 10096 } 10097 10098 // Look for any active animations, and finish them 10099 for ( index = timers.length; index--; ) { 10100 if ( timers[ index ].elem === this && timers[ index ].queue === type ) { 10101 timers[ index ].anim.stop( true ); 10102 timers.splice( index, 1 ); 10103 } 10104 } 10105 10106 // Look for any animations in the old queue and finish them 10107 for ( index = 0; index < length; index++ ) { 10108 if ( queue[ index ] && queue[ index ].finish ) { 10109 queue[ index ].finish.call( this ); 10110 } 10111 } 10112 10113 // Turn off finishing flag 10114 delete data.finish; 10115 } ); 10116 } 10117} ); 10118 10119jQuery.each( [ "toggle", "show", "hide" ], function( _i, name ) { 10120 var cssFn = jQuery.fn[ name ]; 10121 jQuery.fn[ name ] = function( speed, easing, callback ) { 10122 return speed == null || typeof speed === "boolean" ? 10123 cssFn.apply( this, arguments ) : 10124 this.animate( genFx( name, true ), speed, easing, callback ); 10125 }; 10126} ); 10127 10128// Generate shortcuts for custom animations 10129jQuery.each( { 10130 slideDown: genFx( "show" ), 10131 slideUp: genFx( "hide" ), 10132 slideToggle: genFx( "toggle" ), 10133 fadeIn: { opacity: "show" }, 10134 fadeOut: { opacity: "hide" }, 10135 fadeToggle: { opacity: "toggle" } 10136}, function( name, props ) { 10137 jQuery.fn[ name ] = function( speed, easing, callback ) { 10138 return this.animate( props, speed, easing, callback ); 10139 }; 10140} ); 10141 10142jQuery.timers = []; 10143jQuery.fx.tick = function() { 10144 var timer, 10145 i = 0, 10146 timers = jQuery.timers; 10147 10148 fxNow = Date.now(); 10149 10150 for ( ; i < timers.length; i++ ) { 10151 timer = timers[ i ]; 10152 10153 // Run the timer and safely remove it when done (allowing for external removal) 10154 if ( !timer() && timers[ i ] === timer ) { 10155 timers.splice( i--, 1 ); 10156 } 10157 } 10158 10159 if ( !timers.length ) { 10160 jQuery.fx.stop(); 10161 } 10162 fxNow = undefined; 10163}; 10164 10165jQuery.fx.timer = function( timer ) { 10166 jQuery.timers.push( timer ); 10167 jQuery.fx.start(); 10168}; 10169 10170jQuery.fx.interval = 13; 10171jQuery.fx.start = function() { 10172 if ( inProgress ) { 10173 return; 10174 } 10175 10176 inProgress = true; 10177 schedule(); 10178}; 10179 10180jQuery.fx.stop = function() { 10181 inProgress = null; 10182}; 10183 10184jQuery.fx.speeds = { 10185 slow: 600, 10186 fast: 200, 10187 10188 // Default speed 10189 _default: 400 10190}; 10191 10192 10193// Based off of the plugin by Clint Helfers, with permission. 10194jQuery.fn.delay = function( time, type ) { 10195 time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time; 10196 type = type || "fx"; 10197 10198 return this.queue( type, function( next, hooks ) { 10199 var timeout = window.setTimeout( next, time ); 10200 hooks.stop = function() { 10201 window.clearTimeout( timeout ); 10202 }; 10203 } ); 10204}; 10205 10206 10207( function() { 10208 var input = document.createElement( "input" ), 10209 select = document.createElement( "select" ), 10210 opt = select.appendChild( document.createElement( "option" ) ); 10211 10212 input.type = "checkbox"; 10213 10214 // Support: Android <=4.3 only 10215 // Default value for a checkbox should be "on" 10216 support.checkOn = input.value !== ""; 10217 10218 // Support: IE <=11 only 10219 // Must access selectedIndex to make default options select 10220 support.optSelected = opt.selected; 10221 10222 // Support: IE <=11 only 10223 // An input loses its value after becoming a radio 10224 input = document.createElement( "input" ); 10225 input.value = "t"; 10226 input.type = "radio"; 10227 support.radioValue = input.value === "t"; 10228} )(); 10229 10230 10231var boolHook, 10232 attrHandle = jQuery.expr.attrHandle; 10233 10234jQuery.fn.extend( { 10235 attr: function( name, value ) { 10236 return access( this, jQuery.attr, name, value, arguments.length > 1 ); 10237 }, 10238 10239 removeAttr: function( name ) { 10240 return this.each( function() { 10241 jQuery.removeAttr( this, name ); 10242 } ); 10243 } 10244} ); 10245 10246jQuery.extend( { 10247 attr: function( elem, name, value ) { 10248 var ret, hooks, 10249 nType = elem.nodeType; 10250 10251 // Don't get/set attributes on text, comment and attribute nodes 10252 if ( nType === 3 || nType === 8 || nType === 2 ) { 10253 return; 10254 } 10255 10256 // Fallback to prop when attributes are not supported 10257 if ( typeof elem.getAttribute === "undefined" ) { 10258 return jQuery.prop( elem, name, value ); 10259 } 10260 10261 // Attribute hooks are determined by the lowercase version 10262 // Grab necessary hook if one is defined 10263 if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { 10264 hooks = jQuery.attrHooks[ name.toLowerCase() ] || 10265 ( jQuery.expr.match.bool.test( name ) ? boolHook : undefined ); 10266 } 10267 10268 if ( value !== undefined ) { 10269 if ( value === null ) { 10270 jQuery.removeAttr( elem, name ); 10271 return; 10272 } 10273 10274 if ( hooks && "set" in hooks && 10275 ( ret = hooks.set( elem, value, name ) ) !== undefined ) { 10276 return ret; 10277 } 10278 10279 elem.setAttribute( name, value + "" ); 10280 return value; 10281 } 10282 10283 if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { 10284 return ret; 10285 } 10286 10287 ret = jQuery.find.attr( elem, name ); 10288 10289 // Non-existent attributes return null, we normalize to undefined 10290 return ret == null ? undefined : ret; 10291 }, 10292 10293 attrHooks: { 10294 type: { 10295 set: function( elem, value ) { 10296 if ( !support.radioValue && value === "radio" && 10297 nodeName( elem, "input" ) ) { 10298 var val = elem.value; 10299 elem.setAttribute( "type", value ); 10300 if ( val ) { 10301 elem.value = val; 10302 } 10303 return value; 10304 } 10305 } 10306 } 10307 }, 10308 10309 removeAttr: function( elem, value ) { 10310 var name, 10311 i = 0, 10312 10313 // Attribute names can contain non-HTML whitespace characters 10314 // https://html.spec.whatwg.org/multipage/syntax.html#attributes-2 10315 attrNames = value && value.match( rnothtmlwhite ); 10316 10317 if ( attrNames && elem.nodeType === 1 ) { 10318 while ( ( name = attrNames[ i++ ] ) ) { 10319 elem.removeAttribute( name ); 10320 } 10321 } 10322 } 10323} ); 10324 10325// Hooks for boolean attributes 10326boolHook = { 10327 set: function( elem, value, name ) { 10328 if ( value === false ) { 10329 10330 // Remove boolean attributes when set to false 10331 jQuery.removeAttr( elem, name ); 10332 } else { 10333 elem.setAttribute( name, name ); 10334 } 10335 return name; 10336 } 10337}; 10338 10339jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( _i, name ) { 10340 var getter = attrHandle[ name ] || jQuery.find.attr; 10341 10342 attrHandle[ name ] = function( elem, name, isXML ) { 10343 var ret, handle, 10344 lowercaseName = name.toLowerCase(); 10345 10346 if ( !isXML ) { 10347 10348 // Avoid an infinite loop by temporarily removing this function from the getter 10349 handle = attrHandle[ lowercaseName ]; 10350 attrHandle[ lowercaseName ] = ret; 10351 ret = getter( elem, name, isXML ) != null ? 10352 lowercaseName : 10353 null; 10354 attrHandle[ lowercaseName ] = handle; 10355 } 10356 return ret; 10357 }; 10358} ); 10359 10360 10361 10362 10363var rfocusable = /^(?:input|select|textarea|button)$/i, 10364 rclickable = /^(?:a|area)$/i; 10365 10366jQuery.fn.extend( { 10367 prop: function( name, value ) { 10368 return access( this, jQuery.prop, name, value, arguments.length > 1 ); 10369 }, 10370 10371 removeProp: function( name ) { 10372 return this.each( function() { 10373 delete this[ jQuery.propFix[ name ] || name ]; 10374 } ); 10375 } 10376} ); 10377 10378jQuery.extend( { 10379 prop: function( elem, name, value ) { 10380 var ret, hooks, 10381 nType = elem.nodeType; 10382 10383 // Don't get/set properties on text, comment and attribute nodes 10384 if ( nType === 3 || nType === 8 || nType === 2 ) { 10385 return; 10386 } 10387 10388 if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { 10389 10390 // Fix name and attach hooks 10391 name = jQuery.propFix[ name ] || name; 10392 hooks = jQuery.propHooks[ name ]; 10393 } 10394 10395 if ( value !== undefined ) { 10396 if ( hooks && "set" in hooks && 10397 ( ret = hooks.set( elem, value, name ) ) !== undefined ) { 10398 return ret; 10399 } 10400 10401 return ( elem[ name ] = value ); 10402 } 10403 10404 if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { 10405 return ret; 10406 } 10407 10408 return elem[ name ]; 10409 }, 10410 10411 propHooks: { 10412 tabIndex: { 10413 get: function( elem ) { 10414 10415 // Support: IE <=9 - 11 only 10416 // elem.tabIndex doesn't always return the 10417 // correct value when it hasn't been explicitly set 10418 // Use proper attribute retrieval (trac-12072) 10419 var tabindex = jQuery.find.attr( elem, "tabindex" ); 10420 10421 if ( tabindex ) { 10422 return parseInt( tabindex, 10 ); 10423 } 10424 10425 if ( 10426 rfocusable.test( elem.nodeName ) || 10427 rclickable.test( elem.nodeName ) && 10428 elem.href 10429 ) { 10430 return 0; 10431 } 10432 10433 return -1; 10434 } 10435 } 10436 }, 10437 10438 propFix: { 10439 "for": "htmlFor", 10440 "class": "className" 10441 } 10442} ); 10443 10444// Support: IE <=11 only 10445// Accessing the selectedIndex property 10446// forces the browser to respect setting selected 10447// on the option 10448// The getter ensures a default option is selected 10449// when in an optgroup 10450// eslint rule "no-unused-expressions" is disabled for this code 10451// since it considers such accessions noop 10452if ( !support.optSelected ) { 10453 jQuery.propHooks.selected = { 10454 get: function( elem ) { 10455 10456 /* eslint no-unused-expressions: "off" */ 10457 10458 var parent = elem.parentNode; 10459 if ( parent && parent.parentNode ) { 10460 parent.parentNode.selectedIndex; 10461 } 10462 return null; 10463 }, 10464 set: function( elem ) { 10465 10466 /* eslint no-unused-expressions: "off" */ 10467 10468 var parent = elem.parentNode; 10469 if ( parent ) { 10470 parent.selectedIndex; 10471 10472 if ( parent.parentNode ) { 10473 parent.parentNode.selectedIndex; 10474 } 10475 } 10476 } 10477 }; 10478} 10479 10480jQuery.each( [ 10481 "tabIndex", 10482 "readOnly", 10483 "maxLength", 10484 "cellSpacing", 10485 "cellPadding", 10486 "rowSpan", 10487 "colSpan", 10488 "useMap", 10489 "frameBorder", 10490 "contentEditable" 10491], function() { 10492 jQuery.propFix[ this.toLowerCase() ] = this; 10493} ); 10494 10495 10496 10497 10498 // Strip and collapse whitespace according to HTML spec 10499 // https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace 10500 function stripAndCollapse( value ) { 10501 var tokens = value.match( rnothtmlwhite ) || []; 10502 return tokens.join( " " ); 10503 } 10504 10505 10506function getClass( elem ) { 10507 return elem.getAttribute && elem.getAttribute( "class" ) || ""; 10508} 10509 10510function classesToArray( value ) { 10511 if ( Array.isArray( value ) ) { 10512 return value; 10513 } 10514 if ( typeof value === "string" ) { 10515 return value.match( rnothtmlwhite ) || []; 10516 } 10517 return []; 10518} 10519 10520jQuery.fn.extend( { 10521 addClass: function( value ) { 10522 var classNames, cur, curValue, className, i, finalValue; 10523 10524 if ( isFunction( value ) ) { 10525 return this.each( function( j ) { 10526 jQuery( this ).addClass( value.call( this, j, getClass( this ) ) ); 10527 } ); 10528 } 10529 10530 classNames = classesToArray( value ); 10531 10532 if ( classNames.length ) { 10533 return this.each( function() { 10534 curValue = getClass( this ); 10535 cur = this.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); 10536 10537 if ( cur ) { 10538 for ( i = 0; i < classNames.length; i++ ) { 10539 className = classNames[ i ]; 10540 if ( cur.indexOf( " " + className + " " ) < 0 ) { 10541 cur += className + " "; 10542 } 10543 } 10544 10545 // Only assign if different to avoid unneeded rendering. 10546 finalValue = stripAndCollapse( cur ); 10547 if ( curValue !== finalValue ) { 10548 this.setAttribute( "class", finalValue ); 10549 } 10550 } 10551 } ); 10552 } 10553 10554 return this; 10555 }, 10556 10557 removeClass: function( value ) { 10558 var classNames, cur, curValue, className, i, finalValue; 10559 10560 if ( isFunction( value ) ) { 10561 return this.each( function( j ) { 10562 jQuery( this ).removeClass( value.call( this, j, getClass( this ) ) ); 10563 } ); 10564 } 10565 10566 if ( !arguments.length ) { 10567 return this.attr( "class", "" ); 10568 } 10569 10570 classNames = classesToArray( value ); 10571 10572 if ( classNames.length ) { 10573 return this.each( function() { 10574 curValue = getClass( this ); 10575 10576 // This expression is here for better compressibility (see addClass) 10577 cur = this.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); 10578 10579 if ( cur ) { 10580 for ( i = 0; i < classNames.length; i++ ) { 10581 className = classNames[ i ]; 10582 10583 // Remove *all* instances 10584 while ( cur.indexOf( " " + className + " " ) > -1 ) { 10585 cur = cur.replace( " " + className + " ", " " ); 10586 } 10587 } 10588 10589 // Only assign if different to avoid unneeded rendering. 10590 finalValue = stripAndCollapse( cur ); 10591 if ( curValue !== finalValue ) { 10592 this.setAttribute( "class", finalValue ); 10593 } 10594 } 10595 } ); 10596 } 10597 10598 return this; 10599 }, 10600 10601 toggleClass: function( value, stateVal ) { 10602 var classNames, className, i, self, 10603 type = typeof value, 10604 isValidValue = type === "string" || Array.isArray( value ); 10605 10606 if ( isFunction( value ) ) { 10607 return this.each( function( i ) { 10608 jQuery( this ).toggleClass( 10609 value.call( this, i, getClass( this ), stateVal ), 10610 stateVal 10611 ); 10612 } ); 10613 } 10614 10615 if ( typeof stateVal === "boolean" && isValidValue ) { 10616 return stateVal ? this.addClass( value ) : this.removeClass( value ); 10617 } 10618 10619 classNames = classesToArray( value ); 10620 10621 return this.each( function() { 10622 if ( isValidValue ) { 10623 10624 // Toggle individual class names 10625 self = jQuery( this ); 10626 10627 for ( i = 0; i < classNames.length; i++ ) { 10628 className = classNames[ i ]; 10629 10630 // Check each className given, space separated list 10631 if ( self.hasClass( className ) ) { 10632 self.removeClass( className ); 10633 } else { 10634 self.addClass( className ); 10635 } 10636 } 10637 10638 // Toggle whole class name 10639 } else if ( value === undefined || type === "boolean" ) { 10640 className = getClass( this ); 10641 if ( className ) { 10642 10643 // Store className if set 10644 dataPriv.set( this, "__className__", className ); 10645 } 10646 10647 // If the element has a class name or if we're passed `false`, 10648 // then remove the whole classname (if there was one, the above saved it). 10649 // Otherwise bring back whatever was previously saved (if anything), 10650 // falling back to the empty string if nothing was stored. 10651 if ( this.setAttribute ) { 10652 this.setAttribute( "class", 10653 className || value === false ? 10654 "" : 10655 dataPriv.get( this, "__className__" ) || "" 10656 ); 10657 } 10658 } 10659 } ); 10660 }, 10661 10662 hasClass: function( selector ) { 10663 var className, elem, 10664 i = 0; 10665 10666 className = " " + selector + " "; 10667 while ( ( elem = this[ i++ ] ) ) { 10668 if ( elem.nodeType === 1 && 10669 ( " " + stripAndCollapse( getClass( elem ) ) + " " ).indexOf( className ) > -1 ) { 10670 return true; 10671 } 10672 } 10673 10674 return false; 10675 } 10676} ); 10677 10678 10679 10680 10681var rreturn = /\r/g; 10682 10683jQuery.fn.extend( { 10684 val: function( value ) { 10685 var hooks, ret, valueIsFunction, 10686 elem = this[ 0 ]; 10687 10688 if ( !arguments.length ) { 10689 if ( elem ) { 10690 hooks = jQuery.valHooks[ elem.type ] || 10691 jQuery.valHooks[ elem.nodeName.toLowerCase() ]; 10692 10693 if ( hooks && 10694 "get" in hooks && 10695 ( ret = hooks.get( elem, "value" ) ) !== undefined 10696 ) { 10697 return ret; 10698 } 10699 10700 ret = elem.value; 10701 10702 // Handle most common string cases 10703 if ( typeof ret === "string" ) { 10704 return ret.replace( rreturn, "" ); 10705 } 10706 10707 // Handle cases where value is null/undef or number 10708 return ret == null ? "" : ret; 10709 } 10710 10711 return; 10712 } 10713 10714 valueIsFunction = isFunction( value ); 10715 10716 return this.each( function( i ) { 10717 var val; 10718 10719 if ( this.nodeType !== 1 ) { 10720 return; 10721 } 10722 10723 if ( valueIsFunction ) { 10724 val = value.call( this, i, jQuery( this ).val() ); 10725 } else { 10726 val = value; 10727 } 10728 10729 // Treat null/undefined as ""; convert numbers to string 10730 if ( val == null ) { 10731 val = ""; 10732 10733 } else if ( typeof val === "number" ) { 10734 val += ""; 10735 10736 } else if ( Array.isArray( val ) ) { 10737 val = jQuery.map( val, function( value ) { 10738 return value == null ? "" : value + ""; 10739 } ); 10740 } 10741 10742 hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ]; 10743 10744 // If set returns undefined, fall back to normal setting 10745 if ( !hooks || !( "set" in hooks ) || hooks.set( this, val, "value" ) === undefined ) { 10746 this.value = val; 10747 } 10748 } ); 10749 } 10750} ); 10751 10752jQuery.extend( { 10753 valHooks: { 10754 option: { 10755 get: function( elem ) { 10756 10757 var val = jQuery.find.attr( elem, "value" ); 10758 return val != null ? 10759 val : 10760 10761 // Support: IE <=10 - 11 only 10762 // option.text throws exceptions (trac-14686, trac-14858) 10763 // Strip and collapse whitespace 10764 // https://html.spec.whatwg.org/#strip-and-collapse-whitespace 10765 stripAndCollapse( jQuery.text( elem ) ); 10766 } 10767 }, 10768 select: { 10769 get: function( elem ) { 10770 var value, option, i, 10771 options = elem.options, 10772 index = elem.selectedIndex, 10773 one = elem.type === "select-one", 10774 values = one ? null : [], 10775 max = one ? index + 1 : options.length; 10776 10777 if ( index < 0 ) { 10778 i = max; 10779 10780 } else { 10781 i = one ? index : 0; 10782 } 10783 10784 // Loop through all the selected options 10785 for ( ; i < max; i++ ) { 10786 option = options[ i ]; 10787 10788 // Support: IE <=9 only 10789 // IE8-9 doesn't update selected after form reset (trac-2551) 10790 if ( ( option.selected || i === index ) && 10791 10792 // Don't return options that are disabled or in a disabled optgroup 10793 !option.disabled && 10794 ( !option.parentNode.disabled || 10795 !nodeName( option.parentNode, "optgroup" ) ) ) { 10796 10797 // Get the specific value for the option 10798 value = jQuery( option ).val(); 10799 10800 // We don't need an array for one selects 10801 if ( one ) { 10802 return value; 10803 } 10804 10805 // Multi-Selects return an array 10806 values.push( value ); 10807 } 10808 } 10809 10810 return values; 10811 }, 10812 10813 set: function( elem, value ) { 10814 var optionSet, option, 10815 options = elem.options, 10816 values = jQuery.makeArray( value ), 10817 i = options.length; 10818 10819 while ( i-- ) { 10820 option = options[ i ]; 10821 10822 /* eslint-disable no-cond-assign */ 10823 10824 if ( option.selected = 10825 jQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1 10826 ) { 10827 optionSet = true; 10828 } 10829 10830 /* eslint-enable no-cond-assign */ 10831 } 10832 10833 // Force browsers to behave consistently when non-matching value is set 10834 if ( !optionSet ) { 10835 elem.selectedIndex = -1; 10836 } 10837 return values; 10838 } 10839 } 10840 } 10841} ); 10842 10843// Radios and checkboxes getter/setter 10844jQuery.each( [ "radio", "checkbox" ], function() { 10845 jQuery.valHooks[ this ] = { 10846 set: function( elem, value ) { 10847 if ( Array.isArray( value ) ) { 10848 return ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 ); 10849 } 10850 } 10851 }; 10852 if ( !support.checkOn ) { 10853 jQuery.valHooks[ this ].get = function( elem ) { 10854 return elem.getAttribute( "value" ) === null ? "on" : elem.value; 10855 }; 10856 } 10857} ); 10858 10859 10860 10861 10862// Return jQuery for attributes-only inclusion 10863var location = window.location; 10864 10865var nonce = { guid: Date.now() }; 10866 10867var rquery = ( /\?/ ); 10868 10869 10870 10871// Cross-browser xml parsing 10872jQuery.parseXML = function( data ) { 10873 var xml, parserErrorElem; 10874 if ( !data || typeof data !== "string" ) { 10875 return null; 10876 } 10877 10878 // Support: IE 9 - 11 only 10879 // IE throws on parseFromString with invalid input. 10880 try { 10881 xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" ); 10882 } catch ( e ) {} 10883 10884 parserErrorElem = xml && xml.getElementsByTagName( "parsererror" )[ 0 ]; 10885 if ( !xml || parserErrorElem ) { 10886 jQuery.error( "Invalid XML: " + ( 10887 parserErrorElem ? 10888 jQuery.map( parserErrorElem.childNodes, function( el ) { 10889 return el.textContent; 10890 } ).join( "\n" ) : 10891 data 10892 ) ); 10893 } 10894 return xml; 10895}; 10896 10897 10898var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/, 10899 stopPropagationCallback = function( e ) { 10900 e.stopPropagation(); 10901 }; 10902 10903jQuery.extend( jQuery.event, { 10904 10905 trigger: function( event, data, elem, onlyHandlers ) { 10906 10907 var i, cur, tmp, bubbleType, ontype, handle, special, lastElement, 10908 eventPath = [ elem || document ], 10909 type = hasOwn.call( event, "type" ) ? event.type : event, 10910 namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split( "." ) : []; 10911 10912 cur = lastElement = tmp = elem = elem || document; 10913 10914 // Don't do events on text and comment nodes 10915 if ( elem.nodeType === 3 || elem.nodeType === 8 ) { 10916 return; 10917 } 10918 10919 // focus/blur morphs to focusin/out; ensure we're not firing them right now 10920 if ( rfocusMorph.test( type + jQuery.event.triggered ) ) { 10921 return; 10922 } 10923 10924 if ( type.indexOf( "." ) > -1 ) { 10925 10926 // Namespaced trigger; create a regexp to match event type in handle() 10927 namespaces = type.split( "." ); 10928 type = namespaces.shift(); 10929 namespaces.sort(); 10930 } 10931 ontype = type.indexOf( ":" ) < 0 && "on" + type; 10932 10933 // Caller can pass in a jQuery.Event object, Object, or just an event type string 10934 event = event[ jQuery.expando ] ? 10935 event : 10936 new jQuery.Event( type, typeof event === "object" && event ); 10937 10938 // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true) 10939 event.isTrigger = onlyHandlers ? 2 : 3; 10940 event.namespace = namespaces.join( "." ); 10941 event.rnamespace = event.namespace ? 10942 new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) : 10943 null; 10944 10945 // Clean up the event in case it is being reused 10946 event.result = undefined; 10947 if ( !event.target ) { 10948 event.target = elem; 10949 } 10950 10951 // Clone any incoming data and prepend the event, creating the handler arg list 10952 data = data == null ? 10953 [ event ] : 10954 jQuery.makeArray( data, [ event ] ); 10955 10956 // Allow special events to draw outside the lines 10957 special = jQuery.event.special[ type ] || {}; 10958 if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) { 10959 return; 10960 } 10961 10962 // Determine event propagation path in advance, per W3C events spec (trac-9951) 10963 // Bubble up to document, then to window; watch for a global ownerDocument var (trac-9724) 10964 if ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) { 10965 10966 bubbleType = special.delegateType || type; 10967 if ( !rfocusMorph.test( bubbleType + type ) ) { 10968 cur = cur.parentNode; 10969 } 10970 for ( ; cur; cur = cur.parentNode ) { 10971 eventPath.push( cur ); 10972 tmp = cur; 10973 } 10974 10975 // Only add window if we got to document (e.g., not plain obj or detached DOM) 10976 if ( tmp === ( elem.ownerDocument || document ) ) { 10977 eventPath.push( tmp.defaultView || tmp.parentWindow || window ); 10978 } 10979 } 10980 10981 // Fire handlers on the event path 10982 i = 0; 10983 while ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) { 10984 lastElement = cur; 10985 event.type = i > 1 ? 10986 bubbleType : 10987 special.bindType || type; 10988 10989 // jQuery handler 10990 handle = ( dataPriv.get( cur, "events" ) || Object.create( null ) )[ event.type ] && 10991 dataPriv.get( cur, "handle" ); 10992 if ( handle ) { 10993 handle.apply( cur, data ); 10994 } 10995 10996 // Native handler 10997 handle = ontype && cur[ ontype ]; 10998 if ( handle && handle.apply && acceptData( cur ) ) { 10999 event.result = handle.apply( cur, data ); 11000 if ( event.result === false ) { 11001 event.preventDefault(); 11002 } 11003 } 11004 } 11005 event.type = type; 11006 11007 // If nobody prevented the default action, do it now 11008 if ( !onlyHandlers && !event.isDefaultPrevented() ) { 11009 11010 if ( ( !special._default || 11011 special._default.apply( eventPath.pop(), data ) === false ) && 11012 acceptData( elem ) ) { 11013 11014 // Call a native DOM method on the target with the same name as the event. 11015 // Don't do default actions on window, that's where global variables be (trac-6170) 11016 if ( ontype && isFunction( elem[ type ] ) && !isWindow( elem ) ) { 11017 11018 // Don't re-trigger an onFOO event when we call its FOO() method 11019 tmp = elem[ ontype ]; 11020 11021 if ( tmp ) { 11022 elem[ ontype ] = null; 11023 } 11024 11025 // Prevent re-triggering of the same event, since we already bubbled it above 11026 jQuery.event.triggered = type; 11027 11028 if ( event.isPropagationStopped() ) { 11029 lastElement.addEventListener( type, stopPropagationCallback ); 11030 } 11031 11032 elem[ type ](); 11033 11034 if ( event.isPropagationStopped() ) { 11035 lastElement.removeEventListener( type, stopPropagationCallback ); 11036 } 11037 11038 jQuery.event.triggered = undefined; 11039 11040 if ( tmp ) { 11041 elem[ ontype ] = tmp; 11042 } 11043 } 11044 } 11045 } 11046 11047 return event.result; 11048 }, 11049 11050 // Piggyback on a donor event to simulate a different one 11051 // Used only for `focus(in | out)` events 11052 simulate: function( type, elem, event ) { 11053 var e = jQuery.extend( 11054 new jQuery.Event(), 11055 event, 11056 { 11057 type: type, 11058 isSimulated: true 11059 } 11060 ); 11061 11062 jQuery.event.trigger( e, null, elem ); 11063 } 11064 11065} ); 11066 11067jQuery.fn.extend( { 11068 11069 trigger: function( type, data ) { 11070 return this.each( function() { 11071 jQuery.event.trigger( type, data, this ); 11072 } ); 11073 }, 11074 triggerHandler: function( type, data ) { 11075 var elem = this[ 0 ]; 11076 if ( elem ) { 11077 return jQuery.event.trigger( type, data, elem, true ); 11078 } 11079 } 11080} ); 11081 11082 11083var 11084 rbracket = /\[\]$/, 11085 rCRLF = /\r?\n/g, 11086 rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i, 11087 rsubmittable = /^(?:input|select|textarea|keygen)/i; 11088 11089function buildParams( prefix, obj, traditional, add ) { 11090 var name; 11091 11092 if ( Array.isArray( obj ) ) { 11093 11094 // Serialize array item. 11095 jQuery.each( obj, function( i, v ) { 11096 if ( traditional || rbracket.test( prefix ) ) { 11097 11098 // Treat each array item as a scalar. 11099 add( prefix, v ); 11100 11101 } else { 11102 11103 // Item is non-scalar (array or object), encode its numeric index. 11104 buildParams( 11105 prefix + "[" + ( typeof v === "object" && v != null ? i : "" ) + "]", 11106 v, 11107 traditional, 11108 add 11109 ); 11110 } 11111 } ); 11112 11113 } else if ( !traditional && toType( obj ) === "object" ) { 11114 11115 // Serialize object item. 11116 for ( name in obj ) { 11117 buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add ); 11118 } 11119 11120 } else { 11121 11122 // Serialize scalar item. 11123 add( prefix, obj ); 11124 } 11125} 11126 11127// Serialize an array of form elements or a set of 11128// key/values into a query string 11129jQuery.param = function( a, traditional ) { 11130 var prefix, 11131 s = [], 11132 add = function( key, valueOrFunction ) { 11133 11134 // If value is a function, invoke it and use its return value 11135 var value = isFunction( valueOrFunction ) ? 11136 valueOrFunction() : 11137 valueOrFunction; 11138 11139 s[ s.length ] = encodeURIComponent( key ) + "=" + 11140 encodeURIComponent( value == null ? "" : value ); 11141 }; 11142 11143 if ( a == null ) { 11144 return ""; 11145 } 11146 11147 // If an array was passed in, assume that it is an array of form elements. 11148 if ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) { 11149 11150 // Serialize the form elements 11151 jQuery.each( a, function() { 11152 add( this.name, this.value ); 11153 } ); 11154 11155 } else { 11156 11157 // If traditional, encode the "old" way (the way 1.3.2 or older 11158 // did it), otherwise encode params recursively. 11159 for ( prefix in a ) { 11160 buildParams( prefix, a[ prefix ], traditional, add ); 11161 } 11162 } 11163 11164 // Return the resulting serialization 11165 return s.join( "&" ); 11166}; 11167 11168jQuery.fn.extend( { 11169 serialize: function() { 11170 return jQuery.param( this.serializeArray() ); 11171 }, 11172 serializeArray: function() { 11173 return this.map( function() { 11174 11175 // Can add propHook for "elements" to filter or add form elements 11176 var elements = jQuery.prop( this, "elements" ); 11177 return elements ? jQuery.makeArray( elements ) : this; 11178 } ).filter( function() { 11179 var type = this.type; 11180 11181 // Use .is( ":disabled" ) so that fieldset[disabled] works 11182 return this.name && !jQuery( this ).is( ":disabled" ) && 11183 rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) && 11184 ( this.checked || !rcheckableType.test( type ) ); 11185 } ).map( function( _i, elem ) { 11186 var val = jQuery( this ).val(); 11187 11188 if ( val == null ) { 11189 return null; 11190 } 11191 11192 if ( Array.isArray( val ) ) { 11193 return jQuery.map( val, function( val ) { 11194 return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; 11195 } ); 11196 } 11197 11198 return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; 11199 } ).get(); 11200 } 11201} ); 11202 11203 11204var 11205 r20 = /%20/g, 11206 rhash = /#.*$/, 11207 rantiCache = /([?&])_=[^&]*/, 11208 rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg, 11209 11210 // trac-7653, trac-8125, trac-8152: local protocol detection 11211 rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/, 11212 rnoContent = /^(?:GET|HEAD)$/, 11213 rprotocol = /^\/\//, 11214 11215 /* Prefilters 11216 * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example) 11217 * 2) These are called: 11218 * - BEFORE asking for a transport 11219 * - AFTER param serialization (s.data is a string if s.processData is true) 11220 * 3) key is the dataType 11221 * 4) the catchall symbol "*" can be used 11222 * 5) execution will start with transport dataType and THEN continue down to "*" if needed 11223 */ 11224 prefilters = {}, 11225 11226 /* Transports bindings 11227 * 1) key is the dataType 11228 * 2) the catchall symbol "*" can be used 11229 * 3) selection will start with transport dataType and THEN go to "*" if needed 11230 */ 11231 transports = {}, 11232 11233 // Avoid comment-prolog char sequence (trac-10098); must appease lint and evade compression 11234 allTypes = "*/".concat( "*" ), 11235 11236 // Anchor tag for parsing the document origin 11237 originAnchor = document.createElement( "a" ); 11238 11239originAnchor.href = location.href; 11240 11241// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport 11242function addToPrefiltersOrTransports( structure ) { 11243 11244 // dataTypeExpression is optional and defaults to "*" 11245 return function( dataTypeExpression, func ) { 11246 11247 if ( typeof dataTypeExpression !== "string" ) { 11248 func = dataTypeExpression; 11249 dataTypeExpression = "*"; 11250 } 11251 11252 var dataType, 11253 i = 0, 11254 dataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || []; 11255 11256 if ( isFunction( func ) ) { 11257 11258 // For each dataType in the dataTypeExpression 11259 while ( ( dataType = dataTypes[ i++ ] ) ) { 11260 11261 // Prepend if requested 11262 if ( dataType[ 0 ] === "+" ) { 11263 dataType = dataType.slice( 1 ) || "*"; 11264 ( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func ); 11265 11266 // Otherwise append 11267 } else { 11268 ( structure[ dataType ] = structure[ dataType ] || [] ).push( func ); 11269 } 11270 } 11271 } 11272 }; 11273} 11274 11275// Base inspection function for prefilters and transports 11276function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) { 11277 11278 var inspected = {}, 11279 seekingTransport = ( structure === transports ); 11280 11281 function inspect( dataType ) { 11282 var selected; 11283 inspected[ dataType ] = true; 11284 jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) { 11285 var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR ); 11286 if ( typeof dataTypeOrTransport === "string" && 11287 !seekingTransport && !inspected[ dataTypeOrTransport ] ) { 11288 11289 options.dataTypes.unshift( dataTypeOrTransport ); 11290 inspect( dataTypeOrTransport ); 11291 return false; 11292 } else if ( seekingTransport ) { 11293 return !( selected = dataTypeOrTransport ); 11294 } 11295 } ); 11296 return selected; 11297 } 11298 11299 return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" ); 11300} 11301 11302// A special extend for ajax options 11303// that takes "flat" options (not to be deep extended) 11304// Fixes trac-9887 11305function ajaxExtend( target, src ) { 11306 var key, deep, 11307 flatOptions = jQuery.ajaxSettings.flatOptions || {}; 11308 11309 for ( key in src ) { 11310 if ( src[ key ] !== undefined ) { 11311 ( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ]; 11312 } 11313 } 11314 if ( deep ) { 11315 jQuery.extend( true, target, deep ); 11316 } 11317 11318 return target; 11319} 11320 11321/* Handles responses to an ajax request: 11322 * - finds the right dataType (mediates between content-type and expected dataType) 11323 * - returns the corresponding response 11324 */ 11325function ajaxHandleResponses( s, jqXHR, responses ) { 11326 11327 var ct, type, finalDataType, firstDataType, 11328 contents = s.contents, 11329 dataTypes = s.dataTypes; 11330 11331 // Remove auto dataType and get content-type in the process 11332 while ( dataTypes[ 0 ] === "*" ) { 11333 dataTypes.shift(); 11334 if ( ct === undefined ) { 11335 ct = s.mimeType || jqXHR.getResponseHeader( "Content-Type" ); 11336 } 11337 } 11338 11339 // Check if we're dealing with a known content-type 11340 if ( ct ) { 11341 for ( type in contents ) { 11342 if ( contents[ type ] && contents[ type ].test( ct ) ) { 11343 dataTypes.unshift( type ); 11344 break; 11345 } 11346 } 11347 } 11348 11349 // Check to see if we have a response for the expected dataType 11350 if ( dataTypes[ 0 ] in responses ) { 11351 finalDataType = dataTypes[ 0 ]; 11352 } else { 11353 11354 // Try convertible dataTypes 11355 for ( type in responses ) { 11356 if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[ 0 ] ] ) { 11357 finalDataType = type; 11358 break; 11359 } 11360 if ( !firstDataType ) { 11361 firstDataType = type; 11362 } 11363 } 11364 11365 // Or just use first one 11366 finalDataType = finalDataType || firstDataType; 11367 } 11368 11369 // If we found a dataType 11370 // We add the dataType to the list if needed 11371 // and return the corresponding response 11372 if ( finalDataType ) { 11373 if ( finalDataType !== dataTypes[ 0 ] ) { 11374 dataTypes.unshift( finalDataType ); 11375 } 11376 return responses[ finalDataType ]; 11377 } 11378} 11379 11380/* Chain conversions given the request and the original response 11381 * Also sets the responseXXX fields on the jqXHR instance 11382 */ 11383function ajaxConvert( s, response, jqXHR, isSuccess ) { 11384 var conv2, current, conv, tmp, prev, 11385 converters = {}, 11386 11387 // Work with a copy of dataTypes in case we need to modify it for conversion 11388 dataTypes = s.dataTypes.slice(); 11389 11390 // Create converters map with lowercased keys 11391 if ( dataTypes[ 1 ] ) { 11392 for ( conv in s.converters ) { 11393 converters[ conv.toLowerCase() ] = s.converters[ conv ]; 11394 } 11395 } 11396 11397 current = dataTypes.shift(); 11398 11399 // Convert to each sequential dataType 11400 while ( current ) { 11401 11402 if ( s.responseFields[ current ] ) { 11403 jqXHR[ s.responseFields[ current ] ] = response; 11404 } 11405 11406 // Apply the dataFilter if provided 11407 if ( !prev && isSuccess && s.dataFilter ) { 11408 response = s.dataFilter( response, s.dataType ); 11409 } 11410 11411 prev = current; 11412 current = dataTypes.shift(); 11413 11414 if ( current ) { 11415 11416 // There's only work to do if current dataType is non-auto 11417 if ( current === "*" ) { 11418 11419 current = prev; 11420 11421 // Convert response if prev dataType is non-auto and differs from current 11422 } else if ( prev !== "*" && prev !== current ) { 11423 11424 // Seek a direct converter 11425 conv = converters[ prev + " " + current ] || converters[ "* " + current ]; 11426 11427 // If none found, seek a pair 11428 if ( !conv ) { 11429 for ( conv2 in converters ) { 11430 11431 // If conv2 outputs current 11432 tmp = conv2.split( " " ); 11433 if ( tmp[ 1 ] === current ) { 11434 11435 // If prev can be converted to accepted input 11436 conv = converters[ prev + " " + tmp[ 0 ] ] || 11437 converters[ "* " + tmp[ 0 ] ]; 11438 if ( conv ) { 11439 11440 // Condense equivalence converters 11441 if ( conv === true ) { 11442 conv = converters[ conv2 ]; 11443 11444 // Otherwise, insert the intermediate dataType 11445 } else if ( converters[ conv2 ] !== true ) { 11446 current = tmp[ 0 ]; 11447 dataTypes.unshift( tmp[ 1 ] ); 11448 } 11449 break; 11450 } 11451 } 11452 } 11453 } 11454 11455 // Apply converter (if not an equivalence) 11456 if ( conv !== true ) { 11457 11458 // Unless errors are allowed to bubble, catch and return them 11459 if ( conv && s.throws ) { 11460 response = conv( response ); 11461 } else { 11462 try { 11463 response = conv( response ); 11464 } catch ( e ) { 11465 return { 11466 state: "parsererror", 11467 error: conv ? e : "No conversion from " + prev + " to " + current 11468 }; 11469 } 11470 } 11471 } 11472 } 11473 } 11474 } 11475 11476 return { state: "success", data: response }; 11477} 11478 11479jQuery.extend( { 11480 11481 // Counter for holding the number of active queries 11482 active: 0, 11483 11484 // Last-Modified header cache for next request 11485 lastModified: {}, 11486 etag: {}, 11487 11488 ajaxSettings: { 11489 url: location.href, 11490 type: "GET", 11491 isLocal: rlocalProtocol.test( location.protocol ), 11492 global: true, 11493 processData: true, 11494 async: true, 11495 contentType: "application/x-www-form-urlencoded; charset=UTF-8", 11496 11497 /* 11498 timeout: 0, 11499 data: null, 11500 dataType: null, 11501 username: null, 11502 password: null, 11503 cache: null, 11504 throws: false, 11505 traditional: false, 11506 headers: {}, 11507 */ 11508 11509 accepts: { 11510 "*": allTypes, 11511 text: "text/plain", 11512 html: "text/html", 11513 xml: "application/xml, text/xml", 11514 json: "application/json, text/javascript" 11515 }, 11516 11517 contents: { 11518 xml: /\bxml\b/, 11519 html: /\bhtml/, 11520 json: /\bjson\b/ 11521 }, 11522 11523 responseFields: { 11524 xml: "responseXML", 11525 text: "responseText", 11526 json: "responseJSON" 11527 }, 11528 11529 // Data converters 11530 // Keys separate source (or catchall "*") and destination types with a single space 11531 converters: { 11532 11533 // Convert anything to text 11534 "* text": String, 11535 11536 // Text to html (true = no transformation) 11537 "text html": true, 11538 11539 // Evaluate text as a json expression 11540 "text json": JSON.parse, 11541 11542 // Parse text as xml 11543 "text xml": jQuery.parseXML 11544 }, 11545 11546 // For options that shouldn't be deep extended: 11547 // you can add your own custom options here if 11548 // and when you create one that shouldn't be 11549 // deep extended (see ajaxExtend) 11550 flatOptions: { 11551 url: true, 11552 context: true 11553 } 11554 }, 11555 11556 // Creates a full fledged settings object into target 11557 // with both ajaxSettings and settings fields. 11558 // If target is omitted, writes into ajaxSettings. 11559 ajaxSetup: function( target, settings ) { 11560 return settings ? 11561 11562 // Building a settings object 11563 ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) : 11564 11565 // Extending ajaxSettings 11566 ajaxExtend( jQuery.ajaxSettings, target ); 11567 }, 11568 11569 ajaxPrefilter: addToPrefiltersOrTransports( prefilters ), 11570 ajaxTransport: addToPrefiltersOrTransports( transports ), 11571 11572 // Main method 11573 ajax: function( url, options ) { 11574 11575 // If url is an object, simulate pre-1.5 signature 11576 if ( typeof url === "object" ) { 11577 options = url; 11578 url = undefined; 11579 } 11580 11581 // Force options to be an object 11582 options = options || {}; 11583 11584 var transport, 11585 11586 // URL without anti-cache param 11587 cacheURL, 11588 11589 // Response headers 11590 responseHeadersString, 11591 responseHeaders, 11592 11593 // timeout handle 11594 timeoutTimer, 11595 11596 // Url cleanup var 11597 urlAnchor, 11598 11599 // Request state (becomes false upon send and true upon completion) 11600 completed, 11601 11602 // To know if global events are to be dispatched 11603 fireGlobals, 11604 11605 // Loop variable 11606 i, 11607 11608 // uncached part of the url 11609 uncached, 11610 11611 // Create the final options object 11612 s = jQuery.ajaxSetup( {}, options ), 11613 11614 // Callbacks context 11615 callbackContext = s.context || s, 11616 11617 // Context for global events is callbackContext if it is a DOM node or jQuery collection 11618 globalEventContext = s.context && 11619 ( callbackContext.nodeType || callbackContext.jquery ) ? 11620 jQuery( callbackContext ) : 11621 jQuery.event, 11622 11623 // Deferreds 11624 deferred = jQuery.Deferred(), 11625 completeDeferred = jQuery.Callbacks( "once memory" ), 11626 11627 // Status-dependent callbacks 11628 statusCode = s.statusCode || {}, 11629 11630 // Headers (they are sent all at once) 11631 requestHeaders = {}, 11632 requestHeadersNames = {}, 11633 11634 // Default abort message 11635 strAbort = "canceled", 11636 11637 // Fake xhr 11638 jqXHR = { 11639 readyState: 0, 11640 11641 // Builds headers hashtable if needed 11642 getResponseHeader: function( key ) { 11643 var match; 11644 if ( completed ) { 11645 if ( !responseHeaders ) { 11646 responseHeaders = {}; 11647 while ( ( match = rheaders.exec( responseHeadersString ) ) ) { 11648 responseHeaders[ match[ 1 ].toLowerCase() + " " ] = 11649 ( responseHeaders[ match[ 1 ].toLowerCase() + " " ] || [] ) 11650 .concat( match[ 2 ] ); 11651 } 11652 } 11653 match = responseHeaders[ key.toLowerCase() + " " ]; 11654 } 11655 return match == null ? null : match.join( ", " ); 11656 }, 11657 11658 // Raw string 11659 getAllResponseHeaders: function() { 11660 return completed ? responseHeadersString : null; 11661 }, 11662 11663 // Caches the header 11664 setRequestHeader: function( name, value ) { 11665 if ( completed == null ) { 11666 name = requestHeadersNames[ name.toLowerCase() ] = 11667 requestHeadersNames[ name.toLowerCase() ] || name; 11668 requestHeaders[ name ] = value; 11669 } 11670 return this; 11671 }, 11672 11673 // Overrides response content-type header 11674 overrideMimeType: function( type ) { 11675 if ( completed == null ) { 11676 s.mimeType = type; 11677 } 11678 return this; 11679 }, 11680 11681 // Status-dependent callbacks 11682 statusCode: function( map ) { 11683 var code; 11684 if ( map ) { 11685 if ( completed ) { 11686 11687 // Execute the appropriate callbacks 11688 jqXHR.always( map[ jqXHR.status ] ); 11689 } else { 11690 11691 // Lazy-add the new callbacks in a way that preserves old ones 11692 for ( code in map ) { 11693 statusCode[ code ] = [ statusCode[ code ], map[ code ] ]; 11694 } 11695 } 11696 } 11697 return this; 11698 }, 11699 11700 // Cancel the request 11701 abort: function( statusText ) { 11702 var finalText = statusText || strAbort; 11703 if ( transport ) { 11704 transport.abort( finalText ); 11705 } 11706 done( 0, finalText ); 11707 return this; 11708 } 11709 }; 11710 11711 // Attach deferreds 11712 deferred.promise( jqXHR ); 11713 11714 // Add protocol if not provided (prefilters might expect it) 11715 // Handle falsy url in the settings object (trac-10093: consistency with old signature) 11716 // We also use the url parameter if available 11717 s.url = ( ( url || s.url || location.href ) + "" ) 11718 .replace( rprotocol, location.protocol + "//" ); 11719 11720 // Alias method option to type as per ticket trac-12004 11721 s.type = options.method || options.type || s.method || s.type; 11722 11723 // Extract dataTypes list 11724 s.dataTypes = ( s.dataType || "*" ).toLowerCase().match( rnothtmlwhite ) || [ "" ]; 11725 11726 // A cross-domain request is in order when the origin doesn't match the current origin. 11727 if ( s.crossDomain == null ) { 11728 urlAnchor = document.createElement( "a" ); 11729 11730 // Support: IE <=8 - 11, Edge 12 - 15 11731 // IE throws exception on accessing the href property if url is malformed, 11732 // e.g. http://example.com:80x/ 11733 try { 11734 urlAnchor.href = s.url; 11735 11736 // Support: IE <=8 - 11 only 11737 // Anchor's host property isn't correctly set when s.url is relative 11738 urlAnchor.href = urlAnchor.href; 11739 s.crossDomain = originAnchor.protocol + "//" + originAnchor.host !== 11740 urlAnchor.protocol + "//" + urlAnchor.host; 11741 } catch ( e ) { 11742 11743 // If there is an error parsing the URL, assume it is crossDomain, 11744 // it can be rejected by the transport if it is invalid 11745 s.crossDomain = true; 11746 } 11747 } 11748 11749 // Convert data if not already a string 11750 if ( s.data && s.processData && typeof s.data !== "string" ) { 11751 s.data = jQuery.param( s.data, s.traditional ); 11752 } 11753 11754 // Apply prefilters 11755 inspectPrefiltersOrTransports( prefilters, s, options, jqXHR ); 11756 11757 // If request was aborted inside a prefilter, stop there 11758 if ( completed ) { 11759 return jqXHR; 11760 } 11761 11762 // We can fire global events as of now if asked to 11763 // Don't fire events if jQuery.event is undefined in an AMD-usage scenario (trac-15118) 11764 fireGlobals = jQuery.event && s.global; 11765 11766 // Watch for a new set of requests 11767 if ( fireGlobals && jQuery.active++ === 0 ) { 11768 jQuery.event.trigger( "ajaxStart" ); 11769 } 11770 11771 // Uppercase the type 11772 s.type = s.type.toUpperCase(); 11773 11774 // Determine if request has content 11775 s.hasContent = !rnoContent.test( s.type ); 11776 11777 // Save the URL in case we're toying with the If-Modified-Since 11778 // and/or If-None-Match header later on 11779 // Remove hash to simplify url manipulation 11780 cacheURL = s.url.replace( rhash, "" ); 11781 11782 // More options handling for requests with no content 11783 if ( !s.hasContent ) { 11784 11785 // Remember the hash so we can put it back 11786 uncached = s.url.slice( cacheURL.length ); 11787 11788 // If data is available and should be processed, append data to url 11789 if ( s.data && ( s.processData || typeof s.data === "string" ) ) { 11790 cacheURL += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data; 11791 11792 // trac-9682: remove data so that it's not used in an eventual retry 11793 delete s.data; 11794 } 11795 11796 // Add or update anti-cache param if needed 11797 if ( s.cache === false ) { 11798 cacheURL = cacheURL.replace( rantiCache, "$1" ); 11799 uncached = ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ( nonce.guid++ ) + 11800 uncached; 11801 } 11802 11803 // Put hash and anti-cache on the URL that will be requested (gh-1732) 11804 s.url = cacheURL + uncached; 11805 11806 // Change '%20' to '+' if this is encoded form body content (gh-2658) 11807 } else if ( s.data && s.processData && 11808 ( s.contentType || "" ).indexOf( "application/x-www-form-urlencoded" ) === 0 ) { 11809 s.data = s.data.replace( r20, "+" ); 11810 } 11811 11812 // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. 11813 if ( s.ifModified ) { 11814 if ( jQuery.lastModified[ cacheURL ] ) { 11815 jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] ); 11816 } 11817 if ( jQuery.etag[ cacheURL ] ) { 11818 jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] ); 11819 } 11820 } 11821 11822 // Set the correct header, if data is being sent 11823 if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) { 11824 jqXHR.setRequestHeader( "Content-Type", s.contentType ); 11825 } 11826 11827 // Set the Accepts header for the server, depending on the dataType 11828 jqXHR.setRequestHeader( 11829 "Accept", 11830 s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ? 11831 s.accepts[ s.dataTypes[ 0 ] ] + 11832 ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) : 11833 s.accepts[ "*" ] 11834 ); 11835 11836 // Check for headers option 11837 for ( i in s.headers ) { 11838 jqXHR.setRequestHeader( i, s.headers[ i ] ); 11839 } 11840 11841 // Allow custom headers/mimetypes and early abort 11842 if ( s.beforeSend && 11843 ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) { 11844 11845 // Abort if not done already and return 11846 return jqXHR.abort(); 11847 } 11848 11849 // Aborting is no longer a cancellation 11850 strAbort = "abort"; 11851 11852 // Install callbacks on deferreds 11853 completeDeferred.add( s.complete ); 11854 jqXHR.done( s.success ); 11855 jqXHR.fail( s.error ); 11856 11857 // Get transport 11858 transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR ); 11859 11860 // If no transport, we auto-abort 11861 if ( !transport ) { 11862 done( -1, "No Transport" ); 11863 } else { 11864 jqXHR.readyState = 1; 11865 11866 // Send global event 11867 if ( fireGlobals ) { 11868 globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] ); 11869 } 11870 11871 // If request was aborted inside ajaxSend, stop there 11872 if ( completed ) { 11873 return jqXHR; 11874 } 11875 11876 // Timeout 11877 if ( s.async && s.timeout > 0 ) { 11878 timeoutTimer = window.setTimeout( function() { 11879 jqXHR.abort( "timeout" ); 11880 }, s.timeout ); 11881 } 11882 11883 try { 11884 completed = false; 11885 transport.send( requestHeaders, done ); 11886 } catch ( e ) { 11887 11888 // Rethrow post-completion exceptions 11889 if ( completed ) { 11890 throw e; 11891 } 11892 11893 // Propagate others as results 11894 done( -1, e ); 11895 } 11896 } 11897 11898 // Callback for when everything is done 11899 function done( status, nativeStatusText, responses, headers ) { 11900 var isSuccess, success, error, response, modified, 11901 statusText = nativeStatusText; 11902 11903 // Ignore repeat invocations 11904 if ( completed ) { 11905 return; 11906 } 11907 11908 completed = true; 11909 11910 // Clear timeout if it exists 11911 if ( timeoutTimer ) { 11912 window.clearTimeout( timeoutTimer ); 11913 } 11914 11915 // Dereference transport for early garbage collection 11916 // (no matter how long the jqXHR object will be used) 11917 transport = undefined; 11918 11919 // Cache response headers 11920 responseHeadersString = headers || ""; 11921 11922 // Set readyState 11923 jqXHR.readyState = status > 0 ? 4 : 0; 11924 11925 // Determine if successful 11926 isSuccess = status >= 200 && status < 300 || status === 304; 11927 11928 // Get response data 11929 if ( responses ) { 11930 response = ajaxHandleResponses( s, jqXHR, responses ); 11931 } 11932 11933 // Use a noop converter for missing script but not if jsonp 11934 if ( !isSuccess && 11935 jQuery.inArray( "script", s.dataTypes ) > -1 && 11936 jQuery.inArray( "json", s.dataTypes ) < 0 ) { 11937 s.converters[ "text script" ] = function() {}; 11938 } 11939 11940 // Convert no matter what (that way responseXXX fields are always set) 11941 response = ajaxConvert( s, response, jqXHR, isSuccess ); 11942 11943 // If successful, handle type chaining 11944 if ( isSuccess ) { 11945 11946 // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. 11947 if ( s.ifModified ) { 11948 modified = jqXHR.getResponseHeader( "Last-Modified" ); 11949 if ( modified ) { 11950 jQuery.lastModified[ cacheURL ] = modified; 11951 } 11952 modified = jqXHR.getResponseHeader( "etag" ); 11953 if ( modified ) { 11954 jQuery.etag[ cacheURL ] = modified; 11955 } 11956 } 11957 11958 // if no content 11959 if ( status === 204 || s.type === "HEAD" ) { 11960 statusText = "nocontent"; 11961 11962 // if not modified 11963 } else if ( status === 304 ) { 11964 statusText = "notmodified"; 11965 11966 // If we have data, let's convert it 11967 } else { 11968 statusText = response.state; 11969 success = response.data; 11970 error = response.error; 11971 isSuccess = !error; 11972 } 11973 } else { 11974 11975 // Extract error from statusText and normalize for non-aborts 11976 error = statusText; 11977 if ( status || !statusText ) { 11978 statusText = "error"; 11979 if ( status < 0 ) { 11980 status = 0; 11981 } 11982 } 11983 } 11984 11985 // Set data for the fake xhr object 11986 jqXHR.status = status; 11987 jqXHR.statusText = ( nativeStatusText || statusText ) + ""; 11988 11989 // Success/Error 11990 if ( isSuccess ) { 11991 deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] ); 11992 } else { 11993 deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] ); 11994 } 11995 11996 // Status-dependent callbacks 11997 jqXHR.statusCode( statusCode ); 11998 statusCode = undefined; 11999 12000 if ( fireGlobals ) { 12001 globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError", 12002 [ jqXHR, s, isSuccess ? success : error ] ); 12003 } 12004 12005 // Complete 12006 completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] ); 12007 12008 if ( fireGlobals ) { 12009 globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] ); 12010 12011 // Handle the global AJAX counter 12012 if ( !( --jQuery.active ) ) { 12013 jQuery.event.trigger( "ajaxStop" ); 12014 } 12015 } 12016 } 12017 12018 return jqXHR; 12019 }, 12020 12021 getJSON: function( url, data, callback ) { 12022 return jQuery.get( url, data, callback, "json" ); 12023 }, 12024 12025 getScript: function( url, callback ) { 12026 return jQuery.get( url, undefined, callback, "script" ); 12027 } 12028} ); 12029 12030jQuery.each( [ "get", "post" ], function( _i, method ) { 12031 jQuery[ method ] = function( url, data, callback, type ) { 12032 12033 // Shift arguments if data argument was omitted 12034 if ( isFunction( data ) ) { 12035 type = type || callback; 12036 callback = data; 12037 data = undefined; 12038 } 12039 12040 // The url can be an options object (which then must have .url) 12041 return jQuery.ajax( jQuery.extend( { 12042 url: url, 12043 type: method, 12044 dataType: type, 12045 data: data, 12046 success: callback 12047 }, jQuery.isPlainObject( url ) && url ) ); 12048 }; 12049} ); 12050 12051jQuery.ajaxPrefilter( function( s ) { 12052 var i; 12053 for ( i in s.headers ) { 12054 if ( i.toLowerCase() === "content-type" ) { 12055 s.contentType = s.headers[ i ] || ""; 12056 } 12057 } 12058} ); 12059 12060 12061jQuery._evalUrl = function( url, options, doc ) { 12062 return jQuery.ajax( { 12063 url: url, 12064 12065 // Make this explicit, since user can override this through ajaxSetup (trac-11264) 12066 type: "GET", 12067 dataType: "script", 12068 cache: true, 12069 async: false, 12070 global: false, 12071 12072 // Only evaluate the response if it is successful (gh-4126) 12073 // dataFilter is not invoked for failure responses, so using it instead 12074 // of the default converter is kludgy but it works. 12075 converters: { 12076 "text script": function() {} 12077 }, 12078 dataFilter: function( response ) { 12079 jQuery.globalEval( response, options, doc ); 12080 } 12081 } ); 12082}; 12083 12084 12085jQuery.fn.extend( { 12086 wrapAll: function( html ) { 12087 var wrap; 12088 12089 if ( this[ 0 ] ) { 12090 if ( isFunction( html ) ) { 12091 html = html.call( this[ 0 ] ); 12092 } 12093 12094 // The elements to wrap the target around 12095 wrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true ); 12096 12097 if ( this[ 0 ].parentNode ) { 12098 wrap.insertBefore( this[ 0 ] ); 12099 } 12100 12101 wrap.map( function() { 12102 var elem = this; 12103 12104 while ( elem.firstElementChild ) { 12105 elem = elem.firstElementChild; 12106 } 12107 12108 return elem; 12109 } ).append( this ); 12110 } 12111 12112 return this; 12113 }, 12114 12115 wrapInner: function( html ) { 12116 if ( isFunction( html ) ) { 12117 return this.each( function( i ) { 12118 jQuery( this ).wrapInner( html.call( this, i ) ); 12119 } ); 12120 } 12121 12122 return this.each( function() { 12123 var self = jQuery( this ), 12124 contents = self.contents(); 12125 12126 if ( contents.length ) { 12127 contents.wrapAll( html ); 12128 12129 } else { 12130 self.append( html ); 12131 } 12132 } ); 12133 }, 12134 12135 wrap: function( html ) { 12136 var htmlIsFunction = isFunction( html ); 12137 12138 return this.each( function( i ) { 12139 jQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html ); 12140 } ); 12141 }, 12142 12143 unwrap: function( selector ) { 12144 this.parent( selector ).not( "body" ).each( function() { 12145 jQuery( this ).replaceWith( this.childNodes ); 12146 } ); 12147 return this; 12148 } 12149} ); 12150 12151 12152jQuery.expr.pseudos.hidden = function( elem ) { 12153 return !jQuery.expr.pseudos.visible( elem ); 12154}; 12155jQuery.expr.pseudos.visible = function( elem ) { 12156 return !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length ); 12157}; 12158 12159 12160 12161 12162jQuery.ajaxSettings.xhr = function() { 12163 try { 12164 return new window.XMLHttpRequest(); 12165 } catch ( e ) {} 12166}; 12167 12168var xhrSuccessStatus = { 12169 12170 // File protocol always yields status code 0, assume 200 12171 0: 200, 12172 12173 // Support: IE <=9 only 12174 // trac-1450: sometimes IE returns 1223 when it should be 204 12175 1223: 204 12176 }, 12177 xhrSupported = jQuery.ajaxSettings.xhr(); 12178 12179support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported ); 12180support.ajax = xhrSupported = !!xhrSupported; 12181 12182jQuery.ajaxTransport( function( options ) { 12183 var callback, errorCallback; 12184 12185 // Cross domain only allowed if supported through XMLHttpRequest 12186 if ( support.cors || xhrSupported && !options.crossDomain ) { 12187 return { 12188 send: function( headers, complete ) { 12189 var i, 12190 xhr = options.xhr(); 12191 12192 xhr.open( 12193 options.type, 12194 options.url, 12195 options.async, 12196 options.username, 12197 options.password 12198 ); 12199 12200 // Apply custom fields if provided 12201 if ( options.xhrFields ) { 12202 for ( i in options.xhrFields ) { 12203 xhr[ i ] = options.xhrFields[ i ]; 12204 } 12205 } 12206 12207 // Override mime type if needed 12208 if ( options.mimeType && xhr.overrideMimeType ) { 12209 xhr.overrideMimeType( options.mimeType ); 12210 } 12211 12212 // X-Requested-With header 12213 // For cross-domain requests, seeing as conditions for a preflight are 12214 // akin to a jigsaw puzzle, we simply never set it to be sure. 12215 // (it can always be set on a per-request basis or even using ajaxSetup) 12216 // For same-domain requests, won't change header if already provided. 12217 if ( !options.crossDomain && !headers[ "X-Requested-With" ] ) { 12218 headers[ "X-Requested-With" ] = "XMLHttpRequest"; 12219 } 12220 12221 // Set headers 12222 for ( i in headers ) { 12223 xhr.setRequestHeader( i, headers[ i ] ); 12224 } 12225 12226 // Callback 12227 callback = function( type ) { 12228 return function() { 12229 if ( callback ) { 12230 callback = errorCallback = xhr.onload = 12231 xhr.onerror = xhr.onabort = xhr.ontimeout = 12232 xhr.onreadystatechange = null; 12233 12234 if ( type === "abort" ) { 12235 xhr.abort(); 12236 } else if ( type === "error" ) { 12237 12238 // Support: IE <=9 only 12239 // On a manual native abort, IE9 throws 12240 // errors on any property access that is not readyState 12241 if ( typeof xhr.status !== "number" ) { 12242 complete( 0, "error" ); 12243 } else { 12244 complete( 12245 12246 // File: protocol always yields status 0; see trac-8605, trac-14207 12247 xhr.status, 12248 xhr.statusText 12249 ); 12250 } 12251 } else { 12252 complete( 12253 xhrSuccessStatus[ xhr.status ] || xhr.status, 12254 xhr.statusText, 12255 12256 // Support: IE <=9 only 12257 // IE9 has no XHR2 but throws on binary (trac-11426) 12258 // For XHR2 non-text, let the caller handle it (gh-2498) 12259 ( xhr.responseType || "text" ) !== "text" || 12260 typeof xhr.responseText !== "string" ? 12261 { binary: xhr.response } : 12262 { text: xhr.responseText }, 12263 xhr.getAllResponseHeaders() 12264 ); 12265 } 12266 } 12267 }; 12268 }; 12269 12270 // Listen to events 12271 xhr.onload = callback(); 12272 errorCallback = xhr.onerror = xhr.ontimeout = callback( "error" ); 12273 12274 // Support: IE 9 only 12275 // Use onreadystatechange to replace onabort 12276 // to handle uncaught aborts 12277 if ( xhr.onabort !== undefined ) { 12278 xhr.onabort = errorCallback; 12279 } else { 12280 xhr.onreadystatechange = function() { 12281 12282 // Check readyState before timeout as it changes 12283 if ( xhr.readyState === 4 ) { 12284 12285 // Allow onerror to be called first, 12286 // but that will not handle a native abort 12287 // Also, save errorCallback to a variable 12288 // as xhr.onerror cannot be accessed 12289 window.setTimeout( function() { 12290 if ( callback ) { 12291 errorCallback(); 12292 } 12293 } ); 12294 } 12295 }; 12296 } 12297 12298 // Create the abort callback 12299 callback = callback( "abort" ); 12300 12301 try { 12302 12303 // Do send the request (this may raise an exception) 12304 xhr.send( options.hasContent && options.data || null ); 12305 } catch ( e ) { 12306 12307 // trac-14683: Only rethrow if this hasn't been notified as an error yet 12308 if ( callback ) { 12309 throw e; 12310 } 12311 } 12312 }, 12313 12314 abort: function() { 12315 if ( callback ) { 12316 callback(); 12317 } 12318 } 12319 }; 12320 } 12321} ); 12322 12323 12324 12325 12326// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432) 12327jQuery.ajaxPrefilter( function( s ) { 12328 if ( s.crossDomain ) { 12329 s.contents.script = false; 12330 } 12331} ); 12332 12333// Install script dataType 12334jQuery.ajaxSetup( { 12335 accepts: { 12336 script: "text/javascript, application/javascript, " + 12337 "application/ecmascript, application/x-ecmascript" 12338 }, 12339 contents: { 12340 script: /\b(?:java|ecma)script\b/ 12341 }, 12342 converters: { 12343 "text script": function( text ) { 12344 jQuery.globalEval( text ); 12345 return text; 12346 } 12347 } 12348} ); 12349 12350// Handle cache's special case and crossDomain 12351jQuery.ajaxPrefilter( "script", function( s ) { 12352 if ( s.cache === undefined ) { 12353 s.cache = false; 12354 } 12355 if ( s.crossDomain ) { 12356 s.type = "GET"; 12357 } 12358} ); 12359 12360// Bind script tag hack transport 12361jQuery.ajaxTransport( "script", function( s ) { 12362 12363 // This transport only deals with cross domain or forced-by-attrs requests 12364 if ( s.crossDomain || s.scriptAttrs ) { 12365 var script, callback; 12366 return { 12367 send: function( _, complete ) { 12368 script = jQuery( "<script>" ) 12369 .attr( s.scriptAttrs || {} ) 12370 .prop( { charset: s.scriptCharset, src: s.url } ) 12371 .on( "load error", callback = function( evt ) { 12372 script.remove(); 12373 callback = null; 12374 if ( evt ) { 12375 complete( evt.type === "error" ? 404 : 200, evt.type ); 12376 } 12377 } ); 12378 12379 // Use native DOM manipulation to avoid our domManip AJAX trickery 12380 document.head.appendChild( script[ 0 ] ); 12381 }, 12382 abort: function() { 12383 if ( callback ) { 12384 callback(); 12385 } 12386 } 12387 }; 12388 } 12389} ); 12390 12391 12392 12393 12394var oldCallbacks = [], 12395 rjsonp = /(=)\?(?=&|$)|\?\?/; 12396 12397// Default jsonp settings 12398jQuery.ajaxSetup( { 12399 jsonp: "callback", 12400 jsonpCallback: function() { 12401 var callback = oldCallbacks.pop() || ( jQuery.expando + "_" + ( nonce.guid++ ) ); 12402 this[ callback ] = true; 12403 return callback; 12404 } 12405} ); 12406 12407// Detect, normalize options and install callbacks for jsonp requests 12408jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) { 12409 12410 var callbackName, overwritten, responseContainer, 12411 jsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ? 12412 "url" : 12413 typeof s.data === "string" && 12414 ( s.contentType || "" ) 12415 .indexOf( "application/x-www-form-urlencoded" ) === 0 && 12416 rjsonp.test( s.data ) && "data" 12417 ); 12418 12419 // Handle iff the expected data type is "jsonp" or we have a parameter to set 12420 if ( jsonProp || s.dataTypes[ 0 ] === "jsonp" ) { 12421 12422 // Get callback name, remembering preexisting value associated with it 12423 callbackName = s.jsonpCallback = isFunction( s.jsonpCallback ) ? 12424 s.jsonpCallback() : 12425 s.jsonpCallback; 12426 12427 // Insert callback into url or form data 12428 if ( jsonProp ) { 12429 s[ jsonProp ] = s[ jsonProp ].replace( rjsonp, "$1" + callbackName ); 12430 } else if ( s.jsonp !== false ) { 12431 s.url += ( rquery.test( s.url ) ? "&" : "?" ) + s.jsonp + "=" + callbackName; 12432 } 12433 12434 // Use data converter to retrieve json after script execution 12435 s.converters[ "script json" ] = function() { 12436 if ( !responseContainer ) { 12437 jQuery.error( callbackName + " was not called" ); 12438 } 12439 return responseContainer[ 0 ]; 12440 }; 12441 12442 // Force json dataType 12443 s.dataTypes[ 0 ] = "json"; 12444 12445 // Install callback 12446 overwritten = window[ callbackName ]; 12447 window[ callbackName ] = function() { 12448 responseContainer = arguments; 12449 }; 12450 12451 // Clean-up function (fires after converters) 12452 jqXHR.always( function() { 12453 12454 // If previous value didn't exist - remove it 12455 if ( overwritten === undefined ) { 12456 jQuery( window ).removeProp( callbackName ); 12457 12458 // Otherwise restore preexisting value 12459 } else { 12460 window[ callbackName ] = overwritten; 12461 } 12462 12463 // Save back as free 12464 if ( s[ callbackName ] ) { 12465 12466 // Make sure that re-using the options doesn't screw things around 12467 s.jsonpCallback = originalSettings.jsonpCallback; 12468 12469 // Save the callback name for future use 12470 oldCallbacks.push( callbackName ); 12471 } 12472 12473 // Call if it was a function and we have a response 12474 if ( responseContainer && isFunction( overwritten ) ) { 12475 overwritten( responseContainer[ 0 ] ); 12476 } 12477 12478 responseContainer = overwritten = undefined; 12479 } ); 12480 12481 // Delegate to script 12482 return "script"; 12483 } 12484} ); 12485 12486 12487 12488 12489// Support: Safari 8 only 12490// In Safari 8 documents created via document.implementation.createHTMLDocument 12491// collapse sibling forms: the second one becomes a child of the first one. 12492// Because of that, this security measure has to be disabled in Safari 8. 12493// https://bugs.webkit.org/show_bug.cgi?id=137337 12494support.createHTMLDocument = ( function() { 12495 var body = document.implementation.createHTMLDocument( "" ).body; 12496 body.innerHTML = "<form></form><form></form>"; 12497 return body.childNodes.length === 2; 12498} )(); 12499 12500 12501// Argument "data" should be string of html 12502// context (optional): If specified, the fragment will be created in this context, 12503// defaults to document 12504// keepScripts (optional): If true, will include scripts passed in the html string 12505jQuery.parseHTML = function( data, context, keepScripts ) { 12506 if ( typeof data !== "string" ) { 12507 return []; 12508 } 12509 if ( typeof context === "boolean" ) { 12510 keepScripts = context; 12511 context = false; 12512 } 12513 12514 var base, parsed, scripts; 12515 12516 if ( !context ) { 12517 12518 // Stop scripts or inline event handlers from being executed immediately 12519 // by using document.implementation 12520 if ( support.createHTMLDocument ) { 12521 context = document.implementation.createHTMLDocument( "" ); 12522 12523 // Set the base href for the created document 12524 // so any parsed elements with URLs 12525 // are based on the document's URL (gh-2965) 12526 base = context.createElement( "base" ); 12527 base.href = document.location.href; 12528 context.head.appendChild( base ); 12529 } else { 12530 context = document; 12531 } 12532 } 12533 12534 parsed = rsingleTag.exec( data ); 12535 scripts = !keepScripts && []; 12536 12537 // Single tag 12538 if ( parsed ) { 12539 return [ context.createElement( parsed[ 1 ] ) ]; 12540 } 12541 12542 parsed = buildFragment( [ data ], context, scripts ); 12543 12544 if ( scripts && scripts.length ) { 12545 jQuery( scripts ).remove(); 12546 } 12547 12548 return jQuery.merge( [], parsed.childNodes ); 12549}; 12550 12551 12552/** 12553 * Load a url into a page 12554 */ 12555jQuery.fn.load = function( url, params, callback ) { 12556 var selector, type, response, 12557 self = this, 12558 off = url.indexOf( " " ); 12559 12560 if ( off > -1 ) { 12561 selector = stripAndCollapse( url.slice( off ) ); 12562 url = url.slice( 0, off ); 12563 } 12564 12565 // If it's a function 12566 if ( isFunction( params ) ) { 12567 12568 // We assume that it's the callback 12569 callback = params; 12570 params = undefined; 12571 12572 // Otherwise, build a param string 12573 } else if ( params && typeof params === "object" ) { 12574 type = "POST"; 12575 } 12576 12577 // If we have elements to modify, make the request 12578 if ( self.length > 0 ) { 12579 jQuery.ajax( { 12580 url: url, 12581 12582 // If "type" variable is undefined, then "GET" method will be used. 12583 // Make value of this field explicit since 12584 // user can override it through ajaxSetup method 12585 type: type || "GET", 12586 dataType: "html", 12587 data: params 12588 } ).done( function( responseText ) { 12589 12590 // Save response for use in complete callback 12591 response = arguments; 12592 12593 self.html( selector ? 12594 12595 // If a selector was specified, locate the right elements in a dummy div 12596 // Exclude scripts to avoid IE 'Permission Denied' errors 12597 jQuery( "<div>" ).append( jQuery.parseHTML( responseText ) ).find( selector ) : 12598 12599 // Otherwise use the full result 12600 responseText ); 12601 12602 // If the request succeeds, this function gets "data", "status", "jqXHR" 12603 // but they are ignored because response was set above. 12604 // If it fails, this function gets "jqXHR", "status", "error" 12605 } ).always( callback && function( jqXHR, status ) { 12606 self.each( function() { 12607 callback.apply( this, response || [ jqXHR.responseText, status, jqXHR ] ); 12608 } ); 12609 } ); 12610 } 12611 12612 return this; 12613}; 12614 12615 12616 12617 12618jQuery.expr.pseudos.animated = function( elem ) { 12619 return jQuery.grep( jQuery.timers, function( fn ) { 12620 return elem === fn.elem; 12621 } ).length; 12622}; 12623 12624 12625 12626 12627jQuery.offset = { 12628 setOffset: function( elem, options, i ) { 12629 var curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition, 12630 position = jQuery.css( elem, "position" ), 12631 curElem = jQuery( elem ), 12632 props = {}; 12633 12634 // Set position first, in-case top/left are set even on static elem 12635 if ( position === "static" ) { 12636 elem.style.position = "relative"; 12637 } 12638 12639 curOffset = curElem.offset(); 12640 curCSSTop = jQuery.css( elem, "top" ); 12641 curCSSLeft = jQuery.css( elem, "left" ); 12642 calculatePosition = ( position === "absolute" || position === "fixed" ) && 12643 ( curCSSTop + curCSSLeft ).indexOf( "auto" ) > -1; 12644 12645 // Need to be able to calculate position if either 12646 // top or left is auto and position is either absolute or fixed 12647 if ( calculatePosition ) { 12648 curPosition = curElem.position(); 12649 curTop = curPosition.top; 12650 curLeft = curPosition.left; 12651 12652 } else { 12653 curTop = parseFloat( curCSSTop ) || 0; 12654 curLeft = parseFloat( curCSSLeft ) || 0; 12655 } 12656 12657 if ( isFunction( options ) ) { 12658 12659 // Use jQuery.extend here to allow modification of coordinates argument (gh-1848) 12660 options = options.call( elem, i, jQuery.extend( {}, curOffset ) ); 12661 } 12662 12663 if ( options.top != null ) { 12664 props.top = ( options.top - curOffset.top ) + curTop; 12665 } 12666 if ( options.left != null ) { 12667 props.left = ( options.left - curOffset.left ) + curLeft; 12668 } 12669 12670 if ( "using" in options ) { 12671 options.using.call( elem, props ); 12672 12673 } else { 12674 curElem.css( props ); 12675 } 12676 } 12677}; 12678 12679jQuery.fn.extend( { 12680 12681 // offset() relates an element's border box to the document origin 12682 offset: function( options ) { 12683 12684 // Preserve chaining for setter 12685 if ( arguments.length ) { 12686 return options === undefined ? 12687 this : 12688 this.each( function( i ) { 12689 jQuery.offset.setOffset( this, options, i ); 12690 } ); 12691 } 12692 12693 var rect, win, 12694 elem = this[ 0 ]; 12695 12696 if ( !elem ) { 12697 return; 12698 } 12699 12700 // Return zeros for disconnected and hidden (display: none) elements (gh-2310) 12701 // Support: IE <=11 only 12702 // Running getBoundingClientRect on a 12703 // disconnected node in IE throws an error 12704 if ( !elem.getClientRects().length ) { 12705 return { top: 0, left: 0 }; 12706 } 12707 12708 // Get document-relative position by adding viewport scroll to viewport-relative gBCR 12709 rect = elem.getBoundingClientRect(); 12710 win = elem.ownerDocument.defaultView; 12711 return { 12712 top: rect.top + win.pageYOffset, 12713 left: rect.left + win.pageXOffset 12714 }; 12715 }, 12716 12717 // position() relates an element's margin box to its offset parent's padding box 12718 // This corresponds to the behavior of CSS absolute positioning 12719 position: function() { 12720 if ( !this[ 0 ] ) { 12721 return; 12722 } 12723 12724 var offsetParent, offset, doc, 12725 elem = this[ 0 ], 12726 parentOffset = { top: 0, left: 0 }; 12727 12728 // position:fixed elements are offset from the viewport, which itself always has zero offset 12729 if ( jQuery.css( elem, "position" ) === "fixed" ) { 12730 12731 // Assume position:fixed implies availability of getBoundingClientRect 12732 offset = elem.getBoundingClientRect(); 12733 12734 } else { 12735 offset = this.offset(); 12736 12737 // Account for the *real* offset parent, which can be the document or its root element 12738 // when a statically positioned element is identified 12739 doc = elem.ownerDocument; 12740 offsetParent = elem.offsetParent || doc.documentElement; 12741 while ( offsetParent && 12742 ( offsetParent === doc.body || offsetParent === doc.documentElement ) && 12743 jQuery.css( offsetParent, "position" ) === "static" ) { 12744 12745 offsetParent = offsetParent.parentNode; 12746 } 12747 if ( offsetParent && offsetParent !== elem && offsetParent.nodeType === 1 ) { 12748 12749 // Incorporate borders into its offset, since they are outside its content origin 12750 parentOffset = jQuery( offsetParent ).offset(); 12751 parentOffset.top += jQuery.css( offsetParent, "borderTopWidth", true ); 12752 parentOffset.left += jQuery.css( offsetParent, "borderLeftWidth", true ); 12753 } 12754 } 12755 12756 // Subtract parent offsets and element margins 12757 return { 12758 top: offset.top - parentOffset.top - jQuery.css( elem, "marginTop", true ), 12759 left: offset.left - parentOffset.left - jQuery.css( elem, "marginLeft", true ) 12760 }; 12761 }, 12762 12763 // This method will return documentElement in the following cases: 12764 // 1) For the element inside the iframe without offsetParent, this method will return 12765 // documentElement of the parent window 12766 // 2) For the hidden or detached element 12767 // 3) For body or html element, i.e. in case of the html node - it will return itself 12768 // 12769 // but those exceptions were never presented as a real life use-cases 12770 // and might be considered as more preferable results. 12771 // 12772 // This logic, however, is not guaranteed and can change at any point in the future 12773 offsetParent: function() { 12774 return this.map( function() { 12775 var offsetParent = this.offsetParent; 12776 12777 while ( offsetParent && jQuery.css( offsetParent, "position" ) === "static" ) { 12778 offsetParent = offsetParent.offsetParent; 12779 } 12780 12781 return offsetParent || documentElement; 12782 } ); 12783 } 12784} ); 12785 12786// Create scrollLeft and scrollTop methods 12787jQuery.each( { scrollLeft: "pageXOffset", scrollTop: "pageYOffset" }, function( method, prop ) { 12788 var top = "pageYOffset" === prop; 12789 12790 jQuery.fn[ method ] = function( val ) { 12791 return access( this, function( elem, method, val ) { 12792 12793 // Coalesce documents and windows 12794 var win; 12795 if ( isWindow( elem ) ) { 12796 win = elem; 12797 } else if ( elem.nodeType === 9 ) { 12798 win = elem.defaultView; 12799 } 12800 12801 if ( val === undefined ) { 12802 return win ? win[ prop ] : elem[ method ]; 12803 } 12804 12805 if ( win ) { 12806 win.scrollTo( 12807 !top ? val : win.pageXOffset, 12808 top ? val : win.pageYOffset 12809 ); 12810 12811 } else { 12812 elem[ method ] = val; 12813 } 12814 }, method, val, arguments.length ); 12815 }; 12816} ); 12817 12818// Support: Safari <=7 - 9.1, Chrome <=37 - 49 12819// Add the top/left cssHooks using jQuery.fn.position 12820// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084 12821// Blink bug: https://bugs.chromium.org/p/chromium/issues/detail?id=589347 12822// getComputedStyle returns percent when specified for top/left/bottom/right; 12823// rather than make the css module depend on the offset module, just check for it here 12824jQuery.each( [ "top", "left" ], function( _i, prop ) { 12825 jQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition, 12826 function( elem, computed ) { 12827 if ( computed ) { 12828 computed = curCSS( elem, prop ); 12829 12830 // If curCSS returns percentage, fallback to offset 12831 return rnumnonpx.test( computed ) ? 12832 jQuery( elem ).position()[ prop ] + "px" : 12833 computed; 12834 } 12835 } 12836 ); 12837} ); 12838 12839 12840// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods 12841jQuery.each( { Height: "height", Width: "width" }, function( name, type ) { 12842 jQuery.each( { 12843 padding: "inner" + name, 12844 content: type, 12845 "": "outer" + name 12846 }, function( defaultExtra, funcName ) { 12847 12848 // Margin is only for outerHeight, outerWidth 12849 jQuery.fn[ funcName ] = function( margin, value ) { 12850 var chainable = arguments.length && ( defaultExtra || typeof margin !== "boolean" ), 12851 extra = defaultExtra || ( margin === true || value === true ? "margin" : "border" ); 12852 12853 return access( this, function( elem, type, value ) { 12854 var doc; 12855 12856 if ( isWindow( elem ) ) { 12857 12858 // $( window ).outerWidth/Height return w/h including scrollbars (gh-1729) 12859 return funcName.indexOf( "outer" ) === 0 ? 12860 elem[ "inner" + name ] : 12861 elem.document.documentElement[ "client" + name ]; 12862 } 12863 12864 // Get document width or height 12865 if ( elem.nodeType === 9 ) { 12866 doc = elem.documentElement; 12867 12868 // Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height], 12869 // whichever is greatest 12870 return Math.max( 12871 elem.body[ "scroll" + name ], doc[ "scroll" + name ], 12872 elem.body[ "offset" + name ], doc[ "offset" + name ], 12873 doc[ "client" + name ] 12874 ); 12875 } 12876 12877 return value === undefined ? 12878 12879 // Get width or height on the element, requesting but not forcing parseFloat 12880 jQuery.css( elem, type, extra ) : 12881 12882 // Set width or height on the element 12883 jQuery.style( elem, type, value, extra ); 12884 }, type, chainable ? margin : undefined, chainable ); 12885 }; 12886 } ); 12887} ); 12888 12889 12890jQuery.each( [ 12891 "ajaxStart", 12892 "ajaxStop", 12893 "ajaxComplete", 12894 "ajaxError", 12895 "ajaxSuccess", 12896 "ajaxSend" 12897], function( _i, type ) { 12898 jQuery.fn[ type ] = function( fn ) { 12899 return this.on( type, fn ); 12900 }; 12901} ); 12902 12903 12904 12905 12906jQuery.fn.extend( { 12907 12908 bind: function( types, data, fn ) { 12909 return this.on( types, null, data, fn ); 12910 }, 12911 unbind: function( types, fn ) { 12912 return this.off( types, null, fn ); 12913 }, 12914 12915 delegate: function( selector, types, data, fn ) { 12916 return this.on( types, selector, data, fn ); 12917 }, 12918 undelegate: function( selector, types, fn ) { 12919 12920 // ( namespace ) or ( selector, types [, fn] ) 12921 return arguments.length === 1 ? 12922 this.off( selector, "**" ) : 12923 this.off( types, selector || "**", fn ); 12924 }, 12925 12926 hover: function( fnOver, fnOut ) { 12927 return this 12928 .on( "mouseenter", fnOver ) 12929 .on( "mouseleave", fnOut || fnOver ); 12930 } 12931} ); 12932 12933jQuery.each( 12934 ( "blur focus focusin focusout resize scroll click dblclick " + 12935 "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " + 12936 "change select submit keydown keypress keyup contextmenu" ).split( " " ), 12937 function( _i, name ) { 12938 12939 // Handle event binding 12940 jQuery.fn[ name ] = function( data, fn ) { 12941 return arguments.length > 0 ? 12942 this.on( name, null, data, fn ) : 12943 this.trigger( name ); 12944 }; 12945 } 12946); 12947 12948 12949 12950 12951// Support: Android <=4.0 only 12952// Make sure we trim BOM and NBSP 12953// Require that the "whitespace run" starts from a non-whitespace 12954// to avoid O(N^2) behavior when the engine would try matching "\s+$" at each space position. 12955var rtrim = /^[\s\uFEFF\xA0]+|([^\s\uFEFF\xA0])[\s\uFEFF\xA0]+$/g; 12956 12957// Bind a function to a context, optionally partially applying any 12958// arguments. 12959// jQuery.proxy is deprecated to promote standards (specifically Function#bind) 12960// However, it is not slated for removal any time soon 12961jQuery.proxy = function( fn, context ) { 12962 var tmp, args, proxy; 12963 12964 if ( typeof context === "string" ) { 12965 tmp = fn[ context ]; 12966 context = fn; 12967 fn = tmp; 12968 } 12969 12970 // Quick check to determine if target is callable, in the spec 12971 // this throws a TypeError, but we will just return undefined. 12972 if ( !isFunction( fn ) ) { 12973 return undefined; 12974 } 12975 12976 // Simulated bind 12977 args = slice.call( arguments, 2 ); 12978 proxy = function() { 12979 return fn.apply( context || this, args.concat( slice.call( arguments ) ) ); 12980 }; 12981 12982 // Set the guid of unique handler to the same of original handler, so it can be removed 12983 proxy.guid = fn.guid = fn.guid || jQuery.guid++; 12984 12985 return proxy; 12986}; 12987 12988jQuery.holdReady = function( hold ) { 12989 if ( hold ) { 12990 jQuery.readyWait++; 12991 } else { 12992 jQuery.ready( true ); 12993 } 12994}; 12995jQuery.isArray = Array.isArray; 12996jQuery.parseJSON = JSON.parse; 12997jQuery.nodeName = nodeName; 12998jQuery.isFunction = isFunction; 12999jQuery.isWindow = isWindow; 13000jQuery.camelCase = camelCase; 13001jQuery.type = toType; 13002 13003jQuery.now = Date.now; 13004 13005jQuery.isNumeric = function( obj ) { 13006 13007 // As of jQuery 3.0, isNumeric is limited to 13008 // strings and numbers (primitives or objects) 13009 // that can be coerced to finite numbers (gh-2662) 13010 var type = jQuery.type( obj ); 13011 return ( type === "number" || type === "string" ) && 13012 13013 // parseFloat NaNs numeric-cast false positives ("") 13014 // ...but misinterprets leading-number strings, particularly hex literals ("0x...") 13015 // subtraction forces infinities to NaN 13016 !isNaN( obj - parseFloat( obj ) ); 13017}; 13018 13019jQuery.trim = function( text ) { 13020 return text == null ? 13021 "" : 13022 ( text + "" ).replace( rtrim, "$1" ); 13023}; 13024 13025 13026 13027// Register as a named AMD module, since jQuery can be concatenated with other 13028// files that may use define, but not via a proper concatenation script that 13029// understands anonymous AMD modules. A named AMD is safest and most robust 13030// way to register. Lowercase jquery is used because AMD module names are 13031// derived from file names, and jQuery is normally delivered in a lowercase 13032// file name. Do this after creating the global so that if an AMD module wants 13033// to call noConflict to hide this version of jQuery, it will work. 13034 13035// Note that for maximum portability, libraries that are not jQuery should 13036// declare themselves as anonymous modules, and avoid setting a global if an 13037// AMD loader is present. jQuery is a special case. For more information, see 13038// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon 13039 13040if ( true ) { 13041 !(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_RESULT__ = (function() { 13042 return jQuery; 13043 }).apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), 13044 __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); 13045} 13046 13047 13048 13049 13050var 13051 13052 // Map over jQuery in case of overwrite 13053 _jQuery = window.jQuery, 13054 13055 // Map over the $ in case of overwrite 13056 _$ = window.$; 13057 13058jQuery.noConflict = function( deep ) { 13059 if ( window.$ === jQuery ) { 13060 window.$ = _$; 13061 } 13062 13063 if ( deep && window.jQuery === jQuery ) { 13064 window.jQuery = _jQuery; 13065 } 13066 13067 return jQuery; 13068}; 13069 13070// Expose jQuery and $ identifiers, even in AMD 13071// (trac-7102#comment:10, https://github.com/jquery/jquery/pull/557) 13072// and CommonJS for browser emulators (trac-13566) 13073if ( typeof noGlobal === "undefined" ) { 13074 window.jQuery = window.$ = jQuery; 13075} 13076 13077 13078 13079 13080return jQuery; 13081} ); 13082 13083 13084/***/ }), 13085
vendor: 9,797 bytes, lines 13086-13309
13086/***/ "./node_modules/process/browser.js": 13087/*!*****************************************!*\ 13088 !*** ./node_modules/process/browser.js ***! 13089 \*****************************************/ 13090/***/ ((module) => { 13091 13092// shim for using process in browser 13093var process = module.exports = {}; 13094 13095// cached from whatever global is present so that test runners that stub it 13096// don't break things. But we need to wrap it in a try catch in case it is 13097// wrapped in strict mode code which doesn't define any globals. It's inside a 13098// function because try/catches deoptimize in certain engines. 13099 13100var cachedSetTimeout; 13101var cachedClearTimeout; 13102 13103function defaultSetTimout() { 13104 throw new Error('setTimeout has not been defined'); 13105} 13106function defaultClearTimeout () { 13107 throw new Error('clearTimeout has not been defined'); 13108} 13109(function () { 13110 try { 13111 if (typeof setTimeout === 'function') { 13112 cachedSetTimeout = setTimeout; 13113 } else { 13114 cachedSetTimeout = defaultSetTimout; 13115 } 13116 } catch (e) { 13117 cachedSetTimeout = defaultSetTimout; 13118 } 13119 try { 13120 if (typeof clearTimeout === 'function') { 13121 cachedClearTimeout = clearTimeout; 13122 } else { 13123 cachedClearTimeout = defaultClearTimeout; 13124 } 13125 } catch (e) { 13126 cachedClearTimeout = defaultClearTimeout; 13127 } 13128} ()) 13129function runTimeout(fun) { 13130 if (cachedSetTimeout === setTimeout) { 13131 //normal enviroments in sane situations 13132 return setTimeout(fun, 0); 13133 } 13134 // if setTimeout wasn't available but was latter defined 13135 if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) { 13136 cachedSetTimeout = setTimeout; 13137 return setTimeout(fun, 0); 13138 } 13139 try { 13140 // when when somebody has screwed with setTimeout but no I.E. maddness 13141 return cachedSetTimeout(fun, 0); 13142 } catch(e){ 13143 try { 13144 // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally 13145 return cachedSetTimeout.call(null, fun, 0); 13146 } catch(e){ 13147 // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error 13148 return cachedSetTimeout.call(this, fun, 0); 13149 } 13150 } 13151 13152 13153} 13154function runClearTimeout(marker) { 13155 if (cachedClearTimeout === clearTimeout) { 13156 //normal enviroments in sane situations 13157 return clearTimeout(marker); 13158 } 13159 // if clearTimeout wasn't available but was latter defined 13160 if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) { 13161 cachedClearTimeout = clearTimeout; 13162 return clearTimeout(marker); 13163 } 13164 try { 13165 // when when somebody has screwed with setTimeout but no I.E. maddness 13166 return cachedClearTimeout(marker); 13167 } catch (e){ 13168 try { 13169 // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally 13170 return cachedClearTimeout.call(null, marker); 13171 } catch (e){ 13172 // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error. 13173 // Some versions of I.E. have different rules for clearTimeout vs setTimeout 13174 return cachedClearTimeout.call(this, marker); 13175 } 13176 } 13177 13178 13179 13180} 13181var queue = []; 13182var draining = false; 13183var currentQueue; 13184var queueIndex = -1; 13185 13186function cleanUpNextTick() { 13187 if (!draining || !currentQueue) { 13188 return; 13189 } 13190 draining = false; 13191 if (currentQueue.length) { 13192 queue = currentQueue.concat(queue); 13193 } else { 13194 queueIndex = -1; 13195 } 13196 if (queue.length) { 13197 drainQueue(); 13198 } 13199} 13200 13201function drainQueue() { 13202 if (draining) { 13203 return; 13204 } 13205 var timeout = runTimeout(cleanUpNextTick); 13206 draining = true; 13207 13208 var len = queue.length; 13209 while(len) { 13210 currentQueue = queue; 13211 queue = []; 13212 while (++queueIndex < len) { 13213 if (currentQueue) { 13214 currentQueue[queueIndex].run(); 13215 } 13216 } 13217 queueIndex = -1; 13218 len = queue.length; 13219 } 13220 currentQueue = null; 13221 draining = false; 13222 runClearTimeout(timeout); 13223} 13224 13225process.nextTick = function (fun) { 13226 var args = new Array(arguments.length - 1); 13227 if (arguments.length > 1) { 13228 for (var i = 1; i < arguments.length; i++) { 13229 args[i - 1] = arguments[i]; 13230 } 13231 } 13232 queue.push(new Item(fun, args)); 13233 if (queue.length === 1 && !draining) { 13234 runTimeout(drainQueue); 13235 } 13236}; 13237 13238// v8 likes predictible objects 13239function Item(fun, array) { 13240 this.fun = fun; 13241 this.array = array; 13242} 13243Item.prototype.run = function () { 13244 this.fun.apply(null, this.array); 13245}; 13246process.title = 'browser'; 13247process.browser = true; 13248process.env = {}; 13249process.argv = []; 13250process.version = ''; // empty string to avoid regexp issues 13251process.versions = {}; 13252 13253function noop() {} 13254 13255process.on = noop; 13256process.addListener = noop; 13257process.once = noop; 13258process.off = noop; 13259process.removeListener = noop; 13260process.removeAllListeners = noop; 13261process.emit = noop; 13262process.prependListener = noop; 13263process.prependOnceListener = noop; 13264 13265process.listeners = function (name) { return [] } 13266 13267process.binding = function (name) { 13268 throw new Error('process.binding is not supported'); 13269}; 13270 13271process.cwd = function () { return '/' }; 13272process.chdir = function (dir) { 13273 throw new Error('process.chdir is not supported'); 13274}; 13275process.umask = function() { return 0; }; 13276 13277 13278/***/ }), 13279 13280/***/ "./node_modules/style-loader/dist/cjs.js!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-13.use[1]!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-13.use[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./node_modules/vue-spinner/src/ClipLoader.vue?vue&type=style&index=0&id=35989352&lang=css": 13281/*!***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\ 13282 !*** ./node_modules/style-loader/dist/cjs.js!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-13.use[1]!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-13.use[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./node_modules/vue-spinner/src/ClipLoader.vue?vue&type=style&index=0&id=35989352&lang=css ***! 13283 \***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/ 13284/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 13285 13286"use strict"; 13287__webpack_require__.r(__webpack_exports__); 13288/* harmony export */ __webpack_require__.d(__webpack_exports__, { 13289/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) 13290/* harmony export */ }); 13291/* harmony import */ var _style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! !../../style-loader/dist/runtime/injectStylesIntoStyleTag.js */ "./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js"); 13292/* harmony import */ var _style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__); 13293/* harmony import */ var _css_loader_dist_cjs_js_clonedRuleSet_13_use_1_vue_loader_lib_loaders_stylePostLoader_js_postcss_loader_dist_cjs_js_clonedRuleSet_13_use_2_vue_loader_lib_index_js_vue_loader_options_ClipLoader_vue_vue_type_style_index_0_id_35989352_lang_css__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! !!../../css-loader/dist/cjs.js??clonedRuleSet-13.use[1]!../../vue-loader/lib/loaders/stylePostLoader.js!../../postcss-loader/dist/cjs.js??clonedRuleSet-13.use[2]!../../vue-loader/lib/index.js??vue-loader-options!./ClipLoader.vue?vue&type=style&index=0&id=35989352&lang=css */ "./node_modules/css-loader/dist/cjs.js??clonedRuleSet-13.use[1]!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-13.use[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./node_modules/vue-spinner/src/ClipLoader.vue?vue&type=style&index=0&id=35989352&lang=css"); 13294 13295 13296 13297var options = {}; 13298 13299options.insert = "head"; 13300options.singleton = false; 13301 13302var update = _style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default()(_css_loader_dist_cjs_js_clonedRuleSet_13_use_1_vue_loader_lib_loaders_stylePostLoader_js_postcss_loader_dist_cjs_js_clonedRuleSet_13_use_2_vue_loader_lib_index_js_vue_loader_options_ClipLoader_vue_vue_type_style_index_0_id_35989352_lang_css__WEBPACK_IMPORTED_MODULE_1__["default"], options); 13303 13304 13305 13306/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_css_loader_dist_cjs_js_clonedRuleSet_13_use_1_vue_loader_lib_loaders_stylePostLoader_js_postcss_loader_dist_cjs_js_clonedRuleSet_13_use_2_vue_loader_lib_index_js_vue_loader_options_ClipLoader_vue_vue_type_style_index_0_id_35989352_lang_css__WEBPACK_IMPORTED_MODULE_1__["default"].locals || {}); 13307 13308/***/ }), 13309
vendor: 7,200 bytes, lines 13310-13588
13310/***/ "./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js": 13311/*!****************************************************************************!*\ 13312 !*** ./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js ***! 13313 \****************************************************************************/ 13314/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 13315 13316"use strict"; 13317 13318 13319var isOldIE = function isOldIE() { 13320 var memo; 13321 return function memorize() { 13322 if (typeof memo === 'undefined') { 13323 // Test for IE <= 9 as proposed by Browserhacks 13324 // @see http://browserhacks.com/#hack-e71d8692f65334173fee715c222cb805 13325 // Tests for existence of standard globals is to allow style-loader 13326 // to operate correctly into non-standard environments 13327 // @see https://github.com/webpack-contrib/style-loader/issues/177 13328 memo = Boolean(window && document && document.all && !window.atob); 13329 } 13330 13331 return memo; 13332 }; 13333}(); 13334 13335var getTarget = function getTarget() { 13336 var memo = {}; 13337 return function memorize(target) { 13338 if (typeof memo[target] === 'undefined') { 13339 var styleTarget = document.querySelector(target); // Special case to return head of iframe instead of iframe itself 13340 13341 if (window.HTMLIFrameElement && styleTarget instanceof window.HTMLIFrameElement) { 13342 try { 13343 // This will throw an exception if access to iframe is blocked 13344 // due to cross-origin restrictions 13345 styleTarget = styleTarget.contentDocument.head; 13346 } catch (e) { 13347 // istanbul ignore next 13348 styleTarget = null; 13349 } 13350 } 13351 13352 memo[target] = styleTarget; 13353 } 13354 13355 return memo[target]; 13356 }; 13357}(); 13358 13359var stylesInDom = []; 13360 13361function getIndexByIdentifier(identifier) { 13362 var result = -1; 13363 13364 for (var i = 0; i < stylesInDom.length; i++) { 13365 if (stylesInDom[i].identifier === identifier) { 13366 result = i; 13367 break; 13368 } 13369 } 13370 13371 return result; 13372} 13373 13374function modulesToDom(list, options) { 13375 var idCountMap = {}; 13376 var identifiers = []; 13377 13378 for (var i = 0; i < list.length; i++) { 13379 var item = list[i]; 13380 var id = options.base ? item[0] + options.base : item[0]; 13381 var count = idCountMap[id] || 0; 13382 var identifier = "".concat(id, " ").concat(count); 13383 idCountMap[id] = count + 1; 13384 var index = getIndexByIdentifier(identifier); 13385 var obj = { 13386 css: item[1], 13387 media: item[2], 13388 sourceMap: item[3] 13389 }; 13390 13391 if (index !== -1) { 13392 stylesInDom[index].references++; 13393 stylesInDom[index].updater(obj); 13394 } else { 13395 stylesInDom.push({ 13396 identifier: identifier, 13397 updater: addStyle(obj, options), 13398 references: 1 13399 }); 13400 } 13401 13402 identifiers.push(identifier); 13403 } 13404 13405 return identifiers; 13406} 13407 13408function insertStyleElement(options) { 13409 var style = document.createElement('style'); 13410 var attributes = options.attributes || {}; 13411 13412 if (typeof attributes.nonce === 'undefined') { 13413 var nonce = true ? __webpack_require__.nc : 0; 13414 13415 if (nonce) { 13416 attributes.nonce = nonce; 13417 } 13418 } 13419 13420 Object.keys(attributes).forEach(function (key) { 13421 style.setAttribute(key, attributes[key]); 13422 }); 13423 13424 if (typeof options.insert === 'function') { 13425 options.insert(style); 13426 } else { 13427 var target = getTarget(options.insert || 'head'); 13428 13429 if (!target) { 13430 throw new Error("Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid."); 13431 } 13432 13433 target.appendChild(style); 13434 } 13435 13436 return style; 13437} 13438 13439function removeStyleElement(style) { 13440 // istanbul ignore if 13441 if (style.parentNode === null) { 13442 return false; 13443 } 13444 13445 style.parentNode.removeChild(style); 13446} 13447/* istanbul ignore next */ 13448 13449 13450var replaceText = function replaceText() { 13451 var textStore = []; 13452 return function replace(index, replacement) { 13453 textStore[index] = replacement; 13454 return textStore.filter(Boolean).join('\n'); 13455 }; 13456}(); 13457 13458function applyToSingletonTag(style, index, remove, obj) { 13459 var css = remove ? '' : obj.media ? "@media ".concat(obj.media, " {").concat(obj.css, "}") : obj.css; // For old IE 13460 13461 /* istanbul ignore if */ 13462 13463 if (style.styleSheet) { 13464 style.styleSheet.cssText = replaceText(index, css); 13465 } else { 13466 var cssNode = document.createTextNode(css); 13467 var childNodes = style.childNodes; 13468 13469 if (childNodes[index]) { 13470 style.removeChild(childNodes[index]); 13471 } 13472 13473 if (childNodes.length) { 13474 style.insertBefore(cssNode, childNodes[index]); 13475 } else { 13476 style.appendChild(cssNode); 13477 } 13478 } 13479} 13480 13481function applyToTag(style, options, obj) { 13482 var css = obj.css; 13483 var media = obj.media; 13484 var sourceMap = obj.sourceMap; 13485 13486 if (media) { 13487 style.setAttribute('media', media); 13488 } else { 13489 style.removeAttribute('media'); 13490 } 13491 13492 if (sourceMap && typeof btoa !== 'undefined') { 13493 css += "\n/*# sourceMappingURL=data:application/json;base64,".concat(btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))), " */"); 13494 } // For old IE 13495 13496 /* istanbul ignore if */ 13497 13498 13499 if (style.styleSheet) { 13500 style.styleSheet.cssText = css; 13501 } else { 13502 while (style.firstChild) { 13503 style.removeChild(style.firstChild); 13504 } 13505 13506 style.appendChild(document.createTextNode(css)); 13507 } 13508} 13509 13510var singleton = null; 13511var singletonCounter = 0; 13512 13513function addStyle(obj, options) { 13514 var style; 13515 var update; 13516 var remove; 13517 13518 if (options.singleton) { 13519 var styleIndex = singletonCounter++; 13520 style = singleton || (singleton = insertStyleElement(options)); 13521 update = applyToSingletonTag.bind(null, style, styleIndex, false); 13522 remove = applyToSingletonTag.bind(null, style, styleIndex, true); 13523 } else { 13524 style = insertStyleElement(options); 13525 update = applyToTag.bind(null, style, options); 13526 13527 remove = function remove() { 13528 removeStyleElement(style); 13529 }; 13530 } 13531 13532 update(obj); 13533 return function updateStyle(newObj) { 13534 if (newObj) { 13535 if (newObj.css === obj.css && newObj.media === obj.media && newObj.sourceMap === obj.sourceMap) { 13536 return; 13537 } 13538 13539 update(obj = newObj); 13540 } else { 13541 remove(); 13542 } 13543 }; 13544} 13545 13546module.exports = function (list, options) { 13547 options = options || {}; // Force single-tag solution on IE6-9, which has a hard limit on the # of <style> 13548 // tags it will allow on a page 13549 13550 if (!options.singleton && typeof options.singleton !== 'boolean') { 13551 options.singleton = isOldIE(); 13552 } 13553 13554 list = list || []; 13555 var lastIdentifiers = modulesToDom(list, options); 13556 return function update(newList) { 13557 newList = newList || []; 13558 13559 if (Object.prototype.toString.call(newList) !== '[object Array]') { 13560 return; 13561 } 13562 13563 for (var i = 0; i < lastIdentifiers.length; i++) { 13564 var identifier = lastIdentifiers[i]; 13565 var index = getIndexByIdentifier(identifier); 13566 stylesInDom[index].references--; 13567 } 13568 13569 var newLastIdentifiers = modulesToDom(newList, options); 13570 13571 for (var _i = 0; _i < lastIdentifiers.length; _i++) { 13572 var _identifier = lastIdentifiers[_i]; 13573 13574 var _index = getIndexByIdentifier(_identifier); 13575 13576 if (stylesInDom[_index].references === 0) { 13577 stylesInDom[_index].updater(); 13578 13579 stylesInDom.splice(_index, 1); 13580 } 13581 } 13582 13583 lastIdentifiers = newLastIdentifiers; 13584 }; 13585}; 13586 13587/***/ }), 13588
vendor: 10,020 bytes, lines 13589-13765
13589/***/ "./node_modules/vue-spinner/src/ClipLoader.vue": 13590/*!*****************************************************!*\ 13591 !*** ./node_modules/vue-spinner/src/ClipLoader.vue ***! 13592 \*****************************************************/ 13593/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 13594 13595"use strict"; 13596__webpack_require__.r(__webpack_exports__); 13597/* harmony export */ __webpack_require__.d(__webpack_exports__, { 13598/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) 13599/* harmony export */ }); 13600/* harmony import */ var _ClipLoader_vue_vue_type_template_id_35989352__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./ClipLoader.vue?vue&type=template&id=35989352 */ "./node_modules/vue-spinner/src/ClipLoader.vue?vue&type=template&id=35989352"); 13601/* harmony import */ var _ClipLoader_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./ClipLoader.vue?vue&type=script&lang=js */ "./node_modules/vue-spinner/src/ClipLoader.vue?vue&type=script&lang=js"); 13602/* harmony import */ var _ClipLoader_vue_vue_type_style_index_0_id_35989352_lang_css__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./ClipLoader.vue?vue&type=style&index=0&id=35989352&lang=css */ "./node_modules/vue-spinner/src/ClipLoader.vue?vue&type=style&index=0&id=35989352&lang=css"); 13603/* harmony import */ var _vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! !../../vue-loader/lib/runtime/componentNormalizer.js */ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js"); 13604 13605 13606 13607; 13608 13609 13610/* normalize component */ 13611 13612var component = (0,_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_3__["default"])( 13613 _ClipLoader_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_1__["default"], 13614 _ClipLoader_vue_vue_type_template_id_35989352__WEBPACK_IMPORTED_MODULE_0__.render, 13615 _ClipLoader_vue_vue_type_template_id_35989352__WEBPACK_IMPORTED_MODULE_0__.staticRenderFns, 13616 false, 13617 null, 13618 null, 13619 null 13620 13621) 13622 13623/* hot reload */ 13624if (false) { var api; } 13625component.options.__file = "node_modules/vue-spinner/src/ClipLoader.vue" 13626/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (component.exports); 13627 13628/***/ }), 13629 13630/***/ "./node_modules/vue-loader/lib/index.js??vue-loader-options!./node_modules/vue-spinner/src/ClipLoader.vue?vue&type=script&lang=js": 13631/*!****************************************************************************************************************************************!*\ 13632 !*** ./node_modules/vue-loader/lib/index.js??vue-loader-options!./node_modules/vue-spinner/src/ClipLoader.vue?vue&type=script&lang=js ***! 13633 \****************************************************************************************************************************************/ 13634/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 13635 13636"use strict"; 13637__webpack_require__.r(__webpack_exports__); 13638/* harmony export */ __webpack_require__.d(__webpack_exports__, { 13639/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) 13640/* harmony export */ }); 13641 13642/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ 13643 13644 name: 'ClipLoader', 13645 13646 props: { 13647 loading: { 13648 type: Boolean, 13649 default: true 13650 }, 13651 color: { 13652 type: String, 13653 default: '#5dc596' 13654 }, 13655 size: { 13656 type: String, 13657 default: '35px' 13658 }, 13659 radius: { 13660 type: String, 13661 default: '100%' 13662 } 13663 }, 13664 computed: { 13665 spinnerStyle () { 13666 return { 13667 height: this.size, 13668 width: this.size, 13669 borderWidth: '2px', 13670 borderStyle: 'solid', 13671 borderColor: this.color + ' ' + this.color + ' transparent', 13672 borderRadius: this.radius, 13673 background: 'transparent' 13674 } 13675 } 13676 } 13677}); 13678 13679 13680/***/ }), 13681 13682/***/ "./node_modules/vue-spinner/src/ClipLoader.vue?vue&type=style&index=0&id=35989352&lang=css": 13683/*!*************************************************************************************************!*\ 13684 !*** ./node_modules/vue-spinner/src/ClipLoader.vue?vue&type=style&index=0&id=35989352&lang=css ***! 13685 \*************************************************************************************************/ 13686/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 13687 13688"use strict"; 13689__webpack_require__.r(__webpack_exports__); 13690/* harmony import */ var _style_loader_dist_cjs_js_css_loader_dist_cjs_js_clonedRuleSet_13_use_1_vue_loader_lib_loaders_stylePostLoader_js_postcss_loader_dist_cjs_js_clonedRuleSet_13_use_2_vue_loader_lib_index_js_vue_loader_options_ClipLoader_vue_vue_type_style_index_0_id_35989352_lang_css__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../style-loader/dist/cjs.js!../../css-loader/dist/cjs.js??clonedRuleSet-13.use[1]!../../vue-loader/lib/loaders/stylePostLoader.js!../../postcss-loader/dist/cjs.js??clonedRuleSet-13.use[2]!../../vue-loader/lib/index.js??vue-loader-options!./ClipLoader.vue?vue&type=style&index=0&id=35989352&lang=css */ "./node_modules/style-loader/dist/cjs.js!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-13.use[1]!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-13.use[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./node_modules/vue-spinner/src/ClipLoader.vue?vue&type=style&index=0&id=35989352&lang=css"); 13691 13692 13693/***/ }), 13694 13695/***/ "./node_modules/vue-spinner/src/ClipLoader.vue?vue&type=script&lang=js": 13696/*!*****************************************************************************!*\ 13697 !*** ./node_modules/vue-spinner/src/ClipLoader.vue?vue&type=script&lang=js ***! 13698 \*****************************************************************************/ 13699/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 13700 13701"use strict"; 13702__webpack_require__.r(__webpack_exports__); 13703/* harmony export */ __webpack_require__.d(__webpack_exports__, { 13704/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) 13705/* harmony export */ }); 13706/* harmony import */ var _vue_loader_lib_index_js_vue_loader_options_ClipLoader_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../vue-loader/lib/index.js??vue-loader-options!./ClipLoader.vue?vue&type=script&lang=js */ "./node_modules/vue-loader/lib/index.js??vue-loader-options!./node_modules/vue-spinner/src/ClipLoader.vue?vue&type=script&lang=js"); 13707 /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_vue_loader_lib_index_js_vue_loader_options_ClipLoader_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_0__["default"]); 13708 13709/***/ }), 13710 13711/***/ "./node_modules/vue-spinner/src/ClipLoader.vue?vue&type=template&id=35989352": 13712/*!***********************************************************************************!*\ 13713 !*** ./node_modules/vue-spinner/src/ClipLoader.vue?vue&type=template&id=35989352 ***! 13714 \***********************************************************************************/ 13715/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 13716 13717"use strict"; 13718__webpack_require__.r(__webpack_exports__); 13719/* harmony export */ __webpack_require__.d(__webpack_exports__, { 13720/* harmony export */ render: () => (/* reexport safe */ _vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_2_vue_loader_lib_index_js_vue_loader_options_ClipLoader_vue_vue_type_template_id_35989352__WEBPACK_IMPORTED_MODULE_0__.render), 13721/* harmony export */ staticRenderFns: () => (/* reexport safe */ _vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_2_vue_loader_lib_index_js_vue_loader_options_ClipLoader_vue_vue_type_template_id_35989352__WEBPACK_IMPORTED_MODULE_0__.staticRenderFns) 13722/* harmony export */ }); 13723/* harmony import */ var _vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_2_vue_loader_lib_index_js_vue_loader_options_ClipLoader_vue_vue_type_template_id_35989352__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!../../vue-loader/lib/index.js??vue-loader-options!./ClipLoader.vue?vue&type=template&id=35989352 */ "./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./node_modules/vue-spinner/src/ClipLoader.vue?vue&type=template&id=35989352"); 13724 13725 13726/***/ }), 13727 13728/***/ "./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./node_modules/vue-spinner/src/ClipLoader.vue?vue&type=template&id=35989352": 13729/*!***************************************************************************************************************************************************************************************************************************!*\ 13730 !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./node_modules/vue-spinner/src/ClipLoader.vue?vue&type=template&id=35989352 ***! 13731 \***************************************************************************************************************************************************************************************************************************/ 13732/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 13733 13734"use strict"; 13735__webpack_require__.r(__webpack_exports__); 13736/* harmony export */ __webpack_require__.d(__webpack_exports__, { 13737/* harmony export */ render: () => (/* binding */ render), 13738/* harmony export */ staticRenderFns: () => (/* binding */ staticRenderFns) 13739/* harmony export */ }); 13740var render = function render() { 13741 var _vm = this, 13742 _c = _vm._self._c 13743 return _c( 13744 "div", 13745 { 13746 directives: [ 13747 { 13748 name: "show", 13749 rawName: "v-show", 13750 value: _vm.loading, 13751 expression: "loading", 13752 }, 13753 ], 13754 staticClass: "v-spinner", 13755 }, 13756 [_c("div", { staticClass: "v-clip", style: _vm.spinnerStyle })] 13757 ) 13758} 13759var staticRenderFns = [] 13760render._withStripped = true 13761 13762 13763 13764/***/ }), 13765
vendor: 3,357 bytes, lines 13766-13876
13766/***/ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js": 13767/*!********************************************************************!*\ 13768 !*** ./node_modules/vue-loader/lib/runtime/componentNormalizer.js ***! 13769 \********************************************************************/ 13770/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 13771 13772"use strict"; 13773__webpack_require__.r(__webpack_exports__); 13774/* harmony export */ __webpack_require__.d(__webpack_exports__, { 13775/* harmony export */ "default": () => (/* binding */ normalizeComponent) 13776/* harmony export */ }); 13777/* globals __VUE_SSR_CONTEXT__ */ 13778 13779// IMPORTANT: Do NOT use ES2015 features in this file (except for modules). 13780// This module is a runtime utility for cleaner component module output and will 13781// be included in the final webpack user bundle. 13782 13783function normalizeComponent( 13784 scriptExports, 13785 render, 13786 staticRenderFns, 13787 functionalTemplate, 13788 injectStyles, 13789 scopeId, 13790 moduleIdentifier /* server only */, 13791 shadowMode /* vue-cli only */ 13792) { 13793 // Vue.extend constructor export interop 13794 var options = 13795 typeof scriptExports === 'function' ? scriptExports.options : scriptExports 13796 13797 // render functions 13798 if (render) { 13799 options.render = render 13800 options.staticRenderFns = staticRenderFns 13801 options._compiled = true 13802 } 13803 13804 // functional template 13805 if (functionalTemplate) { 13806 options.functional = true 13807 } 13808 13809 // scopedId 13810 if (scopeId) { 13811 options._scopeId = 'data-v-' + scopeId 13812 } 13813 13814 var hook 13815 if (moduleIdentifier) { 13816 // server build 13817 hook = function (context) { 13818 // 2.3 injection 13819 context = 13820 context || // cached call 13821 (this.$vnode && this.$vnode.ssrContext) || // stateful 13822 (this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) // functional 13823 // 2.2 with runInNewContext: true 13824 if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') { 13825 context = __VUE_SSR_CONTEXT__ 13826 } 13827 // inject component styles 13828 if (injectStyles) { 13829 injectStyles.call(this, context) 13830 } 13831 // register component module identifier for async chunk inferrence 13832 if (context && context._registeredComponents) { 13833 context._registeredComponents.add(moduleIdentifier) 13834 } 13835 } 13836 // used by ssr in case component is cached and beforeCreate 13837 // never gets called 13838 options._ssrRegister = hook 13839 } else if (injectStyles) { 13840 hook = shadowMode 13841 ? function () { 13842 injectStyles.call( 13843 this, 13844 (options.functional ? this.parent : this).$root.$options.shadowRoot 13845 ) 13846 } 13847 : injectStyles 13848 } 13849 13850 if (hook) { 13851 if (options.functional) { 13852 // for template-only hot-reload because in that case the render fn doesn't 13853 // go through the normalizer 13854 options._injectStyles = hook 13855 // register for functional component in vue file 13856 var originalRender = options.render 13857 options.render = function renderWithStyleInjection(h, context) { 13858 hook.call(context) 13859 return originalRender(h, context) 13860 } 13861 } else { 13862 // inject component registration as beforeCreate hook 13863 var existing = options.beforeCreate 13864 options.beforeCreate = existing ? [].concat(existing, hook) : [hook] 13865 } 13866 } 13867 13868 return { 13869 exports: scriptExports, 13870 options: options 13871 } 13872} 13873 13874 13875/***/ }), 13876
vendor: 415,308 bytes, lines 13877-25820
13877/***/ "./node_modules/vue/dist/vue.esm.js": 13878/*!******************************************!*\ 13879 !*** ./node_modules/vue/dist/vue.esm.js ***! 13880 \******************************************/ 13881/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 13882 13883"use strict"; 13884__webpack_require__.r(__webpack_exports__); 13885/* harmony export */ __webpack_require__.d(__webpack_exports__, { 13886/* harmony export */ EffectScope: () => (/* binding */ EffectScope), 13887/* harmony export */ computed: () => (/* binding */ computed), 13888/* harmony export */ customRef: () => (/* binding */ customRef), 13889/* harmony export */ "default": () => (/* binding */ Vue), 13890/* harmony export */ defineAsyncComponent: () => (/* binding */ defineAsyncComponent), 13891/* harmony export */ defineComponent: () => (/* binding */ defineComponent), 13892/* harmony export */ del: () => (/* binding */ del), 13893/* harmony export */ effectScope: () => (/* binding */ effectScope), 13894/* harmony export */ getCurrentInstance: () => (/* binding */ getCurrentInstance), 13895/* harmony export */ getCurrentScope: () => (/* binding */ getCurrentScope), 13896/* harmony export */ h: () => (/* binding */ h), 13897/* harmony export */ inject: () => (/* binding */ inject), 13898/* harmony export */ isProxy: () => (/* binding */ isProxy), 13899/* harmony export */ isReactive: () => (/* binding */ isReactive), 13900/* harmony export */ isReadonly: () => (/* binding */ isReadonly), 13901/* harmony export */ isRef: () => (/* binding */ isRef), 13902/* harmony export */ isShallow: () => (/* binding */ isShallow), 13903/* harmony export */ markRaw: () => (/* binding */ markRaw), 13904/* harmony export */ mergeDefaults: () => (/* binding */ mergeDefaults), 13905/* harmony export */ nextTick: () => (/* binding */ nextTick), 13906/* harmony export */ onActivated: () => (/* binding */ onActivated), 13907/* harmony export */ onBeforeMount: () => (/* binding */ onBeforeMount), 13908/* harmony export */ onBeforeUnmount: () => (/* binding */ onBeforeUnmount), 13909/* harmony export */ onBeforeUpdate: () => (/* binding */ onBeforeUpdate), 13910/* harmony export */ onDeactivated: () => (/* binding */ onDeactivated), 13911/* harmony export */ onErrorCaptured: () => (/* binding */ onErrorCaptured), 13912/* harmony export */ onMounted: () => (/* binding */ onMounted), 13913/* harmony export */ onRenderTracked: () => (/* binding */ onRenderTracked), 13914/* harmony export */ onRenderTriggered: () => (/* binding */ onRenderTriggered), 13915/* harmony export */ onScopeDispose: () => (/* binding */ onScopeDispose), 13916/* harmony export */ onServerPrefetch: () => (/* binding */ onServerPrefetch), 13917/* harmony export */ onUnmounted: () => (/* binding */ onUnmounted), 13918/* harmony export */ onUpdated: () => (/* binding */ onUpdated), 13919/* harmony export */ provide: () => (/* binding */ provide), 13920/* harmony export */ proxyRefs: () => (/* binding */ proxyRefs), 13921/* harmony export */ reactive: () => (/* binding */ reactive), 13922/* harmony export */ readonly: () => (/* binding */ readonly), 13923/* harmony export */ ref: () => (/* binding */ ref$1), 13924/* harmony export */ set: () => (/* binding */ set), 13925/* harmony export */ shallowReactive: () => (/* binding */ shallowReactive), 13926/* harmony export */ shallowReadonly: () => (/* binding */ shallowReadonly), 13927/* harmony export */ shallowRef: () => (/* binding */ shallowRef), 13928/* harmony export */ toRaw: () => (/* binding */ toRaw), 13929/* harmony export */ toRef: () => (/* binding */ toRef), 13930/* harmony export */ toRefs: () => (/* binding */ toRefs), 13931/* harmony export */ triggerRef: () => (/* binding */ triggerRef), 13932/* harmony export */ unref: () => (/* binding */ unref), 13933/* harmony export */ useAttrs: () => (/* binding */ useAttrs), 13934/* harmony export */ useCssModule: () => (/* binding */ useCssModule), 13935/* harmony export */ useCssVars: () => (/* binding */ useCssVars), 13936/* harmony export */ useListeners: () => (/* binding */ useListeners), 13937/* harmony export */ useSlots: () => (/* binding */ useSlots), 13938/* harmony export */ version: () => (/* binding */ version), 13939/* harmony export */ watch: () => (/* binding */ watch), 13940/* harmony export */ watchEffect: () => (/* binding */ watchEffect), 13941/* harmony export */ watchPostEffect: () => (/* binding */ watchPostEffect), 13942/* harmony export */ watchSyncEffect: () => (/* binding */ watchSyncEffect) 13943/* harmony export */ }); 13944/*! 13945 * Vue.js v2.7.15 13946 * (c) 2014-2023 Evan You 13947 * Released under the MIT License. 13948 */ 13949var emptyObject = Object.freeze({}); 13950var isArray = Array.isArray; 13951// These helpers produce better VM code in JS engines due to their 13952// explicitness and function inlining. 13953function isUndef(v) { 13954 return v === undefined || v === null; 13955} 13956function isDef(v) { 13957 return v !== undefined && v !== null; 13958} 13959function isTrue(v) { 13960 return v === true; 13961} 13962function isFalse(v) { 13963 return v === false; 13964} 13965/** 13966 * Check if value is primitive. 13967 */ 13968function isPrimitive(value) { 13969 return (typeof value === 'string' || 13970 typeof value === 'number' || 13971 // $flow-disable-line 13972 typeof value === 'symbol' || 13973 typeof value === 'boolean'); 13974} 13975function isFunction(value) { 13976 return typeof value === 'function'; 13977} 13978/** 13979 * Quick object check - this is primarily used to tell 13980 * objects from primitive values when we know the value 13981 * is a JSON-compliant type. 13982 */ 13983function isObject(obj) { 13984 return obj !== null && typeof obj === 'object'; 13985} 13986/** 13987 * Get the raw type string of a value, e.g., [object Object]. 13988 */ 13989var _toString = Object.prototype.toString; 13990function toRawType(value) { 13991 return _toString.call(value).slice(8, -1); 13992} 13993/** 13994 * Strict object type check. Only returns true 13995 * for plain JavaScript objects. 13996 */ 13997function isPlainObject(obj) { 13998 return _toString.call(obj) === '[object Object]'; 13999} 14000function isRegExp(v) { 14001 return _toString.call(v) === '[object RegExp]'; 14002} 14003/** 14004 * Check if val is a valid array index. 14005 */ 14006function isValidArrayIndex(val) { 14007 var n = parseFloat(String(val)); 14008 return n >= 0 && Math.floor(n) === n && isFinite(val); 14009} 14010function isPromise(val) { 14011 return (isDef(val) && 14012 typeof val.then === 'function' && 14013 typeof val.catch === 'function'); 14014} 14015/** 14016 * Convert a value to a string that is actually rendered. 14017 */ 14018function toString(val) { 14019 return val == null 14020 ? '' 14021 : Array.isArray(val) || (isPlainObject(val) && val.toString === _toString) 14022 ? JSON.stringify(val, null, 2) 14023 : String(val); 14024} 14025/** 14026 * Convert an input value to a number for persistence. 14027 * If the conversion fails, return original string. 14028 */ 14029function toNumber(val) { 14030 var n = parseFloat(val); 14031 return isNaN(n) ? val : n; 14032} 14033/** 14034 * Make a map and return a function for checking if a key 14035 * is in that map. 14036 */ 14037function makeMap(str, expectsLowerCase) { 14038 var map = Object.create(null); 14039 var list = str.split(','); 14040 for (var i = 0; i < list.length; i++) { 14041 map[list[i]] = true; 14042 } 14043 return expectsLowerCase ? function (val) { return map[val.toLowerCase()]; } : function (val) { return map[val]; }; 14044} 14045/** 14046 * Check if a tag is a built-in tag. 14047 */ 14048var isBuiltInTag = makeMap('slot,component', true); 14049/** 14050 * Check if an attribute is a reserved attribute. 14051 */ 14052var isReservedAttribute = makeMap('key,ref,slot,slot-scope,is'); 14053/** 14054 * Remove an item from an array. 14055 */ 14056function remove$2(arr, item) { 14057 var len = arr.length; 14058 if (len) { 14059 // fast path for the only / last item 14060 if (item === arr[len - 1]) { 14061 arr.length = len - 1; 14062 return; 14063 } 14064 var index = arr.indexOf(item); 14065 if (index > -1) { 14066 return arr.splice(index, 1); 14067 } 14068 } 14069} 14070/** 14071 * Check whether an object has the property. 14072 */ 14073var hasOwnProperty = Object.prototype.hasOwnProperty; 14074function hasOwn(obj, key) { 14075 return hasOwnProperty.call(obj, key); 14076} 14077/** 14078 * Create a cached version of a pure function. 14079 */ 14080function cached(fn) { 14081 var cache = Object.create(null); 14082 return function cachedFn(str) { 14083 var hit = cache[str]; 14084 return hit || (cache[str] = fn(str)); 14085 }; 14086} 14087/** 14088 * Camelize a hyphen-delimited string. 14089 */ 14090var camelizeRE = /-(\w)/g; 14091var camelize = cached(function (str) { 14092 return str.replace(camelizeRE, function (_, c) { return (c ? c.toUpperCase() : ''); }); 14093}); 14094/** 14095 * Capitalize a string. 14096 */ 14097var capitalize = cached(function (str) { 14098 return str.charAt(0).toUpperCase() + str.slice(1); 14099}); 14100/** 14101 * Hyphenate a camelCase string. 14102 */ 14103var hyphenateRE = /\B([A-Z])/g; 14104var hyphenate = cached(function (str) { 14105 return str.replace(hyphenateRE, '-$1').toLowerCase(); 14106}); 14107/** 14108 * Simple bind polyfill for environments that do not support it, 14109 * e.g., PhantomJS 1.x. Technically, we don't need this anymore 14110 * since native bind is now performant enough in most browsers. 14111 * But removing it would mean breaking code that was able to run in 14112 * PhantomJS 1.x, so this must be kept for backward compatibility. 14113 */ 14114/* istanbul ignore next */ 14115function polyfillBind(fn, ctx) { 14116 function boundFn(a) { 14117 var l = arguments.length; 14118 return l 14119 ? l > 1 14120 ? fn.apply(ctx, arguments) 14121 : fn.call(ctx, a) 14122 : fn.call(ctx); 14123 } 14124 boundFn._length = fn.length; 14125 return boundFn; 14126} 14127function nativeBind(fn, ctx) { 14128 return fn.bind(ctx); 14129} 14130// @ts-expect-error bind cannot be `undefined` 14131var bind$1 = Function.prototype.bind ? nativeBind : polyfillBind; 14132/** 14133 * Convert an Array-like object to a real Array. 14134 */ 14135function toArray(list, start) { 14136 start = start || 0; 14137 var i = list.length - start; 14138 var ret = new Array(i); 14139 while (i--) { 14140 ret[i] = list[i + start]; 14141 } 14142 return ret; 14143} 14144/** 14145 * Mix properties into target object. 14146 */ 14147function extend(to, _from) { 14148 for (var key in _from) { 14149 to[key] = _from[key]; 14150 } 14151 return to; 14152} 14153/** 14154 * Merge an Array of Objects into a single Object. 14155 */ 14156function toObject(arr) { 14157 var res = {}; 14158 for (var i = 0; i < arr.length; i++) { 14159 if (arr[i]) { 14160 extend(res, arr[i]); 14161 } 14162 } 14163 return res; 14164} 14165/* eslint-disable no-unused-vars */ 14166/** 14167 * Perform no operation. 14168 * Stubbing args to make Flow happy without leaving useless transpiled code 14169 * with ...rest (https://flow.org/blog/2017/05/07/Strict-Function-Call-Arity/). 14170 */ 14171function noop(a, b, c) { } 14172/** 14173 * Always return false. 14174 */ 14175var no = function (a, b, c) { return false; }; 14176/* eslint-enable no-unused-vars */ 14177/** 14178 * Return the same value. 14179 */ 14180var identity = function (_) { return _; }; 14181/** 14182 * Generate a string containing static keys from compiler modules. 14183 */ 14184function genStaticKeys$1(modules) { 14185 return modules 14186 .reduce(function (keys, m) { return keys.concat(m.staticKeys || []); }, []) 14187 .join(','); 14188} 14189/** 14190 * Check if two values are loosely equal - that is, 14191 * if they are plain objects, do they have the same shape? 14192 */ 14193function looseEqual(a, b) { 14194 if (a === b) 14195 return true; 14196 var isObjectA = isObject(a); 14197 var isObjectB = isObject(b); 14198 if (isObjectA && isObjectB) { 14199 try { 14200 var isArrayA = Array.isArray(a); 14201 var isArrayB = Array.isArray(b); 14202 if (isArrayA && isArrayB) { 14203 return (a.length === b.length && 14204 a.every(function (e, i) { 14205 return looseEqual(e, b[i]); 14206 })); 14207 } 14208 else if (a instanceof Date && b instanceof Date) { 14209 return a.getTime() === b.getTime(); 14210 } 14211 else if (!isArrayA && !isArrayB) { 14212 var keysA = Object.keys(a); 14213 var keysB = Object.keys(b); 14214 return (keysA.length === keysB.length && 14215 keysA.every(function (key) { 14216 return looseEqual(a[key], b[key]); 14217 })); 14218 } 14219 else { 14220 /* istanbul ignore next */ 14221 return false; 14222 } 14223 } 14224 catch (e) { 14225 /* istanbul ignore next */ 14226 return false; 14227 } 14228 } 14229 else if (!isObjectA && !isObjectB) { 14230 return String(a) === String(b); 14231 } 14232 else { 14233 return false; 14234 } 14235} 14236/** 14237 * Return the first index at which a loosely equal value can be 14238 * found in the array (if value is a plain object, the array must 14239 * contain an object of the same shape), or -1 if it is not present. 14240 */ 14241function looseIndexOf(arr, val) { 14242 for (var i = 0; i < arr.length; i++) { 14243 if (looseEqual(arr[i], val)) 14244 return i; 14245 } 14246 return -1; 14247} 14248/** 14249 * Ensure a function is called only once. 14250 */ 14251function once(fn) { 14252 var called = false; 14253 return function () { 14254 if (!called) { 14255 called = true; 14256 fn.apply(this, arguments); 14257 } 14258 }; 14259} 14260// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is#polyfill 14261function hasChanged(x, y) { 14262 if (x === y) { 14263 return x === 0 && 1 / x !== 1 / y; 14264 } 14265 else { 14266 return x === x || y === y; 14267 } 14268} 14269 14270var SSR_ATTR = 'data-server-rendered'; 14271var ASSET_TYPES = ['component', 'directive', 'filter']; 14272var LIFECYCLE_HOOKS = [ 14273 'beforeCreate', 14274 'created', 14275 'beforeMount', 14276 'mounted', 14277 'beforeUpdate', 14278 'updated', 14279 'beforeDestroy', 14280 'destroyed', 14281 'activated', 14282 'deactivated', 14283 'errorCaptured', 14284 'serverPrefetch', 14285 'renderTracked', 14286 'renderTriggered' 14287]; 14288 14289var config = { 14290 /** 14291 * Option merge strategies (used in core/util/options) 14292 */ 14293 // $flow-disable-line 14294 optionMergeStrategies: Object.create(null), 14295 /** 14296 * Whether to suppress warnings. 14297 */ 14298 silent: false, 14299 /** 14300 * Show production mode tip message on boot? 14301 */ 14302 productionTip: "development" !== 'production', 14303 /** 14304 * Whether to enable devtools 14305 */ 14306 devtools: "development" !== 'production', 14307 /** 14308 * Whether to record perf 14309 */ 14310 performance: false, 14311 /** 14312 * Error handler for watcher errors 14313 */ 14314 errorHandler: null, 14315 /** 14316 * Warn handler for watcher warns 14317 */ 14318 warnHandler: null, 14319 /** 14320 * Ignore certain custom elements 14321 */ 14322 ignoredElements: [], 14323 /** 14324 * Custom user key aliases for v-on 14325 */ 14326 // $flow-disable-line 14327 keyCodes: Object.create(null), 14328 /** 14329 * Check if a tag is reserved so that it cannot be registered as a 14330 * component. This is platform-dependent and may be overwritten. 14331 */ 14332 isReservedTag: no, 14333 /** 14334 * Check if an attribute is reserved so that it cannot be used as a component 14335 * prop. This is platform-dependent and may be overwritten. 14336 */ 14337 isReservedAttr: no, 14338 /** 14339 * Check if a tag is an unknown element. 14340 * Platform-dependent. 14341 */ 14342 isUnknownElement: no, 14343 /** 14344 * Get the namespace of an element 14345 */ 14346 getTagNamespace: noop, 14347 /** 14348 * Parse the real tag name for the specific platform. 14349 */ 14350 parsePlatformTagName: identity, 14351 /** 14352 * Check if an attribute must be bound using property, e.g. value 14353 * Platform-dependent. 14354 */ 14355 mustUseProp: no, 14356 /** 14357 * Perform updates asynchronously. Intended to be used by Vue Test Utils 14358 * This will significantly reduce performance if set to false. 14359 */ 14360 async: true, 14361 /** 14362 * Exposed for legacy reasons 14363 */ 14364 _lifecycleHooks: LIFECYCLE_HOOKS 14365}; 14366 14367/** 14368 * unicode letters used for parsing html tags, component names and property paths. 14369 * using https://www.w3.org/TR/html53/semantics-scripting.html#potentialcustomelementname 14370 * skipping \u10000-\uEFFFF due to it freezing up PhantomJS 14371 */ 14372var unicodeRegExp = /a-zA-Z\u00B7\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u037D\u037F-\u1FFF\u200C-\u200D\u203F-\u2040\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD/; 14373/** 14374 * Check if a string starts with $ or _ 14375 */ 14376function isReserved(str) { 14377 var c = (str + '').charCodeAt(0); 14378 return c === 0x24 || c === 0x5f; 14379} 14380/** 14381 * Define a property. 14382 */ 14383function def(obj, key, val, enumerable) { 14384 Object.defineProperty(obj, key, { 14385 value: val, 14386 enumerable: !!enumerable, 14387 writable: true, 14388 configurable: true 14389 }); 14390} 14391/** 14392 * Parse simple path. 14393 */ 14394var bailRE = new RegExp("[^".concat(unicodeRegExp.source, ".$_\\d]")); 14395function parsePath(path) { 14396 if (bailRE.test(path)) { 14397 return; 14398 } 14399 var segments = path.split('.'); 14400 return function (obj) { 14401 for (var i = 0; i < segments.length; i++) { 14402 if (!obj) 14403 return; 14404 obj = obj[segments[i]]; 14405 } 14406 return obj; 14407 }; 14408} 14409 14410// can we use __proto__? 14411var hasProto = '__proto__' in {}; 14412// Browser environment sniffing 14413var inBrowser = typeof window !== 'undefined'; 14414var UA = inBrowser && window.navigator.userAgent.toLowerCase(); 14415var isIE = UA && /msie|trident/.test(UA); 14416var isIE9 = UA && UA.indexOf('msie 9.0') > 0; 14417var isEdge = UA && UA.indexOf('edge/') > 0; 14418UA && UA.indexOf('android') > 0; 14419var isIOS = UA && /iphone|ipad|ipod|ios/.test(UA); 14420UA && /chrome\/\d+/.test(UA) && !isEdge; 14421UA && /phantomjs/.test(UA); 14422var isFF = UA && UA.match(/firefox\/(\d+)/); 14423// Firefox has a "watch" function on Object.prototype... 14424// @ts-expect-error firebox support 14425var nativeWatch = {}.watch; 14426var supportsPassive = false; 14427if (inBrowser) { 14428 try { 14429 var opts = {}; 14430 Object.defineProperty(opts, 'passive', { 14431 get: function () { 14432 /* istanbul ignore next */ 14433 supportsPassive = true; 14434 } 14435 }); // https://github.com/facebook/flow/issues/285 14436 window.addEventListener('test-passive', null, opts); 14437 } 14438 catch (e) { } 14439} 14440// this needs to be lazy-evaled because vue may be required before 14441// vue-server-renderer can set VUE_ENV 14442var _isServer; 14443var isServerRendering = function () { 14444 if (_isServer === undefined) { 14445 /* istanbul ignore if */ 14446 if (!inBrowser && typeof __webpack_require__.g !== 'undefined') { 14447 // detect presence of vue-server-renderer and avoid 14448 // Webpack shimming the process 14449 _isServer = 14450 __webpack_require__.g['process'] && __webpack_require__.g['process'].env.VUE_ENV === 'server'; 14451 } 14452 else { 14453 _isServer = false; 14454 } 14455 } 14456 return _isServer; 14457}; 14458// detect devtools 14459var devtools = inBrowser && window.__VUE_DEVTOOLS_GLOBAL_HOOK__; 14460/* istanbul ignore next */ 14461function isNative(Ctor) { 14462 return typeof Ctor === 'function' && /native code/.test(Ctor.toString()); 14463} 14464var hasSymbol = typeof Symbol !== 'undefined' && 14465 isNative(Symbol) && 14466 typeof Reflect !== 'undefined' && 14467 isNative(Reflect.ownKeys); 14468var _Set; // $flow-disable-line 14469/* istanbul ignore if */ if (typeof Set !== 'undefined' && isNative(Set)) { 14470 // use native Set when available. 14471 _Set = Set; 14472} 14473else { 14474 // a non-standard Set polyfill that only works with primitive keys. 14475 _Set = /** @class */ (function () { 14476 function Set() { 14477 this.set = Object.create(null); 14478 } 14479 Set.prototype.has = function (key) { 14480 return this.set[key] === true; 14481 }; 14482 Set.prototype.add = function (key) { 14483 this.set[key] = true; 14484 }; 14485 Set.prototype.clear = function () { 14486 this.set = Object.create(null); 14487 }; 14488 return Set; 14489 }()); 14490} 14491 14492var currentInstance = null; 14493/** 14494 * This is exposed for compatibility with v3 (e.g. some functions in VueUse 14495 * relies on it). Do not use this internally, just use `currentInstance`. 14496 * 14497 * @internal this function needs manual type declaration because it relies 14498 * on previously manually authored types from Vue 2 14499 */ 14500function getCurrentInstance() { 14501 return currentInstance && { proxy: currentInstance }; 14502} 14503/** 14504 * @internal 14505 */ 14506function setCurrentInstance(vm) { 14507 if (vm === void 0) { vm = null; } 14508 if (!vm) 14509 currentInstance && currentInstance._scope.off(); 14510 currentInstance = vm; 14511 vm && vm._scope.on(); 14512} 14513 14514/** 14515 * @internal 14516 */ 14517var VNode = /** @class */ (function () { 14518 function VNode(tag, data, children, text, elm, context, componentOptions, asyncFactory) { 14519 this.tag = tag; 14520 this.data = data; 14521 this.children = children; 14522 this.text = text; 14523 this.elm = elm; 14524 this.ns = undefined; 14525 this.context = context; 14526 this.fnContext = undefined; 14527 this.fnOptions = undefined; 14528 this.fnScopeId = undefined; 14529 this.key = data && data.key; 14530 this.componentOptions = componentOptions; 14531 this.componentInstance = undefined; 14532 this.parent = undefined; 14533 this.raw = false; 14534 this.isStatic = false; 14535 this.isRootInsert = true; 14536 this.isComment = false; 14537 this.isCloned = false; 14538 this.isOnce = false; 14539 this.asyncFactory = asyncFactory; 14540 this.asyncMeta = undefined; 14541 this.isAsyncPlaceholder = false; 14542 } 14543 Object.defineProperty(VNode.prototype, "child", { 14544 // DEPRECATED: alias for componentInstance for backwards compat. 14545 /* istanbul ignore next */ 14546 get: function () { 14547 return this.componentInstance; 14548 }, 14549 enumerable: false, 14550 configurable: true 14551 }); 14552 return VNode; 14553}()); 14554var createEmptyVNode = function (text) { 14555 if (text === void 0) { text = ''; } 14556 var node = new VNode(); 14557 node.text = text; 14558 node.isComment = true; 14559 return node; 14560}; 14561function createTextVNode(val) { 14562 return new VNode(undefined, undefined, undefined, String(val)); 14563} 14564// optimized shallow clone 14565// used for static nodes and slot nodes because they may be reused across 14566// multiple renders, cloning them avoids errors when DOM manipulations rely 14567// on their elm reference. 14568function cloneVNode(vnode) { 14569 var cloned = new VNode(vnode.tag, vnode.data, 14570 // #7975 14571 // clone children array to avoid mutating original in case of cloning 14572 // a child. 14573 vnode.children && vnode.children.slice(), vnode.text, vnode.elm, vnode.context, vnode.componentOptions, vnode.asyncFactory); 14574 cloned.ns = vnode.ns; 14575 cloned.isStatic = vnode.isStatic; 14576 cloned.key = vnode.key; 14577 cloned.isComment = vnode.isComment; 14578 cloned.fnContext = vnode.fnContext; 14579 cloned.fnOptions = vnode.fnOptions; 14580 cloned.fnScopeId = vnode.fnScopeId; 14581 cloned.asyncMeta = vnode.asyncMeta; 14582 cloned.isCloned = true; 14583 return cloned; 14584} 14585 14586/* not type checking this file because flow doesn't play well with Proxy */ 14587var initProxy; 14588if (true) { 14589 var allowedGlobals_1 = makeMap('Infinity,undefined,NaN,isFinite,isNaN,' + 14590 'parseFloat,parseInt,decodeURI,decodeURIComponent,encodeURI,encodeURIComponent,' + 14591 'Math,Number,Date,Array,Object,Boolean,String,RegExp,Map,Set,JSON,Intl,BigInt,' + 14592 'require' // for Webpack/Browserify 14593 ); 14594 var warnNonPresent_1 = function (target, key) { 14595 warn$2("Property or method \"".concat(key, "\" is not defined on the instance but ") + 14596 'referenced during render. Make sure that this property is reactive, ' + 14597 'either in the data option, or for class-based components, by ' + 14598 'initializing the property. ' + 14599 'See: https://v2.vuejs.org/v2/guide/reactivity.html#Declaring-Reactive-Properties.', target); 14600 }; 14601 var warnReservedPrefix_1 = function (target, key) { 14602 warn$2("Property \"".concat(key, "\" must be accessed with \"$data.").concat(key, "\" because ") + 14603 'properties starting with "$" or "_" are not proxied in the Vue instance to ' + 14604 'prevent conflicts with Vue internals. ' + 14605 'See: https://v2.vuejs.org/v2/api/#data', target); 14606 }; 14607 var hasProxy_1 = typeof Proxy !== 'undefined' && isNative(Proxy); 14608 if (hasProxy_1) { 14609 var isBuiltInModifier_1 = makeMap('stop,prevent,self,ctrl,shift,alt,meta,exact'); 14610 config.keyCodes = new Proxy(config.keyCodes, { 14611 set: function (target, key, value) { 14612 if (isBuiltInModifier_1(key)) { 14613 warn$2("Avoid overwriting built-in modifier in config.keyCodes: .".concat(key)); 14614 return false; 14615 } 14616 else { 14617 target[key] = value; 14618 return true; 14619 } 14620 } 14621 }); 14622 } 14623 var hasHandler_1 = { 14624 has: function (target, key) { 14625 var has = key in target; 14626 var isAllowed = allowedGlobals_1(key) || 14627 (typeof key === 'string' && 14628 key.charAt(0) === '_' && 14629 !(key in target.$data)); 14630 if (!has && !isAllowed) { 14631 if (key in target.$data) 14632 warnReservedPrefix_1(target, key); 14633 else 14634 warnNonPresent_1(target, key); 14635 } 14636 return has || !isAllowed; 14637 } 14638 }; 14639 var getHandler_1 = { 14640 get: function (target, key) { 14641 if (typeof key === 'string' && !(key in target)) { 14642 if (key in target.$data) 14643 warnReservedPrefix_1(target, key); 14644 else 14645 warnNonPresent_1(target, key); 14646 } 14647 return target[key]; 14648 } 14649 }; 14650 initProxy = function initProxy(vm) { 14651 if (hasProxy_1) { 14652 // determine which proxy handler to use 14653 var options = vm.$options; 14654 var handlers = options.render && options.render._withStripped ? getHandler_1 : hasHandler_1; 14655 vm._renderProxy = new Proxy(vm, handlers); 14656 } 14657 else { 14658 vm._renderProxy = vm; 14659 } 14660 }; 14661} 14662 14663/****************************************************************************** 14664Copyright (c) Microsoft Corporation. 14665 14666Permission to use, copy, modify, and/or distribute this software for any 14667purpose with or without fee is hereby granted. 14668 14669THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH 14670REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY 14671AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, 14672INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM 14673LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR 14674OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR 14675PERFORMANCE OF THIS SOFTWARE. 14676***************************************************************************** */ 14677 14678var __assign = function() { 14679 __assign = Object.assign || function __assign(t) { 14680 for (var s, i = 1, n = arguments.length; i < n; i++) { 14681 s = arguments[i]; 14682 for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; 14683 } 14684 return t; 14685 }; 14686 return __assign.apply(this, arguments); 14687}; 14688 14689var uid$2 = 0; 14690var pendingCleanupDeps = []; 14691var cleanupDeps = function () { 14692 for (var i = 0; i < pendingCleanupDeps.length; i++) { 14693 var dep = pendingCleanupDeps[i]; 14694 dep.subs = dep.subs.filter(function (s) { return s; }); 14695 dep._pending = false; 14696 } 14697 pendingCleanupDeps.length = 0; 14698}; 14699/** 14700 * A dep is an observable that can have multiple 14701 * directives subscribing to it. 14702 * @internal 14703 */ 14704var Dep = /** @class */ (function () { 14705 function Dep() { 14706 // pending subs cleanup 14707 this._pending = false; 14708 this.id = uid$2++; 14709 this.subs = []; 14710 } 14711 Dep.prototype.addSub = function (sub) { 14712 this.subs.push(sub); 14713 }; 14714 Dep.prototype.removeSub = function (sub) { 14715 // #12696 deps with massive amount of subscribers are extremely slow to 14716 // clean up in Chromium 14717 // to workaround this, we unset the sub for now, and clear them on 14718 // next scheduler flush. 14719 this.subs[this.subs.indexOf(sub)] = null; 14720 if (!this._pending) { 14721 this._pending = true; 14722 pendingCleanupDeps.push(this); 14723 } 14724 }; 14725 Dep.prototype.depend = function (info) { 14726 if (Dep.target) { 14727 Dep.target.addDep(this); 14728 if ( true && info && Dep.target.onTrack) { 14729 Dep.target.onTrack(__assign({ effect: Dep.target }, info)); 14730 } 14731 } 14732 }; 14733 Dep.prototype.notify = function (info) { 14734 // stabilize the subscriber list first 14735 var subs = this.subs.filter(function (s) { return s; }); 14736 if ( true && !config.async) { 14737 // subs aren't sorted in scheduler if not running async 14738 // we need to sort them now to make sure they fire in correct 14739 // order 14740 subs.sort(function (a, b) { return a.id - b.id; }); 14741 } 14742 for (var i = 0, l = subs.length; i < l; i++) { 14743 var sub = subs[i]; 14744 if ( true && info) { 14745 sub.onTrigger && 14746 sub.onTrigger(__assign({ effect: subs[i] }, info)); 14747 } 14748 sub.update(); 14749 } 14750 }; 14751 return Dep; 14752}()); 14753// The current target watcher being evaluated. 14754// This is globally unique because only one watcher 14755// can be evaluated at a time. 14756Dep.target = null; 14757var targetStack = []; 14758function pushTarget(target) { 14759 targetStack.push(target); 14760 Dep.target = target; 14761} 14762function popTarget() { 14763 targetStack.pop(); 14764 Dep.target = targetStack[targetStack.length - 1]; 14765} 14766 14767/* 14768 * not type checking this file because flow doesn't play well with 14769 * dynamically accessing methods on Array prototype 14770 */ 14771var arrayProto = Array.prototype; 14772var arrayMethods = Object.create(arrayProto); 14773var methodsToPatch = [ 14774 'push', 14775 'pop', 14776 'shift', 14777 'unshift', 14778 'splice', 14779 'sort', 14780 'reverse' 14781]; 14782/** 14783 * Intercept mutating methods and emit events 14784 */ 14785methodsToPatch.forEach(function (method) { 14786 // cache original method 14787 var original = arrayProto[method]; 14788 def(arrayMethods, method, function mutator() { 14789 var args = []; 14790 for (var _i = 0; _i < arguments.length; _i++) { 14791 args[_i] = arguments[_i]; 14792 } 14793 var result = original.apply(this, args); 14794 var ob = this.__ob__; 14795 var inserted; 14796 switch (method) { 14797 case 'push': 14798 case 'unshift': 14799 inserted = args; 14800 break; 14801 case 'splice': 14802 inserted = args.slice(2); 14803 break; 14804 } 14805 if (inserted) 14806 ob.observeArray(inserted); 14807 // notify change 14808 if (true) { 14809 ob.dep.notify({ 14810 type: "array mutation" /* TriggerOpTypes.ARRAY_MUTATION */, 14811 target: this, 14812 key: method 14813 }); 14814 } 14815 else {} 14816 return result; 14817 }); 14818}); 14819 14820var arrayKeys = Object.getOwnPropertyNames(arrayMethods); 14821var NO_INITIAL_VALUE = {}; 14822/** 14823 * In some cases we may want to disable observation inside a component's 14824 * update computation. 14825 */ 14826var shouldObserve = true; 14827function toggleObserving(value) { 14828 shouldObserve = value; 14829} 14830// ssr mock dep 14831var mockDep = { 14832 notify: noop, 14833 depend: noop, 14834 addSub: noop, 14835 removeSub: noop 14836}; 14837/** 14838 * Observer class that is attached to each observed 14839 * object. Once attached, the observer converts the target 14840 * object's property keys into getter/setters that 14841 * collect dependencies and dispatch updates. 14842 */ 14843var Observer = /** @class */ (function () { 14844 function Observer(value, shallow, mock) { 14845 if (shallow === void 0) { shallow = false; } 14846 if (mock === void 0) { mock = false; } 14847 this.value = value; 14848 this.shallow = shallow; 14849 this.mock = mock; 14850 // this.value = value 14851 this.dep = mock ? mockDep : new Dep(); 14852 this.vmCount = 0; 14853 def(value, '__ob__', this); 14854 if (isArray(value)) { 14855 if (!mock) { 14856 if (hasProto) { 14857 value.__proto__ = arrayMethods; 14858 /* eslint-enable no-proto */ 14859 } 14860 else { 14861 for (var i = 0, l = arrayKeys.length; i < l; i++) { 14862 var key = arrayKeys[i]; 14863 def(value, key, arrayMethods[key]); 14864 } 14865 } 14866 } 14867 if (!shallow) { 14868 this.observeArray(value); 14869 } 14870 } 14871 else { 14872 /** 14873 * Walk through all properties and convert them into 14874 * getter/setters. This method should only be called when 14875 * value type is Object. 14876 */ 14877 var keys = Object.keys(value); 14878 for (var i = 0; i < keys.length; i++) { 14879 var key = keys[i]; 14880 defineReactive(value, key, NO_INITIAL_VALUE, undefined, shallow, mock); 14881 } 14882 } 14883 } 14884 /** 14885 * Observe a list of Array items. 14886 */ 14887 Observer.prototype.observeArray = function (value) { 14888 for (var i = 0, l = value.length; i < l; i++) { 14889 observe(value[i], false, this.mock); 14890 } 14891 }; 14892 return Observer; 14893}()); 14894// helpers 14895/** 14896 * Attempt to create an observer instance for a value, 14897 * returns the new observer if successfully observed, 14898 * or the existing observer if the value already has one. 14899 */ 14900function observe(value, shallow, ssrMockReactivity) { 14901 if (value && hasOwn(value, '__ob__') && value.__ob__ instanceof Observer) { 14902 return value.__ob__; 14903 } 14904 if (shouldObserve && 14905 (ssrMockReactivity || !isServerRendering()) && 14906 (isArray(value) || isPlainObject(value)) && 14907 Object.isExtensible(value) && 14908 !value.__v_skip /* ReactiveFlags.SKIP */ && 14909 !isRef(value) && 14910 !(value instanceof VNode)) { 14911 return new Observer(value, shallow, ssrMockReactivity); 14912 } 14913} 14914/** 14915 * Define a reactive property on an Object. 14916 */ 14917function defineReactive(obj, key, val, customSetter, shallow, mock) { 14918 var dep = new Dep(); 14919 var property = Object.getOwnPropertyDescriptor(obj, key); 14920 if (property && property.configurable === false) { 14921 return; 14922 } 14923 // cater for pre-defined getter/setters 14924 var getter = property && property.get; 14925 var setter = property && property.set; 14926 if ((!getter || setter) && 14927 (val === NO_INITIAL_VALUE || arguments.length === 2)) { 14928 val = obj[key]; 14929 } 14930 var childOb = !shallow && observe(val, false, mock); 14931 Object.defineProperty(obj, key, { 14932 enumerable: true, 14933 configurable: true, 14934 get: function reactiveGetter() { 14935 var value = getter ? getter.call(obj) : val; 14936 if (Dep.target) { 14937 if (true) { 14938 dep.depend({ 14939 target: obj, 14940 type: "get" /* TrackOpTypes.GET */, 14941 key: key 14942 }); 14943 } 14944 else {} 14945 if (childOb) { 14946 childOb.dep.depend(); 14947 if (isArray(value)) { 14948 dependArray(value); 14949 } 14950 } 14951 } 14952 return isRef(value) && !shallow ? value.value : value; 14953 }, 14954 set: function reactiveSetter(newVal) { 14955 var value = getter ? getter.call(obj) : val; 14956 if (!hasChanged(value, newVal)) { 14957 return; 14958 } 14959 if ( true && customSetter) { 14960 customSetter(); 14961 } 14962 if (setter) { 14963 setter.call(obj, newVal); 14964 } 14965 else if (getter) { 14966 // #7981: for accessor properties without setter 14967 return; 14968 } 14969 else if (!shallow && isRef(value) && !isRef(newVal)) { 14970 value.value = newVal; 14971 return; 14972 } 14973 else { 14974 val = newVal; 14975 } 14976 childOb = !shallow && observe(newVal, false, mock); 14977 if (true) { 14978 dep.notify({ 14979 type: "set" /* TriggerOpTypes.SET */, 14980 target: obj, 14981 key: key, 14982 newValue: newVal, 14983 oldValue: value 14984 }); 14985 } 14986 else {} 14987 } 14988 }); 14989 return dep; 14990} 14991function set(target, key, val) { 14992 if ( true && (isUndef(target) || isPrimitive(target))) { 14993 warn$2("Cannot set reactive property on undefined, null, or primitive value: ".concat(target)); 14994 } 14995 if (isReadonly(target)) { 14996 true && warn$2("Set operation on key \"".concat(key, "\" failed: target is readonly.")); 14997 return; 14998 } 14999 var ob = target.__ob__; 15000 if (isArray(target) && isValidArrayIndex(key)) { 15001 target.length = Math.max(target.length, key); 15002 target.splice(key, 1, val); 15003 // when mocking for SSR, array methods are not hijacked 15004 if (ob && !ob.shallow && ob.mock) { 15005 observe(val, false, true); 15006 } 15007 return val; 15008 } 15009 if (key in target && !(key in Object.prototype)) { 15010 target[key] = val; 15011 return val; 15012 } 15013 if (target._isVue || (ob && ob.vmCount)) { 15014 true && 15015 warn$2('Avoid adding reactive properties to a Vue instance or its root $data ' + 15016 'at runtime - declare it upfront in the data option.'); 15017 return val; 15018 } 15019 if (!ob) { 15020 target[key] = val; 15021 return val; 15022 } 15023 defineReactive(ob.value, key, val, undefined, ob.shallow, ob.mock); 15024 if (true) { 15025 ob.dep.notify({ 15026 type: "add" /* TriggerOpTypes.ADD */, 15027 target: target, 15028 key: key, 15029 newValue: val, 15030 oldValue: undefined 15031 }); 15032 } 15033 else {} 15034 return val; 15035} 15036function del(target, key) { 15037 if ( true && (isUndef(target) || isPrimitive(target))) { 15038 warn$2("Cannot delete reactive property on undefined, null, or primitive value: ".concat(target)); 15039 } 15040 if (isArray(target) && isValidArrayIndex(key)) { 15041 target.splice(key, 1); 15042 return; 15043 } 15044 var ob = target.__ob__; 15045 if (target._isVue || (ob && ob.vmCount)) { 15046 true && 15047 warn$2('Avoid deleting properties on a Vue instance or its root $data ' + 15048 '- just set it to null.'); 15049 return; 15050 } 15051 if (isReadonly(target)) { 15052 true && 15053 warn$2("Delete operation on key \"".concat(key, "\" failed: target is readonly.")); 15054 return; 15055 } 15056 if (!hasOwn(target, key)) { 15057 return; 15058 } 15059 delete target[key]; 15060 if (!ob) { 15061 return; 15062 } 15063 if (true) { 15064 ob.dep.notify({ 15065 type: "delete" /* TriggerOpTypes.DELETE */, 15066 target: target, 15067 key: key 15068 }); 15069 } 15070 else {} 15071} 15072/** 15073 * Collect dependencies on array elements when the array is touched, since 15074 * we cannot intercept array element access like property getters. 15075 */ 15076function dependArray(value) { 15077 for (var e = void 0, i = 0, l = value.length; i < l; i++) { 15078 e = value[i]; 15079 if (e && e.__ob__) { 15080 e.__ob__.dep.depend(); 15081 } 15082 if (isArray(e)) { 15083 dependArray(e); 15084 } 15085 } 15086} 15087 15088function reactive(target) { 15089 makeReactive(target, false); 15090 return target; 15091} 15092/** 15093 * Return a shallowly-reactive copy of the original object, where only the root 15094 * level properties are reactive. It also does not auto-unwrap refs (even at the 15095 * root level). 15096 */ 15097function shallowReactive(target) { 15098 makeReactive(target, true); 15099 def(target, "__v_isShallow" /* ReactiveFlags.IS_SHALLOW */, true); 15100 return target; 15101} 15102function makeReactive(target, shallow) { 15103 // if trying to observe a readonly proxy, return the readonly version. 15104 if (!isReadonly(target)) { 15105 if (true) { 15106 if (isArray(target)) { 15107 warn$2("Avoid using Array as root value for ".concat(shallow ? "shallowReactive()" : "reactive()", " as it cannot be tracked in watch() or watchEffect(). Use ").concat(shallow ? "shallowRef()" : "ref()", " instead. This is a Vue-2-only limitation.")); 15108 } 15109 var existingOb = target && target.__ob__; 15110 if (existingOb && existingOb.shallow !== shallow) { 15111 warn$2("Target is already a ".concat(existingOb.shallow ? "" : "non-", "shallow reactive object, and cannot be converted to ").concat(shallow ? "" : "non-", "shallow.")); 15112 } 15113 } 15114 var ob = observe(target, shallow, isServerRendering() /* ssr mock reactivity */); 15115 if ( true && !ob) { 15116 if (target == null || isPrimitive(target)) { 15117 warn$2("value cannot be made reactive: ".concat(String(target))); 15118 } 15119 if (isCollectionType(target)) { 15120 warn$2("Vue 2 does not support reactive collection types such as Map or Set."); 15121 } 15122 } 15123 } 15124} 15125function isReactive(value) { 15126 if (isReadonly(value)) { 15127 return isReactive(value["__v_raw" /* ReactiveFlags.RAW */]); 15128 } 15129 return !!(value && value.__ob__); 15130} 15131function isShallow(value) { 15132 return !!(value && value.__v_isShallow); 15133} 15134function isReadonly(value) { 15135 return !!(value && value.__v_isReadonly); 15136} 15137function isProxy(value) { 15138 return isReactive(value) || isReadonly(value); 15139} 15140function toRaw(observed) { 15141 var raw = observed && observed["__v_raw" /* ReactiveFlags.RAW */]; 15142 return raw ? toRaw(raw) : observed; 15143} 15144function markRaw(value) { 15145 // non-extensible objects won't be observed anyway 15146 if (Object.isExtensible(value)) { 15147 def(value, "__v_skip" /* ReactiveFlags.SKIP */, true); 15148 } 15149 return value; 15150} 15151/** 15152 * @internal 15153 */ 15154function isCollectionType(value) { 15155 var type = toRawType(value); 15156 return (type === 'Map' || type === 'WeakMap' || type === 'Set' || type === 'WeakSet'); 15157} 15158 15159/** 15160 * @internal 15161 */ 15162var RefFlag = "__v_isRef"; 15163function isRef(r) { 15164 return !!(r && r.__v_isRef === true); 15165} 15166function ref$1(value) { 15167 return createRef(value, false); 15168} 15169function shallowRef(value) { 15170 return createRef(value, true); 15171} 15172function createRef(rawValue, shallow) { 15173 if (isRef(rawValue)) { 15174 return rawValue; 15175 } 15176 var ref = {}; 15177 def(ref, RefFlag, true); 15178 def(ref, "__v_isShallow" /* ReactiveFlags.IS_SHALLOW */, shallow); 15179 def(ref, 'dep', defineReactive(ref, 'value', rawValue, null, shallow, isServerRendering())); 15180 return ref; 15181} 15182function triggerRef(ref) { 15183 if ( true && !ref.dep) { 15184 warn$2("received object is not a triggerable ref."); 15185 } 15186 if (true) { 15187 ref.dep && 15188 ref.dep.notify({ 15189 type: "set" /* TriggerOpTypes.SET */, 15190 target: ref, 15191 key: 'value' 15192 }); 15193 } 15194 else {} 15195} 15196function unref(ref) { 15197 return isRef(ref) ? ref.value : ref; 15198} 15199function proxyRefs(objectWithRefs) { 15200 if (isReactive(objectWithRefs)) { 15201 return objectWithRefs; 15202 } 15203 var proxy = {}; 15204 var keys = Object.keys(objectWithRefs); 15205 for (var i = 0; i < keys.length; i++) { 15206 proxyWithRefUnwrap(proxy, objectWithRefs, keys[i]); 15207 } 15208 return proxy; 15209} 15210function proxyWithRefUnwrap(target, source, key) { 15211 Object.defineProperty(target, key, { 15212 enumerable: true, 15213 configurable: true, 15214 get: function () { 15215 var val = source[key]; 15216 if (isRef(val)) { 15217 return val.value; 15218 } 15219 else { 15220 var ob = val && val.__ob__; 15221 if (ob) 15222 ob.dep.depend(); 15223 return val; 15224 } 15225 }, 15226 set: function (value) { 15227 var oldValue = source[key]; 15228 if (isRef(oldValue) && !isRef(value)) { 15229 oldValue.value = value; 15230 } 15231 else { 15232 source[key] = value; 15233 } 15234 } 15235 }); 15236} 15237function customRef(factory) { 15238 var dep = new Dep(); 15239 var _a = factory(function () { 15240 if (true) { 15241 dep.depend({ 15242 target: ref, 15243 type: "get" /* TrackOpTypes.GET */, 15244 key: 'value' 15245 }); 15246 } 15247 else {} 15248 }, function () { 15249 if (true) { 15250 dep.notify({ 15251 target: ref, 15252 type: "set" /* TriggerOpTypes.SET */, 15253 key: 'value' 15254 }); 15255 } 15256 else {} 15257 }), get = _a.get, set = _a.set; 15258 var ref = { 15259 get value() { 15260 return get(); 15261 }, 15262 set value(newVal) { 15263 set(newVal); 15264 } 15265 }; 15266 def(ref, RefFlag, true); 15267 return ref; 15268} 15269function toRefs(object) { 15270 if ( true && !isReactive(object)) { 15271 warn$2("toRefs() expects a reactive object but received a plain one."); 15272 } 15273 var ret = isArray(object) ? new Array(object.length) : {}; 15274 for (var key in object) { 15275 ret[key] = toRef(object, key); 15276 } 15277 return ret; 15278} 15279function toRef(object, key, defaultValue) { 15280 var val = object[key]; 15281 if (isRef(val)) { 15282 return val; 15283 } 15284 var ref = { 15285 get value() { 15286 var val = object[key]; 15287 return val === undefined ? defaultValue : val; 15288 }, 15289 set value(newVal) { 15290 object[key] = newVal; 15291 } 15292 }; 15293 def(ref, RefFlag, true); 15294 return ref; 15295} 15296 15297var rawToReadonlyFlag = "__v_rawToReadonly"; 15298var rawToShallowReadonlyFlag = "__v_rawToShallowReadonly"; 15299function readonly(target) { 15300 return createReadonly(target, false); 15301} 15302function createReadonly(target, shallow) { 15303 if (!isPlainObject(target)) { 15304 if (true) { 15305 if (isArray(target)) { 15306 warn$2("Vue 2 does not support readonly arrays."); 15307 } 15308 else if (isCollectionType(target)) { 15309 warn$2("Vue 2 does not support readonly collection types such as Map or Set."); 15310 } 15311 else { 15312 warn$2("value cannot be made readonly: ".concat(typeof target)); 15313 } 15314 } 15315 return target; 15316 } 15317 if ( true && !Object.isExtensible(target)) { 15318 warn$2("Vue 2 does not support creating readonly proxy for non-extensible object."); 15319 } 15320 // already a readonly object 15321 if (isReadonly(target)) { 15322 return target; 15323 } 15324 // already has a readonly proxy 15325 var existingFlag = shallow ? rawToShallowReadonlyFlag : rawToReadonlyFlag; 15326 var existingProxy = target[existingFlag]; 15327 if (existingProxy) { 15328 return existingProxy; 15329 } 15330 var proxy = Object.create(Object.getPrototypeOf(target)); 15331 def(target, existingFlag, proxy); 15332 def(proxy, "__v_isReadonly" /* ReactiveFlags.IS_READONLY */, true); 15333 def(proxy, "__v_raw" /* ReactiveFlags.RAW */, target); 15334 if (isRef(target)) { 15335 def(proxy, RefFlag, true); 15336 } 15337 if (shallow || isShallow(target)) { 15338 def(proxy, "__v_isShallow" /* ReactiveFlags.IS_SHALLOW */, true); 15339 } 15340 var keys = Object.keys(target); 15341 for (var i = 0; i < keys.length; i++) { 15342 defineReadonlyProperty(proxy, target, keys[i], shallow); 15343 } 15344 return proxy; 15345} 15346function defineReadonlyProperty(proxy, target, key, shallow) { 15347 Object.defineProperty(proxy, key, { 15348 enumerable: true, 15349 configurable: true, 15350 get: function () { 15351 var val = target[key]; 15352 return shallow || !isPlainObject(val) ? val : readonly(val); 15353 }, 15354 set: function () { 15355 true && 15356 warn$2("Set operation on key \"".concat(key, "\" failed: target is readonly.")); 15357 } 15358 }); 15359} 15360/** 15361 * Returns a reactive-copy of the original object, where only the root level 15362 * properties are readonly, and does NOT unwrap refs nor recursively convert 15363 * returned properties. 15364 * This is used for creating the props proxy object for stateful components. 15365 */ 15366function shallowReadonly(target) { 15367 return createReadonly(target, true); 15368} 15369 15370function computed(getterOrOptions, debugOptions) { 15371 var getter; 15372 var setter; 15373 var onlyGetter = isFunction(getterOrOptions); 15374 if (onlyGetter) { 15375 getter = getterOrOptions; 15376 setter = true 15377 ? function () { 15378 warn$2('Write operation failed: computed value is readonly'); 15379 } 15380 : 0; 15381 } 15382 else { 15383 getter = getterOrOptions.get; 15384 setter = getterOrOptions.set; 15385 } 15386 var watcher = isServerRendering() 15387 ? null 15388 : new Watcher(currentInstance, getter, noop, { lazy: true }); 15389 if ( true && watcher && debugOptions) { 15390 watcher.onTrack = debugOptions.onTrack; 15391 watcher.onTrigger = debugOptions.onTrigger; 15392 } 15393 var ref = { 15394 // some libs rely on the presence effect for checking computed refs 15395 // from normal refs, but the implementation doesn't matter 15396 effect: watcher, 15397 get value() { 15398 if (watcher) { 15399 if (watcher.dirty) { 15400 watcher.evaluate(); 15401 } 15402 if (Dep.target) { 15403 if ( true && Dep.target.onTrack) { 15404 Dep.target.onTrack({ 15405 effect: Dep.target, 15406 target: ref, 15407 type: "get" /* TrackOpTypes.GET */, 15408 key: 'value' 15409 }); 15410 } 15411 watcher.depend(); 15412 } 15413 return watcher.value; 15414 } 15415 else { 15416 return getter(); 15417 } 15418 }, 15419 set value(newVal) { 15420 setter(newVal); 15421 } 15422 }; 15423 def(ref, RefFlag, true); 15424 def(ref, "__v_isReadonly" /* ReactiveFlags.IS_READONLY */, onlyGetter); 15425 return ref; 15426} 15427 15428var mark; 15429var measure; 15430if (true) { 15431 var perf_1 = inBrowser && window.performance; 15432 /* istanbul ignore if */ 15433 if (perf_1 && 15434 // @ts-ignore 15435 perf_1.mark && 15436 // @ts-ignore 15437 perf_1.measure && 15438 // @ts-ignore 15439 perf_1.clearMarks && 15440 // @ts-ignore 15441 perf_1.clearMeasures) { 15442 mark = function (tag) { return perf_1.mark(tag); }; 15443 measure = function (name, startTag, endTag) { 15444 perf_1.measure(name, startTag, endTag); 15445 perf_1.clearMarks(startTag); 15446 perf_1.clearMarks(endTag); 15447 // perf.clearMeasures(name) 15448 }; 15449 } 15450} 15451 15452var normalizeEvent = cached(function (name) { 15453 var passive = name.charAt(0) === '&'; 15454 name = passive ? name.slice(1) : name; 15455 var once = name.charAt(0) === '~'; // Prefixed last, checked first 15456 name = once ? name.slice(1) : name; 15457 var capture = name.charAt(0) === '!'; 15458 name = capture ? name.slice(1) : name; 15459 return { 15460 name: name, 15461 once: once, 15462 capture: capture, 15463 passive: passive 15464 }; 15465}); 15466function createFnInvoker(fns, vm) { 15467 function invoker() { 15468 var fns = invoker.fns; 15469 if (isArray(fns)) { 15470 var cloned = fns.slice(); 15471 for (var i = 0; i < cloned.length; i++) { 15472 invokeWithErrorHandling(cloned[i], null, arguments, vm, "v-on handler"); 15473 } 15474 } 15475 else { 15476 // return handler return value for single handlers 15477 return invokeWithErrorHandling(fns, null, arguments, vm, "v-on handler"); 15478 } 15479 } 15480 invoker.fns = fns; 15481 return invoker; 15482} 15483function updateListeners(on, oldOn, add, remove, createOnceHandler, vm) { 15484 var name, cur, old, event; 15485 for (name in on) { 15486 cur = on[name]; 15487 old = oldOn[name]; 15488 event = normalizeEvent(name); 15489 if (isUndef(cur)) { 15490 true && 15491 warn$2("Invalid handler for event \"".concat(event.name, "\": got ") + String(cur), vm); 15492 } 15493 else if (isUndef(old)) { 15494 if (isUndef(cur.fns)) { 15495 cur = on[name] = createFnInvoker(cur, vm); 15496 } 15497 if (isTrue(event.once)) { 15498 cur = on[name] = createOnceHandler(event.name, cur, event.capture); 15499 } 15500 add(event.name, cur, event.capture, event.passive, event.params); 15501 } 15502 else if (cur !== old) { 15503 old.fns = cur; 15504 on[name] = old; 15505 } 15506 } 15507 for (name in oldOn) { 15508 if (isUndef(on[name])) { 15509 event = normalizeEvent(name); 15510 remove(event.name, oldOn[name], event.capture); 15511 } 15512 } 15513} 15514 15515function mergeVNodeHook(def, hookKey, hook) { 15516 if (def instanceof VNode) { 15517 def = def.data.hook || (def.data.hook = {}); 15518 } 15519 var invoker; 15520 var oldHook = def[hookKey]; 15521 function wrappedHook() { 15522 hook.apply(this, arguments); 15523 // important: remove merged hook to ensure it's called only once 15524 // and prevent memory leak 15525 remove$2(invoker.fns, wrappedHook); 15526 } 15527 if (isUndef(oldHook)) { 15528 // no existing hook 15529 invoker = createFnInvoker([wrappedHook]); 15530 } 15531 else { 15532 /* istanbul ignore if */ 15533 if (isDef(oldHook.fns) && isTrue(oldHook.merged)) { 15534 // already a merged invoker 15535 invoker = oldHook; 15536 invoker.fns.push(wrappedHook); 15537 } 15538 else { 15539 // existing plain hook 15540 invoker = createFnInvoker([oldHook, wrappedHook]); 15541 } 15542 } 15543 invoker.merged = true; 15544 def[hookKey] = invoker; 15545} 15546 15547function extractPropsFromVNodeData(data, Ctor, tag) { 15548 // we are only extracting raw values here. 15549 // validation and default values are handled in the child 15550 // component itself. 15551 var propOptions = Ctor.options.props; 15552 if (isUndef(propOptions)) { 15553 return; 15554 } 15555 var res = {}; 15556 var attrs = data.attrs, props = data.props; 15557 if (isDef(attrs) || isDef(props)) { 15558 for (var key in propOptions) { 15559 var altKey = hyphenate(key); 15560 if (true) { 15561 var keyInLowerCase = key.toLowerCase(); 15562 if (key !== keyInLowerCase && attrs && hasOwn(attrs, keyInLowerCase)) { 15563 tip("Prop \"".concat(keyInLowerCase, "\" is passed to component ") + 15564 "".concat(formatComponentName( 15565 // @ts-expect-error tag is string 15566 tag || Ctor), ", but the declared prop name is") + 15567 " \"".concat(key, "\". ") + 15568 "Note that HTML attributes are case-insensitive and camelCased " + 15569 "props need to use their kebab-case equivalents when using in-DOM " + 15570 "templates. You should probably use \"".concat(altKey, "\" instead of \"").concat(key, "\".")); 15571 } 15572 } 15573 checkProp(res, props, key, altKey, true) || 15574 checkProp(res, attrs, key, altKey, false); 15575 } 15576 } 15577 return res; 15578} 15579function checkProp(res, hash, key, altKey, preserve) { 15580 if (isDef(hash)) { 15581 if (hasOwn(hash, key)) { 15582 res[key] = hash[key]; 15583 if (!preserve) { 15584 delete hash[key]; 15585 } 15586 return true; 15587 } 15588 else if (hasOwn(hash, altKey)) { 15589 res[key] = hash[altKey]; 15590 if (!preserve) { 15591 delete hash[altKey]; 15592 } 15593 return true; 15594 } 15595 } 15596 return false; 15597} 15598 15599// The template compiler attempts to minimize the need for normalization by 15600// statically analyzing the template at compile time. 15601// 15602// For plain HTML markup, normalization can be completely skipped because the 15603// generated render function is guaranteed to return Array<VNode>. There are 15604// two cases where extra normalization is needed: 15605// 1. When the children contains components - because a functional component 15606// may return an Array instead of a single root. In this case, just a simple 15607// normalization is needed - if any child is an Array, we flatten the whole 15608// thing with Array.prototype.concat. It is guaranteed to be only 1-level deep 15609// because functional components already normalize their own children. 15610function simpleNormalizeChildren(children) { 15611 for (var i = 0; i < children.length; i++) { 15612 if (isArray(children[i])) { 15613 return Array.prototype.concat.apply([], children); 15614 } 15615 } 15616 return children; 15617} 15618// 2. When the children contains constructs that always generated nested Arrays, 15619// e.g. <template>, <slot>, v-for, or when the children is provided by user 15620// with hand-written render functions / JSX. In such cases a full normalization 15621// is needed to cater to all possible types of children values. 15622function normalizeChildren(children) { 15623 return isPrimitive(children) 15624 ? [createTextVNode(children)] 15625 : isArray(children) 15626 ? normalizeArrayChildren(children) 15627 : undefined; 15628} 15629function isTextNode(node) { 15630 return isDef(node) && isDef(node.text) && isFalse(node.isComment); 15631} 15632function normalizeArrayChildren(children, nestedIndex) { 15633 var res = []; 15634 var i, c, lastIndex, last; 15635 for (i = 0; i < children.length; i++) { 15636 c = children[i]; 15637 if (isUndef(c) || typeof c === 'boolean') 15638 continue; 15639 lastIndex = res.length - 1; 15640 last = res[lastIndex]; 15641 // nested 15642 if (isArray(c)) { 15643 if (c.length > 0) { 15644 c = normalizeArrayChildren(c, "".concat(nestedIndex || '', "_").concat(i)); 15645 // merge adjacent text nodes 15646 if (isTextNode(c[0]) && isTextNode(last)) { 15647 res[lastIndex] = createTextVNode(last.text + c[0].text); 15648 c.shift(); 15649 } 15650 res.push.apply(res, c); 15651 } 15652 } 15653 else if (isPrimitive(c)) { 15654 if (isTextNode(last)) { 15655 // merge adjacent text nodes 15656 // this is necessary for SSR hydration because text nodes are 15657 // essentially merged when rendered to HTML strings 15658 res[lastIndex] = createTextVNode(last.text + c); 15659 } 15660 else if (c !== '') { 15661 // convert primitive to vnode 15662 res.push(createTextVNode(c)); 15663 } 15664 } 15665 else { 15666 if (isTextNode(c) && isTextNode(last)) { 15667 // merge adjacent text nodes 15668 res[lastIndex] = createTextVNode(last.text + c.text); 15669 } 15670 else { 15671 // default key for nested array children (likely generated by v-for) 15672 if (isTrue(children._isVList) && 15673 isDef(c.tag) && 15674 isUndef(c.key) && 15675 isDef(nestedIndex)) { 15676 c.key = "__vlist".concat(nestedIndex, "_").concat(i, "__"); 15677 } 15678 res.push(c); 15679 } 15680 } 15681 } 15682 return res; 15683} 15684 15685var SIMPLE_NORMALIZE = 1; 15686var ALWAYS_NORMALIZE = 2; 15687// wrapper function for providing a more flexible interface 15688// without getting yelled at by flow 15689function createElement$1(context, tag, data, children, normalizationType, alwaysNormalize) { 15690 if (isArray(data) || isPrimitive(data)) { 15691 normalizationType = children; 15692 children = data; 15693 data = undefined; 15694 } 15695 if (isTrue(alwaysNormalize)) { 15696 normalizationType = ALWAYS_NORMALIZE; 15697 } 15698 return _createElement(context, tag, data, children, normalizationType); 15699} 15700function _createElement(context, tag, data, children, normalizationType) { 15701 if (isDef(data) && isDef(data.__ob__)) { 15702 true && 15703 warn$2("Avoid using observed data object as vnode data: ".concat(JSON.stringify(data), "\n") + 'Always create fresh vnode data objects in each render!', context); 15704 return createEmptyVNode(); 15705 } 15706 // object syntax in v-bind 15707 if (isDef(data) && isDef(data.is)) { 15708 tag = data.is; 15709 } 15710 if (!tag) { 15711 // in case of component :is set to falsy value 15712 return createEmptyVNode(); 15713 } 15714 // warn against non-primitive key 15715 if ( true && isDef(data) && isDef(data.key) && !isPrimitive(data.key)) { 15716 warn$2('Avoid using non-primitive value as key, ' + 15717 'use string/number value instead.', context); 15718 } 15719 // support single function children as default scoped slot 15720 if (isArray(children) && isFunction(children[0])) { 15721 data = data || {}; 15722 data.scopedSlots = { default: children[0] }; 15723 children.length = 0; 15724 } 15725 if (normalizationType === ALWAYS_NORMALIZE) { 15726 children = normalizeChildren(children); 15727 } 15728 else if (normalizationType === SIMPLE_NORMALIZE) { 15729 children = simpleNormalizeChildren(children); 15730 } 15731 var vnode, ns; 15732 if (typeof tag === 'string') { 15733 var Ctor = void 0; 15734 ns = (context.$vnode && context.$vnode.ns) || config.getTagNamespace(tag); 15735 if (config.isReservedTag(tag)) { 15736 // platform built-in elements 15737 if ( true && 15738 isDef(data) && 15739 isDef(data.nativeOn) && 15740 data.tag !== 'component') { 15741 warn$2("The .native modifier for v-on is only valid on components but it was used on <".concat(tag, ">."), context); 15742 } 15743 vnode = new VNode(config.parsePlatformTagName(tag), data, children, undefined, undefined, context); 15744 } 15745 else if ((!data || !data.pre) && 15746 isDef((Ctor = resolveAsset(context.$options, 'components', tag)))) { 15747 // component 15748 vnode = createComponent(Ctor, data, context, children, tag); 15749 } 15750 else { 15751 // unknown or unlisted namespaced elements 15752 // check at runtime because it may get assigned a namespace when its 15753 // parent normalizes children 15754 vnode = new VNode(tag, data, children, undefined, undefined, context); 15755 } 15756 } 15757 else { 15758 // direct component options / constructor 15759 vnode = createComponent(tag, data, context, children); 15760 } 15761 if (isArray(vnode)) { 15762 return vnode; 15763 } 15764 else if (isDef(vnode)) { 15765 if (isDef(ns)) 15766 applyNS(vnode, ns); 15767 if (isDef(data)) 15768 registerDeepBindings(data); 15769 return vnode; 15770 } 15771 else { 15772 return createEmptyVNode(); 15773 } 15774} 15775function applyNS(vnode, ns, force) { 15776 vnode.ns = ns; 15777 if (vnode.tag === 'foreignObject') { 15778 // use default namespace inside foreignObject 15779 ns = undefined; 15780 force = true; 15781 } 15782 if (isDef(vnode.children)) { 15783 for (var i = 0, l = vnode.children.length; i < l; i++) { 15784 var child = vnode.children[i]; 15785 if (isDef(child.tag) && 15786 (isUndef(child.ns) || (isTrue(force) && child.tag !== 'svg'))) { 15787 applyNS(child, ns, force); 15788 } 15789 } 15790 } 15791} 15792// ref #5318 15793// necessary to ensure parent re-render when deep bindings like :style and 15794// :class are used on slot nodes 15795function registerDeepBindings(data) { 15796 if (isObject(data.style)) { 15797 traverse(data.style); 15798 } 15799 if (isObject(data.class)) { 15800 traverse(data.class); 15801 } 15802} 15803 15804/** 15805 * Runtime helper for rendering v-for lists. 15806 */ 15807function renderList(val, render) { 15808 var ret = null, i, l, keys, key; 15809 if (isArray(val) || typeof val === 'string') { 15810 ret = new Array(val.length); 15811 for (i = 0, l = val.length; i < l; i++) { 15812 ret[i] = render(val[i], i); 15813 } 15814 } 15815 else if (typeof val === 'number') { 15816 ret = new Array(val); 15817 for (i = 0; i < val; i++) { 15818 ret[i] = render(i + 1, i); 15819 } 15820 } 15821 else if (isObject(val)) { 15822 if (hasSymbol && val[Symbol.iterator]) { 15823 ret = []; 15824 var iterator = val[Symbol.iterator](); 15825 var result = iterator.next(); 15826 while (!result.done) { 15827 ret.push(render(result.value, ret.length)); 15828 result = iterator.next(); 15829 } 15830 } 15831 else { 15832 keys = Object.keys(val); 15833 ret = new Array(keys.length); 15834 for (i = 0, l = keys.length; i < l; i++) { 15835 key = keys[i]; 15836 ret[i] = render(val[key], key, i); 15837 } 15838 } 15839 } 15840 if (!isDef(ret)) { 15841 ret = []; 15842 } 15843 ret._isVList = true; 15844 return ret; 15845} 15846 15847/** 15848 * Runtime helper for rendering <slot> 15849 */ 15850function renderSlot(name, fallbackRender, props, bindObject) { 15851 var scopedSlotFn = this.$scopedSlots[name]; 15852 var nodes; 15853 if (scopedSlotFn) { 15854 // scoped slot 15855 props = props || {}; 15856 if (bindObject) { 15857 if ( true && !isObject(bindObject)) { 15858 warn$2('slot v-bind without argument expects an Object', this); 15859 } 15860 props = extend(extend({}, bindObject), props); 15861 } 15862 nodes = 15863 scopedSlotFn(props) || 15864 (isFunction(fallbackRender) ? fallbackRender() : fallbackRender); 15865 } 15866 else { 15867 nodes = 15868 this.$slots[name] || 15869 (isFunction(fallbackRender) ? fallbackRender() : fallbackRender); 15870 } 15871 var target = props && props.slot; 15872 if (target) { 15873 return this.$createElement('template', { slot: target }, nodes); 15874 } 15875 else { 15876 return nodes; 15877 } 15878} 15879 15880/** 15881 * Runtime helper for resolving filters 15882 */ 15883function resolveFilter(id) { 15884 return resolveAsset(this.$options, 'filters', id, true) || identity; 15885} 15886 15887function isKeyNotMatch(expect, actual) { 15888 if (isArray(expect)) { 15889 return expect.indexOf(actual) === -1; 15890 } 15891 else { 15892 return expect !== actual; 15893 } 15894} 15895/** 15896 * Runtime helper for checking keyCodes from config. 15897 * exposed as Vue.prototype._k 15898 * passing in eventKeyName as last argument separately for backwards compat 15899 */ 15900function checkKeyCodes(eventKeyCode, key, builtInKeyCode, eventKeyName, builtInKeyName) { 15901 var mappedKeyCode = config.keyCodes[key] || builtInKeyCode; 15902 if (builtInKeyName && eventKeyName && !config.keyCodes[key]) { 15903 return isKeyNotMatch(builtInKeyName, eventKeyName); 15904 } 15905 else if (mappedKeyCode) { 15906 return isKeyNotMatch(mappedKeyCode, eventKeyCode); 15907 } 15908 else if (eventKeyName) { 15909 return hyphenate(eventKeyName) !== key; 15910 } 15911 return eventKeyCode === undefined; 15912} 15913 15914/** 15915 * Runtime helper for merging v-bind="object" into a VNode's data. 15916 */ 15917function bindObjectProps(data, tag, value, asProp, isSync) { 15918 if (value) { 15919 if (!isObject(value)) { 15920 true && 15921 warn$2('v-bind without argument expects an Object or Array value', this); 15922 } 15923 else { 15924 if (isArray(value)) { 15925 value = toObject(value); 15926 } 15927 var hash = void 0; 15928 var _loop_1 = function (key) { 15929 if (key === 'class' || key === 'style' || isReservedAttribute(key)) { 15930 hash = data; 15931 } 15932 else { 15933 var type = data.attrs && data.attrs.type; 15934 hash = 15935 asProp || config.mustUseProp(tag, type, key) 15936 ? data.domProps || (data.domProps = {}) 15937 : data.attrs || (data.attrs = {}); 15938 } 15939 var camelizedKey = camelize(key); 15940 var hyphenatedKey = hyphenate(key); 15941 if (!(camelizedKey in hash) && !(hyphenatedKey in hash)) { 15942 hash[key] = value[key]; 15943 if (isSync) { 15944 var on = data.on || (data.on = {}); 15945 on["update:".concat(key)] = function ($event) { 15946 value[key] = $event; 15947 }; 15948 } 15949 } 15950 }; 15951 for (var key in value) { 15952 _loop_1(key); 15953 } 15954 } 15955 } 15956 return data; 15957} 15958 15959/** 15960 * Runtime helper for rendering static trees. 15961 */ 15962function renderStatic(index, isInFor) { 15963 var cached = this._staticTrees || (this._staticTrees = []); 15964 var tree = cached[index]; 15965 // if has already-rendered static tree and not inside v-for, 15966 // we can reuse the same tree. 15967 if (tree && !isInFor) { 15968 return tree; 15969 } 15970 // otherwise, render a fresh tree. 15971 tree = cached[index] = this.$options.staticRenderFns[index].call(this._renderProxy, this._c, this // for render fns generated for functional component templates 15972 ); 15973 markStatic$1(tree, "__static__".concat(index), false); 15974 return tree; 15975} 15976/** 15977 * Runtime helper for v-once. 15978 * Effectively it means marking the node as static with a unique key. 15979 */ 15980function markOnce(tree, index, key) { 15981 markStatic$1(tree, "__once__".concat(index).concat(key ? "_".concat(key) : ""), true); 15982 return tree; 15983} 15984function markStatic$1(tree, key, isOnce) { 15985 if (isArray(tree)) { 15986 for (var i = 0; i < tree.length; i++) { 15987 if (tree[i] && typeof tree[i] !== 'string') { 15988 markStaticNode(tree[i], "".concat(key, "_").concat(i), isOnce); 15989 } 15990 } 15991 } 15992 else { 15993 markStaticNode(tree, key, isOnce); 15994 } 15995} 15996function markStaticNode(node, key, isOnce) { 15997 node.isStatic = true; 15998 node.key = key; 15999 node.isOnce = isOnce; 16000} 16001 16002function bindObjectListeners(data, value) { 16003 if (value) { 16004 if (!isPlainObject(value)) { 16005 true && warn$2('v-on without argument expects an Object value', this); 16006 } 16007 else { 16008 var on = (data.on = data.on ? extend({}, data.on) : {}); 16009 for (var key in value) { 16010 var existing = on[key]; 16011 var ours = value[key]; 16012 on[key] = existing ? [].concat(existing, ours) : ours; 16013 } 16014 } 16015 } 16016 return data; 16017} 16018 16019function resolveScopedSlots(fns, res, 16020// the following are added in 2.6 16021hasDynamicKeys, contentHashKey) { 16022 res = res || { $stable: !hasDynamicKeys }; 16023 for (var i = 0; i < fns.length; i++) { 16024 var slot = fns[i]; 16025 if (isArray(slot)) { 16026 resolveScopedSlots(slot, res, hasDynamicKeys); 16027 } 16028 else if (slot) { 16029 // marker for reverse proxying v-slot without scope on this.$slots 16030 // @ts-expect-error 16031 if (slot.proxy) { 16032 // @ts-expect-error 16033 slot.fn.proxy = true; 16034 } 16035 res[slot.key] = slot.fn; 16036 } 16037 } 16038 if (contentHashKey) { 16039 res.$key = contentHashKey; 16040 } 16041 return res; 16042} 16043 16044// helper to process dynamic keys for dynamic arguments in v-bind and v-on. 16045function bindDynamicKeys(baseObj, values) { 16046 for (var i = 0; i < values.length; i += 2) { 16047 var key = values[i]; 16048 if (typeof key === 'string' && key) { 16049 baseObj[values[i]] = values[i + 1]; 16050 } 16051 else if ( true && key !== '' && key !== null) { 16052 // null is a special value for explicitly removing a binding 16053 warn$2("Invalid value for dynamic directive argument (expected string or null): ".concat(key), this); 16054 } 16055 } 16056 return baseObj; 16057} 16058// helper to dynamically append modifier runtime markers to event names. 16059// ensure only append when value is already string, otherwise it will be cast 16060// to string and cause the type check to miss. 16061function prependModifier(value, symbol) { 16062 return typeof value === 'string' ? symbol + value : value; 16063} 16064 16065function installRenderHelpers(target) { 16066 target._o = markOnce; 16067 target._n = toNumber; 16068 target._s = toString; 16069 target._l = renderList; 16070 target._t = renderSlot; 16071 target._q = looseEqual; 16072 target._i = looseIndexOf; 16073 target._m = renderStatic; 16074 target._f = resolveFilter; 16075 target._k = checkKeyCodes; 16076 target._b = bindObjectProps; 16077 target._v = createTextVNode; 16078 target._e = createEmptyVNode; 16079 target._u = resolveScopedSlots; 16080 target._g = bindObjectListeners; 16081 target._d = bindDynamicKeys; 16082 target._p = prependModifier; 16083} 16084 16085/** 16086 * Runtime helper for resolving raw children VNodes into a slot object. 16087 */ 16088function resolveSlots(children, context) { 16089 if (!children || !children.length) { 16090 return {}; 16091 } 16092 var slots = {}; 16093 for (var i = 0, l = children.length; i < l; i++) { 16094 var child = children[i]; 16095 var data = child.data; 16096 // remove slot attribute if the node is resolved as a Vue slot node 16097 if (data && data.attrs && data.attrs.slot) { 16098 delete data.attrs.slot; 16099 } 16100 // named slots should only be respected if the vnode was rendered in the 16101 // same context. 16102 if ((child.context === context || child.fnContext === context) && 16103 data && 16104 data.slot != null) { 16105 var name_1 = data.slot; 16106 var slot = slots[name_1] || (slots[name_1] = []); 16107 if (child.tag === 'template') { 16108 slot.push.apply(slot, child.children || []); 16109 } 16110 else { 16111 slot.push(child); 16112 } 16113 } 16114 else { 16115 (slots.default || (slots.default = [])).push(child); 16116 } 16117 } 16118 // ignore slots that contains only whitespace 16119 for (var name_2 in slots) { 16120 if (slots[name_2].every(isWhitespace)) { 16121 delete slots[name_2]; 16122 } 16123 } 16124 return slots; 16125} 16126function isWhitespace(node) { 16127 return (node.isComment && !node.asyncFactory) || node.text === ' '; 16128} 16129 16130function isAsyncPlaceholder(node) { 16131 // @ts-expect-error not really boolean type 16132 return node.isComment && node.asyncFactory; 16133} 16134 16135function normalizeScopedSlots(ownerVm, scopedSlots, normalSlots, prevScopedSlots) { 16136 var res; 16137 var hasNormalSlots = Object.keys(normalSlots).length > 0; 16138 var isStable = scopedSlots ? !!scopedSlots.$stable : !hasNormalSlots; 16139 var key = scopedSlots && scopedSlots.$key; 16140 if (!scopedSlots) { 16141 res = {}; 16142 } 16143 else if (scopedSlots._normalized) { 16144 // fast path 1: child component re-render only, parent did not change 16145 return scopedSlots._normalized; 16146 } 16147 else if (isStable && 16148 prevScopedSlots && 16149 prevScopedSlots !== emptyObject && 16150 key === prevScopedSlots.$key && 16151 !hasNormalSlots && 16152 !prevScopedSlots.$hasNormal) { 16153 // fast path 2: stable scoped slots w/ no normal slots to proxy, 16154 // only need to normalize once 16155 return prevScopedSlots; 16156 } 16157 else { 16158 res = {}; 16159 for (var key_1 in scopedSlots) { 16160 if (scopedSlots[key_1] && key_1[0] !== '$') { 16161 res[key_1] = normalizeScopedSlot(ownerVm, normalSlots, key_1, scopedSlots[key_1]); 16162 } 16163 } 16164 } 16165 // expose normal slots on scopedSlots 16166 for (var key_2 in normalSlots) { 16167 if (!(key_2 in res)) { 16168 res[key_2] = proxyNormalSlot(normalSlots, key_2); 16169 } 16170 } 16171 // avoriaz seems to mock a non-extensible $scopedSlots object 16172 // and when that is passed down this would cause an error 16173 if (scopedSlots && Object.isExtensible(scopedSlots)) { 16174 scopedSlots._normalized = res; 16175 } 16176 def(res, '$stable', isStable); 16177 def(res, '$key', key); 16178 def(res, '$hasNormal', hasNormalSlots); 16179 return res; 16180} 16181function normalizeScopedSlot(vm, normalSlots, key, fn) { 16182 var normalized = function () { 16183 var cur = currentInstance; 16184 setCurrentInstance(vm); 16185 var res = arguments.length ? fn.apply(null, arguments) : fn({}); 16186 res = 16187 res && typeof res === 'object' && !isArray(res) 16188 ? [res] // single vnode 16189 : normalizeChildren(res); 16190 var vnode = res && res[0]; 16191 setCurrentInstance(cur); 16192 return res && 16193 (!vnode || 16194 (res.length === 1 && vnode.isComment && !isAsyncPlaceholder(vnode))) // #9658, #10391 16195 ? undefined 16196 : res; 16197 }; 16198 // this is a slot using the new v-slot syntax without scope. although it is 16199 // compiled as a scoped slot, render fn users would expect it to be present 16200 // on this.$slots because the usage is semantically a normal slot. 16201 if (fn.proxy) { 16202 Object.defineProperty(normalSlots, key, { 16203 get: normalized, 16204 enumerable: true, 16205 configurable: true 16206 }); 16207 } 16208 return normalized; 16209} 16210function proxyNormalSlot(slots, key) { 16211 return function () { return slots[key]; }; 16212} 16213 16214function initSetup(vm) { 16215 var options = vm.$options; 16216 var setup = options.setup; 16217 if (setup) { 16218 var ctx = (vm._setupContext = createSetupContext(vm)); 16219 setCurrentInstance(vm); 16220 pushTarget(); 16221 var setupResult = invokeWithErrorHandling(setup, null, [vm._props || shallowReactive({}), ctx], vm, "setup"); 16222 popTarget(); 16223 setCurrentInstance(); 16224 if (isFunction(setupResult)) { 16225 // render function 16226 // @ts-ignore 16227 options.render = setupResult; 16228 } 16229 else if (isObject(setupResult)) { 16230 // bindings 16231 if ( true && setupResult instanceof VNode) { 16232 warn$2("setup() should not return VNodes directly - " + 16233 "return a render function instead."); 16234 } 16235 vm._setupState = setupResult; 16236 // __sfc indicates compiled bindings from <script setup> 16237 if (!setupResult.__sfc) { 16238 for (var key in setupResult) { 16239 if (!isReserved(key)) { 16240 proxyWithRefUnwrap(vm, setupResult, key); 16241 } 16242 else if (true) { 16243 warn$2("Avoid using variables that start with _ or $ in setup()."); 16244 } 16245 } 16246 } 16247 else { 16248 // exposed for compiled render fn 16249 var proxy = (vm._setupProxy = {}); 16250 for (var key in setupResult) { 16251 if (key !== '__sfc') { 16252 proxyWithRefUnwrap(proxy, setupResult, key); 16253 } 16254 } 16255 } 16256 } 16257 else if ( true && setupResult !== undefined) { 16258 warn$2("setup() should return an object. Received: ".concat(setupResult === null ? 'null' : typeof setupResult)); 16259 } 16260 } 16261} 16262function createSetupContext(vm) { 16263 var exposeCalled = false; 16264 return { 16265 get attrs() { 16266 if (!vm._attrsProxy) { 16267 var proxy = (vm._attrsProxy = {}); 16268 def(proxy, '_v_attr_proxy', true); 16269 syncSetupProxy(proxy, vm.$attrs, emptyObject, vm, '$attrs'); 16270 } 16271 return vm._attrsProxy; 16272 }, 16273 get listeners() { 16274 if (!vm._listenersProxy) { 16275 var proxy = (vm._listenersProxy = {}); 16276 syncSetupProxy(proxy, vm.$listeners, emptyObject, vm, '$listeners'); 16277 } 16278 return vm._listenersProxy; 16279 }, 16280 get slots() { 16281 return initSlotsProxy(vm); 16282 }, 16283 emit: bind$1(vm.$emit, vm), 16284 expose: function (exposed) { 16285 if (true) { 16286 if (exposeCalled) { 16287 warn$2("expose() should be called only once per setup().", vm); 16288 } 16289 exposeCalled = true; 16290 } 16291 if (exposed) { 16292 Object.keys(exposed).forEach(function (key) { 16293 return proxyWithRefUnwrap(vm, exposed, key); 16294 }); 16295 } 16296 } 16297 }; 16298} 16299function syncSetupProxy(to, from, prev, instance, type) { 16300 var changed = false; 16301 for (var key in from) { 16302 if (!(key in to)) { 16303 changed = true; 16304 defineProxyAttr(to, key, instance, type); 16305 } 16306 else if (from[key] !== prev[key]) { 16307 changed = true; 16308 } 16309 } 16310 for (var key in to) { 16311 if (!(key in from)) { 16312 changed = true; 16313 delete to[key]; 16314 } 16315 } 16316 return changed; 16317} 16318function defineProxyAttr(proxy, key, instance, type) { 16319 Object.defineProperty(proxy, key, { 16320 enumerable: true, 16321 configurable: true, 16322 get: function () { 16323 return instance[type][key]; 16324 } 16325 }); 16326} 16327function initSlotsProxy(vm) { 16328 if (!vm._slotsProxy) { 16329 syncSetupSlots((vm._slotsProxy = {}), vm.$scopedSlots); 16330 } 16331 return vm._slotsProxy; 16332} 16333function syncSetupSlots(to, from) { 16334 for (var key in from) { 16335 to[key] = from[key]; 16336 } 16337 for (var key in to) { 16338 if (!(key in from)) { 16339 delete to[key]; 16340 } 16341 } 16342} 16343/** 16344 * @internal use manual type def because public setup context type relies on 16345 * legacy VNode types 16346 */ 16347function useSlots() { 16348 return getContext().slots; 16349} 16350/** 16351 * @internal use manual type def because public setup context type relies on 16352 * legacy VNode types 16353 */ 16354function useAttrs() { 16355 return getContext().attrs; 16356} 16357/** 16358 * Vue 2 only 16359 * @internal use manual type def because public setup context type relies on 16360 * legacy VNode types 16361 */ 16362function useListeners() { 16363 return getContext().listeners; 16364} 16365function getContext() { 16366 if ( true && !currentInstance) { 16367 warn$2("useContext() called without active instance."); 16368 } 16369 var vm = currentInstance; 16370 return vm._setupContext || (vm._setupContext = createSetupContext(vm)); 16371} 16372/** 16373 * Runtime helper for merging default declarations. Imported by compiled code 16374 * only. 16375 * @internal 16376 */ 16377function mergeDefaults(raw, defaults) { 16378 var props = isArray(raw) 16379 ? raw.reduce(function (normalized, p) { return ((normalized[p] = {}), normalized); }, {}) 16380 : raw; 16381 for (var key in defaults) { 16382 var opt = props[key]; 16383 if (opt) { 16384 if (isArray(opt) || isFunction(opt)) { 16385 props[key] = { type: opt, default: defaults[key] }; 16386 } 16387 else { 16388 opt.default = defaults[key]; 16389 } 16390 } 16391 else if (opt === null) { 16392 props[key] = { default: defaults[key] }; 16393 } 16394 else if (true) { 16395 warn$2("props default key \"".concat(key, "\" has no corresponding declaration.")); 16396 } 16397 } 16398 return props; 16399} 16400 16401function initRender(vm) { 16402 vm._vnode = null; // the root of the child tree 16403 vm._staticTrees = null; // v-once cached trees 16404 var options = vm.$options; 16405 var parentVnode = (vm.$vnode = options._parentVnode); // the placeholder node in parent tree 16406 var renderContext = parentVnode && parentVnode.context; 16407 vm.$slots = resolveSlots(options._renderChildren, renderContext); 16408 vm.$scopedSlots = parentVnode 16409 ? normalizeScopedSlots(vm.$parent, parentVnode.data.scopedSlots, vm.$slots) 16410 : emptyObject; 16411 // bind the createElement fn to this instance 16412 // so that we get proper render context inside it. 16413 // args order: tag, data, children, normalizationType, alwaysNormalize 16414 // internal version is used by render functions compiled from templates 16415 // @ts-expect-error 16416 vm._c = function (a, b, c, d) { return createElement$1(vm, a, b, c, d, false); }; 16417 // normalization is always applied for the public version, used in 16418 // user-written render functions. 16419 // @ts-expect-error 16420 vm.$createElement = function (a, b, c, d) { return createElement$1(vm, a, b, c, d, true); }; 16421 // $attrs & $listeners are exposed for easier HOC creation. 16422 // they need to be reactive so that HOCs using them are always updated 16423 var parentData = parentVnode && parentVnode.data; 16424 /* istanbul ignore else */ 16425 if (true) { 16426 defineReactive(vm, '$attrs', (parentData && parentData.attrs) || emptyObject, function () { 16427 !isUpdatingChildComponent && warn$2("$attrs is readonly.", vm); 16428 }, true); 16429 defineReactive(vm, '$listeners', options._parentListeners || emptyObject, function () { 16430 !isUpdatingChildComponent && warn$2("$listeners is readonly.", vm); 16431 }, true); 16432 } 16433 else {} 16434} 16435var currentRenderingInstance = null; 16436function renderMixin(Vue) { 16437 // install runtime convenience helpers 16438 installRenderHelpers(Vue.prototype); 16439 Vue.prototype.$nextTick = function (fn) { 16440 return nextTick(fn, this); 16441 }; 16442 Vue.prototype._render = function () { 16443 var vm = this; 16444 var _a = vm.$options, render = _a.render, _parentVnode = _a._parentVnode; 16445 if (_parentVnode && vm._isMounted) { 16446 vm.$scopedSlots = normalizeScopedSlots(vm.$parent, _parentVnode.data.scopedSlots, vm.$slots, vm.$scopedSlots); 16447 if (vm._slotsProxy) { 16448 syncSetupSlots(vm._slotsProxy, vm.$scopedSlots); 16449 } 16450 } 16451 // set parent vnode. this allows render functions to have access 16452 // to the data on the placeholder node. 16453 vm.$vnode = _parentVnode; 16454 // render self 16455 var vnode; 16456 try { 16457 // There's no need to maintain a stack because all render fns are called 16458 // separately from one another. Nested component's render fns are called 16459 // when parent component is patched. 16460 setCurrentInstance(vm); 16461 currentRenderingInstance = vm; 16462 vnode = render.call(vm._renderProxy, vm.$createElement); 16463 } 16464 catch (e) { 16465 handleError(e, vm, "render"); 16466 // return error render result, 16467 // or previous vnode to prevent render error causing blank component 16468 /* istanbul ignore else */ 16469 if ( true && vm.$options.renderError) { 16470 try { 16471 vnode = vm.$options.renderError.call(vm._renderProxy, vm.$createElement, e); 16472 } 16473 catch (e) { 16474 handleError(e, vm, "renderError"); 16475 vnode = vm._vnode; 16476 } 16477 } 16478 else { 16479 vnode = vm._vnode; 16480 } 16481 } 16482 finally { 16483 currentRenderingInstance = null; 16484 setCurrentInstance(); 16485 } 16486 // if the returned array contains only a single node, allow it 16487 if (isArray(vnode) && vnode.length === 1) { 16488 vnode = vnode[0]; 16489 } 16490 // return empty vnode in case the render function errored out 16491 if (!(vnode instanceof VNode)) { 16492 if ( true && isArray(vnode)) { 16493 warn$2('Multiple root nodes returned from render function. Render function ' + 16494 'should return a single root node.', vm); 16495 } 16496 vnode = createEmptyVNode(); 16497 } 16498 // set parent 16499 vnode.parent = _parentVnode; 16500 return vnode; 16501 }; 16502} 16503 16504function ensureCtor(comp, base) { 16505 if (comp.__esModule || (hasSymbol && comp[Symbol.toStringTag] === 'Module')) { 16506 comp = comp.default; 16507 } 16508 return isObject(comp) ? base.extend(comp) : comp; 16509} 16510function createAsyncPlaceholder(factory, data, context, children, tag) { 16511 var node = createEmptyVNode(); 16512 node.asyncFactory = factory; 16513 node.asyncMeta = { data: data, context: context, children: children, tag: tag }; 16514 return node; 16515} 16516function resolveAsyncComponent(factory, baseCtor) { 16517 if (isTrue(factory.error) && isDef(factory.errorComp)) { 16518 return factory.errorComp; 16519 } 16520 if (isDef(factory.resolved)) { 16521 return factory.resolved; 16522 } 16523 var owner = currentRenderingInstance; 16524 if (owner && isDef(factory.owners) && factory.owners.indexOf(owner) === -1) { 16525 // already pending 16526 factory.owners.push(owner); 16527 } 16528 if (isTrue(factory.loading) && isDef(factory.loadingComp)) { 16529 return factory.loadingComp; 16530 } 16531 if (owner && !isDef(factory.owners)) { 16532 var owners_1 = (factory.owners = [owner]); 16533 var sync_1 = true; 16534 var timerLoading_1 = null; 16535 var timerTimeout_1 = null; 16536 owner.$on('hook:destroyed', function () { return remove$2(owners_1, owner); }); 16537 var forceRender_1 = function (renderCompleted) { 16538 for (var i = 0, l = owners_1.length; i < l; i++) { 16539 owners_1[i].$forceUpdate(); 16540 } 16541 if (renderCompleted) { 16542 owners_1.length = 0; 16543 if (timerLoading_1 !== null) { 16544 clearTimeout(timerLoading_1); 16545 timerLoading_1 = null; 16546 } 16547 if (timerTimeout_1 !== null) { 16548 clearTimeout(timerTimeout_1); 16549 timerTimeout_1 = null; 16550 } 16551 } 16552 }; 16553 var resolve = once(function (res) { 16554 // cache resolved 16555 factory.resolved = ensureCtor(res, baseCtor); 16556 // invoke callbacks only if this is not a synchronous resolve 16557 // (async resolves are shimmed as synchronous during SSR) 16558 if (!sync_1) { 16559 forceRender_1(true); 16560 } 16561 else { 16562 owners_1.length = 0; 16563 } 16564 }); 16565 var reject_1 = once(function (reason) { 16566 true && 16567 warn$2("Failed to resolve async component: ".concat(String(factory)) + 16568 (reason ? "\nReason: ".concat(reason) : '')); 16569 if (isDef(factory.errorComp)) { 16570 factory.error = true; 16571 forceRender_1(true); 16572 } 16573 }); 16574 var res_1 = factory(resolve, reject_1); 16575 if (isObject(res_1)) { 16576 if (isPromise(res_1)) { 16577 // () => Promise 16578 if (isUndef(factory.resolved)) { 16579 res_1.then(resolve, reject_1); 16580 } 16581 } 16582 else if (isPromise(res_1.component)) { 16583 res_1.component.then(resolve, reject_1); 16584 if (isDef(res_1.error)) { 16585 factory.errorComp = ensureCtor(res_1.error, baseCtor); 16586 } 16587 if (isDef(res_1.loading)) { 16588 factory.loadingComp = ensureCtor(res_1.loading, baseCtor); 16589 if (res_1.delay === 0) { 16590 factory.loading = true; 16591 } 16592 else { 16593 // @ts-expect-error NodeJS timeout type 16594 timerLoading_1 = setTimeout(function () { 16595 timerLoading_1 = null; 16596 if (isUndef(factory.resolved) && isUndef(factory.error)) { 16597 factory.loading = true; 16598 forceRender_1(false); 16599 } 16600 }, res_1.delay || 200); 16601 } 16602 } 16603 if (isDef(res_1.timeout)) { 16604 // @ts-expect-error NodeJS timeout type 16605 timerTimeout_1 = setTimeout(function () { 16606 timerTimeout_1 = null; 16607 if (isUndef(factory.resolved)) { 16608 reject_1( true ? "timeout (".concat(res_1.timeout, "ms)") : 0); 16609 } 16610 }, res_1.timeout); 16611 } 16612 } 16613 } 16614 sync_1 = false; 16615 // return in case resolved synchronously 16616 return factory.loading ? factory.loadingComp : factory.resolved; 16617 } 16618} 16619 16620function getFirstComponentChild(children) { 16621 if (isArray(children)) { 16622 for (var i = 0; i < children.length; i++) { 16623 var c = children[i]; 16624 if (isDef(c) && (isDef(c.componentOptions) || isAsyncPlaceholder(c))) { 16625 return c; 16626 } 16627 } 16628 } 16629} 16630 16631function initEvents(vm) { 16632 vm._events = Object.create(null); 16633 vm._hasHookEvent = false; 16634 // init parent attached events 16635 var listeners = vm.$options._parentListeners; 16636 if (listeners) { 16637 updateComponentListeners(vm, listeners); 16638 } 16639} 16640var target$1; 16641function add$1(event, fn) { 16642 target$1.$on(event, fn); 16643} 16644function remove$1(event, fn) { 16645 target$1.$off(event, fn); 16646} 16647function createOnceHandler$1(event, fn) { 16648 var _target = target$1; 16649 return function onceHandler() { 16650 var res = fn.apply(null, arguments); 16651 if (res !== null) { 16652 _target.$off(event, onceHandler); 16653 } 16654 }; 16655} 16656function updateComponentListeners(vm, listeners, oldListeners) { 16657 target$1 = vm; 16658 updateListeners(listeners, oldListeners || {}, add$1, remove$1, createOnceHandler$1, vm); 16659 target$1 = undefined; 16660} 16661function eventsMixin(Vue) { 16662 var hookRE = /^hook:/; 16663 Vue.prototype.$on = function (event, fn) { 16664 var vm = this; 16665 if (isArray(event)) { 16666 for (var i = 0, l = event.length; i < l; i++) { 16667 vm.$on(event[i], fn); 16668 } 16669 } 16670 else { 16671 (vm._events[event] || (vm._events[event] = [])).push(fn); 16672 // optimize hook:event cost by using a boolean flag marked at registration 16673 // instead of a hash lookup 16674 if (hookRE.test(event)) { 16675 vm._hasHookEvent = true; 16676 } 16677 } 16678 return vm; 16679 }; 16680 Vue.prototype.$once = function (event, fn) { 16681 var vm = this; 16682 function on() { 16683 vm.$off(event, on); 16684 fn.apply(vm, arguments); 16685 } 16686 on.fn = fn; 16687 vm.$on(event, on); 16688 return vm; 16689 }; 16690 Vue.prototype.$off = function (event, fn) { 16691 var vm = this; 16692 // all 16693 if (!arguments.length) { 16694 vm._events = Object.create(null); 16695 return vm; 16696 } 16697 // array of events 16698 if (isArray(event)) { 16699 for (var i_1 = 0, l = event.length; i_1 < l; i_1++) { 16700 vm.$off(event[i_1], fn); 16701 } 16702 return vm; 16703 } 16704 // specific event 16705 var cbs = vm._events[event]; 16706 if (!cbs) { 16707 return vm; 16708 } 16709 if (!fn) { 16710 vm._events[event] = null; 16711 return vm; 16712 } 16713 // specific handler 16714 var cb; 16715 var i = cbs.length; 16716 while (i--) { 16717 cb = cbs[i]; 16718 if (cb === fn || cb.fn === fn) { 16719 cbs.splice(i, 1); 16720 break; 16721 } 16722 } 16723 return vm; 16724 }; 16725 Vue.prototype.$emit = function (event) { 16726 var vm = this; 16727 if (true) { 16728 var lowerCaseEvent = event.toLowerCase(); 16729 if (lowerCaseEvent !== event && vm._events[lowerCaseEvent]) { 16730 tip("Event \"".concat(lowerCaseEvent, "\" is emitted in component ") + 16731 "".concat(formatComponentName(vm), " but the handler is registered for \"").concat(event, "\". ") + 16732 "Note that HTML attributes are case-insensitive and you cannot use " + 16733 "v-on to listen to camelCase events when using in-DOM templates. " + 16734 "You should probably use \"".concat(hyphenate(event), "\" instead of \"").concat(event, "\".")); 16735 } 16736 } 16737 var cbs = vm._events[event]; 16738 if (cbs) { 16739 cbs = cbs.length > 1 ? toArray(cbs) : cbs; 16740 var args = toArray(arguments, 1); 16741 var info = "event handler for \"".concat(event, "\""); 16742 for (var i = 0, l = cbs.length; i < l; i++) { 16743 invokeWithErrorHandling(cbs[i], vm, args, vm, info); 16744 } 16745 } 16746 return vm; 16747 }; 16748} 16749 16750var activeEffectScope; 16751var EffectScope = /** @class */ (function () { 16752 function EffectScope(detached) { 16753 if (detached === void 0) { detached = false; } 16754 this.detached = detached; 16755 /** 16756 * @internal 16757 */ 16758 this.active = true; 16759 /** 16760 * @internal 16761 */ 16762 this.effects = []; 16763 /** 16764 * @internal 16765 */ 16766 this.cleanups = []; 16767 this.parent = activeEffectScope; 16768 if (!detached && activeEffectScope) { 16769 this.index = 16770 (activeEffectScope.scopes || (activeEffectScope.scopes = [])).push(this) - 1; 16771 } 16772 } 16773 EffectScope.prototype.run = function (fn) { 16774 if (this.active) { 16775 var currentEffectScope = activeEffectScope; 16776 try { 16777 activeEffectScope = this; 16778 return fn(); 16779 } 16780 finally { 16781 activeEffectScope = currentEffectScope; 16782 } 16783 } 16784 else if (true) { 16785 warn$2("cannot run an inactive effect scope."); 16786 } 16787 }; 16788 /** 16789 * This should only be called on non-detached scopes 16790 * @internal 16791 */ 16792 EffectScope.prototype.on = function () { 16793 activeEffectScope = this; 16794 }; 16795 /** 16796 * This should only be called on non-detached scopes 16797 * @internal 16798 */ 16799 EffectScope.prototype.off = function () { 16800 activeEffectScope = this.parent; 16801 }; 16802 EffectScope.prototype.stop = function (fromParent) { 16803 if (this.active) { 16804 var i = void 0, l = void 0; 16805 for (i = 0, l = this.effects.length; i < l; i++) { 16806 this.effects[i].teardown(); 16807 } 16808 for (i = 0, l = this.cleanups.length; i < l; i++) { 16809 this.cleanups[i](); 16810 } 16811 if (this.scopes) { 16812 for (i = 0, l = this.scopes.length; i < l; i++) { 16813 this.scopes[i].stop(true); 16814 } 16815 } 16816 // nested scope, dereference from parent to avoid memory leaks 16817 if (!this.detached && this.parent && !fromParent) { 16818 // optimized O(1) removal 16819 var last = this.parent.scopes.pop(); 16820 if (last && last !== this) { 16821 this.parent.scopes[this.index] = last; 16822 last.index = this.index; 16823 } 16824 } 16825 this.parent = undefined; 16826 this.active = false; 16827 } 16828 }; 16829 return EffectScope; 16830}()); 16831function effectScope(detached) { 16832 return new EffectScope(detached); 16833} 16834/** 16835 * @internal 16836 */ 16837function recordEffectScope(effect, scope) { 16838 if (scope === void 0) { scope = activeEffectScope; } 16839 if (scope && scope.active) { 16840 scope.effects.push(effect); 16841 } 16842} 16843function getCurrentScope() { 16844 return activeEffectScope; 16845} 16846function onScopeDispose(fn) { 16847 if (activeEffectScope) { 16848 activeEffectScope.cleanups.push(fn); 16849 } 16850 else if (true) { 16851 warn$2("onScopeDispose() is called when there is no active effect scope" + 16852 " to be associated with."); 16853 } 16854} 16855 16856var activeInstance = null; 16857var isUpdatingChildComponent = false; 16858function setActiveInstance(vm) { 16859 var prevActiveInstance = activeInstance; 16860 activeInstance = vm; 16861 return function () { 16862 activeInstance = prevActiveInstance; 16863 }; 16864} 16865function initLifecycle(vm) { 16866 var options = vm.$options; 16867 // locate first non-abstract parent 16868 var parent = options.parent; 16869 if (parent && !options.abstract) { 16870 while (parent.$options.abstract && parent.$parent) { 16871 parent = parent.$parent; 16872 } 16873 parent.$children.push(vm); 16874 } 16875 vm.$parent = parent; 16876 vm.$root = parent ? parent.$root : vm; 16877 vm.$children = []; 16878 vm.$refs = {}; 16879 vm._provided = parent ? parent._provided : Object.create(null); 16880 vm._watcher = null; 16881 vm._inactive = null; 16882 vm._directInactive = false; 16883 vm._isMounted = false; 16884 vm._isDestroyed = false; 16885 vm._isBeingDestroyed = false; 16886} 16887function lifecycleMixin(Vue) { 16888 Vue.prototype._update = function (vnode, hydrating) { 16889 var vm = this; 16890 var prevEl = vm.$el; 16891 var prevVnode = vm._vnode; 16892 var restoreActiveInstance = setActiveInstance(vm); 16893 vm._vnode = vnode; 16894 // Vue.prototype.__patch__ is injected in entry points 16895 // based on the rendering backend used. 16896 if (!prevVnode) { 16897 // initial render 16898 vm.$el = vm.__patch__(vm.$el, vnode, hydrating, false /* removeOnly */); 16899 } 16900 else { 16901 // updates 16902 vm.$el = vm.__patch__(prevVnode, vnode); 16903 } 16904 restoreActiveInstance(); 16905 // update __vue__ reference 16906 if (prevEl) { 16907 prevEl.__vue__ = null; 16908 } 16909 if (vm.$el) { 16910 vm.$el.__vue__ = vm; 16911 } 16912 // if parent is an HOC, update its $el as well 16913 var wrapper = vm; 16914 while (wrapper && 16915 wrapper.$vnode && 16916 wrapper.$parent && 16917 wrapper.$vnode === wrapper.$parent._vnode) { 16918 wrapper.$parent.$el = wrapper.$el; 16919 wrapper = wrapper.$parent; 16920 } 16921 // updated hook is called by the scheduler to ensure that children are 16922 // updated in a parent's updated hook. 16923 }; 16924 Vue.prototype.$forceUpdate = function () { 16925 var vm = this; 16926 if (vm._watcher) { 16927 vm._watcher.update(); 16928 } 16929 }; 16930 Vue.prototype.$destroy = function () { 16931 var vm = this; 16932 if (vm._isBeingDestroyed) { 16933 return; 16934 } 16935 callHook$1(vm, 'beforeDestroy'); 16936 vm._isBeingDestroyed = true; 16937 // remove self from parent 16938 var parent = vm.$parent; 16939 if (parent && !parent._isBeingDestroyed && !vm.$options.abstract) { 16940 remove$2(parent.$children, vm); 16941 } 16942 // teardown scope. this includes both the render watcher and other 16943 // watchers created 16944 vm._scope.stop(); 16945 // remove reference from data ob 16946 // frozen object may not have observer. 16947 if (vm._data.__ob__) { 16948 vm._data.__ob__.vmCount--; 16949 } 16950 // call the last hook... 16951 vm._isDestroyed = true; 16952 // invoke destroy hooks on current rendered tree 16953 vm.__patch__(vm._vnode, null); 16954 // fire destroyed hook 16955 callHook$1(vm, 'destroyed'); 16956 // turn off all instance listeners. 16957 vm.$off(); 16958 // remove __vue__ reference 16959 if (vm.$el) { 16960 vm.$el.__vue__ = null; 16961 } 16962 // release circular reference (#6759) 16963 if (vm.$vnode) { 16964 vm.$vnode.parent = null; 16965 } 16966 }; 16967} 16968function mountComponent(vm, el, hydrating) { 16969 vm.$el = el; 16970 if (!vm.$options.render) { 16971 // @ts-expect-error invalid type 16972 vm.$options.render = createEmptyVNode; 16973 if (true) { 16974 /* istanbul ignore if */ 16975 if ((vm.$options.template && vm.$options.template.charAt(0) !== '#') || 16976 vm.$options.el || 16977 el) { 16978 warn$2('You are using the runtime-only build of Vue where the template ' + 16979 'compiler is not available. Either pre-compile the templates into ' + 16980 'render functions, or use the compiler-included build.', vm); 16981 } 16982 else { 16983 warn$2('Failed to mount component: template or render function not defined.', vm); 16984 } 16985 } 16986 } 16987 callHook$1(vm, 'beforeMount'); 16988 var updateComponent; 16989 /* istanbul ignore if */ 16990 if ( true && config.performance && mark) { 16991 updateComponent = function () { 16992 var name = vm._name; 16993 var id = vm._uid; 16994 var startTag = "vue-perf-start:".concat(id); 16995 var endTag = "vue-perf-end:".concat(id); 16996 mark(startTag); 16997 var vnode = vm._render(); 16998 mark(endTag); 16999 measure("vue ".concat(name, " render"), startTag, endTag); 17000 mark(startTag); 17001 vm._update(vnode, hydrating); 17002 mark(endTag); 17003 measure("vue ".concat(name, " patch"), startTag, endTag); 17004 }; 17005 } 17006 else { 17007 updateComponent = function () { 17008 vm._update(vm._render(), hydrating); 17009 }; 17010 } 17011 var watcherOptions = { 17012 before: function () { 17013 if (vm._isMounted && !vm._isDestroyed) { 17014 callHook$1(vm, 'beforeUpdate'); 17015 } 17016 } 17017 }; 17018 if (true) { 17019 watcherOptions.onTrack = function (e) { return callHook$1(vm, 'renderTracked', [e]); }; 17020 watcherOptions.onTrigger = function (e) { return callHook$1(vm, 'renderTriggered', [e]); }; 17021 } 17022 // we set this to vm._watcher inside the watcher's constructor 17023 // since the watcher's initial patch may call $forceUpdate (e.g. inside child 17024 // component's mounted hook), which relies on vm._watcher being already defined 17025 new Watcher(vm, updateComponent, noop, watcherOptions, true /* isRenderWatcher */); 17026 hydrating = false; 17027 // flush buffer for flush: "pre" watchers queued in setup() 17028 var preWatchers = vm._preWatchers; 17029 if (preWatchers) { 17030 for (var i = 0; i < preWatchers.length; i++) { 17031 preWatchers[i].run(); 17032 } 17033 } 17034 // manually mounted instance, call mounted on self 17035 // mounted is called for render-created child components in its inserted hook 17036 if (vm.$vnode == null) { 17037 vm._isMounted = true; 17038 callHook$1(vm, 'mounted'); 17039 } 17040 return vm; 17041} 17042function updateChildComponent(vm, propsData, listeners, parentVnode, renderChildren) { 17043 if (true) { 17044 isUpdatingChildComponent = true; 17045 } 17046 // determine whether component has slot children 17047 // we need to do this before overwriting $options._renderChildren. 17048 // check if there are dynamic scopedSlots (hand-written or compiled but with 17049 // dynamic slot names). Static scoped slots compiled from template has the 17050 // "$stable" marker. 17051 var newScopedSlots = parentVnode.data.scopedSlots; 17052 var oldScopedSlots = vm.$scopedSlots; 17053 var hasDynamicScopedSlot = !!((newScopedSlots && !newScopedSlots.$stable) || 17054 (oldScopedSlots !== emptyObject && !oldScopedSlots.$stable) || 17055 (newScopedSlots && vm.$scopedSlots.$key !== newScopedSlots.$key) || 17056 (!newScopedSlots && vm.$scopedSlots.$key)); 17057 // Any static slot children from the parent may have changed during parent's 17058 // update. Dynamic scoped slots may also have changed. In such cases, a forced 17059 // update is necessary to ensure correctness. 17060 var needsForceUpdate = !!(renderChildren || // has new static slots 17061 vm.$options._renderChildren || // has old static slots 17062 hasDynamicScopedSlot); 17063 var prevVNode = vm.$vnode; 17064 vm.$options._parentVnode = parentVnode; 17065 vm.$vnode = parentVnode; // update vm's placeholder node without re-render 17066 if (vm._vnode) { 17067 // update child tree's parent 17068 vm._vnode.parent = parentVnode; 17069 } 17070 vm.$options._renderChildren = renderChildren; 17071 // update $attrs and $listeners hash 17072 // these are also reactive so they may trigger child update if the child 17073 // used them during render 17074 var attrs = parentVnode.data.attrs || emptyObject; 17075 if (vm._attrsProxy) { 17076 // force update if attrs are accessed and has changed since it may be 17077 // passed to a child component. 17078 if (syncSetupProxy(vm._attrsProxy, attrs, (prevVNode.data && prevVNode.data.attrs) || emptyObject, vm, '$attrs')) { 17079 needsForceUpdate = true; 17080 } 17081 } 17082 vm.$attrs = attrs; 17083 // update listeners 17084 listeners = listeners || emptyObject; 17085 var prevListeners = vm.$options._parentListeners; 17086 if (vm._listenersProxy) { 17087 syncSetupProxy(vm._listenersProxy, listeners, prevListeners || emptyObject, vm, '$listeners'); 17088 } 17089 vm.$listeners = vm.$options._parentListeners = listeners; 17090 updateComponentListeners(vm, listeners, prevListeners); 17091 // update props 17092 if (propsData && vm.$options.props) { 17093 toggleObserving(false); 17094 var props = vm._props; 17095 var propKeys = vm.$options._propKeys || []; 17096 for (var i = 0; i < propKeys.length; i++) { 17097 var key = propKeys[i]; 17098 var propOptions = vm.$options.props; // wtf flow? 17099 props[key] = validateProp(key, propOptions, propsData, vm); 17100 } 17101 toggleObserving(true); 17102 // keep a copy of raw propsData 17103 vm.$options.propsData = propsData; 17104 } 17105 // resolve slots + force update if has children 17106 if (needsForceUpdate) { 17107 vm.$slots = resolveSlots(renderChildren, parentVnode.context); 17108 vm.$forceUpdate(); 17109 } 17110 if (true) { 17111 isUpdatingChildComponent = false; 17112 } 17113} 17114function isInInactiveTree(vm) { 17115 while (vm && (vm = vm.$parent)) { 17116 if (vm._inactive) 17117 return true; 17118 } 17119 return false; 17120} 17121function activateChildComponent(vm, direct) { 17122 if (direct) { 17123 vm._directInactive = false; 17124 if (isInInactiveTree(vm)) { 17125 return; 17126 } 17127 } 17128 else if (vm._directInactive) { 17129 return; 17130 } 17131 if (vm._inactive || vm._inactive === null) { 17132 vm._inactive = false; 17133 for (var i = 0; i < vm.$children.length; i++) { 17134 activateChildComponent(vm.$children[i]); 17135 } 17136 callHook$1(vm, 'activated'); 17137 } 17138} 17139function deactivateChildComponent(vm, direct) { 17140 if (direct) { 17141 vm._directInactive = true; 17142 if (isInInactiveTree(vm)) { 17143 return; 17144 } 17145 } 17146 if (!vm._inactive) { 17147 vm._inactive = true; 17148 for (var i = 0; i < vm.$children.length; i++) { 17149 deactivateChildComponent(vm.$children[i]); 17150 } 17151 callHook$1(vm, 'deactivated'); 17152 } 17153} 17154function callHook$1(vm, hook, args, setContext) { 17155 if (setContext === void 0) { setContext = true; } 17156 // #7573 disable dep collection when invoking lifecycle hooks 17157 pushTarget(); 17158 var prevInst = currentInstance; 17159 var prevScope = getCurrentScope(); 17160 setContext && setCurrentInstance(vm); 17161 var handlers = vm.$options[hook]; 17162 var info = "".concat(hook, " hook"); 17163 if (handlers) { 17164 for (var i = 0, j = handlers.length; i < j; i++) { 17165 invokeWithErrorHandling(handlers[i], vm, args || null, vm, info); 17166 } 17167 } 17168 if (vm._hasHookEvent) { 17169 vm.$emit('hook:' + hook); 17170 } 17171 if (setContext) { 17172 setCurrentInstance(prevInst); 17173 prevScope && prevScope.on(); 17174 } 17175 popTarget(); 17176} 17177 17178var MAX_UPDATE_COUNT = 100; 17179var queue = []; 17180var activatedChildren = []; 17181var has = {}; 17182var circular = {}; 17183var waiting = false; 17184var flushing = false; 17185var index$1 = 0; 17186/** 17187 * Reset the scheduler's state. 17188 */ 17189function resetSchedulerState() { 17190 index$1 = queue.length = activatedChildren.length = 0; 17191 has = {}; 17192 if (true) { 17193 circular = {}; 17194 } 17195 waiting = flushing = false; 17196} 17197// Async edge case #6566 requires saving the timestamp when event listeners are 17198// attached. However, calling performance.now() has a perf overhead especially 17199// if the page has thousands of event listeners. Instead, we take a timestamp 17200// every time the scheduler flushes and use that for all event listeners 17201// attached during that flush. 17202var currentFlushTimestamp = 0; 17203// Async edge case fix requires storing an event listener's attach timestamp. 17204var getNow = Date.now; 17205// Determine what event timestamp the browser is using. Annoyingly, the 17206// timestamp can either be hi-res (relative to page load) or low-res 17207// (relative to UNIX epoch), so in order to compare time we have to use the 17208// same timestamp type when saving the flush timestamp. 17209// All IE versions use low-res event timestamps, and have problematic clock 17210// implementations (#9632) 17211if (inBrowser && !isIE) { 17212 var performance_1 = window.performance; 17213 if (performance_1 && 17214 typeof performance_1.now === 'function' && 17215 getNow() > document.createEvent('Event').timeStamp) { 17216 // if the event timestamp, although evaluated AFTER the Date.now(), is 17217 // smaller than it, it means the event is using a hi-res timestamp, 17218 // and we need to use the hi-res version for event listener timestamps as 17219 // well. 17220 getNow = function () { return performance_1.now(); }; 17221 } 17222} 17223var sortCompareFn = function (a, b) { 17224 if (a.post) { 17225 if (!b.post) 17226 return 1; 17227 } 17228 else if (b.post) { 17229 return -1; 17230 } 17231 return a.id - b.id; 17232}; 17233/** 17234 * Flush both queues and run the watchers. 17235 */ 17236function flushSchedulerQueue() { 17237 currentFlushTimestamp = getNow(); 17238 flushing = true; 17239 var watcher, id; 17240 // Sort queue before flush. 17241 // This ensures that: 17242 // 1. Components are updated from parent to child. (because parent is always 17243 // created before the child) 17244 // 2. A component's user watchers are run before its render watcher (because 17245 // user watchers are created before the render watcher) 17246 // 3. If a component is destroyed during a parent component's watcher run, 17247 // its watchers can be skipped. 17248 queue.sort(sortCompareFn); 17249 // do not cache length because more watchers might be pushed 17250 // as we run existing watchers 17251 for (index$1 = 0; index$1 < queue.length; index$1++) { 17252 watcher = queue[index$1]; 17253 if (watcher.before) { 17254 watcher.before(); 17255 } 17256 id = watcher.id; 17257 has[id] = null; 17258 watcher.run(); 17259 // in dev build, check and stop circular updates. 17260 if ( true && has[id] != null) { 17261 circular[id] = (circular[id] || 0) + 1; 17262 if (circular[id] > MAX_UPDATE_COUNT) { 17263 warn$2('You may have an infinite update loop ' + 17264 (watcher.user 17265 ? "in watcher with expression \"".concat(watcher.expression, "\"") 17266 : "in a component render function."), watcher.vm); 17267 break; 17268 } 17269 } 17270 } 17271 // keep copies of post queues before resetting state 17272 var activatedQueue = activatedChildren.slice(); 17273 var updatedQueue = queue.slice(); 17274 resetSchedulerState(); 17275 // call component updated and activated hooks 17276 callActivatedHooks(activatedQueue); 17277 callUpdatedHooks(updatedQueue); 17278 cleanupDeps(); 17279 // devtool hook 17280 /* istanbul ignore if */ 17281 if (devtools && config.devtools) { 17282 devtools.emit('flush'); 17283 } 17284} 17285function callUpdatedHooks(queue) { 17286 var i = queue.length; 17287 while (i--) { 17288 var watcher = queue[i]; 17289 var vm = watcher.vm; 17290 if (vm && vm._watcher === watcher && vm._isMounted && !vm._isDestroyed) { 17291 callHook$1(vm, 'updated'); 17292 } 17293 } 17294} 17295/** 17296 * Queue a kept-alive component that was activated during patch. 17297 * The queue will be processed after the entire tree has been patched. 17298 */ 17299function queueActivatedComponent(vm) { 17300 // setting _inactive to false here so that a render function can 17301 // rely on checking whether it's in an inactive tree (e.g. router-view) 17302 vm._inactive = false; 17303 activatedChildren.push(vm); 17304} 17305function callActivatedHooks(queue) { 17306 for (var i = 0; i < queue.length; i++) { 17307 queue[i]._inactive = true; 17308 activateChildComponent(queue[i], true /* true */); 17309 } 17310} 17311/** 17312 * Push a watcher into the watcher queue. 17313 * Jobs with duplicate IDs will be skipped unless it's 17314 * pushed when the queue is being flushed. 17315 */ 17316function queueWatcher(watcher) { 17317 var id = watcher.id; 17318 if (has[id] != null) { 17319 return; 17320 } 17321 if (watcher === Dep.target && watcher.noRecurse) { 17322 return; 17323 } 17324 has[id] = true; 17325 if (!flushing) { 17326 queue.push(watcher); 17327 } 17328 else { 17329 // if already flushing, splice the watcher based on its id 17330 // if already past its id, it will be run next immediately. 17331 var i = queue.length - 1; 17332 while (i > index$1 && queue[i].id > watcher.id) { 17333 i--; 17334 } 17335 queue.splice(i + 1, 0, watcher); 17336 } 17337 // queue the flush 17338 if (!waiting) { 17339 waiting = true; 17340 if ( true && !config.async) { 17341 flushSchedulerQueue(); 17342 return; 17343 } 17344 nextTick(flushSchedulerQueue); 17345 } 17346} 17347 17348var WATCHER = "watcher"; 17349var WATCHER_CB = "".concat(WATCHER, " callback"); 17350var WATCHER_GETTER = "".concat(WATCHER, " getter"); 17351var WATCHER_CLEANUP = "".concat(WATCHER, " cleanup"); 17352// Simple effect. 17353function watchEffect(effect, options) { 17354 return doWatch(effect, null, options); 17355} 17356function watchPostEffect(effect, options) { 17357 return doWatch(effect, null, ( true 17358 ? __assign(__assign({}, options), { flush: 'post' }) : 0)); 17359} 17360function watchSyncEffect(effect, options) { 17361 return doWatch(effect, null, ( true 17362 ? __assign(__assign({}, options), { flush: 'sync' }) : 0)); 17363} 17364// initial value for watchers to trigger on undefined initial values 17365var INITIAL_WATCHER_VALUE = {}; 17366// implementation 17367function watch(source, cb, options) { 17368 if ( true && typeof cb !== 'function') { 17369 warn$2("`watch(fn, options?)` signature has been moved to a separate API. " + 17370 "Use `watchEffect(fn, options?)` instead. `watch` now only " + 17371 "supports `watch(source, cb, options?) signature."); 17372 } 17373 return doWatch(source, cb, options); 17374} 17375function doWatch(source, cb, _a) { 17376 var _b = _a === void 0 ? emptyObject : _a, immediate = _b.immediate, deep = _b.deep, _c = _b.flush, flush = _c === void 0 ? 'pre' : _c, onTrack = _b.onTrack, onTrigger = _b.onTrigger; 17377 if ( true && !cb) { 17378 if (immediate !== undefined) { 17379 warn$2("watch() \"immediate\" option is only respected when using the " + 17380 "watch(source, callback, options?) signature."); 17381 } 17382 if (deep !== undefined) { 17383 warn$2("watch() \"deep\" option is only respected when using the " + 17384 "watch(source, callback, options?) signature."); 17385 } 17386 } 17387 var warnInvalidSource = function (s) { 17388 warn$2("Invalid watch source: ".concat(s, ". A watch source can only be a getter/effect ") + 17389 "function, a ref, a reactive object, or an array of these types."); 17390 }; 17391 var instance = currentInstance; 17392 var call = function (fn, type, args) { 17393 if (args === void 0) { args = null; } 17394 return invokeWithErrorHandling(fn, null, args, instance, type); 17395 }; 17396 var getter; 17397 var forceTrigger = false; 17398 var isMultiSource = false; 17399 if (isRef(source)) { 17400 getter = function () { return source.value; }; 17401 forceTrigger = isShallow(source); 17402 } 17403 else if (isReactive(source)) { 17404 getter = function () { 17405 source.__ob__.dep.depend(); 17406 return source; 17407 }; 17408 deep = true; 17409 } 17410 else if (isArray(source)) { 17411 isMultiSource = true; 17412 forceTrigger = source.some(function (s) { return isReactive(s) || isShallow(s); }); 17413 getter = function () { 17414 return source.map(function (s) { 17415 if (isRef(s)) { 17416 return s.value; 17417 } 17418 else if (isReactive(s)) { 17419 return traverse(s); 17420 } 17421 else if (isFunction(s)) { 17422 return call(s, WATCHER_GETTER); 17423 } 17424 else { 17425 true && warnInvalidSource(s); 17426 } 17427 }); 17428 }; 17429 } 17430 else if (isFunction(source)) { 17431 if (cb) { 17432 // getter with cb 17433 getter = function () { return call(source, WATCHER_GETTER); }; 17434 } 17435 else { 17436 // no cb -> simple effect 17437 getter = function () { 17438 if (instance && instance._isDestroyed) { 17439 return; 17440 } 17441 if (cleanup) { 17442 cleanup(); 17443 } 17444 return call(source, WATCHER, [onCleanup]); 17445 }; 17446 } 17447 } 17448 else { 17449 getter = noop; 17450 true && warnInvalidSource(source); 17451 } 17452 if (cb && deep) { 17453 var baseGetter_1 = getter; 17454 getter = function () { return traverse(baseGetter_1()); }; 17455 } 17456 var cleanup; 17457 var onCleanup = function (fn) { 17458 cleanup = watcher.onStop = function () { 17459 call(fn, WATCHER_CLEANUP); 17460 }; 17461 }; 17462 // in SSR there is no need to setup an actual effect, and it should be noop 17463 // unless it's eager 17464 if (isServerRendering()) { 17465 // we will also not call the invalidate callback (+ runner is not set up) 17466 onCleanup = noop; 17467 if (!cb) { 17468 getter(); 17469 } 17470 else if (immediate) { 17471 call(cb, WATCHER_CB, [ 17472 getter(), 17473 isMultiSource ? [] : undefined, 17474 onCleanup 17475 ]); 17476 } 17477 return noop; 17478 } 17479 var watcher = new Watcher(currentInstance, getter, noop, { 17480 lazy: true 17481 }); 17482 watcher.noRecurse = !cb; 17483 var oldValue = isMultiSource ? [] : INITIAL_WATCHER_VALUE; 17484 // overwrite default run 17485 watcher.run = function () { 17486 if (!watcher.active) { 17487 return; 17488 } 17489 if (cb) { 17490 // watch(source, cb) 17491 var newValue = watcher.get(); 17492 if (deep || 17493 forceTrigger || 17494 (isMultiSource 17495 ? newValue.some(function (v, i) { 17496 return hasChanged(v, oldValue[i]); 17497 }) 17498 : hasChanged(newValue, oldValue))) { 17499 // cleanup before running cb again 17500 if (cleanup) { 17501 cleanup(); 17502 } 17503 call(cb, WATCHER_CB, [ 17504 newValue, 17505 // pass undefined as the old value when it's changed for the first time 17506 oldValue === INITIAL_WATCHER_VALUE ? undefined : oldValue, 17507 onCleanup 17508 ]); 17509 oldValue = newValue; 17510 } 17511 } 17512 else { 17513 // watchEffect 17514 watcher.get(); 17515 } 17516 }; 17517 if (flush === 'sync') { 17518 watcher.update = watcher.run; 17519 } 17520 else if (flush === 'post') { 17521 watcher.post = true; 17522 watcher.update = function () { return queueWatcher(watcher); }; 17523 } 17524 else { 17525 // pre 17526 watcher.update = function () { 17527 if (instance && instance === currentInstance && !instance._isMounted) { 17528 // pre-watcher triggered before 17529 var buffer = instance._preWatchers || (instance._preWatchers = []); 17530 if (buffer.indexOf(watcher) < 0) 17531 buffer.push(watcher); 17532 } 17533 else { 17534 queueWatcher(watcher); 17535 } 17536 }; 17537 } 17538 if (true) { 17539 watcher.onTrack = onTrack; 17540 watcher.onTrigger = onTrigger; 17541 } 17542 // initial run 17543 if (cb) { 17544 if (immediate) { 17545 watcher.run(); 17546 } 17547 else { 17548 oldValue = watcher.get(); 17549 } 17550 } 17551 else if (flush === 'post' && instance) { 17552 instance.$once('hook:mounted', function () { return watcher.get(); }); 17553 } 17554 else { 17555 watcher.get(); 17556 } 17557 return function () { 17558 watcher.teardown(); 17559 }; 17560} 17561 17562function provide(key, value) { 17563 if (!currentInstance) { 17564 if (true) { 17565 warn$2("provide() can only be used inside setup()."); 17566 } 17567 } 17568 else { 17569 // TS doesn't allow symbol as index type 17570 resolveProvided(currentInstance)[key] = value; 17571 } 17572} 17573function resolveProvided(vm) { 17574 // by default an instance inherits its parent's provides object 17575 // but when it needs to provide values of its own, it creates its 17576 // own provides object using parent provides object as prototype. 17577 // this way in `inject` we can simply look up injections from direct 17578 // parent and let the prototype chain do the work. 17579 var existing = vm._provided; 17580 var parentProvides = vm.$parent && vm.$parent._provided; 17581 if (parentProvides === existing) { 17582 return (vm._provided = Object.create(parentProvides)); 17583 } 17584 else { 17585 return existing; 17586 } 17587} 17588function inject(key, defaultValue, treatDefaultAsFactory) { 17589 if (treatDefaultAsFactory === void 0) { treatDefaultAsFactory = false; } 17590 // fallback to `currentRenderingInstance` so that this can be called in 17591 // a functional component 17592 var instance = currentInstance; 17593 if (instance) { 17594 // #2400 17595 // to support `app.use` plugins, 17596 // fallback to appContext's `provides` if the instance is at root 17597 var provides = instance.$parent && instance.$parent._provided; 17598 if (provides && key in provides) { 17599 // TS doesn't allow symbol as index type 17600 return provides[key]; 17601 } 17602 else if (arguments.length > 1) { 17603 return treatDefaultAsFactory && isFunction(defaultValue) 17604 ? defaultValue.call(instance) 17605 : defaultValue; 17606 } 17607 else if (true) { 17608 warn$2("injection \"".concat(String(key), "\" not found.")); 17609 } 17610 } 17611 else if (true) { 17612 warn$2("inject() can only be used inside setup() or functional components."); 17613 } 17614} 17615 17616/** 17617 * @internal this function needs manual public type declaration because it relies 17618 * on previously manually authored types from Vue 2 17619 */ 17620function h(type, props, children) { 17621 if (!currentInstance) { 17622 true && 17623 warn$2("globally imported h() can only be invoked when there is an active " + 17624 "component instance, e.g. synchronously in a component's render or setup function."); 17625 } 17626 return createElement$1(currentInstance, type, props, children, 2, true); 17627} 17628 17629function handleError(err, vm, info) { 17630 // Deactivate deps tracking while processing error handler to avoid possible infinite rendering. 17631 // See: https://github.com/vuejs/vuex/issues/1505 17632 pushTarget(); 17633 try { 17634 if (vm) { 17635 var cur = vm; 17636 while ((cur = cur.$parent)) { 17637 var hooks = cur.$options.errorCaptured; 17638 if (hooks) { 17639 for (var i = 0; i < hooks.length; i++) { 17640 try { 17641 var capture = hooks[i].call(cur, err, vm, info) === false; 17642 if (capture) 17643 return; 17644 } 17645 catch (e) { 17646 globalHandleError(e, cur, 'errorCaptured hook'); 17647 } 17648 } 17649 } 17650 } 17651 } 17652 globalHandleError(err, vm, info); 17653 } 17654 finally { 17655 popTarget(); 17656 } 17657} 17658function invokeWithErrorHandling(handler, context, args, vm, info) { 17659 var res; 17660 try { 17661 res = args ? handler.apply(context, args) : handler.call(context); 17662 if (res && !res._isVue && isPromise(res) && !res._handled) { 17663 res.catch(function (e) { return handleError(e, vm, info + " (Promise/async)"); }); 17664 res._handled = true; 17665 } 17666 } 17667 catch (e) { 17668 handleError(e, vm, info); 17669 } 17670 return res; 17671} 17672function globalHandleError(err, vm, info) { 17673 if (config.errorHandler) { 17674 try { 17675 return config.errorHandler.call(null, err, vm, info); 17676 } 17677 catch (e) { 17678 // if the user intentionally throws the original error in the handler, 17679 // do not log it twice 17680 if (e !== err) { 17681 logError(e, null, 'config.errorHandler'); 17682 } 17683 } 17684 } 17685 logError(err, vm, info); 17686} 17687function logError(err, vm, info) { 17688 if (true) { 17689 warn$2("Error in ".concat(info, ": \"").concat(err.toString(), "\""), vm); 17690 } 17691 /* istanbul ignore else */ 17692 if (inBrowser && typeof console !== 'undefined') { 17693 console.error(err); 17694 } 17695 else { 17696 throw err; 17697 } 17698} 17699 17700/* globals MutationObserver */ 17701var isUsingMicroTask = false; 17702var callbacks = []; 17703var pending = false; 17704function flushCallbacks() { 17705 pending = false; 17706 var copies = callbacks.slice(0); 17707 callbacks.length = 0; 17708 for (var i = 0; i < copies.length; i++) { 17709 copies[i](); 17710 } 17711} 17712// Here we have async deferring wrappers using microtasks. 17713// In 2.5 we used (macro) tasks (in combination with microtasks). 17714// However, it has subtle problems when state is changed right before repaint 17715// (e.g. #6813, out-in transitions). 17716// Also, using (macro) tasks in event handler would cause some weird behaviors 17717// that cannot be circumvented (e.g. #7109, #7153, #7546, #7834, #8109). 17718// So we now use microtasks everywhere, again. 17719// A major drawback of this tradeoff is that there are some scenarios 17720// where microtasks have too high a priority and fire in between supposedly 17721// sequential events (e.g. #4521, #6690, which have workarounds) 17722// or even between bubbling of the same event (#6566). 17723var timerFunc; 17724// The nextTick behavior leverages the microtask queue, which can be accessed 17725// via either native Promise.then or MutationObserver. 17726// MutationObserver has wider support, however it is seriously bugged in 17727// UIWebView in iOS >= 9.3.3 when triggered in touch event handlers. It 17728// completely stops working after triggering a few times... so, if native 17729// Promise is available, we will use it: 17730/* istanbul ignore next, $flow-disable-line */ 17731if (typeof Promise !== 'undefined' && isNative(Promise)) { 17732 var p_1 = Promise.resolve(); 17733 timerFunc = function () { 17734 p_1.then(flushCallbacks); 17735 // In problematic UIWebViews, Promise.then doesn't completely break, but 17736 // it can get stuck in a weird state where callbacks are pushed into the 17737 // microtask queue but the queue isn't being flushed, until the browser 17738 // needs to do some other work, e.g. handle a timer. Therefore we can 17739 // "force" the microtask queue to be flushed by adding an empty timer. 17740 if (isIOS) 17741 setTimeout(noop); 17742 }; 17743 isUsingMicroTask = true; 17744} 17745else if (!isIE && 17746 typeof MutationObserver !== 'undefined' && 17747 (isNative(MutationObserver) || 17748 // PhantomJS and iOS 7.x 17749 MutationObserver.toString() === '[object MutationObserverConstructor]')) { 17750 // Use MutationObserver where native Promise is not available, 17751 // e.g. PhantomJS, iOS7, Android 4.4 17752 // (#6466 MutationObserver is unreliable in IE11) 17753 var counter_1 = 1; 17754 var observer = new MutationObserver(flushCallbacks); 17755 var textNode_1 = document.createTextNode(String(counter_1)); 17756 observer.observe(textNode_1, { 17757 characterData: true 17758 }); 17759 timerFunc = function () { 17760 counter_1 = (counter_1 + 1) % 2; 17761 textNode_1.data = String(counter_1); 17762 }; 17763 isUsingMicroTask = true; 17764} 17765else if (typeof setImmediate !== 'undefined' && isNative(setImmediate)) { 17766 // Fallback to setImmediate. 17767 // Technically it leverages the (macro) task queue, 17768 // but it is still a better choice than setTimeout. 17769 timerFunc = function () { 17770 setImmediate(flushCallbacks); 17771 }; 17772} 17773else { 17774 // Fallback to setTimeout. 17775 timerFunc = function () { 17776 setTimeout(flushCallbacks, 0); 17777 }; 17778} 17779/** 17780 * @internal 17781 */ 17782function nextTick(cb, ctx) { 17783 var _resolve; 17784 callbacks.push(function () { 17785 if (cb) { 17786 try { 17787 cb.call(ctx); 17788 } 17789 catch (e) { 17790 handleError(e, ctx, 'nextTick'); 17791 } 17792 } 17793 else if (_resolve) { 17794 _resolve(ctx); 17795 } 17796 }); 17797 if (!pending) { 17798 pending = true; 17799 timerFunc(); 17800 } 17801 // $flow-disable-line 17802 if (!cb && typeof Promise !== 'undefined') { 17803 return new Promise(function (resolve) { 17804 _resolve = resolve; 17805 }); 17806 } 17807} 17808 17809function useCssModule(name) { 17810 if (name === void 0) { name = '$style'; } 17811 /* istanbul ignore else */ 17812 { 17813 if (!currentInstance) { 17814 true && warn$2("useCssModule must be called inside setup()"); 17815 return emptyObject; 17816 } 17817 var mod = currentInstance[name]; 17818 if (!mod) { 17819 true && 17820 warn$2("Current instance does not have CSS module named \"".concat(name, "\".")); 17821 return emptyObject; 17822 } 17823 return mod; 17824 } 17825} 17826 17827/** 17828 * Runtime helper for SFC's CSS variable injection feature. 17829 * @private 17830 */ 17831function useCssVars(getter) { 17832 if (!inBrowser && !false) 17833 return; 17834 var instance = currentInstance; 17835 if (!instance) { 17836 true && 17837 warn$2("useCssVars is called without current active component instance."); 17838 return; 17839 } 17840 watchPostEffect(function () { 17841 var el = instance.$el; 17842 var vars = getter(instance, instance._setupProxy); 17843 if (el && el.nodeType === 1) { 17844 var style = el.style; 17845 for (var key in vars) { 17846 style.setProperty("--".concat(key), vars[key]); 17847 } 17848 } 17849 }); 17850} 17851 17852/** 17853 * v3-compatible async component API. 17854 * @internal the type is manually declared in <root>/types/v3-define-async-component.d.ts 17855 * because it relies on existing manual types 17856 */ 17857function defineAsyncComponent(source) { 17858 if (isFunction(source)) { 17859 source = { loader: source }; 17860 } 17861 var loader = source.loader, loadingComponent = source.loadingComponent, errorComponent = source.errorComponent, _a = source.delay, delay = _a === void 0 ? 200 : _a, timeout = source.timeout, // undefined = never times out 17862 _b = source.suspensible, // undefined = never times out 17863 suspensible = _b === void 0 ? false : _b, // in Vue 3 default is true 17864 userOnError = source.onError; 17865 if ( true && suspensible) { 17866 warn$2("The suspensible option for async components is not supported in Vue2. It is ignored."); 17867 } 17868 var pendingRequest = null; 17869 var retries = 0; 17870 var retry = function () { 17871 retries++; 17872 pendingRequest = null; 17873 return load(); 17874 }; 17875 var load = function () { 17876 var thisRequest; 17877 return (pendingRequest || 17878 (thisRequest = pendingRequest = 17879 loader() 17880 .catch(function (err) { 17881 err = err instanceof Error ? err : new Error(String(err)); 17882 if (userOnError) { 17883 return new Promise(function (resolve, reject) { 17884 var userRetry = function () { return resolve(retry()); }; 17885 var userFail = function () { return reject(err); }; 17886 userOnError(err, userRetry, userFail, retries + 1); 17887 }); 17888 } 17889 else { 17890 throw err; 17891 } 17892 }) 17893 .then(function (comp) { 17894 if (thisRequest !== pendingRequest && pendingRequest) { 17895 return pendingRequest; 17896 } 17897 if ( true && !comp) { 17898 warn$2("Async component loader resolved to undefined. " + 17899 "If you are using retry(), make sure to return its return value."); 17900 } 17901 // interop module default 17902 if (comp && 17903 (comp.__esModule || comp[Symbol.toStringTag] === 'Module')) { 17904 comp = comp.default; 17905 } 17906 if ( true && comp && !isObject(comp) && !isFunction(comp)) { 17907 throw new Error("Invalid async component load result: ".concat(comp)); 17908 } 17909 return comp; 17910 }))); 17911 }; 17912 return function () { 17913 var component = load(); 17914 return { 17915 component: component, 17916 delay: delay, 17917 timeout: timeout, 17918 error: errorComponent, 17919 loading: loadingComponent 17920 }; 17921 }; 17922} 17923 17924function createLifeCycle(hookName) { 17925 return function (fn, target) { 17926 if (target === void 0) { target = currentInstance; } 17927 if (!target) { 17928 true && 17929 warn$2("".concat(formatName(hookName), " is called when there is no active component instance to be ") + 17930 "associated with. " + 17931 "Lifecycle injection APIs can only be used during execution of setup()."); 17932 return; 17933 } 17934 return injectHook(target, hookName, fn); 17935 }; 17936} 17937function formatName(name) { 17938 if (name === 'beforeDestroy') { 17939 name = 'beforeUnmount'; 17940 } 17941 else if (name === 'destroyed') { 17942 name = 'unmounted'; 17943 } 17944 return "on".concat(name[0].toUpperCase() + name.slice(1)); 17945} 17946function injectHook(instance, hookName, fn) { 17947 var options = instance.$options; 17948 options[hookName] = mergeLifecycleHook(options[hookName], fn); 17949} 17950var onBeforeMount = createLifeCycle('beforeMount'); 17951var onMounted = createLifeCycle('mounted'); 17952var onBeforeUpdate = createLifeCycle('beforeUpdate'); 17953var onUpdated = createLifeCycle('updated'); 17954var onBeforeUnmount = createLifeCycle('beforeDestroy'); 17955var onUnmounted = createLifeCycle('destroyed'); 17956var onActivated = createLifeCycle('activated'); 17957var onDeactivated = createLifeCycle('deactivated'); 17958var onServerPrefetch = createLifeCycle('serverPrefetch'); 17959var onRenderTracked = createLifeCycle('renderTracked'); 17960var onRenderTriggered = createLifeCycle('renderTriggered'); 17961var injectErrorCapturedHook = createLifeCycle('errorCaptured'); 17962function onErrorCaptured(hook, target) { 17963 if (target === void 0) { target = currentInstance; } 17964 injectErrorCapturedHook(hook, target); 17965} 17966 17967/** 17968 * Note: also update dist/vue.runtime.mjs when adding new exports to this file. 17969 */ 17970var version = '2.7.15'; 17971/** 17972 * @internal type is manually declared in <root>/types/v3-define-component.d.ts 17973 */ 17974function defineComponent(options) { 17975 return options; 17976} 17977 17978var seenObjects = new _Set(); 17979/** 17980 * Recursively traverse an object to evoke all converted 17981 * getters, so that every nested property inside the object 17982 * is collected as a "deep" dependency. 17983 */ 17984function traverse(val) { 17985 _traverse(val, seenObjects); 17986 seenObjects.clear(); 17987 return val; 17988} 17989function _traverse(val, seen) { 17990 var i, keys; 17991 var isA = isArray(val); 17992 if ((!isA && !isObject(val)) || 17993 val.__v_skip /* ReactiveFlags.SKIP */ || 17994 Object.isFrozen(val) || 17995 val instanceof VNode) { 17996 return; 17997 } 17998 if (val.__ob__) { 17999 var depId = val.__ob__.dep.id; 18000 if (seen.has(depId)) { 18001 return; 18002 } 18003 seen.add(depId); 18004 } 18005 if (isA) { 18006 i = val.length; 18007 while (i--) 18008 _traverse(val[i], seen); 18009 } 18010 else if (isRef(val)) { 18011 _traverse(val.value, seen); 18012 } 18013 else { 18014 keys = Object.keys(val); 18015 i = keys.length; 18016 while (i--) 18017 _traverse(val[keys[i]], seen); 18018 } 18019} 18020 18021var uid$1 = 0; 18022/** 18023 * A watcher parses an expression, collects dependencies, 18024 * and fires callback when the expression value changes. 18025 * This is used for both the $watch() api and directives. 18026 * @internal 18027 */ 18028var Watcher = /** @class */ (function () { 18029 function Watcher(vm, expOrFn, cb, options, isRenderWatcher) { 18030 recordEffectScope(this, 18031 // if the active effect scope is manually created (not a component scope), 18032 // prioritize it 18033 activeEffectScope && !activeEffectScope._vm 18034 ? activeEffectScope 18035 : vm 18036 ? vm._scope 18037 : undefined); 18038 if ((this.vm = vm) && isRenderWatcher) { 18039 vm._watcher = this; 18040 } 18041 // options 18042 if (options) { 18043 this.deep = !!options.deep; 18044 this.user = !!options.user; 18045 this.lazy = !!options.lazy; 18046 this.sync = !!options.sync; 18047 this.before = options.before; 18048 if (true) { 18049 this.onTrack = options.onTrack; 18050 this.onTrigger = options.onTrigger; 18051 } 18052 } 18053 else { 18054 this.deep = this.user = this.lazy = this.sync = false; 18055 } 18056 this.cb = cb; 18057 this.id = ++uid$1; // uid for batching 18058 this.active = true; 18059 this.post = false; 18060 this.dirty = this.lazy; // for lazy watchers 18061 this.deps = []; 18062 this.newDeps = []; 18063 this.depIds = new _Set(); 18064 this.newDepIds = new _Set(); 18065 this.expression = true ? expOrFn.toString() : 0; 18066 // parse expression for getter 18067 if (isFunction(expOrFn)) { 18068 this.getter = expOrFn; 18069 } 18070 else { 18071 this.getter = parsePath(expOrFn); 18072 if (!this.getter) { 18073 this.getter = noop; 18074 true && 18075 warn$2("Failed watching path: \"".concat(expOrFn, "\" ") + 18076 'Watcher only accepts simple dot-delimited paths. ' + 18077 'For full control, use a function instead.', vm); 18078 } 18079 } 18080 this.value = this.lazy ? undefined : this.get(); 18081 } 18082 /** 18083 * Evaluate the getter, and re-collect dependencies. 18084 */ 18085 Watcher.prototype.get = function () { 18086 pushTarget(this); 18087 var value; 18088 var vm = this.vm; 18089 try { 18090 value = this.getter.call(vm, vm); 18091 } 18092 catch (e) { 18093 if (this.user) { 18094 handleError(e, vm, "getter for watcher \"".concat(this.expression, "\"")); 18095 } 18096 else { 18097 throw e; 18098 } 18099 } 18100 finally { 18101 // "touch" every property so they are all tracked as 18102 // dependencies for deep watching 18103 if (this.deep) { 18104 traverse(value); 18105 } 18106 popTarget(); 18107 this.cleanupDeps(); 18108 } 18109 return value; 18110 }; 18111 /** 18112 * Add a dependency to this directive. 18113 */ 18114 Watcher.prototype.addDep = function (dep) { 18115 var id = dep.id; 18116 if (!this.newDepIds.has(id)) { 18117 this.newDepIds.add(id); 18118 this.newDeps.push(dep); 18119 if (!this.depIds.has(id)) { 18120 dep.addSub(this); 18121 } 18122 } 18123 }; 18124 /** 18125 * Clean up for dependency collection. 18126 */ 18127 Watcher.prototype.cleanupDeps = function () { 18128 var i = this.deps.length; 18129 while (i--) { 18130 var dep = this.deps[i]; 18131 if (!this.newDepIds.has(dep.id)) { 18132 dep.removeSub(this); 18133 } 18134 } 18135 var tmp = this.depIds; 18136 this.depIds = this.newDepIds; 18137 this.newDepIds = tmp; 18138 this.newDepIds.clear(); 18139 tmp = this.deps; 18140 this.deps = this.newDeps; 18141 this.newDeps = tmp; 18142 this.newDeps.length = 0; 18143 }; 18144 /** 18145 * Subscriber interface. 18146 * Will be called when a dependency changes. 18147 */ 18148 Watcher.prototype.update = function () { 18149 /* istanbul ignore else */ 18150 if (this.lazy) { 18151 this.dirty = true; 18152 } 18153 else if (this.sync) { 18154 this.run(); 18155 } 18156 else { 18157 queueWatcher(this); 18158 } 18159 }; 18160 /** 18161 * Scheduler job interface. 18162 * Will be called by the scheduler. 18163 */ 18164 Watcher.prototype.run = function () { 18165 if (this.active) { 18166 var value = this.get(); 18167 if (value !== this.value || 18168 // Deep watchers and watchers on Object/Arrays should fire even 18169 // when the value is the same, because the value may 18170 // have mutated. 18171 isObject(value) || 18172 this.deep) { 18173 // set new value 18174 var oldValue = this.value; 18175 this.value = value; 18176 if (this.user) { 18177 var info = "callback for watcher \"".concat(this.expression, "\""); 18178 invokeWithErrorHandling(this.cb, this.vm, [value, oldValue], this.vm, info); 18179 } 18180 else { 18181 this.cb.call(this.vm, value, oldValue); 18182 } 18183 } 18184 } 18185 }; 18186 /** 18187 * Evaluate the value of the watcher. 18188 * This only gets called for lazy watchers. 18189 */ 18190 Watcher.prototype.evaluate = function () { 18191 this.value = this.get(); 18192 this.dirty = false; 18193 }; 18194 /** 18195 * Depend on all deps collected by this watcher. 18196 */ 18197 Watcher.prototype.depend = function () { 18198 var i = this.deps.length; 18199 while (i--) { 18200 this.deps[i].depend(); 18201 } 18202 }; 18203 /** 18204 * Remove self from all dependencies' subscriber list. 18205 */ 18206 Watcher.prototype.teardown = function () { 18207 if (this.vm && !this.vm._isBeingDestroyed) { 18208 remove$2(this.vm._scope.effects, this); 18209 } 18210 if (this.active) { 18211 var i = this.deps.length; 18212 while (i--) { 18213 this.deps[i].removeSub(this); 18214 } 18215 this.active = false; 18216 if (this.onStop) { 18217 this.onStop(); 18218 } 18219 } 18220 }; 18221 return Watcher; 18222}()); 18223 18224var sharedPropertyDefinition = { 18225 enumerable: true, 18226 configurable: true, 18227 get: noop, 18228 set: noop 18229}; 18230function proxy(target, sourceKey, key) { 18231 sharedPropertyDefinition.get = function proxyGetter() { 18232 return this[sourceKey][key]; 18233 }; 18234 sharedPropertyDefinition.set = function proxySetter(val) { 18235 this[sourceKey][key] = val; 18236 }; 18237 Object.defineProperty(target, key, sharedPropertyDefinition); 18238} 18239function initState(vm) { 18240 var opts = vm.$options; 18241 if (opts.props) 18242 initProps$1(vm, opts.props); 18243 // Composition API 18244 initSetup(vm); 18245 if (opts.methods) 18246 initMethods(vm, opts.methods); 18247 if (opts.data) { 18248 initData(vm); 18249 } 18250 else { 18251 var ob = observe((vm._data = {})); 18252 ob && ob.vmCount++; 18253 } 18254 if (opts.computed) 18255 initComputed$1(vm, opts.computed); 18256 if (opts.watch && opts.watch !== nativeWatch) { 18257 initWatch(vm, opts.watch); 18258 } 18259} 18260function initProps$1(vm, propsOptions) { 18261 var propsData = vm.$options.propsData || {}; 18262 var props = (vm._props = shallowReactive({})); 18263 // cache prop keys so that future props updates can iterate using Array 18264 // instead of dynamic object key enumeration. 18265 var keys = (vm.$options._propKeys = []); 18266 var isRoot = !vm.$parent; 18267 // root instance props should be converted 18268 if (!isRoot) { 18269 toggleObserving(false); 18270 } 18271 var _loop_1 = function (key) { 18272 keys.push(key); 18273 var value = validateProp(key, propsOptions, propsData, vm); 18274 /* istanbul ignore else */ 18275 if (true) { 18276 var hyphenatedKey = hyphenate(key); 18277 if (isReservedAttribute(hyphenatedKey) || 18278 config.isReservedAttr(hyphenatedKey)) { 18279 warn$2("\"".concat(hyphenatedKey, "\" is a reserved attribute and cannot be used as component prop."), vm); 18280 } 18281 defineReactive(props, key, value, function () { 18282 if (!isRoot && !isUpdatingChildComponent) { 18283 warn$2("Avoid mutating a prop directly since the value will be " + 18284 "overwritten whenever the parent component re-renders. " + 18285 "Instead, use a data or computed property based on the prop's " + 18286 "value. Prop being mutated: \"".concat(key, "\""), vm); 18287 } 18288 }); 18289 } 18290 else {} 18291 // static props are already proxied on the component's prototype 18292 // during Vue.extend(). We only need to proxy props defined at 18293 // instantiation here. 18294 if (!(key in vm)) { 18295 proxy(vm, "_props", key); 18296 } 18297 }; 18298 for (var key in propsOptions) { 18299 _loop_1(key); 18300 } 18301 toggleObserving(true); 18302} 18303function initData(vm) { 18304 var data = vm.$options.data; 18305 data = vm._data = isFunction(data) ? getData(data, vm) : data || {}; 18306 if (!isPlainObject(data)) { 18307 data = {}; 18308 true && 18309 warn$2('data functions should return an object:\n' + 18310 'https://v2.vuejs.org/v2/guide/components.html#data-Must-Be-a-Function', vm); 18311 } 18312 // proxy data on instance 18313 var keys = Object.keys(data); 18314 var props = vm.$options.props; 18315 var methods = vm.$options.methods; 18316 var i = keys.length; 18317 while (i--) { 18318 var key = keys[i]; 18319 if (true) { 18320 if (methods && hasOwn(methods, key)) { 18321 warn$2("Method \"".concat(key, "\" has already been defined as a data property."), vm); 18322 } 18323 } 18324 if (props && hasOwn(props, key)) { 18325 true && 18326 warn$2("The data property \"".concat(key, "\" is already declared as a prop. ") + 18327 "Use prop default value instead.", vm); 18328 } 18329 else if (!isReserved(key)) { 18330 proxy(vm, "_data", key); 18331 } 18332 } 18333 // observe data 18334 var ob = observe(data); 18335 ob && ob.vmCount++; 18336} 18337function getData(data, vm) { 18338 // #7573 disable dep collection when invoking data getters 18339 pushTarget(); 18340 try { 18341 return data.call(vm, vm); 18342 } 18343 catch (e) { 18344 handleError(e, vm, "data()"); 18345 return {}; 18346 } 18347 finally { 18348 popTarget(); 18349 } 18350} 18351var computedWatcherOptions = { lazy: true }; 18352function initComputed$1(vm, computed) { 18353 // $flow-disable-line 18354 var watchers = (vm._computedWatchers = Object.create(null)); 18355 // computed properties are just getters during SSR 18356 var isSSR = isServerRendering(); 18357 for (var key in computed) { 18358 var userDef = computed[key]; 18359 var getter = isFunction(userDef) ? userDef : userDef.get; 18360 if ( true && getter == null) { 18361 warn$2("Getter is missing for computed property \"".concat(key, "\"."), vm); 18362 } 18363 if (!isSSR) { 18364 // create internal watcher for the computed property. 18365 watchers[key] = new Watcher(vm, getter || noop, noop, computedWatcherOptions); 18366 } 18367 // component-defined computed properties are already defined on the 18368 // component prototype. We only need to define computed properties defined 18369 // at instantiation here. 18370 if (!(key in vm)) { 18371 defineComputed(vm, key, userDef); 18372 } 18373 else if (true) { 18374 if (key in vm.$data) { 18375 warn$2("The computed property \"".concat(key, "\" is already defined in data."), vm); 18376 } 18377 else if (vm.$options.props && key in vm.$options.props) { 18378 warn$2("The computed property \"".concat(key, "\" is already defined as a prop."), vm); 18379 } 18380 else if (vm.$options.methods && key in vm.$options.methods) { 18381 warn$2("The computed property \"".concat(key, "\" is already defined as a method."), vm); 18382 } 18383 } 18384 } 18385} 18386function defineComputed(target, key, userDef) { 18387 var shouldCache = !isServerRendering(); 18388 if (isFunction(userDef)) { 18389 sharedPropertyDefinition.get = shouldCache 18390 ? createComputedGetter(key) 18391 : createGetterInvoker(userDef); 18392 sharedPropertyDefinition.set = noop; 18393 } 18394 else { 18395 sharedPropertyDefinition.get = userDef.get 18396 ? shouldCache && userDef.cache !== false 18397 ? createComputedGetter(key) 18398 : createGetterInvoker(userDef.get) 18399 : noop; 18400 sharedPropertyDefinition.set = userDef.set || noop; 18401 } 18402 if ( true && sharedPropertyDefinition.set === noop) { 18403 sharedPropertyDefinition.set = function () { 18404 warn$2("Computed property \"".concat(key, "\" was assigned to but it has no setter."), this); 18405 }; 18406 } 18407 Object.defineProperty(target, key, sharedPropertyDefinition); 18408} 18409function createComputedGetter(key) { 18410 return function computedGetter() { 18411 var watcher = this._computedWatchers && this._computedWatchers[key]; 18412 if (watcher) { 18413 if (watcher.dirty) { 18414 watcher.evaluate(); 18415 } 18416 if (Dep.target) { 18417 if ( true && Dep.target.onTrack) { 18418 Dep.target.onTrack({ 18419 effect: Dep.target, 18420 target: this, 18421 type: "get" /* TrackOpTypes.GET */, 18422 key: key 18423 }); 18424 } 18425 watcher.depend(); 18426 } 18427 return watcher.value; 18428 } 18429 }; 18430} 18431function createGetterInvoker(fn) { 18432 return function computedGetter() { 18433 return fn.call(this, this); 18434 }; 18435} 18436function initMethods(vm, methods) { 18437 var props = vm.$options.props; 18438 for (var key in methods) { 18439 if (true) { 18440 if (typeof methods[key] !== 'function') { 18441 warn$2("Method \"".concat(key, "\" has type \"").concat(typeof methods[key], "\" in the component definition. ") + 18442 "Did you reference the function correctly?", vm); 18443 } 18444 if (props && hasOwn(props, key)) { 18445 warn$2("Method \"".concat(key, "\" has already been defined as a prop."), vm); 18446 } 18447 if (key in vm && isReserved(key)) { 18448 warn$2("Method \"".concat(key, "\" conflicts with an existing Vue instance method. ") + 18449 "Avoid defining component methods that start with _ or $."); 18450 } 18451 } 18452 vm[key] = typeof methods[key] !== 'function' ? noop : bind$1(methods[key], vm); 18453 } 18454} 18455function initWatch(vm, watch) { 18456 for (var key in watch) { 18457 var handler = watch[key]; 18458 if (isArray(handler)) { 18459 for (var i = 0; i < handler.length; i++) { 18460 createWatcher(vm, key, handler[i]); 18461 } 18462 } 18463 else { 18464 createWatcher(vm, key, handler); 18465 } 18466 } 18467} 18468function createWatcher(vm, expOrFn, handler, options) { 18469 if (isPlainObject(handler)) { 18470 options = handler; 18471 handler = handler.handler; 18472 } 18473 if (typeof handler === 'string') { 18474 handler = vm[handler]; 18475 } 18476 return vm.$watch(expOrFn, handler, options); 18477} 18478function stateMixin(Vue) { 18479 // flow somehow has problems with directly declared definition object 18480 // when using Object.defineProperty, so we have to procedurally build up 18481 // the object here. 18482 var dataDef = {}; 18483 dataDef.get = function () { 18484 return this._data; 18485 }; 18486 var propsDef = {}; 18487 propsDef.get = function () { 18488 return this._props; 18489 }; 18490 if (true) { 18491 dataDef.set = function () { 18492 warn$2('Avoid replacing instance root $data. ' + 18493 'Use nested data properties instead.', this); 18494 }; 18495 propsDef.set = function () { 18496 warn$2("$props is readonly.", this); 18497 }; 18498 } 18499 Object.defineProperty(Vue.prototype, '$data', dataDef); 18500 Object.defineProperty(Vue.prototype, '$props', propsDef); 18501 Vue.prototype.$set = set; 18502 Vue.prototype.$delete = del; 18503 Vue.prototype.$watch = function (expOrFn, cb, options) { 18504 var vm = this; 18505 if (isPlainObject(cb)) { 18506 return createWatcher(vm, expOrFn, cb, options); 18507 } 18508 options = options || {}; 18509 options.user = true; 18510 var watcher = new Watcher(vm, expOrFn, cb, options); 18511 if (options.immediate) { 18512 var info = "callback for immediate watcher \"".concat(watcher.expression, "\""); 18513 pushTarget(); 18514 invokeWithErrorHandling(cb, vm, [watcher.value], vm, info); 18515 popTarget(); 18516 } 18517 return function unwatchFn() { 18518 watcher.teardown(); 18519 }; 18520 }; 18521} 18522 18523function initProvide(vm) { 18524 var provideOption = vm.$options.provide; 18525 if (provideOption) { 18526 var provided = isFunction(provideOption) 18527 ? provideOption.call(vm) 18528 : provideOption; 18529 if (!isObject(provided)) { 18530 return; 18531 } 18532 var source = resolveProvided(vm); 18533 // IE9 doesn't support Object.getOwnPropertyDescriptors so we have to 18534 // iterate the keys ourselves. 18535 var keys = hasSymbol ? Reflect.ownKeys(provided) : Object.keys(provided); 18536 for (var i = 0; i < keys.length; i++) { 18537 var key = keys[i]; 18538 Object.defineProperty(source, key, Object.getOwnPropertyDescriptor(provided, key)); 18539 } 18540 } 18541} 18542function initInjections(vm) { 18543 var result = resolveInject(vm.$options.inject, vm); 18544 if (result) { 18545 toggleObserving(false); 18546 Object.keys(result).forEach(function (key) { 18547 /* istanbul ignore else */ 18548 if (true) { 18549 defineReactive(vm, key, result[key], function () { 18550 warn$2("Avoid mutating an injected value directly since the changes will be " + 18551 "overwritten whenever the provided component re-renders. " + 18552 "injection being mutated: \"".concat(key, "\""), vm); 18553 }); 18554 } 18555 else {} 18556 }); 18557 toggleObserving(true); 18558 } 18559} 18560function resolveInject(inject, vm) { 18561 if (inject) { 18562 // inject is :any because flow is not smart enough to figure out cached 18563 var result = Object.create(null); 18564 var keys = hasSymbol ? Reflect.ownKeys(inject) : Object.keys(inject); 18565 for (var i = 0; i < keys.length; i++) { 18566 var key = keys[i]; 18567 // #6574 in case the inject object is observed... 18568 if (key === '__ob__') 18569 continue; 18570 var provideKey = inject[key].from; 18571 if (provideKey in vm._provided) { 18572 result[key] = vm._provided[provideKey]; 18573 } 18574 else if ('default' in inject[key]) { 18575 var provideDefault = inject[key].default; 18576 result[key] = isFunction(provideDefault) 18577 ? provideDefault.call(vm) 18578 : provideDefault; 18579 } 18580 else if (true) { 18581 warn$2("Injection \"".concat(key, "\" not found"), vm); 18582 } 18583 } 18584 return result; 18585 } 18586} 18587 18588var uid = 0; 18589function initMixin$1(Vue) { 18590 Vue.prototype._init = function (options) { 18591 var vm = this; 18592 // a uid 18593 vm._uid = uid++; 18594 var startTag, endTag; 18595 /* istanbul ignore if */ 18596 if ( true && config.performance && mark) { 18597 startTag = "vue-perf-start:".concat(vm._uid); 18598 endTag = "vue-perf-end:".concat(vm._uid); 18599 mark(startTag); 18600 } 18601 // a flag to mark this as a Vue instance without having to do instanceof 18602 // check 18603 vm._isVue = true; 18604 // avoid instances from being observed 18605 vm.__v_skip = true; 18606 // effect scope 18607 vm._scope = new EffectScope(true /* detached */); 18608 vm._scope._vm = true; 18609 // merge options 18610 if (options && options._isComponent) { 18611 // optimize internal component instantiation 18612 // since dynamic options merging is pretty slow, and none of the 18613 // internal component options needs special treatment. 18614 initInternalComponent(vm, options); 18615 } 18616 else { 18617 vm.$options = mergeOptions(resolveConstructorOptions(vm.constructor), options || {}, vm); 18618 } 18619 /* istanbul ignore else */ 18620 if (true) { 18621 initProxy(vm); 18622 } 18623 else {} 18624 // expose real self 18625 vm._self = vm; 18626 initLifecycle(vm); 18627 initEvents(vm); 18628 initRender(vm); 18629 callHook$1(vm, 'beforeCreate', undefined, false /* setContext */); 18630 initInjections(vm); // resolve injections before data/props 18631 initState(vm); 18632 initProvide(vm); // resolve provide after data/props 18633 callHook$1(vm, 'created'); 18634 /* istanbul ignore if */ 18635 if ( true && config.performance && mark) { 18636 vm._name = formatComponentName(vm, false); 18637 mark(endTag); 18638 measure("vue ".concat(vm._name, " init"), startTag, endTag); 18639 } 18640 if (vm.$options.el) { 18641 vm.$mount(vm.$options.el); 18642 } 18643 }; 18644} 18645function initInternalComponent(vm, options) { 18646 var opts = (vm.$options = Object.create(vm.constructor.options)); 18647 // doing this because it's faster than dynamic enumeration. 18648 var parentVnode = options._parentVnode; 18649 opts.parent = options.parent; 18650 opts._parentVnode = parentVnode; 18651 var vnodeComponentOptions = parentVnode.componentOptions; 18652 opts.propsData = vnodeComponentOptions.propsData; 18653 opts._parentListeners = vnodeComponentOptions.listeners; 18654 opts._renderChildren = vnodeComponentOptions.children; 18655 opts._componentTag = vnodeComponentOptions.tag; 18656 if (options.render) { 18657 opts.render = options.render; 18658 opts.staticRenderFns = options.staticRenderFns; 18659 } 18660} 18661function resolveConstructorOptions(Ctor) { 18662 var options = Ctor.options; 18663 if (Ctor.super) { 18664 var superOptions = resolveConstructorOptions(Ctor.super); 18665 var cachedSuperOptions = Ctor.superOptions; 18666 if (superOptions !== cachedSuperOptions) { 18667 // super option changed, 18668 // need to resolve new options. 18669 Ctor.superOptions = superOptions; 18670 // check if there are any late-modified/attached options (#4976) 18671 var modifiedOptions = resolveModifiedOptions(Ctor); 18672 // update base extend options 18673 if (modifiedOptions) { 18674 extend(Ctor.extendOptions, modifiedOptions); 18675 } 18676 options = Ctor.options = mergeOptions(superOptions, Ctor.extendOptions); 18677 if (options.name) { 18678 options.components[options.name] = Ctor; 18679 } 18680 } 18681 } 18682 return options; 18683} 18684function resolveModifiedOptions(Ctor) { 18685 var modified; 18686 var latest = Ctor.options; 18687 var sealed = Ctor.sealedOptions; 18688 for (var key in latest) { 18689 if (latest[key] !== sealed[key]) { 18690 if (!modified) 18691 modified = {}; 18692 modified[key] = latest[key]; 18693 } 18694 } 18695 return modified; 18696} 18697 18698function FunctionalRenderContext(data, props, children, parent, Ctor) { 18699 var _this = this; 18700 var options = Ctor.options; 18701 // ensure the createElement function in functional components 18702 // gets a unique context - this is necessary for correct named slot check 18703 var contextVm; 18704 if (hasOwn(parent, '_uid')) { 18705 contextVm = Object.create(parent); 18706 contextVm._original = parent; 18707 } 18708 else { 18709 // the context vm passed in is a functional context as well. 18710 // in this case we want to make sure we are able to get a hold to the 18711 // real context instance. 18712 contextVm = parent; 18713 // @ts-ignore 18714 parent = parent._original; 18715 } 18716 var isCompiled = isTrue(options._compiled); 18717 var needNormalization = !isCompiled; 18718 this.data = data; 18719 this.props = props; 18720 this.children = children; 18721 this.parent = parent; 18722 this.listeners = data.on || emptyObject; 18723 this.injections = resolveInject(options.inject, parent); 18724 this.slots = function () { 18725 if (!_this.$slots) { 18726 normalizeScopedSlots(parent, data.scopedSlots, (_this.$slots = resolveSlots(children, parent))); 18727 } 18728 return _this.$slots; 18729 }; 18730 Object.defineProperty(this, 'scopedSlots', { 18731 enumerable: true, 18732 get: function () { 18733 return normalizeScopedSlots(parent, data.scopedSlots, this.slots()); 18734 } 18735 }); 18736 // support for compiled functional template 18737 if (isCompiled) { 18738 // exposing $options for renderStatic() 18739 this.$options = options; 18740 // pre-resolve slots for renderSlot() 18741 this.$slots = this.slots(); 18742 this.$scopedSlots = normalizeScopedSlots(parent, data.scopedSlots, this.$slots); 18743 } 18744 if (options._scopeId) { 18745 this._c = function (a, b, c, d) { 18746 var vnode = createElement$1(contextVm, a, b, c, d, needNormalization); 18747 if (vnode && !isArray(vnode)) { 18748 vnode.fnScopeId = options._scopeId; 18749 vnode.fnContext = parent; 18750 } 18751 return vnode; 18752 }; 18753 } 18754 else { 18755 this._c = function (a, b, c, d) { 18756 return createElement$1(contextVm, a, b, c, d, needNormalization); 18757 }; 18758 } 18759} 18760installRenderHelpers(FunctionalRenderContext.prototype); 18761function createFunctionalComponent(Ctor, propsData, data, contextVm, children) { 18762 var options = Ctor.options; 18763 var props = {}; 18764 var propOptions = options.props; 18765 if (isDef(propOptions)) { 18766 for (var key in propOptions) { 18767 props[key] = validateProp(key, propOptions, propsData || emptyObject); 18768 } 18769 } 18770 else { 18771 if (isDef(data.attrs)) 18772 mergeProps(props, data.attrs); 18773 if (isDef(data.props)) 18774 mergeProps(props, data.props); 18775 } 18776 var renderContext = new FunctionalRenderContext(data, props, children, contextVm, Ctor); 18777 var vnode = options.render.call(null, renderContext._c, renderContext); 18778 if (vnode instanceof VNode) { 18779 return cloneAndMarkFunctionalResult(vnode, data, renderContext.parent, options, renderContext); 18780 } 18781 else if (isArray(vnode)) { 18782 var vnodes = normalizeChildren(vnode) || []; 18783 var res = new Array(vnodes.length); 18784 for (var i = 0; i < vnodes.length; i++) { 18785 res[i] = cloneAndMarkFunctionalResult(vnodes[i], data, renderContext.parent, options, renderContext); 18786 } 18787 return res; 18788 } 18789} 18790function cloneAndMarkFunctionalResult(vnode, data, contextVm, options, renderContext) { 18791 // #7817 clone node before setting fnContext, otherwise if the node is reused 18792 // (e.g. it was from a cached normal slot) the fnContext causes named slots 18793 // that should not be matched to match. 18794 var clone = cloneVNode(vnode); 18795 clone.fnContext = contextVm; 18796 clone.fnOptions = options; 18797 if (true) { 18798 (clone.devtoolsMeta = clone.devtoolsMeta || {}).renderContext = 18799 renderContext; 18800 } 18801 if (data.slot) { 18802 (clone.data || (clone.data = {})).slot = data.slot; 18803 } 18804 return clone; 18805} 18806function mergeProps(to, from) { 18807 for (var key in from) { 18808 to[camelize(key)] = from[key]; 18809 } 18810} 18811 18812function getComponentName(options) { 18813 return options.name || options.__name || options._componentTag; 18814} 18815// inline hooks to be invoked on component VNodes during patch 18816var componentVNodeHooks = { 18817 init: function (vnode, hydrating) { 18818 if (vnode.componentInstance && 18819 !vnode.componentInstance._isDestroyed && 18820 vnode.data.keepAlive) { 18821 // kept-alive components, treat as a patch 18822 var mountedNode = vnode; // work around flow 18823 componentVNodeHooks.prepatch(mountedNode, mountedNode); 18824 } 18825 else { 18826 var child = (vnode.componentInstance = createComponentInstanceForVnode(vnode, activeInstance)); 18827 child.$mount(hydrating ? vnode.elm : undefined, hydrating); 18828 } 18829 }, 18830 prepatch: function (oldVnode, vnode) { 18831 var options = vnode.componentOptions; 18832 var child = (vnode.componentInstance = oldVnode.componentInstance); 18833 updateChildComponent(child, options.propsData, // updated props 18834 options.listeners, // updated listeners 18835 vnode, // new parent vnode 18836 options.children // new children 18837 ); 18838 }, 18839 insert: function (vnode) { 18840 var context = vnode.context, componentInstance = vnode.componentInstance; 18841 if (!componentInstance._isMounted) { 18842 componentInstance._isMounted = true; 18843 callHook$1(componentInstance, 'mounted'); 18844 } 18845 if (vnode.data.keepAlive) { 18846 if (context._isMounted) { 18847 // vue-router#1212 18848 // During updates, a kept-alive component's child components may 18849 // change, so directly walking the tree here may call activated hooks 18850 // on incorrect children. Instead we push them into a queue which will 18851 // be processed after the whole patch process ended. 18852 queueActivatedComponent(componentInstance); 18853 } 18854 else { 18855 activateChildComponent(componentInstance, true /* direct */); 18856 } 18857 } 18858 }, 18859 destroy: function (vnode) { 18860 var componentInstance = vnode.componentInstance; 18861 if (!componentInstance._isDestroyed) { 18862 if (!vnode.data.keepAlive) { 18863 componentInstance.$destroy(); 18864 } 18865 else { 18866 deactivateChildComponent(componentInstance, true /* direct */); 18867 } 18868 } 18869 } 18870}; 18871var hooksToMerge = Object.keys(componentVNodeHooks); 18872function createComponent(Ctor, data, context, children, tag) { 18873 if (isUndef(Ctor)) { 18874 return; 18875 } 18876 var baseCtor = context.$options._base; 18877 // plain options object: turn it into a constructor 18878 if (isObject(Ctor)) { 18879 Ctor = baseCtor.extend(Ctor); 18880 } 18881 // if at this stage it's not a constructor or an async component factory, 18882 // reject. 18883 if (typeof Ctor !== 'function') { 18884 if (true) { 18885 warn$2("Invalid Component definition: ".concat(String(Ctor)), context); 18886 } 18887 return; 18888 } 18889 // async component 18890 var asyncFactory; 18891 // @ts-expect-error 18892 if (isUndef(Ctor.cid)) { 18893 asyncFactory = Ctor; 18894 Ctor = resolveAsyncComponent(asyncFactory, baseCtor); 18895 if (Ctor === undefined) { 18896 // return a placeholder node for async component, which is rendered 18897 // as a comment node but preserves all the raw information for the node. 18898 // the information will be used for async server-rendering and hydration. 18899 return createAsyncPlaceholder(asyncFactory, data, context, children, tag); 18900 } 18901 } 18902 data = data || {}; 18903 // resolve constructor options in case global mixins are applied after 18904 // component constructor creation 18905 resolveConstructorOptions(Ctor); 18906 // transform component v-model data into props & events 18907 if (isDef(data.model)) { 18908 // @ts-expect-error 18909 transformModel(Ctor.options, data); 18910 } 18911 // extract props 18912 // @ts-expect-error 18913 var propsData = extractPropsFromVNodeData(data, Ctor, tag); 18914 // functional component 18915 // @ts-expect-error 18916 if (isTrue(Ctor.options.functional)) { 18917 return createFunctionalComponent(Ctor, propsData, data, context, children); 18918 } 18919 // extract listeners, since these needs to be treated as 18920 // child component listeners instead of DOM listeners 18921 var listeners = data.on; 18922 // replace with listeners with .native modifier 18923 // so it gets processed during parent component patch. 18924 data.on = data.nativeOn; 18925 // @ts-expect-error 18926 if (isTrue(Ctor.options.abstract)) { 18927 // abstract components do not keep anything 18928 // other than props & listeners & slot 18929 // work around flow 18930 var slot = data.slot; 18931 data = {}; 18932 if (slot) { 18933 data.slot = slot; 18934 } 18935 } 18936 // install component management hooks onto the placeholder node 18937 installComponentHooks(data); 18938 // return a placeholder vnode 18939 // @ts-expect-error 18940 var name = getComponentName(Ctor.options) || tag; 18941 var vnode = new VNode( 18942 // @ts-expect-error 18943 "vue-component-".concat(Ctor.cid).concat(name ? "-".concat(name) : ''), data, undefined, undefined, undefined, context, 18944 // @ts-expect-error 18945 { Ctor: Ctor, propsData: propsData, listeners: listeners, tag: tag, children: children }, asyncFactory); 18946 return vnode; 18947} 18948function createComponentInstanceForVnode( 18949// we know it's MountedComponentVNode but flow doesn't 18950vnode, 18951// activeInstance in lifecycle state 18952parent) { 18953 var options = { 18954 _isComponent: true, 18955 _parentVnode: vnode, 18956 parent: parent 18957 }; 18958 // check inline-template render functions 18959 var inlineTemplate = vnode.data.inlineTemplate; 18960 if (isDef(inlineTemplate)) { 18961 options.render = inlineTemplate.render; 18962 options.staticRenderFns = inlineTemplate.staticRenderFns; 18963 } 18964 return new vnode.componentOptions.Ctor(options); 18965} 18966function installComponentHooks(data) { 18967 var hooks = data.hook || (data.hook = {}); 18968 for (var i = 0; i < hooksToMerge.length; i++) { 18969 var key = hooksToMerge[i]; 18970 var existing = hooks[key]; 18971 var toMerge = componentVNodeHooks[key]; 18972 // @ts-expect-error 18973 if (existing !== toMerge && !(existing && existing._merged)) { 18974 hooks[key] = existing ? mergeHook(toMerge, existing) : toMerge; 18975 } 18976 } 18977} 18978function mergeHook(f1, f2) { 18979 var merged = function (a, b) { 18980 // flow complains about extra args which is why we use any 18981 f1(a, b); 18982 f2(a, b); 18983 }; 18984 merged._merged = true; 18985 return merged; 18986} 18987// transform component v-model info (value and callback) into 18988// prop and event handler respectively. 18989function transformModel(options, data) { 18990 var prop = (options.model && options.model.prop) || 'value'; 18991 var event = (options.model && options.model.event) || 'input'; 18992 (data.attrs || (data.attrs = {}))[prop] = data.model.value; 18993 var on = data.on || (data.on = {}); 18994 var existing = on[event]; 18995 var callback = data.model.callback; 18996 if (isDef(existing)) { 18997 if (isArray(existing) 18998 ? existing.indexOf(callback) === -1 18999 : existing !== callback) { 19000 on[event] = [callback].concat(existing); 19001 } 19002 } 19003 else { 19004 on[event] = callback; 19005 } 19006} 19007 19008var warn$2 = noop; 19009var tip = noop; 19010var generateComponentTrace; // work around flow check 19011var formatComponentName; 19012if (true) { 19013 var hasConsole_1 = typeof console !== 'undefined'; 19014 var classifyRE_1 = /(?:^|[-_])(\w)/g; 19015 var classify_1 = function (str) { 19016 return str.replace(classifyRE_1, function (c) { return c.toUpperCase(); }).replace(/[-_]/g, ''); 19017 }; 19018 warn$2 = function (msg, vm) { 19019 if (vm === void 0) { vm = currentInstance; } 19020 var trace = vm ? generateComponentTrace(vm) : ''; 19021 if (config.warnHandler) { 19022 config.warnHandler.call(null, msg, vm, trace); 19023 } 19024 else if (hasConsole_1 && !config.silent) { 19025 console.error("[Vue warn]: ".concat(msg).concat(trace)); 19026 } 19027 }; 19028 tip = function (msg, vm) { 19029 if (hasConsole_1 && !config.silent) { 19030 console.warn("[Vue tip]: ".concat(msg) + (vm ? generateComponentTrace(vm) : '')); 19031 } 19032 }; 19033 formatComponentName = function (vm, includeFile) { 19034 if (vm.$root === vm) { 19035 return '<Root>'; 19036 } 19037 var options = isFunction(vm) && vm.cid != null 19038 ? vm.options 19039 : vm._isVue 19040 ? vm.$options || vm.constructor.options 19041 : vm; 19042 var name = getComponentName(options); 19043 var file = options.__file; 19044 if (!name && file) { 19045 var match = file.match(/([^/\\]+)\.vue$/); 19046 name = match && match[1]; 19047 } 19048 return ((name ? "<".concat(classify_1(name), ">") : "<Anonymous>") + 19049 (file && includeFile !== false ? " at ".concat(file) : '')); 19050 }; 19051 var repeat_1 = function (str, n) { 19052 var res = ''; 19053 while (n) { 19054 if (n % 2 === 1) 19055 res += str; 19056 if (n > 1) 19057 str += str; 19058 n >>= 1; 19059 } 19060 return res; 19061 }; 19062 generateComponentTrace = function (vm) { 19063 if (vm._isVue && vm.$parent) { 19064 var tree = []; 19065 var currentRecursiveSequence = 0; 19066 while (vm) { 19067 if (tree.length > 0) { 19068 var last = tree[tree.length - 1]; 19069 if (last.constructor === vm.constructor) { 19070 currentRecursiveSequence++; 19071 vm = vm.$parent; 19072 continue; 19073 } 19074 else if (currentRecursiveSequence > 0) { 19075 tree[tree.length - 1] = [last, currentRecursiveSequence]; 19076 currentRecursiveSequence = 0; 19077 } 19078 } 19079 tree.push(vm); 19080 vm = vm.$parent; 19081 } 19082 return ('\n\nfound in\n\n' + 19083 tree 19084 .map(function (vm, i) { 19085 return "".concat(i === 0 ? '---> ' : repeat_1(' ', 5 + i * 2)).concat(isArray(vm) 19086 ? "".concat(formatComponentName(vm[0]), "... (").concat(vm[1], " recursive calls)") 19087 : formatComponentName(vm)); 19088 }) 19089 .join('\n')); 19090 } 19091 else { 19092 return "\n\n(found in ".concat(formatComponentName(vm), ")"); 19093 } 19094 }; 19095} 19096 19097/** 19098 * Option overwriting strategies are functions that handle 19099 * how to merge a parent option value and a child option 19100 * value into the final value. 19101 */ 19102var strats = config.optionMergeStrategies; 19103/** 19104 * Options with restrictions 19105 */ 19106if (true) { 19107 strats.el = strats.propsData = function (parent, child, vm, key) { 19108 if (!vm) { 19109 warn$2("option \"".concat(key, "\" can only be used during instance ") + 19110 'creation with the `new` keyword.'); 19111 } 19112 return defaultStrat(parent, child); 19113 }; 19114} 19115/** 19116 * Helper that recursively merges two data objects together. 19117 */ 19118function mergeData(to, from, recursive) { 19119 if (recursive === void 0) { recursive = true; } 19120 if (!from) 19121 return to; 19122 var key, toVal, fromVal; 19123 var keys = hasSymbol 19124 ? Reflect.ownKeys(from) 19125 : Object.keys(from); 19126 for (var i = 0; i < keys.length; i++) { 19127 key = keys[i]; 19128 // in case the object is already observed... 19129 if (key === '__ob__') 19130 continue; 19131 toVal = to[key]; 19132 fromVal = from[key]; 19133 if (!recursive || !hasOwn(to, key)) { 19134 set(to, key, fromVal); 19135 } 19136 else if (toVal !== fromVal && 19137 isPlainObject(toVal) && 19138 isPlainObject(fromVal)) { 19139 mergeData(toVal, fromVal); 19140 } 19141 } 19142 return to; 19143} 19144/** 19145 * Data 19146 */ 19147function mergeDataOrFn(parentVal, childVal, vm) { 19148 if (!vm) { 19149 // in a Vue.extend merge, both should be functions 19150 if (!childVal) { 19151 return parentVal; 19152 } 19153 if (!parentVal) { 19154 return childVal; 19155 } 19156 // when parentVal & childVal are both present, 19157 // we need to return a function that returns the 19158 // merged result of both functions... no need to 19159 // check if parentVal is a function here because 19160 // it has to be a function to pass previous merges. 19161 return function mergedDataFn() { 19162 return mergeData(isFunction(childVal) ? childVal.call(this, this) : childVal, isFunction(parentVal) ? parentVal.call(this, this) : parentVal); 19163 }; 19164 } 19165 else { 19166 return function mergedInstanceDataFn() { 19167 // instance merge 19168 var instanceData = isFunction(childVal) 19169 ? childVal.call(vm, vm) 19170 : childVal; 19171 var defaultData = isFunction(parentVal) 19172 ? parentVal.call(vm, vm) 19173 : parentVal; 19174 if (instanceData) { 19175 return mergeData(instanceData, defaultData); 19176 } 19177 else { 19178 return defaultData; 19179 } 19180 }; 19181 } 19182} 19183strats.data = function (parentVal, childVal, vm) { 19184 if (!vm) { 19185 if (childVal && typeof childVal !== 'function') { 19186 true && 19187 warn$2('The "data" option should be a function ' + 19188 'that returns a per-instance value in component ' + 19189 'definitions.', vm); 19190 return parentVal; 19191 } 19192 return mergeDataOrFn(parentVal, childVal); 19193 } 19194 return mergeDataOrFn(parentVal, childVal, vm); 19195}; 19196/** 19197 * Hooks and props are merged as arrays. 19198 */ 19199function mergeLifecycleHook(parentVal, childVal) { 19200 var res = childVal 19201 ? parentVal 19202 ? parentVal.concat(childVal) 19203 : isArray(childVal) 19204 ? childVal 19205 : [childVal] 19206 : parentVal; 19207 return res ? dedupeHooks(res) : res; 19208} 19209function dedupeHooks(hooks) { 19210 var res = []; 19211 for (var i = 0; i < hooks.length; i++) { 19212 if (res.indexOf(hooks[i]) === -1) { 19213 res.push(hooks[i]); 19214 } 19215 } 19216 return res; 19217} 19218LIFECYCLE_HOOKS.forEach(function (hook) { 19219 strats[hook] = mergeLifecycleHook; 19220}); 19221/** 19222 * Assets 19223 * 19224 * When a vm is present (instance creation), we need to do 19225 * a three-way merge between constructor options, instance 19226 * options and parent options. 19227 */ 19228function mergeAssets(parentVal, childVal, vm, key) { 19229 var res = Object.create(parentVal || null); 19230 if (childVal) { 19231 true && assertObjectType(key, childVal, vm); 19232 return extend(res, childVal); 19233 } 19234 else { 19235 return res; 19236 } 19237} 19238ASSET_TYPES.forEach(function (type) { 19239 strats[type + 's'] = mergeAssets; 19240}); 19241/** 19242 * Watchers. 19243 * 19244 * Watchers hashes should not overwrite one 19245 * another, so we merge them as arrays. 19246 */ 19247strats.watch = function (parentVal, childVal, vm, key) { 19248 // work around Firefox's Object.prototype.watch... 19249 //@ts-expect-error work around 19250 if (parentVal === nativeWatch) 19251 parentVal = undefined; 19252 //@ts-expect-error work around 19253 if (childVal === nativeWatch) 19254 childVal = undefined; 19255 /* istanbul ignore if */ 19256 if (!childVal) 19257 return Object.create(parentVal || null); 19258 if (true) { 19259 assertObjectType(key, childVal, vm); 19260 } 19261 if (!parentVal) 19262 return childVal; 19263 var ret = {}; 19264 extend(ret, parentVal); 19265 for (var key_1 in childVal) { 19266 var parent_1 = ret[key_1]; 19267 var child = childVal[key_1]; 19268 if (parent_1 && !isArray(parent_1)) { 19269 parent_1 = [parent_1]; 19270 } 19271 ret[key_1] = parent_1 ? parent_1.concat(child) : isArray(child) ? child : [child]; 19272 } 19273 return ret; 19274}; 19275/** 19276 * Other object hashes. 19277 */ 19278strats.props = 19279 strats.methods = 19280 strats.inject = 19281 strats.computed = 19282 function (parentVal, childVal, vm, key) { 19283 if (childVal && "development" !== 'production') { 19284 assertObjectType(key, childVal, vm); 19285 } 19286 if (!parentVal) 19287 return childVal; 19288 var ret = Object.create(null); 19289 extend(ret, parentVal); 19290 if (childVal) 19291 extend(ret, childVal); 19292 return ret; 19293 }; 19294strats.provide = function (parentVal, childVal) { 19295 if (!parentVal) 19296 return childVal; 19297 return function () { 19298 var ret = Object.create(null); 19299 mergeData(ret, isFunction(parentVal) ? parentVal.call(this) : parentVal); 19300 if (childVal) { 19301 mergeData(ret, isFunction(childVal) ? childVal.call(this) : childVal, false // non-recursive 19302 ); 19303 } 19304 return ret; 19305 }; 19306}; 19307/** 19308 * Default strategy. 19309 */ 19310var defaultStrat = function (parentVal, childVal) { 19311 return childVal === undefined ? parentVal : childVal; 19312}; 19313/** 19314 * Validate component names 19315 */ 19316function checkComponents(options) { 19317 for (var key in options.components) { 19318 validateComponentName(key); 19319 } 19320} 19321function validateComponentName(name) { 19322 if (!new RegExp("^[a-zA-Z][\\-\\.0-9_".concat(unicodeRegExp.source, "]*$")).test(name)) { 19323 warn$2('Invalid component name: "' + 19324 name + 19325 '". Component names ' + 19326 'should conform to valid custom element name in html5 specification.'); 19327 } 19328 if (isBuiltInTag(name) || config.isReservedTag(name)) { 19329 warn$2('Do not use built-in or reserved HTML elements as component ' + 19330 'id: ' + 19331 name); 19332 } 19333} 19334/** 19335 * Ensure all props option syntax are normalized into the 19336 * Object-based format. 19337 */ 19338function normalizeProps(options, vm) { 19339 var props = options.props; 19340 if (!props) 19341 return; 19342 var res = {}; 19343 var i, val, name; 19344 if (isArray(props)) { 19345 i = props.length; 19346 while (i--) { 19347 val = props[i]; 19348 if (typeof val === 'string') { 19349 name = camelize(val); 19350 res[name] = { type: null }; 19351 } 19352 else if (true) { 19353 warn$2('props must be strings when using array syntax.'); 19354 } 19355 } 19356 } 19357 else if (isPlainObject(props)) { 19358 for (var key in props) { 19359 val = props[key]; 19360 name = camelize(key); 19361 res[name] = isPlainObject(val) ? val : { type: val }; 19362 } 19363 } 19364 else if (true) { 19365 warn$2("Invalid value for option \"props\": expected an Array or an Object, " + 19366 "but got ".concat(toRawType(props), "."), vm); 19367 } 19368 options.props = res; 19369} 19370/** 19371 * Normalize all injections into Object-based format 19372 */ 19373function normalizeInject(options, vm) { 19374 var inject = options.inject; 19375 if (!inject) 19376 return; 19377 var normalized = (options.inject = {}); 19378 if (isArray(inject)) { 19379 for (var i = 0; i < inject.length; i++) { 19380 normalized[inject[i]] = { from: inject[i] }; 19381 } 19382 } 19383 else if (isPlainObject(inject)) { 19384 for (var key in inject) { 19385 var val = inject[key]; 19386 normalized[key] = isPlainObject(val) 19387 ? extend({ from: key }, val) 19388 : { from: val }; 19389 } 19390 } 19391 else if (true) { 19392 warn$2("Invalid value for option \"inject\": expected an Array or an Object, " + 19393 "but got ".concat(toRawType(inject), "."), vm); 19394 } 19395} 19396/** 19397 * Normalize raw function directives into object format. 19398 */ 19399function normalizeDirectives$1(options) { 19400 var dirs = options.directives; 19401 if (dirs) { 19402 for (var key in dirs) { 19403 var def = dirs[key]; 19404 if (isFunction(def)) { 19405 dirs[key] = { bind: def, update: def }; 19406 } 19407 } 19408 } 19409} 19410function assertObjectType(name, value, vm) { 19411 if (!isPlainObject(value)) { 19412 warn$2("Invalid value for option \"".concat(name, "\": expected an Object, ") + 19413 "but got ".concat(toRawType(value), "."), vm); 19414 } 19415} 19416/** 19417 * Merge two option objects into a new one. 19418 * Core utility used in both instantiation and inheritance. 19419 */ 19420function mergeOptions(parent, child, vm) { 19421 if (true) { 19422 checkComponents(child); 19423 } 19424 if (isFunction(child)) { 19425 // @ts-expect-error 19426 child = child.options; 19427 } 19428 normalizeProps(child, vm); 19429 normalizeInject(child, vm); 19430 normalizeDirectives$1(child); 19431 // Apply extends and mixins on the child options, 19432 // but only if it is a raw options object that isn't 19433 // the result of another mergeOptions call. 19434 // Only merged options has the _base property. 19435 if (!child._base) { 19436 if (child.extends) { 19437 parent = mergeOptions(parent, child.extends, vm); 19438 } 19439 if (child.mixins) { 19440 for (var i = 0, l = child.mixins.length; i < l; i++) { 19441 parent = mergeOptions(parent, child.mixins[i], vm); 19442 } 19443 } 19444 } 19445 var options = {}; 19446 var key; 19447 for (key in parent) { 19448 mergeField(key); 19449 } 19450 for (key in child) { 19451 if (!hasOwn(parent, key)) { 19452 mergeField(key); 19453 } 19454 } 19455 function mergeField(key) { 19456 var strat = strats[key] || defaultStrat; 19457 options[key] = strat(parent[key], child[key], vm, key); 19458 } 19459 return options; 19460} 19461/** 19462 * Resolve an asset. 19463 * This function is used because child instances need access 19464 * to assets defined in its ancestor chain. 19465 */ 19466function resolveAsset(options, type, id, warnMissing) { 19467 /* istanbul ignore if */ 19468 if (typeof id !== 'string') { 19469 return; 19470 } 19471 var assets = options[type]; 19472 // check local registration variations first 19473 if (hasOwn(assets, id)) 19474 return assets[id]; 19475 var camelizedId = camelize(id); 19476 if (hasOwn(assets, camelizedId)) 19477 return assets[camelizedId]; 19478 var PascalCaseId = capitalize(camelizedId); 19479 if (hasOwn(assets, PascalCaseId)) 19480 return assets[PascalCaseId]; 19481 // fallback to prototype chain 19482 var res = assets[id] || assets[camelizedId] || assets[PascalCaseId]; 19483 if ( true && warnMissing && !res) { 19484 warn$2('Failed to resolve ' + type.slice(0, -1) + ': ' + id); 19485 } 19486 return res; 19487} 19488 19489function validateProp(key, propOptions, propsData, vm) { 19490 var prop = propOptions[key]; 19491 var absent = !hasOwn(propsData, key); 19492 var value = propsData[key]; 19493 // boolean casting 19494 var booleanIndex = getTypeIndex(Boolean, prop.type); 19495 if (booleanIndex > -1) { 19496 if (absent && !hasOwn(prop, 'default')) { 19497 value = false; 19498 } 19499 else if (value === '' || value === hyphenate(key)) { 19500 // only cast empty string / same name to boolean if 19501 // boolean has higher priority 19502 var stringIndex = getTypeIndex(String, prop.type); 19503 if (stringIndex < 0 || booleanIndex < stringIndex) { 19504 value = true; 19505 } 19506 } 19507 } 19508 // check default value 19509 if (value === undefined) { 19510 value = getPropDefaultValue(vm, prop, key); 19511 // since the default value is a fresh copy, 19512 // make sure to observe it. 19513 var prevShouldObserve = shouldObserve; 19514 toggleObserving(true); 19515 observe(value); 19516 toggleObserving(prevShouldObserve); 19517 } 19518 if (true) { 19519 assertProp(prop, key, value, vm, absent); 19520 } 19521 return value; 19522} 19523/** 19524 * Get the default value of a prop. 19525 */ 19526function getPropDefaultValue(vm, prop, key) { 19527 // no default, return undefined 19528 if (!hasOwn(prop, 'default')) { 19529 return undefined; 19530 } 19531 var def = prop.default; 19532 // warn against non-factory defaults for Object & Array 19533 if ( true && isObject(def)) { 19534 warn$2('Invalid default value for prop "' + 19535 key + 19536 '": ' + 19537 'Props with type Object/Array must use a factory function ' + 19538 'to return the default value.', vm); 19539 } 19540 // the raw prop value was also undefined from previous render, 19541 // return previous default value to avoid unnecessary watcher trigger 19542 if (vm && 19543 vm.$options.propsData && 19544 vm.$options.propsData[key] === undefined && 19545 vm._props[key] !== undefined) { 19546 return vm._props[key]; 19547 } 19548 // call factory function for non-Function types 19549 // a value is Function if its prototype is function even across different execution context 19550 return isFunction(def) && getType(prop.type) !== 'Function' 19551 ? def.call(vm) 19552 : def; 19553} 19554/** 19555 * Assert whether a prop is valid. 19556 */ 19557function assertProp(prop, name, value, vm, absent) { 19558 if (prop.required && absent) { 19559 warn$2('Missing required prop: "' + name + '"', vm); 19560 return; 19561 } 19562 if (value == null && !prop.required) { 19563 return; 19564 } 19565 var type = prop.type; 19566 var valid = !type || type === true; 19567 var expectedTypes = []; 19568 if (type) { 19569 if (!isArray(type)) { 19570 type = [type]; 19571 } 19572 for (var i = 0; i < type.length && !valid; i++) { 19573 var assertedType = assertType(value, type[i], vm); 19574 expectedTypes.push(assertedType.expectedType || ''); 19575 valid = assertedType.valid; 19576 } 19577 } 19578 var haveExpectedTypes = expectedTypes.some(function (t) { return t; }); 19579 if (!valid && haveExpectedTypes) { 19580 warn$2(getInvalidTypeMessage(name, value, expectedTypes), vm); 19581 return; 19582 } 19583 var validator = prop.validator; 19584 if (validator) { 19585 if (!validator(value)) { 19586 warn$2('Invalid prop: custom validator check failed for prop "' + name + '".', vm); 19587 } 19588 } 19589} 19590var simpleCheckRE = /^(String|Number|Boolean|Function|Symbol|BigInt)$/; 19591function assertType(value, type, vm) { 19592 var valid; 19593 var expectedType = getType(type); 19594 if (simpleCheckRE.test(expectedType)) { 19595 var t = typeof value; 19596 valid = t === expectedType.toLowerCase(); 19597 // for primitive wrapper objects 19598 if (!valid && t === 'object') { 19599 valid = value instanceof type; 19600 } 19601 } 19602 else if (expectedType === 'Object') { 19603 valid = isPlainObject(value); 19604 } 19605 else if (expectedType === 'Array') { 19606 valid = isArray(value); 19607 } 19608 else { 19609 try { 19610 valid = value instanceof type; 19611 } 19612 catch (e) { 19613 warn$2('Invalid prop type: "' + String(type) + '" is not a constructor', vm); 19614 valid = false; 19615 } 19616 } 19617 return { 19618 valid: valid, 19619 expectedType: expectedType 19620 }; 19621} 19622var functionTypeCheckRE = /^\s*function (\w+)/; 19623/** 19624 * Use function string name to check built-in types, 19625 * because a simple equality check will fail when running 19626 * across different vms / iframes. 19627 */ 19628function getType(fn) { 19629 var match = fn && fn.toString().match(functionTypeCheckRE); 19630 return match ? match[1] : ''; 19631} 19632function isSameType(a, b) { 19633 return getType(a) === getType(b); 19634} 19635function getTypeIndex(type, expectedTypes) { 19636 if (!isArray(expectedTypes)) { 19637 return isSameType(expectedTypes, type) ? 0 : -1; 19638 } 19639 for (var i = 0, len = expectedTypes.length; i < len; i++) { 19640 if (isSameType(expectedTypes[i], type)) { 19641 return i; 19642 } 19643 } 19644 return -1; 19645} 19646function getInvalidTypeMessage(name, value, expectedTypes) { 19647 var message = "Invalid prop: type check failed for prop \"".concat(name, "\".") + 19648 " Expected ".concat(expectedTypes.map(capitalize).join(', ')); 19649 var expectedType = expectedTypes[0]; 19650 var receivedType = toRawType(value); 19651 // check if we need to specify expected value 19652 if (expectedTypes.length === 1 && 19653 isExplicable(expectedType) && 19654 isExplicable(typeof value) && 19655 !isBoolean(expectedType, receivedType)) { 19656 message += " with value ".concat(styleValue(value, expectedType)); 19657 } 19658 message += ", got ".concat(receivedType, " "); 19659 // check if we need to specify received value 19660 if (isExplicable(receivedType)) { 19661 message += "with value ".concat(styleValue(value, receivedType), "."); 19662 } 19663 return message; 19664} 19665function styleValue(value, type) { 19666 if (type === 'String') { 19667 return "\"".concat(value, "\""); 19668 } 19669 else if (type === 'Number') { 19670 return "".concat(Number(value)); 19671 } 19672 else { 19673 return "".concat(value); 19674 } 19675} 19676var EXPLICABLE_TYPES = ['string', 'number', 'boolean']; 19677function isExplicable(value) { 19678 return EXPLICABLE_TYPES.some(function (elem) { return value.toLowerCase() === elem; }); 19679} 19680function isBoolean() { 19681 var args = []; 19682 for (var _i = 0; _i < arguments.length; _i++) { 19683 args[_i] = arguments[_i]; 19684 } 19685 return args.some(function (elem) { return elem.toLowerCase() === 'boolean'; }); 19686} 19687 19688function Vue(options) { 19689 if ( true && !(this instanceof Vue)) { 19690 warn$2('Vue is a constructor and should be called with the `new` keyword'); 19691 } 19692 this._init(options); 19693} 19694//@ts-expect-error Vue has function type 19695initMixin$1(Vue); 19696//@ts-expect-error Vue has function type 19697stateMixin(Vue); 19698//@ts-expect-error Vue has function type 19699eventsMixin(Vue); 19700//@ts-expect-error Vue has function type 19701lifecycleMixin(Vue); 19702//@ts-expect-error Vue has function type 19703renderMixin(Vue); 19704 19705function initUse(Vue) { 19706 Vue.use = function (plugin) { 19707 var installedPlugins = this._installedPlugins || (this._installedPlugins = []); 19708 if (installedPlugins.indexOf(plugin) > -1) { 19709 return this; 19710 } 19711 // additional parameters 19712 var args = toArray(arguments, 1); 19713 args.unshift(this); 19714 if (isFunction(plugin.install)) { 19715 plugin.install.apply(plugin, args); 19716 } 19717 else if (isFunction(plugin)) { 19718 plugin.apply(null, args); 19719 } 19720 installedPlugins.push(plugin); 19721 return this; 19722 }; 19723} 19724 19725function initMixin(Vue) { 19726 Vue.mixin = function (mixin) { 19727 this.options = mergeOptions(this.options, mixin); 19728 return this; 19729 }; 19730} 19731 19732function initExtend(Vue) { 19733 /** 19734 * Each instance constructor, including Vue, has a unique 19735 * cid. This enables us to create wrapped "child 19736 * constructors" for prototypal inheritance and cache them. 19737 */ 19738 Vue.cid = 0; 19739 var cid = 1; 19740 /** 19741 * Class inheritance 19742 */ 19743 Vue.extend = function (extendOptions) { 19744 extendOptions = extendOptions || {}; 19745 var Super = this; 19746 var SuperId = Super.cid; 19747 var cachedCtors = extendOptions._Ctor || (extendOptions._Ctor = {}); 19748 if (cachedCtors[SuperId]) { 19749 return cachedCtors[SuperId]; 19750 } 19751 var name = getComponentName(extendOptions) || getComponentName(Super.options); 19752 if ( true && name) { 19753 validateComponentName(name); 19754 } 19755 var Sub = function VueComponent(options) { 19756 this._init(options); 19757 }; 19758 Sub.prototype = Object.create(Super.prototype); 19759 Sub.prototype.constructor = Sub; 19760 Sub.cid = cid++; 19761 Sub.options = mergeOptions(Super.options, extendOptions); 19762 Sub['super'] = Super; 19763 // For props and computed properties, we define the proxy getters on 19764 // the Vue instances at extension time, on the extended prototype. This 19765 // avoids Object.defineProperty calls for each instance created. 19766 if (Sub.options.props) { 19767 initProps(Sub); 19768 } 19769 if (Sub.options.computed) { 19770 initComputed(Sub); 19771 } 19772 // allow further extension/mixin/plugin usage 19773 Sub.extend = Super.extend; 19774 Sub.mixin = Super.mixin; 19775 Sub.use = Super.use; 19776 // create asset registers, so extended classes 19777 // can have their private assets too. 19778 ASSET_TYPES.forEach(function (type) { 19779 Sub[type] = Super[type]; 19780 }); 19781 // enable recursive self-lookup 19782 if (name) { 19783 Sub.options.components[name] = Sub; 19784 } 19785 // keep a reference to the super options at extension time. 19786 // later at instantiation we can check if Super's options have 19787 // been updated. 19788 Sub.superOptions = Super.options; 19789 Sub.extendOptions = extendOptions; 19790 Sub.sealedOptions = extend({}, Sub.options); 19791 // cache constructor 19792 cachedCtors[SuperId] = Sub; 19793 return Sub; 19794 }; 19795} 19796function initProps(Comp) { 19797 var props = Comp.options.props; 19798 for (var key in props) { 19799 proxy(Comp.prototype, "_props", key); 19800 } 19801} 19802function initComputed(Comp) { 19803 var computed = Comp.options.computed; 19804 for (var key in computed) { 19805 defineComputed(Comp.prototype, key, computed[key]); 19806 } 19807} 19808 19809function initAssetRegisters(Vue) { 19810 /** 19811 * Create asset registration methods. 19812 */ 19813 ASSET_TYPES.forEach(function (type) { 19814 // @ts-expect-error function is not exact same type 19815 Vue[type] = function (id, definition) { 19816 if (!definition) { 19817 return this.options[type + 's'][id]; 19818 } 19819 else { 19820 /* istanbul ignore if */ 19821 if ( true && type === 'component') { 19822 validateComponentName(id); 19823 } 19824 if (type === 'component' && isPlainObject(definition)) { 19825 // @ts-expect-error 19826 definition.name = definition.name || id; 19827 definition = this.options._base.extend(definition); 19828 } 19829 if (type === 'directive' && isFunction(definition)) { 19830 definition = { bind: definition, update: definition }; 19831 } 19832 this.options[type + 's'][id] = definition; 19833 return definition; 19834 } 19835 }; 19836 }); 19837} 19838 19839function _getComponentName(opts) { 19840 return opts && (getComponentName(opts.Ctor.options) || opts.tag); 19841} 19842function matches(pattern, name) { 19843 if (isArray(pattern)) { 19844 return pattern.indexOf(name) > -1; 19845 } 19846 else if (typeof pattern === 'string') { 19847 return pattern.split(',').indexOf(name) > -1; 19848 } 19849 else if (isRegExp(pattern)) { 19850 return pattern.test(name); 19851 } 19852 /* istanbul ignore next */ 19853 return false; 19854} 19855function pruneCache(keepAliveInstance, filter) { 19856 var cache = keepAliveInstance.cache, keys = keepAliveInstance.keys, _vnode = keepAliveInstance._vnode; 19857 for (var key in cache) { 19858 var entry = cache[key]; 19859 if (entry) { 19860 var name_1 = entry.name; 19861 if (name_1 && !filter(name_1)) { 19862 pruneCacheEntry(cache, key, keys, _vnode); 19863 } 19864 } 19865 } 19866} 19867function pruneCacheEntry(cache, key, keys, current) { 19868 var entry = cache[key]; 19869 if (entry && (!current || entry.tag !== current.tag)) { 19870 // @ts-expect-error can be undefined 19871 entry.componentInstance.$destroy(); 19872 } 19873 cache[key] = null; 19874 remove$2(keys, key); 19875} 19876var patternTypes = [String, RegExp, Array]; 19877// TODO defineComponent 19878var KeepAlive = { 19879 name: 'keep-alive', 19880 abstract: true, 19881 props: { 19882 include: patternTypes, 19883 exclude: patternTypes, 19884 max: [String, Number] 19885 }, 19886 methods: { 19887 cacheVNode: function () { 19888 var _a = this, cache = _a.cache, keys = _a.keys, vnodeToCache = _a.vnodeToCache, keyToCache = _a.keyToCache; 19889 if (vnodeToCache) { 19890 var tag = vnodeToCache.tag, componentInstance = vnodeToCache.componentInstance, componentOptions = vnodeToCache.componentOptions; 19891 cache[keyToCache] = { 19892 name: _getComponentName(componentOptions), 19893 tag: tag, 19894 componentInstance: componentInstance 19895 }; 19896 keys.push(keyToCache); 19897 // prune oldest entry 19898 if (this.max && keys.length > parseInt(this.max)) { 19899 pruneCacheEntry(cache, keys[0], keys, this._vnode); 19900 } 19901 this.vnodeToCache = null; 19902 } 19903 } 19904 }, 19905 created: function () { 19906 this.cache = Object.create(null); 19907 this.keys = []; 19908 }, 19909 destroyed: function () { 19910 for (var key in this.cache) { 19911 pruneCacheEntry(this.cache, key, this.keys); 19912 } 19913 }, 19914 mounted: function () { 19915 var _this = this; 19916 this.cacheVNode(); 19917 this.$watch('include', function (val) { 19918 pruneCache(_this, function (name) { return matches(val, name); }); 19919 }); 19920 this.$watch('exclude', function (val) { 19921 pruneCache(_this, function (name) { return !matches(val, name); }); 19922 }); 19923 }, 19924 updated: function () { 19925 this.cacheVNode(); 19926 }, 19927 render: function () { 19928 var slot = this.$slots.default; 19929 var vnode = getFirstComponentChild(slot); 19930 var componentOptions = vnode && vnode.componentOptions; 19931 if (componentOptions) { 19932 // check pattern 19933 var name_2 = _getComponentName(componentOptions); 19934 var _a = this, include = _a.include, exclude = _a.exclude; 19935 if ( 19936 // not included 19937 (include && (!name_2 || !matches(include, name_2))) || 19938 // excluded 19939 (exclude && name_2 && matches(exclude, name_2))) { 19940 return vnode; 19941 } 19942 var _b = this, cache = _b.cache, keys = _b.keys; 19943 var key = vnode.key == null 19944 ? // same constructor may get registered as different local components 19945 // so cid alone is not enough (#3269) 19946 componentOptions.Ctor.cid + 19947 (componentOptions.tag ? "::".concat(componentOptions.tag) : '') 19948 : vnode.key; 19949 if (cache[key]) { 19950 vnode.componentInstance = cache[key].componentInstance; 19951 // make current key freshest 19952 remove$2(keys, key); 19953 keys.push(key); 19954 } 19955 else { 19956 // delay setting the cache until update 19957 this.vnodeToCache = vnode; 19958 this.keyToCache = key; 19959 } 19960 // @ts-expect-error can vnode.data can be undefined 19961 vnode.data.keepAlive = true; 19962 } 19963 return vnode || (slot && slot[0]); 19964 } 19965}; 19966 19967var builtInComponents = { 19968 KeepAlive: KeepAlive 19969}; 19970 19971function initGlobalAPI(Vue) { 19972 // config 19973 var configDef = {}; 19974 configDef.get = function () { return config; }; 19975 if (true) { 19976 configDef.set = function () { 19977 warn$2('Do not replace the Vue.config object, set individual fields instead.'); 19978 }; 19979 } 19980 Object.defineProperty(Vue, 'config', configDef); 19981 // exposed util methods. 19982 // NOTE: these are not considered part of the public API - avoid relying on 19983 // them unless you are aware of the risk. 19984 Vue.util = { 19985 warn: warn$2, 19986 extend: extend, 19987 mergeOptions: mergeOptions, 19988 defineReactive: defineReactive 19989 }; 19990 Vue.set = set; 19991 Vue.delete = del; 19992 Vue.nextTick = nextTick; 19993 // 2.6 explicit observable API 19994 Vue.observable = function (obj) { 19995 observe(obj); 19996 return obj; 19997 }; 19998 Vue.options = Object.create(null); 19999 ASSET_TYPES.forEach(function (type) { 20000 Vue.options[type + 's'] = Object.create(null); 20001 }); 20002 // this is used to identify the "base" constructor to extend all plain-object 20003 // components with in Weex's multi-instance scenarios. 20004 Vue.options._base = Vue; 20005 extend(Vue.options.components, builtInComponents); 20006 initUse(Vue); 20007 initMixin(Vue); 20008 initExtend(Vue); 20009 initAssetRegisters(Vue); 20010} 20011 20012initGlobalAPI(Vue); 20013Object.defineProperty(Vue.prototype, '$isServer', { 20014 get: isServerRendering 20015}); 20016Object.defineProperty(Vue.prototype, '$ssrContext', { 20017 get: function () { 20018 /* istanbul ignore next */ 20019 return this.$vnode && this.$vnode.ssrContext; 20020 } 20021}); 20022// expose FunctionalRenderContext for ssr runtime helper installation 20023Object.defineProperty(Vue, 'FunctionalRenderContext', { 20024 value: FunctionalRenderContext 20025}); 20026Vue.version = version; 20027 20028// these are reserved for web because they are directly compiled away 20029// during template compilation 20030var isReservedAttr = makeMap('style,class'); 20031// attributes that should be using props for binding 20032var acceptValue = makeMap('input,textarea,option,select,progress'); 20033var mustUseProp = function (tag, type, attr) { 20034 return ((attr === 'value' && acceptValue(tag) && type !== 'button') || 20035 (attr === 'selected' && tag === 'option') || 20036 (attr === 'checked' && tag === 'input') || 20037 (attr === 'muted' && tag === 'video')); 20038}; 20039var isEnumeratedAttr = makeMap('contenteditable,draggable,spellcheck'); 20040var isValidContentEditableValue = makeMap('events,caret,typing,plaintext-only'); 20041var convertEnumeratedValue = function (key, value) { 20042 return isFalsyAttrValue(value) || value === 'false' 20043 ? 'false' 20044 : // allow arbitrary string value for contenteditable 20045 key === 'contenteditable' && isValidContentEditableValue(value) 20046 ? value 20047 : 'true'; 20048}; 20049var isBooleanAttr = makeMap('allowfullscreen,async,autofocus,autoplay,checked,compact,controls,declare,' + 20050 'default,defaultchecked,defaultmuted,defaultselected,defer,disabled,' + 20051 'enabled,formnovalidate,hidden,indeterminate,inert,ismap,itemscope,loop,multiple,' + 20052 'muted,nohref,noresize,noshade,novalidate,nowrap,open,pauseonexit,readonly,' + 20053 'required,reversed,scoped,seamless,selected,sortable,' + 20054 'truespeed,typemustmatch,visible'); 20055var xlinkNS = 'http://www.w3.org/1999/xlink'; 20056var isXlink = function (name) { 20057 return name.charAt(5) === ':' && name.slice(0, 5) === 'xlink'; 20058}; 20059var getXlinkProp = function (name) { 20060 return isXlink(name) ? name.slice(6, name.length) : ''; 20061}; 20062var isFalsyAttrValue = function (val) { 20063 return val == null || val === false; 20064}; 20065 20066function genClassForVnode(vnode) { 20067 var data = vnode.data; 20068 var parentNode = vnode; 20069 var childNode = vnode; 20070 while (isDef(childNode.componentInstance)) { 20071 childNode = childNode.componentInstance._vnode; 20072 if (childNode && childNode.data) { 20073 data = mergeClassData(childNode.data, data); 20074 } 20075 } 20076 // @ts-expect-error parentNode.parent not VNodeWithData 20077 while (isDef((parentNode = parentNode.parent))) { 20078 if (parentNode && parentNode.data) { 20079 data = mergeClassData(data, parentNode.data); 20080 } 20081 } 20082 return renderClass(data.staticClass, data.class); 20083} 20084function mergeClassData(child, parent) { 20085 return { 20086 staticClass: concat(child.staticClass, parent.staticClass), 20087 class: isDef(child.class) ? [child.class, parent.class] : parent.class 20088 }; 20089} 20090function renderClass(staticClass, dynamicClass) { 20091 if (isDef(staticClass) || isDef(dynamicClass)) { 20092 return concat(staticClass, stringifyClass(dynamicClass)); 20093 } 20094 /* istanbul ignore next */ 20095 return ''; 20096} 20097function concat(a, b) { 20098 return a ? (b ? a + ' ' + b : a) : b || ''; 20099} 20100function stringifyClass(value) { 20101 if (Array.isArray(value)) { 20102 return stringifyArray(value); 20103 } 20104 if (isObject(value)) { 20105 return stringifyObject(value); 20106 } 20107 if (typeof value === 'string') { 20108 return value; 20109 } 20110 /* istanbul ignore next */ 20111 return ''; 20112} 20113function stringifyArray(value) { 20114 var res = ''; 20115 var stringified; 20116 for (var i = 0, l = value.length; i < l; i++) { 20117 if (isDef((stringified = stringifyClass(value[i]))) && stringified !== '') { 20118 if (res) 20119 res += ' '; 20120 res += stringified; 20121 } 20122 } 20123 return res; 20124} 20125function stringifyObject(value) { 20126 var res = ''; 20127 for (var key in value) { 20128 if (value[key]) { 20129 if (res) 20130 res += ' '; 20131 res += key; 20132 } 20133 } 20134 return res; 20135} 20136 20137var namespaceMap = { 20138 svg: 'http://www.w3.org/2000/svg', 20139 math: 'http://www.w3.org/1998/Math/MathML' 20140}; 20141var isHTMLTag = makeMap('html,body,base,head,link,meta,style,title,' + 20142 'address,article,aside,footer,header,h1,h2,h3,h4,h5,h6,hgroup,nav,section,' + 20143 'div,dd,dl,dt,figcaption,figure,picture,hr,img,li,main,ol,p,pre,ul,' + 20144 'a,b,abbr,bdi,bdo,br,cite,code,data,dfn,em,i,kbd,mark,q,rp,rt,rtc,ruby,' + 20145 's,samp,small,span,strong,sub,sup,time,u,var,wbr,area,audio,map,track,video,' + 20146 'embed,object,param,source,canvas,script,noscript,del,ins,' + 20147 'caption,col,colgroup,table,thead,tbody,td,th,tr,' + 20148 'button,datalist,fieldset,form,input,label,legend,meter,optgroup,option,' + 20149 'output,progress,select,textarea,' + 20150 'details,dialog,menu,menuitem,summary,' + 20151 'content,element,shadow,template,blockquote,iframe,tfoot'); 20152// this map is intentionally selective, only covering SVG elements that may 20153// contain child elements. 20154var isSVG = makeMap('svg,animate,circle,clippath,cursor,defs,desc,ellipse,filter,font-face,' + 20155 'foreignobject,g,glyph,image,line,marker,mask,missing-glyph,path,pattern,' + 20156 'polygon,polyline,rect,switch,symbol,text,textpath,tspan,use,view', true); 20157var isPreTag = function (tag) { return tag === 'pre'; }; 20158var isReservedTag = function (tag) { 20159 return isHTMLTag(tag) || isSVG(tag); 20160}; 20161function getTagNamespace(tag) { 20162 if (isSVG(tag)) { 20163 return 'svg'; 20164 } 20165 // basic support for MathML 20166 // note it doesn't support other MathML elements being component roots 20167 if (tag === 'math') { 20168 return 'math'; 20169 } 20170} 20171var unknownElementCache = Object.create(null); 20172function isUnknownElement(tag) { 20173 /* istanbul ignore if */ 20174 if (!inBrowser) { 20175 return true; 20176 } 20177 if (isReservedTag(tag)) { 20178 return false; 20179 } 20180 tag = tag.toLowerCase(); 20181 /* istanbul ignore if */ 20182 if (unknownElementCache[tag] != null) { 20183 return unknownElementCache[tag]; 20184 } 20185 var el = document.createElement(tag); 20186 if (tag.indexOf('-') > -1) { 20187 // https://stackoverflow.com/a/28210364/1070244 20188 return (unknownElementCache[tag] = 20189 el.constructor === window.HTMLUnknownElement || 20190 el.constructor === window.HTMLElement); 20191 } 20192 else { 20193 return (unknownElementCache[tag] = /HTMLUnknownElement/.test(el.toString())); 20194 } 20195} 20196var isTextInputType = makeMap('text,number,password,search,email,tel,url'); 20197 20198/** 20199 * Query an element selector if it's not an element already. 20200 */ 20201function query(el) { 20202 if (typeof el === 'string') { 20203 var selected = document.querySelector(el); 20204 if (!selected) { 20205 true && warn$2('Cannot find element: ' + el); 20206 return document.createElement('div'); 20207 } 20208 return selected; 20209 } 20210 else { 20211 return el; 20212 } 20213} 20214 20215function createElement(tagName, vnode) { 20216 var elm = document.createElement(tagName); 20217 if (tagName !== 'select') { 20218 return elm; 20219 } 20220 // false or null will remove the attribute but undefined will not 20221 if (vnode.data && 20222 vnode.data.attrs && 20223 vnode.data.attrs.multiple !== undefined) { 20224 elm.setAttribute('multiple', 'multiple'); 20225 } 20226 return elm; 20227} 20228function createElementNS(namespace, tagName) { 20229 return document.createElementNS(namespaceMap[namespace], tagName); 20230} 20231function createTextNode(text) { 20232 return document.createTextNode(text); 20233} 20234function createComment(text) { 20235 return document.createComment(text); 20236} 20237function insertBefore(parentNode, newNode, referenceNode) { 20238 parentNode.insertBefore(newNode, referenceNode); 20239} 20240function removeChild(node, child) { 20241 node.removeChild(child); 20242} 20243function appendChild(node, child) { 20244 node.appendChild(child); 20245} 20246function parentNode(node) { 20247 return node.parentNode; 20248} 20249function nextSibling(node) { 20250 return node.nextSibling; 20251} 20252function tagName(node) { 20253 return node.tagName; 20254} 20255function setTextContent(node, text) { 20256 node.textContent = text; 20257} 20258function setStyleScope(node, scopeId) { 20259 node.setAttribute(scopeId, ''); 20260} 20261 20262var nodeOps = /*#__PURE__*/Object.freeze({ 20263 __proto__: null, 20264 createElement: createElement, 20265 createElementNS: createElementNS, 20266 createTextNode: createTextNode, 20267 createComment: createComment, 20268 insertBefore: insertBefore, 20269 removeChild: removeChild, 20270 appendChild: appendChild, 20271 parentNode: parentNode, 20272 nextSibling: nextSibling, 20273 tagName: tagName, 20274 setTextContent: setTextContent, 20275 setStyleScope: setStyleScope 20276}); 20277 20278var ref = { 20279 create: function (_, vnode) { 20280 registerRef(vnode); 20281 }, 20282 update: function (oldVnode, vnode) { 20283 if (oldVnode.data.ref !== vnode.data.ref) { 20284 registerRef(oldVnode, true); 20285 registerRef(vnode); 20286 } 20287 }, 20288 destroy: function (vnode) { 20289 registerRef(vnode, true); 20290 } 20291}; 20292function registerRef(vnode, isRemoval) { 20293 var ref = vnode.data.ref; 20294 if (!isDef(ref)) 20295 return; 20296 var vm = vnode.context; 20297 var refValue = vnode.componentInstance || vnode.elm; 20298 var value = isRemoval ? null : refValue; 20299 var $refsValue = isRemoval ? undefined : refValue; 20300 if (isFunction(ref)) { 20301 invokeWithErrorHandling(ref, vm, [value], vm, "template ref function"); 20302 return; 20303 } 20304 var isFor = vnode.data.refInFor; 20305 var _isString = typeof ref === 'string' || typeof ref === 'number'; 20306 var _isRef = isRef(ref); 20307 var refs = vm.$refs; 20308 if (_isString || _isRef) { 20309 if (isFor) { 20310 var existing = _isString ? refs[ref] : ref.value; 20311 if (isRemoval) { 20312 isArray(existing) && remove$2(existing, refValue); 20313 } 20314 else { 20315 if (!isArray(existing)) { 20316 if (_isString) { 20317 refs[ref] = [refValue]; 20318 setSetupRef(vm, ref, refs[ref]); 20319 } 20320 else { 20321 ref.value = [refValue]; 20322 } 20323 } 20324 else if (!existing.includes(refValue)) { 20325 existing.push(refValue); 20326 } 20327 } 20328 } 20329 else if (_isString) { 20330 if (isRemoval && refs[ref] !== refValue) { 20331 return; 20332 } 20333 refs[ref] = $refsValue; 20334 setSetupRef(vm, ref, value); 20335 } 20336 else if (_isRef) { 20337 if (isRemoval && ref.value !== refValue) { 20338 return; 20339 } 20340 ref.value = value; 20341 } 20342 else if (true) { 20343 warn$2("Invalid template ref type: ".concat(typeof ref)); 20344 } 20345 } 20346} 20347function setSetupRef(_a, key, val) { 20348 var _setupState = _a._setupState; 20349 if (_setupState && hasOwn(_setupState, key)) { 20350 if (isRef(_setupState[key])) { 20351 _setupState[key].value = val; 20352 } 20353 else { 20354 _setupState[key] = val; 20355 } 20356 } 20357} 20358 20359/** 20360 * Virtual DOM patching algorithm based on Snabbdom by 20361 * Simon Friis Vindum (@paldepind) 20362 * Licensed under the MIT License 20363 * https://github.com/paldepind/snabbdom/blob/master/LICENSE 20364 * 20365 * modified by Evan You (@yyx990803) 20366 * 20367 * Not type-checking this because this file is perf-critical and the cost 20368 * of making flow understand it is not worth it. 20369 */ 20370var emptyNode = new VNode('', {}, []); 20371var hooks = ['create', 'activate', 'update', 'remove', 'destroy']; 20372function sameVnode(a, b) { 20373 return (a.key === b.key && 20374 a.asyncFactory === b.asyncFactory && 20375 ((a.tag === b.tag && 20376 a.isComment === b.isComment && 20377 isDef(a.data) === isDef(b.data) && 20378 sameInputType(a, b)) || 20379 (isTrue(a.isAsyncPlaceholder) && isUndef(b.asyncFactory.error)))); 20380} 20381function sameInputType(a, b) { 20382 if (a.tag !== 'input') 20383 return true; 20384 var i; 20385 var typeA = isDef((i = a.data)) && isDef((i = i.attrs)) && i.type; 20386 var typeB = isDef((i = b.data)) && isDef((i = i.attrs)) && i.type; 20387 return typeA === typeB || (isTextInputType(typeA) && isTextInputType(typeB)); 20388} 20389function createKeyToOldIdx(children, beginIdx, endIdx) { 20390 var i, key; 20391 var map = {}; 20392 for (i = beginIdx; i <= endIdx; ++i) { 20393 key = children[i].key; 20394 if (isDef(key)) 20395 map[key] = i; 20396 } 20397 return map; 20398} 20399function createPatchFunction(backend) { 20400 var i, j; 20401 var cbs = {}; 20402 var modules = backend.modules, nodeOps = backend.nodeOps; 20403 for (i = 0; i < hooks.length; ++i) { 20404 cbs[hooks[i]] = []; 20405 for (j = 0; j < modules.length; ++j) { 20406 if (isDef(modules[j][hooks[i]])) { 20407 cbs[hooks[i]].push(modules[j][hooks[i]]); 20408 } 20409 } 20410 } 20411 function emptyNodeAt(elm) { 20412 return new VNode(nodeOps.tagName(elm).toLowerCase(), {}, [], undefined, elm); 20413 } 20414 function createRmCb(childElm, listeners) { 20415 function remove() { 20416 if (--remove.listeners === 0) { 20417 removeNode(childElm); 20418 } 20419 } 20420 remove.listeners = listeners; 20421 return remove; 20422 } 20423 function removeNode(el) { 20424 var parent = nodeOps.parentNode(el); 20425 // element may have already been removed due to v-html / v-text 20426 if (isDef(parent)) { 20427 nodeOps.removeChild(parent, el); 20428 } 20429 } 20430 function isUnknownElement(vnode, inVPre) { 20431 return (!inVPre && 20432 !vnode.ns && 20433 !(config.ignoredElements.length && 20434 config.ignoredElements.some(function (ignore) { 20435 return isRegExp(ignore) 20436 ? ignore.test(vnode.tag) 20437 : ignore === vnode.tag; 20438 })) && 20439 config.isUnknownElement(vnode.tag)); 20440 } 20441 var creatingElmInVPre = 0; 20442 function createElm(vnode, insertedVnodeQueue, parentElm, refElm, nested, ownerArray, index) { 20443 if (isDef(vnode.elm) && isDef(ownerArray)) { 20444 // This vnode was used in a previous render! 20445 // now it's used as a new node, overwriting its elm would cause 20446 // potential patch errors down the road when it's used as an insertion 20447 // reference node. Instead, we clone the node on-demand before creating 20448 // associated DOM element for it. 20449 vnode = ownerArray[index] = cloneVNode(vnode); 20450 } 20451 vnode.isRootInsert = !nested; // for transition enter check 20452 if (createComponent(vnode, insertedVnodeQueue, parentElm, refElm)) { 20453 return; 20454 } 20455 var data = vnode.data; 20456 var children = vnode.children; 20457 var tag = vnode.tag; 20458 if (isDef(tag)) { 20459 if (true) { 20460 if (data && data.pre) { 20461 creatingElmInVPre++; 20462 } 20463 if (isUnknownElement(vnode, creatingElmInVPre)) { 20464 warn$2('Unknown custom element: <' + 20465 tag + 20466 '> - did you ' + 20467 'register the component correctly? For recursive components, ' + 20468 'make sure to provide the "name" option.', vnode.context); 20469 } 20470 } 20471 vnode.elm = vnode.ns 20472 ? nodeOps.createElementNS(vnode.ns, tag) 20473 : nodeOps.createElement(tag, vnode); 20474 setScope(vnode); 20475 createChildren(vnode, children, insertedVnodeQueue); 20476 if (isDef(data)) { 20477 invokeCreateHooks(vnode, insertedVnodeQueue); 20478 } 20479 insert(parentElm, vnode.elm, refElm); 20480 if ( true && data && data.pre) { 20481 creatingElmInVPre--; 20482 } 20483 } 20484 else if (isTrue(vnode.isComment)) { 20485 vnode.elm = nodeOps.createComment(vnode.text); 20486 insert(parentElm, vnode.elm, refElm); 20487 } 20488 else { 20489 vnode.elm = nodeOps.createTextNode(vnode.text); 20490 insert(parentElm, vnode.elm, refElm); 20491 } 20492 } 20493 function createComponent(vnode, insertedVnodeQueue, parentElm, refElm) { 20494 var i = vnode.data; 20495 if (isDef(i)) { 20496 var isReactivated = isDef(vnode.componentInstance) && i.keepAlive; 20497 if (isDef((i = i.hook)) && isDef((i = i.init))) { 20498 i(vnode, false /* hydrating */); 20499 } 20500 // after calling the init hook, if the vnode is a child component 20501 // it should've created a child instance and mounted it. the child 20502 // component also has set the placeholder vnode's elm. 20503 // in that case we can just return the element and be done. 20504 if (isDef(vnode.componentInstance)) { 20505 initComponent(vnode, insertedVnodeQueue); 20506 insert(parentElm, vnode.elm, refElm); 20507 if (isTrue(isReactivated)) { 20508 reactivateComponent(vnode, insertedVnodeQueue, parentElm, refElm); 20509 } 20510 return true; 20511 } 20512 } 20513 } 20514 function initComponent(vnode, insertedVnodeQueue) { 20515 if (isDef(vnode.data.pendingInsert)) { 20516 insertedVnodeQueue.push.apply(insertedVnodeQueue, vnode.data.pendingInsert); 20517 vnode.data.pendingInsert = null; 20518 } 20519 vnode.elm = vnode.componentInstance.$el; 20520 if (isPatchable(vnode)) { 20521 invokeCreateHooks(vnode, insertedVnodeQueue); 20522 setScope(vnode); 20523 } 20524 else { 20525 // empty component root. 20526 // skip all element-related modules except for ref (#3455) 20527 registerRef(vnode); 20528 // make sure to invoke the insert hook 20529 insertedVnodeQueue.push(vnode); 20530 } 20531 } 20532 function reactivateComponent(vnode, insertedVnodeQueue, parentElm, refElm) { 20533 var i; 20534 // hack for #4339: a reactivated component with inner transition 20535 // does not trigger because the inner node's created hooks are not called 20536 // again. It's not ideal to involve module-specific logic in here but 20537 // there doesn't seem to be a better way to do it. 20538 var innerNode = vnode; 20539 while (innerNode.componentInstance) { 20540 innerNode = innerNode.componentInstance._vnode; 20541 if (isDef((i = innerNode.data)) && isDef((i = i.transition))) { 20542 for (i = 0; i < cbs.activate.length; ++i) { 20543 cbs.activate[i](emptyNode, innerNode); 20544 } 20545 insertedVnodeQueue.push(innerNode); 20546 break; 20547 } 20548 } 20549 // unlike a newly created component, 20550 // a reactivated keep-alive component doesn't insert itself 20551 insert(parentElm, vnode.elm, refElm); 20552 } 20553 function insert(parent, elm, ref) { 20554 if (isDef(parent)) { 20555 if (isDef(ref)) { 20556 if (nodeOps.parentNode(ref) === parent) { 20557 nodeOps.insertBefore(parent, elm, ref); 20558 } 20559 } 20560 else { 20561 nodeOps.appendChild(parent, elm); 20562 } 20563 } 20564 } 20565 function createChildren(vnode, children, insertedVnodeQueue) { 20566 if (isArray(children)) { 20567 if (true) { 20568 checkDuplicateKeys(children); 20569 } 20570 for (var i_1 = 0; i_1 < children.length; ++i_1) { 20571 createElm(children[i_1], insertedVnodeQueue, vnode.elm, null, true, children, i_1); 20572 } 20573 } 20574 else if (isPrimitive(vnode.text)) { 20575 nodeOps.appendChild(vnode.elm, nodeOps.createTextNode(String(vnode.text))); 20576 } 20577 } 20578 function isPatchable(vnode) { 20579 while (vnode.componentInstance) { 20580 vnode = vnode.componentInstance._vnode; 20581 } 20582 return isDef(vnode.tag); 20583 } 20584 function invokeCreateHooks(vnode, insertedVnodeQueue) { 20585 for (var i_2 = 0; i_2 < cbs.create.length; ++i_2) { 20586 cbs.create[i_2](emptyNode, vnode); 20587 } 20588 i = vnode.data.hook; // Reuse variable 20589 if (isDef(i)) { 20590 if (isDef(i.create)) 20591 i.create(emptyNode, vnode); 20592 if (isDef(i.insert)) 20593 insertedVnodeQueue.push(vnode); 20594 } 20595 } 20596 // set scope id attribute for scoped CSS. 20597 // this is implemented as a special case to avoid the overhead 20598 // of going through the normal attribute patching process. 20599 function setScope(vnode) { 20600 var i; 20601 if (isDef((i = vnode.fnScopeId))) { 20602 nodeOps.setStyleScope(vnode.elm, i); 20603 } 20604 else { 20605 var ancestor = vnode; 20606 while (ancestor) { 20607 if (isDef((i = ancestor.context)) && isDef((i = i.$options._scopeId))) { 20608 nodeOps.setStyleScope(vnode.elm, i); 20609 } 20610 ancestor = ancestor.parent; 20611 } 20612 } 20613 // for slot content they should also get the scopeId from the host instance. 20614 if (isDef((i = activeInstance)) && 20615 i !== vnode.context && 20616 i !== vnode.fnContext && 20617 isDef((i = i.$options._scopeId))) { 20618 nodeOps.setStyleScope(vnode.elm, i); 20619 } 20620 } 20621 function addVnodes(parentElm, refElm, vnodes, startIdx, endIdx, insertedVnodeQueue) { 20622 for (; startIdx <= endIdx; ++startIdx) { 20623 createElm(vnodes[startIdx], insertedVnodeQueue, parentElm, refElm, false, vnodes, startIdx); 20624 } 20625 } 20626 function invokeDestroyHook(vnode) { 20627 var i, j; 20628 var data = vnode.data; 20629 if (isDef(data)) { 20630 if (isDef((i = data.hook)) && isDef((i = i.destroy))) 20631 i(vnode); 20632 for (i = 0; i < cbs.destroy.length; ++i) 20633 cbs.destroy[i](vnode); 20634 } 20635 if (isDef((i = vnode.children))) { 20636 for (j = 0; j < vnode.children.length; ++j) { 20637 invokeDestroyHook(vnode.children[j]); 20638 } 20639 } 20640 } 20641 function removeVnodes(vnodes, startIdx, endIdx) { 20642 for (; startIdx <= endIdx; ++startIdx) { 20643 var ch = vnodes[startIdx]; 20644 if (isDef(ch)) { 20645 if (isDef(ch.tag)) { 20646 removeAndInvokeRemoveHook(ch); 20647 invokeDestroyHook(ch); 20648 } 20649 else { 20650 // Text node 20651 removeNode(ch.elm); 20652 } 20653 } 20654 } 20655 } 20656 function removeAndInvokeRemoveHook(vnode, rm) { 20657 if (isDef(rm) || isDef(vnode.data)) { 20658 var i_3; 20659 var listeners = cbs.remove.length + 1; 20660 if (isDef(rm)) { 20661 // we have a recursively passed down rm callback 20662 // increase the listeners count 20663 rm.listeners += listeners; 20664 } 20665 else { 20666 // directly removing 20667 rm = createRmCb(vnode.elm, listeners); 20668 } 20669 // recursively invoke hooks on child component root node 20670 if (isDef((i_3 = vnode.componentInstance)) && 20671 isDef((i_3 = i_3._vnode)) && 20672 isDef(i_3.data)) { 20673 removeAndInvokeRemoveHook(i_3, rm); 20674 } 20675 for (i_3 = 0; i_3 < cbs.remove.length; ++i_3) { 20676 cbs.remove[i_3](vnode, rm); 20677 } 20678 if (isDef((i_3 = vnode.data.hook)) && isDef((i_3 = i_3.remove))) { 20679 i_3(vnode, rm); 20680 } 20681 else { 20682 rm(); 20683 } 20684 } 20685 else { 20686 removeNode(vnode.elm); 20687 } 20688 } 20689 function updateChildren(parentElm, oldCh, newCh, insertedVnodeQueue, removeOnly) { 20690 var oldStartIdx = 0; 20691 var newStartIdx = 0; 20692 var oldEndIdx = oldCh.length - 1; 20693 var oldStartVnode = oldCh[0]; 20694 var oldEndVnode = oldCh[oldEndIdx]; 20695 var newEndIdx = newCh.length - 1; 20696 var newStartVnode = newCh[0]; 20697 var newEndVnode = newCh[newEndIdx]; 20698 var oldKeyToIdx, idxInOld, vnodeToMove, refElm; 20699 // removeOnly is a special flag used only by <transition-group> 20700 // to ensure removed elements stay in correct relative positions 20701 // during leaving transitions 20702 var canMove = !removeOnly; 20703 if (true) { 20704 checkDuplicateKeys(newCh); 20705 } 20706 while (oldStartIdx <= oldEndIdx && newStartIdx <= newEndIdx) { 20707 if (isUndef(oldStartVnode)) { 20708 oldStartVnode = oldCh[++oldStartIdx]; // Vnode has been moved left 20709 } 20710 else if (isUndef(oldEndVnode)) { 20711 oldEndVnode = oldCh[--oldEndIdx]; 20712 } 20713 else if (sameVnode(oldStartVnode, newStartVnode)) { 20714 patchVnode(oldStartVnode, newStartVnode, insertedVnodeQueue, newCh, newStartIdx); 20715 oldStartVnode = oldCh[++oldStartIdx]; 20716 newStartVnode = newCh[++newStartIdx]; 20717 } 20718 else if (sameVnode(oldEndVnode, newEndVnode)) { 20719 patchVnode(oldEndVnode, newEndVnode, insertedVnodeQueue, newCh, newEndIdx); 20720 oldEndVnode = oldCh[--oldEndIdx]; 20721 newEndVnode = newCh[--newEndIdx]; 20722 } 20723 else if (sameVnode(oldStartVnode, newEndVnode)) { 20724 // Vnode moved right 20725 patchVnode(oldStartVnode, newEndVnode, insertedVnodeQueue, newCh, newEndIdx); 20726 canMove && 20727 nodeOps.insertBefore(parentElm, oldStartVnode.elm, nodeOps.nextSibling(oldEndVnode.elm)); 20728 oldStartVnode = oldCh[++oldStartIdx]; 20729 newEndVnode = newCh[--newEndIdx]; 20730 } 20731 else if (sameVnode(oldEndVnode, newStartVnode)) { 20732 // Vnode moved left 20733 patchVnode(oldEndVnode, newStartVnode, insertedVnodeQueue, newCh, newStartIdx); 20734 canMove && 20735 nodeOps.insertBefore(parentElm, oldEndVnode.elm, oldStartVnode.elm); 20736 oldEndVnode = oldCh[--oldEndIdx]; 20737 newStartVnode = newCh[++newStartIdx]; 20738 } 20739 else { 20740 if (isUndef(oldKeyToIdx)) 20741 oldKeyToIdx = createKeyToOldIdx(oldCh, oldStartIdx, oldEndIdx); 20742 idxInOld = isDef(newStartVnode.key) 20743 ? oldKeyToIdx[newStartVnode.key] 20744 : findIdxInOld(newStartVnode, oldCh, oldStartIdx, oldEndIdx); 20745 if (isUndef(idxInOld)) { 20746 // New element 20747 createElm(newStartVnode, insertedVnodeQueue, parentElm, oldStartVnode.elm, false, newCh, newStartIdx); 20748 } 20749 else { 20750 vnodeToMove = oldCh[idxInOld]; 20751 if (sameVnode(vnodeToMove, newStartVnode)) { 20752 patchVnode(vnodeToMove, newStartVnode, insertedVnodeQueue, newCh, newStartIdx); 20753 oldCh[idxInOld] = undefined; 20754 canMove && 20755 nodeOps.insertBefore(parentElm, vnodeToMove.elm, oldStartVnode.elm); 20756 } 20757 else { 20758 // same key but different element. treat as new element 20759 createElm(newStartVnode, insertedVnodeQueue, parentElm, oldStartVnode.elm, false, newCh, newStartIdx); 20760 } 20761 } 20762 newStartVnode = newCh[++newStartIdx]; 20763 } 20764 } 20765 if (oldStartIdx > oldEndIdx) { 20766 refElm = isUndef(newCh[newEndIdx + 1]) ? null : newCh[newEndIdx + 1].elm; 20767 addVnodes(parentElm, refElm, newCh, newStartIdx, newEndIdx, insertedVnodeQueue); 20768 } 20769 else if (newStartIdx > newEndIdx) { 20770 removeVnodes(oldCh, oldStartIdx, oldEndIdx); 20771 } 20772 } 20773 function checkDuplicateKeys(children) { 20774 var seenKeys = {}; 20775 for (var i_4 = 0; i_4 < children.length; i_4++) { 20776 var vnode = children[i_4]; 20777 var key = vnode.key; 20778 if (isDef(key)) { 20779 if (seenKeys[key]) { 20780 warn$2("Duplicate keys detected: '".concat(key, "'. This may cause an update error."), vnode.context); 20781 } 20782 else { 20783 seenKeys[key] = true; 20784 } 20785 } 20786 } 20787 } 20788 function findIdxInOld(node, oldCh, start, end) { 20789 for (var i_5 = start; i_5 < end; i_5++) { 20790 var c = oldCh[i_5]; 20791 if (isDef(c) && sameVnode(node, c)) 20792 return i_5; 20793 } 20794 } 20795 function patchVnode(oldVnode, vnode, insertedVnodeQueue, ownerArray, index, removeOnly) { 20796 if (oldVnode === vnode) { 20797 return; 20798 } 20799 if (isDef(vnode.elm) && isDef(ownerArray)) { 20800 // clone reused vnode 20801 vnode = ownerArray[index] = cloneVNode(vnode); 20802 } 20803 var elm = (vnode.elm = oldVnode.elm); 20804 if (isTrue(oldVnode.isAsyncPlaceholder)) { 20805 if (isDef(vnode.asyncFactory.resolved)) { 20806 hydrate(oldVnode.elm, vnode, insertedVnodeQueue); 20807 } 20808 else { 20809 vnode.isAsyncPlaceholder = true; 20810 } 20811 return; 20812 } 20813 // reuse element for static trees. 20814 // note we only do this if the vnode is cloned - 20815 // if the new node is not cloned it means the render functions have been 20816 // reset by the hot-reload-api and we need to do a proper re-render. 20817 if (isTrue(vnode.isStatic) && 20818 isTrue(oldVnode.isStatic) && 20819 vnode.key === oldVnode.key && 20820 (isTrue(vnode.isCloned) || isTrue(vnode.isOnce))) { 20821 vnode.componentInstance = oldVnode.componentInstance; 20822 return; 20823 } 20824 var i; 20825 var data = vnode.data; 20826 if (isDef(data) && isDef((i = data.hook)) && isDef((i = i.prepatch))) { 20827 i(oldVnode, vnode); 20828 } 20829 var oldCh = oldVnode.children; 20830 var ch = vnode.children; 20831 if (isDef(data) && isPatchable(vnode)) { 20832 for (i = 0; i < cbs.update.length; ++i) 20833 cbs.update[i](oldVnode, vnode); 20834 if (isDef((i = data.hook)) && isDef((i = i.update))) 20835 i(oldVnode, vnode); 20836 } 20837 if (isUndef(vnode.text)) { 20838 if (isDef(oldCh) && isDef(ch)) { 20839 if (oldCh !== ch) 20840 updateChildren(elm, oldCh, ch, insertedVnodeQueue, removeOnly); 20841 } 20842 else if (isDef(ch)) { 20843 if (true) { 20844 checkDuplicateKeys(ch); 20845 } 20846 if (isDef(oldVnode.text)) 20847 nodeOps.setTextContent(elm, ''); 20848 addVnodes(elm, null, ch, 0, ch.length - 1, insertedVnodeQueue); 20849 } 20850 else if (isDef(oldCh)) { 20851 removeVnodes(oldCh, 0, oldCh.length - 1); 20852 } 20853 else if (isDef(oldVnode.text)) { 20854 nodeOps.setTextContent(elm, ''); 20855 } 20856 } 20857 else if (oldVnode.text !== vnode.text) { 20858 nodeOps.setTextContent(elm, vnode.text); 20859 } 20860 if (isDef(data)) { 20861 if (isDef((i = data.hook)) && isDef((i = i.postpatch))) 20862 i(oldVnode, vnode); 20863 } 20864 } 20865 function invokeInsertHook(vnode, queue, initial) { 20866 // delay insert hooks for component root nodes, invoke them after the 20867 // element is really inserted 20868 if (isTrue(initial) && isDef(vnode.parent)) { 20869 vnode.parent.data.pendingInsert = queue; 20870 } 20871 else { 20872 for (var i_6 = 0; i_6 < queue.length; ++i_6) { 20873 queue[i_6].data.hook.insert(queue[i_6]); 20874 } 20875 } 20876 } 20877 var hydrationBailed = false; 20878 // list of modules that can skip create hook during hydration because they 20879 // are already rendered on the client or has no need for initialization 20880 // Note: style is excluded because it relies on initial clone for future 20881 // deep updates (#7063). 20882 var isRenderedModule = makeMap('attrs,class,staticClass,staticStyle,key'); 20883 // Note: this is a browser-only function so we can assume elms are DOM nodes. 20884 function hydrate(elm, vnode, insertedVnodeQueue, inVPre) { 20885 var i; 20886 var tag = vnode.tag, data = vnode.data, children = vnode.children; 20887 inVPre = inVPre || (data && data.pre); 20888 vnode.elm = elm; 20889 if (isTrue(vnode.isComment) && isDef(vnode.asyncFactory)) { 20890 vnode.isAsyncPlaceholder = true; 20891 return true; 20892 } 20893 // assert node match 20894 if (true) { 20895 if (!assertNodeMatch(elm, vnode, inVPre)) { 20896 return false; 20897 } 20898 } 20899 if (isDef(data)) { 20900 if (isDef((i = data.hook)) && isDef((i = i.init))) 20901 i(vnode, true /* hydrating */); 20902 if (isDef((i = vnode.componentInstance))) { 20903 // child component. it should have hydrated its own tree. 20904 initComponent(vnode, insertedVnodeQueue); 20905 return true; 20906 } 20907 } 20908 if (isDef(tag)) { 20909 if (isDef(children)) { 20910 // empty element, allow client to pick up and populate children 20911 if (!elm.hasChildNodes()) { 20912 createChildren(vnode, children, insertedVnodeQueue); 20913 } 20914 else { 20915 // v-html and domProps: innerHTML 20916 if (isDef((i = data)) && 20917 isDef((i = i.domProps)) && 20918 isDef((i = i.innerHTML))) { 20919 if (i !== elm.innerHTML) { 20920 /* istanbul ignore if */ 20921 if ( true && 20922 typeof console !== 'undefined' && 20923 !hydrationBailed) { 20924 hydrationBailed = true; 20925 console.warn('Parent: ', elm); 20926 console.warn('server innerHTML: ', i); 20927 console.warn('client innerHTML: ', elm.innerHTML); 20928 } 20929 return false; 20930 } 20931 } 20932 else { 20933 // iterate and compare children lists 20934 var childrenMatch = true; 20935 var childNode = elm.firstChild; 20936 for (var i_7 = 0; i_7 < children.length; i_7++) { 20937 if (!childNode || 20938 !hydrate(childNode, children[i_7], insertedVnodeQueue, inVPre)) { 20939 childrenMatch = false; 20940 break; 20941 } 20942 childNode = childNode.nextSibling; 20943 } 20944 // if childNode is not null, it means the actual childNodes list is 20945 // longer than the virtual children list. 20946 if (!childrenMatch || childNode) { 20947 /* istanbul ignore if */ 20948 if ( true && 20949 typeof console !== 'undefined' && 20950 !hydrationBailed) { 20951 hydrationBailed = true; 20952 console.warn('Parent: ', elm); 20953 console.warn('Mismatching childNodes vs. VNodes: ', elm.childNodes, children); 20954 } 20955 return false; 20956 } 20957 } 20958 } 20959 } 20960 if (isDef(data)) { 20961 var fullInvoke = false; 20962 for (var key in data) { 20963 if (!isRenderedModule(key)) { 20964 fullInvoke = true; 20965 invokeCreateHooks(vnode, insertedVnodeQueue); 20966 break; 20967 } 20968 } 20969 if (!fullInvoke && data['class']) { 20970 // ensure collecting deps for deep class bindings for future updates 20971 traverse(data['class']); 20972 } 20973 } 20974 } 20975 else if (elm.data !== vnode.text) { 20976 elm.data = vnode.text; 20977 } 20978 return true; 20979 } 20980 function assertNodeMatch(node, vnode, inVPre) { 20981 if (isDef(vnode.tag)) { 20982 return (vnode.tag.indexOf('vue-component') === 0 || 20983 (!isUnknownElement(vnode, inVPre) && 20984 vnode.tag.toLowerCase() === 20985 (node.tagName && node.tagName.toLowerCase()))); 20986 } 20987 else { 20988 return node.nodeType === (vnode.isComment ? 8 : 3); 20989 } 20990 } 20991 return function patch(oldVnode, vnode, hydrating, removeOnly) { 20992 if (isUndef(vnode)) { 20993 if (isDef(oldVnode)) 20994 invokeDestroyHook(oldVnode); 20995 return; 20996 } 20997 var isInitialPatch = false; 20998 var insertedVnodeQueue = []; 20999 if (isUndef(oldVnode)) { 21000 // empty mount (likely as component), create new root element 21001 isInitialPatch = true; 21002 createElm(vnode, insertedVnodeQueue); 21003 } 21004 else { 21005 var isRealElement = isDef(oldVnode.nodeType); 21006 if (!isRealElement && sameVnode(oldVnode, vnode)) { 21007 // patch existing root node 21008 patchVnode(oldVnode, vnode, insertedVnodeQueue, null, null, removeOnly); 21009 } 21010 else { 21011 if (isRealElement) { 21012 // mounting to a real element 21013 // check if this is server-rendered content and if we can perform 21014 // a successful hydration. 21015 if (oldVnode.nodeType === 1 && oldVnode.hasAttribute(SSR_ATTR)) { 21016 oldVnode.removeAttribute(SSR_ATTR); 21017 hydrating = true; 21018 } 21019 if (isTrue(hydrating)) { 21020 if (hydrate(oldVnode, vnode, insertedVnodeQueue)) { 21021 invokeInsertHook(vnode, insertedVnodeQueue, true); 21022 return oldVnode; 21023 } 21024 else if (true) { 21025 warn$2('The client-side rendered virtual DOM tree is not matching ' + 21026 'server-rendered content. This is likely caused by incorrect ' + 21027 'HTML markup, for example nesting block-level elements inside ' + 21028 '<p>, or missing <tbody>. Bailing hydration and performing ' + 21029 'full client-side render.'); 21030 } 21031 } 21032 // either not server-rendered, or hydration failed. 21033 // create an empty node and replace it 21034 oldVnode = emptyNodeAt(oldVnode); 21035 } 21036 // replacing existing element 21037 var oldElm = oldVnode.elm; 21038 var parentElm = nodeOps.parentNode(oldElm); 21039 // create new node 21040 createElm(vnode, insertedVnodeQueue, 21041 // extremely rare edge case: do not insert if old element is in a 21042 // leaving transition. Only happens when combining transition + 21043 // keep-alive + HOCs. (#4590) 21044 oldElm._leaveCb ? null : parentElm, nodeOps.nextSibling(oldElm)); 21045 // update parent placeholder node element, recursively 21046 if (isDef(vnode.parent)) { 21047 var ancestor = vnode.parent; 21048 var patchable = isPatchable(vnode); 21049 while (ancestor) { 21050 for (var i_8 = 0; i_8 < cbs.destroy.length; ++i_8) { 21051 cbs.destroy[i_8](ancestor); 21052 } 21053 ancestor.elm = vnode.elm; 21054 if (patchable) { 21055 for (var i_9 = 0; i_9 < cbs.create.length; ++i_9) { 21056 cbs.create[i_9](emptyNode, ancestor); 21057 } 21058 // #6513 21059 // invoke insert hooks that may have been merged by create hooks. 21060 // e.g. for directives that uses the "inserted" hook. 21061 var insert_1 = ancestor.data.hook.insert; 21062 if (insert_1.merged) { 21063 // start at index 1 to avoid re-invoking component mounted hook 21064 // clone insert hooks to avoid being mutated during iteration. 21065 // e.g. for customed directives under transition group. 21066 var cloned = insert_1.fns.slice(1); 21067 for (var i_10 = 0; i_10 < cloned.length; i_10++) { 21068 cloned[i_10](); 21069 } 21070 } 21071 } 21072 else { 21073 registerRef(ancestor); 21074 } 21075 ancestor = ancestor.parent; 21076 } 21077 } 21078 // destroy old node 21079 if (isDef(parentElm)) { 21080 removeVnodes([oldVnode], 0, 0); 21081 } 21082 else if (isDef(oldVnode.tag)) { 21083 invokeDestroyHook(oldVnode); 21084 } 21085 } 21086 } 21087 invokeInsertHook(vnode, insertedVnodeQueue, isInitialPatch); 21088 return vnode.elm; 21089 }; 21090} 21091 21092var directives$1 = { 21093 create: updateDirectives, 21094 update: updateDirectives, 21095 destroy: function unbindDirectives(vnode) { 21096 // @ts-expect-error emptyNode is not VNodeWithData 21097 updateDirectives(vnode, emptyNode); 21098 } 21099}; 21100function updateDirectives(oldVnode, vnode) { 21101 if (oldVnode.data.directives || vnode.data.directives) { 21102 _update(oldVnode, vnode); 21103 } 21104} 21105function _update(oldVnode, vnode) { 21106 var isCreate = oldVnode === emptyNode; 21107 var isDestroy = vnode === emptyNode; 21108 var oldDirs = normalizeDirectives(oldVnode.data.directives, oldVnode.context); 21109 var newDirs = normalizeDirectives(vnode.data.directives, vnode.context); 21110 var dirsWithInsert = []; 21111 var dirsWithPostpatch = []; 21112 var key, oldDir, dir; 21113 for (key in newDirs) { 21114 oldDir = oldDirs[key]; 21115 dir = newDirs[key]; 21116 if (!oldDir) { 21117 // new directive, bind 21118 callHook(dir, 'bind', vnode, oldVnode); 21119 if (dir.def && dir.def.inserted) { 21120 dirsWithInsert.push(dir); 21121 } 21122 } 21123 else { 21124 // existing directive, update 21125 dir.oldValue = oldDir.value; 21126 dir.oldArg = oldDir.arg; 21127 callHook(dir, 'update', vnode, oldVnode); 21128 if (dir.def && dir.def.componentUpdated) { 21129 dirsWithPostpatch.push(dir); 21130 } 21131 } 21132 } 21133 if (dirsWithInsert.length) { 21134 var callInsert = function () { 21135 for (var i = 0; i < dirsWithInsert.length; i++) { 21136 callHook(dirsWithInsert[i], 'inserted', vnode, oldVnode); 21137 } 21138 }; 21139 if (isCreate) { 21140 mergeVNodeHook(vnode, 'insert', callInsert); 21141 } 21142 else { 21143 callInsert(); 21144 } 21145 } 21146 if (dirsWithPostpatch.length) { 21147 mergeVNodeHook(vnode, 'postpatch', function () { 21148 for (var i = 0; i < dirsWithPostpatch.length; i++) { 21149 callHook(dirsWithPostpatch[i], 'componentUpdated', vnode, oldVnode); 21150 } 21151 }); 21152 } 21153 if (!isCreate) { 21154 for (key in oldDirs) { 21155 if (!newDirs[key]) { 21156 // no longer present, unbind 21157 callHook(oldDirs[key], 'unbind', oldVnode, oldVnode, isDestroy); 21158 } 21159 } 21160 } 21161} 21162var emptyModifiers = Object.create(null); 21163function normalizeDirectives(dirs, vm) { 21164 var res = Object.create(null); 21165 if (!dirs) { 21166 // $flow-disable-line 21167 return res; 21168 } 21169 var i, dir; 21170 for (i = 0; i < dirs.length; i++) { 21171 dir = dirs[i]; 21172 if (!dir.modifiers) { 21173 // $flow-disable-line 21174 dir.modifiers = emptyModifiers; 21175 } 21176 res[getRawDirName(dir)] = dir; 21177 if (vm._setupState && vm._setupState.__sfc) { 21178 var setupDef = dir.def || resolveAsset(vm, '_setupState', 'v-' + dir.name); 21179 if (typeof setupDef === 'function') { 21180 dir.def = { 21181 bind: setupDef, 21182 update: setupDef, 21183 }; 21184 } 21185 else { 21186 dir.def = setupDef; 21187 } 21188 } 21189 dir.def = dir.def || resolveAsset(vm.$options, 'directives', dir.name, true); 21190 } 21191 // $flow-disable-line 21192 return res; 21193} 21194function getRawDirName(dir) { 21195 return (dir.rawName || "".concat(dir.name, ".").concat(Object.keys(dir.modifiers || {}).join('.'))); 21196} 21197function callHook(dir, hook, vnode, oldVnode, isDestroy) { 21198 var fn = dir.def && dir.def[hook]; 21199 if (fn) { 21200 try { 21201 fn(vnode.elm, dir, vnode, oldVnode, isDestroy); 21202 } 21203 catch (e) { 21204 handleError(e, vnode.context, "directive ".concat(dir.name, " ").concat(hook, " hook")); 21205 } 21206 } 21207} 21208 21209var baseModules = [ref, directives$1]; 21210 21211function updateAttrs(oldVnode, vnode) { 21212 var opts = vnode.componentOptions; 21213 if (isDef(opts) && opts.Ctor.options.inheritAttrs === false) { 21214 return; 21215 } 21216 if (isUndef(oldVnode.data.attrs) && isUndef(vnode.data.attrs)) { 21217 return; 21218 } 21219 var key, cur, old; 21220 var elm = vnode.elm; 21221 var oldAttrs = oldVnode.data.attrs || {}; 21222 var attrs = vnode.data.attrs || {}; 21223 // clone observed objects, as the user probably wants to mutate it 21224 if (isDef(attrs.__ob__) || isTrue(attrs._v_attr_proxy)) { 21225 attrs = vnode.data.attrs = extend({}, attrs); 21226 } 21227 for (key in attrs) { 21228 cur = attrs[key]; 21229 old = oldAttrs[key]; 21230 if (old !== cur) { 21231 setAttr(elm, key, cur, vnode.data.pre); 21232 } 21233 } 21234 // #4391: in IE9, setting type can reset value for input[type=radio] 21235 // #6666: IE/Edge forces progress value down to 1 before setting a max 21236 /* istanbul ignore if */ 21237 if ((isIE || isEdge) && attrs.value !== oldAttrs.value) { 21238 setAttr(elm, 'value', attrs.value); 21239 } 21240 for (key in oldAttrs) { 21241 if (isUndef(attrs[key])) { 21242 if (isXlink(key)) { 21243 elm.removeAttributeNS(xlinkNS, getXlinkProp(key)); 21244 } 21245 else if (!isEnumeratedAttr(key)) { 21246 elm.removeAttribute(key); 21247 } 21248 } 21249 } 21250} 21251function setAttr(el, key, value, isInPre) { 21252 if (isInPre || el.tagName.indexOf('-') > -1) { 21253 baseSetAttr(el, key, value); 21254 } 21255 else if (isBooleanAttr(key)) { 21256 // set attribute for blank value 21257 // e.g. <option disabled>Select one</option> 21258 if (isFalsyAttrValue(value)) { 21259 el.removeAttribute(key); 21260 } 21261 else { 21262 // technically allowfullscreen is a boolean attribute for <iframe>, 21263 // but Flash expects a value of "true" when used on <embed> tag 21264 value = key === 'allowfullscreen' && el.tagName === 'EMBED' ? 'true' : key; 21265 el.setAttribute(key, value); 21266 } 21267 } 21268 else if (isEnumeratedAttr(key)) { 21269 el.setAttribute(key, convertEnumeratedValue(key, value)); 21270 } 21271 else if (isXlink(key)) { 21272 if (isFalsyAttrValue(value)) { 21273 el.removeAttributeNS(xlinkNS, getXlinkProp(key)); 21274 } 21275 else { 21276 el.setAttributeNS(xlinkNS, key, value); 21277 } 21278 } 21279 else { 21280 baseSetAttr(el, key, value); 21281 } 21282} 21283function baseSetAttr(el, key, value) { 21284 if (isFalsyAttrValue(value)) { 21285 el.removeAttribute(key); 21286 } 21287 else { 21288 // #7138: IE10 & 11 fires input event when setting placeholder on 21289 // <textarea>... block the first input event and remove the blocker 21290 // immediately. 21291 /* istanbul ignore if */ 21292 if (isIE && 21293 !isIE9 && 21294 el.tagName === 'TEXTAREA' && 21295 key === 'placeholder' && 21296 value !== '' && 21297 !el.__ieph) { 21298 var blocker_1 = function (e) { 21299 e.stopImmediatePropagation(); 21300 el.removeEventListener('input', blocker_1); 21301 }; 21302 el.addEventListener('input', blocker_1); 21303 // $flow-disable-line 21304 el.__ieph = true; /* IE placeholder patched */ 21305 } 21306 el.setAttribute(key, value); 21307 } 21308} 21309var attrs = { 21310 create: updateAttrs, 21311 update: updateAttrs 21312}; 21313 21314function updateClass(oldVnode, vnode) { 21315 var el = vnode.elm; 21316 var data = vnode.data; 21317 var oldData = oldVnode.data; 21318 if (isUndef(data.staticClass) && 21319 isUndef(data.class) && 21320 (isUndef(oldData) || 21321 (isUndef(oldData.staticClass) && isUndef(oldData.class)))) { 21322 return; 21323 } 21324 var cls = genClassForVnode(vnode); 21325 // handle transition classes 21326 var transitionClass = el._transitionClasses; 21327 if (isDef(transitionClass)) { 21328 cls = concat(cls, stringifyClass(transitionClass)); 21329 } 21330 // set the class 21331 if (cls !== el._prevClass) { 21332 el.setAttribute('class', cls); 21333 el._prevClass = cls; 21334 } 21335} 21336var klass$1 = { 21337 create: updateClass, 21338 update: updateClass 21339}; 21340 21341var validDivisionCharRE = /[\w).+\-_$\]]/; 21342function parseFilters(exp) { 21343 var inSingle = false; 21344 var inDouble = false; 21345 var inTemplateString = false; 21346 var inRegex = false; 21347 var curly = 0; 21348 var square = 0; 21349 var paren = 0; 21350 var lastFilterIndex = 0; 21351 var c, prev, i, expression, filters; 21352 for (i = 0; i < exp.length; i++) { 21353 prev = c; 21354 c = exp.charCodeAt(i); 21355 if (inSingle) { 21356 if (c === 0x27 && prev !== 0x5c) 21357 inSingle = false; 21358 } 21359 else if (inDouble) { 21360 if (c === 0x22 && prev !== 0x5c) 21361 inDouble = false; 21362 } 21363 else if (inTemplateString) { 21364 if (c === 0x60 && prev !== 0x5c) 21365 inTemplateString = false; 21366 } 21367 else if (inRegex) { 21368 if (c === 0x2f && prev !== 0x5c) 21369 inRegex = false; 21370 } 21371 else if (c === 0x7c && // pipe 21372 exp.charCodeAt(i + 1) !== 0x7c && 21373 exp.charCodeAt(i - 1) !== 0x7c && 21374 !curly && 21375 !square && 21376 !paren) { 21377 if (expression === undefined) { 21378 // first filter, end of expression 21379 lastFilterIndex = i + 1; 21380 expression = exp.slice(0, i).trim(); 21381 } 21382 else { 21383 pushFilter(); 21384 } 21385 } 21386 else { 21387 switch (c) { 21388 case 0x22: 21389 inDouble = true; 21390 break; // " 21391 case 0x27: 21392 inSingle = true; 21393 break; // ' 21394 case 0x60: 21395 inTemplateString = true; 21396 break; // ` 21397 case 0x28: 21398 paren++; 21399 break; // ( 21400 case 0x29: 21401 paren--; 21402 break; // ) 21403 case 0x5b: 21404 square++; 21405 break; // [ 21406 case 0x5d: 21407 square--; 21408 break; // ] 21409 case 0x7b: 21410 curly++; 21411 break; // { 21412 case 0x7d: 21413 curly--; 21414 break; // } 21415 } 21416 if (c === 0x2f) { 21417 // / 21418 var j = i - 1; 21419 var p 21420 // find first non-whitespace prev char 21421 = void 0; 21422 // find first non-whitespace prev char 21423 for (; j >= 0; j--) { 21424 p = exp.charAt(j); 21425 if (p !== ' ') 21426 break; 21427 } 21428 if (!p || !validDivisionCharRE.test(p)) { 21429 inRegex = true; 21430 } 21431 } 21432 } 21433 } 21434 if (expression === undefined) { 21435 expression = exp.slice(0, i).trim(); 21436 } 21437 else if (lastFilterIndex !== 0) { 21438 pushFilter(); 21439 } 21440 function pushFilter() { 21441 (filters || (filters = [])).push(exp.slice(lastFilterIndex, i).trim()); 21442 lastFilterIndex = i + 1; 21443 } 21444 if (filters) { 21445 for (i = 0; i < filters.length; i++) { 21446 expression = wrapFilter(expression, filters[i]); 21447 } 21448 } 21449 return expression; 21450} 21451function wrapFilter(exp, filter) { 21452 var i = filter.indexOf('('); 21453 if (i < 0) { 21454 // _f: resolveFilter 21455 return "_f(\"".concat(filter, "\")(").concat(exp, ")"); 21456 } 21457 else { 21458 var name_1 = filter.slice(0, i); 21459 var args = filter.slice(i + 1); 21460 return "_f(\"".concat(name_1, "\")(").concat(exp).concat(args !== ')' ? ',' + args : args); 21461 } 21462} 21463 21464/* eslint-disable no-unused-vars */ 21465function baseWarn(msg, range) { 21466 console.error("[Vue compiler]: ".concat(msg)); 21467} 21468/* eslint-enable no-unused-vars */ 21469function pluckModuleFunction(modules, key) { 21470 return modules ? modules.map(function (m) { return m[key]; }).filter(function (_) { return _; }) : []; 21471} 21472function addProp(el, name, value, range, dynamic) { 21473 (el.props || (el.props = [])).push(rangeSetItem({ name: name, value: value, dynamic: dynamic }, range)); 21474 el.plain = false; 21475} 21476function addAttr(el, name, value, range, dynamic) { 21477 var attrs = dynamic 21478 ? el.dynamicAttrs || (el.dynamicAttrs = []) 21479 : el.attrs || (el.attrs = []); 21480 attrs.push(rangeSetItem({ name: name, value: value, dynamic: dynamic }, range)); 21481 el.plain = false; 21482} 21483// add a raw attr (use this in preTransforms) 21484function addRawAttr(el, name, value, range) { 21485 el.attrsMap[name] = value; 21486 el.attrsList.push(rangeSetItem({ name: name, value: value }, range)); 21487} 21488function addDirective(el, name, rawName, value, arg, isDynamicArg, modifiers, range) { 21489 (el.directives || (el.directives = [])).push(rangeSetItem({ 21490 name: name, 21491 rawName: rawName, 21492 value: value, 21493 arg: arg, 21494 isDynamicArg: isDynamicArg, 21495 modifiers: modifiers 21496 }, range)); 21497 el.plain = false; 21498} 21499function prependModifierMarker(symbol, name, dynamic) { 21500 return dynamic ? "_p(".concat(name, ",\"").concat(symbol, "\")") : symbol + name; // mark the event as captured 21501} 21502function addHandler(el, name, value, modifiers, important, warn, range, dynamic) { 21503 modifiers = modifiers || emptyObject; 21504 // warn prevent and passive modifier 21505 /* istanbul ignore if */ 21506 if ( true && warn && modifiers.prevent && modifiers.passive) { 21507 warn("passive and prevent can't be used together. " + 21508 "Passive handler can't prevent default event.", range); 21509 } 21510 // normalize click.right and click.middle since they don't actually fire 21511 // this is technically browser-specific, but at least for now browsers are 21512 // the only target envs that have right/middle clicks. 21513 if (modifiers.right) { 21514 if (dynamic) { 21515 name = "(".concat(name, ")==='click'?'contextmenu':(").concat(name, ")"); 21516 } 21517 else if (name === 'click') { 21518 name = 'contextmenu'; 21519 delete modifiers.right; 21520 } 21521 } 21522 else if (modifiers.middle) { 21523 if (dynamic) { 21524 name = "(".concat(name, ")==='click'?'mouseup':(").concat(name, ")"); 21525 } 21526 else if (name === 'click') { 21527 name = 'mouseup'; 21528 } 21529 } 21530 // check capture modifier 21531 if (modifiers.capture) { 21532 delete modifiers.capture; 21533 name = prependModifierMarker('!', name, dynamic); 21534 } 21535 if (modifiers.once) { 21536 delete modifiers.once; 21537 name = prependModifierMarker('~', name, dynamic); 21538 } 21539 /* istanbul ignore if */ 21540 if (modifiers.passive) { 21541 delete modifiers.passive; 21542 name = prependModifierMarker('&', name, dynamic); 21543 } 21544 var events; 21545 if (modifiers.native) { 21546 delete modifiers.native; 21547 events = el.nativeEvents || (el.nativeEvents = {}); 21548 } 21549 else { 21550 events = el.events || (el.events = {}); 21551 } 21552 var newHandler = rangeSetItem({ value: value.trim(), dynamic: dynamic }, range); 21553 if (modifiers !== emptyObject) { 21554 newHandler.modifiers = modifiers; 21555 } 21556 var handlers = events[name]; 21557 /* istanbul ignore if */ 21558 if (Array.isArray(handlers)) { 21559 important ? handlers.unshift(newHandler) : handlers.push(newHandler); 21560 } 21561 else if (handlers) { 21562 events[name] = important ? [newHandler, handlers] : [handlers, newHandler]; 21563 } 21564 else { 21565 events[name] = newHandler; 21566 } 21567 el.plain = false; 21568} 21569function getRawBindingAttr(el, name) { 21570 return (el.rawAttrsMap[':' + name] || 21571 el.rawAttrsMap['v-bind:' + name] || 21572 el.rawAttrsMap[name]); 21573} 21574function getBindingAttr(el, name, getStatic) { 21575 var dynamicValue = getAndRemoveAttr(el, ':' + name) || getAndRemoveAttr(el, 'v-bind:' + name); 21576 if (dynamicValue != null) { 21577 return parseFilters(dynamicValue); 21578 } 21579 else if (getStatic !== false) { 21580 var staticValue = getAndRemoveAttr(el, name); 21581 if (staticValue != null) { 21582 return JSON.stringify(staticValue); 21583 } 21584 } 21585} 21586// note: this only removes the attr from the Array (attrsList) so that it 21587// doesn't get processed by processAttrs. 21588// By default it does NOT remove it from the map (attrsMap) because the map is 21589// needed during codegen. 21590function getAndRemoveAttr(el, name, removeFromMap) { 21591 var val; 21592 if ((val = el.attrsMap[name]) != null) { 21593 var list = el.attrsList; 21594 for (var i = 0, l = list.length; i < l; i++) { 21595 if (list[i].name === name) { 21596 list.splice(i, 1); 21597 break; 21598 } 21599 } 21600 } 21601 if (removeFromMap) { 21602 delete el.attrsMap[name]; 21603 } 21604 return val; 21605} 21606function getAndRemoveAttrByRegex(el, name) { 21607 var list = el.attrsList; 21608 for (var i = 0, l = list.length; i < l; i++) { 21609 var attr = list[i]; 21610 if (name.test(attr.name)) { 21611 list.splice(i, 1); 21612 return attr; 21613 } 21614 } 21615} 21616function rangeSetItem(item, range) { 21617 if (range) { 21618 if (range.start != null) { 21619 item.start = range.start; 21620 } 21621 if (range.end != null) { 21622 item.end = range.end; 21623 } 21624 } 21625 return item; 21626} 21627 21628/** 21629 * Cross-platform code generation for component v-model 21630 */ 21631function genComponentModel(el, value, modifiers) { 21632 var _a = modifiers || {}, number = _a.number, trim = _a.trim; 21633 var baseValueExpression = '$$v'; 21634 var valueExpression = baseValueExpression; 21635 if (trim) { 21636 valueExpression = 21637 "(typeof ".concat(baseValueExpression, " === 'string'") + 21638 "? ".concat(baseValueExpression, ".trim()") + 21639 ": ".concat(baseValueExpression, ")"); 21640 } 21641 if (number) { 21642 valueExpression = "_n(".concat(valueExpression, ")"); 21643 } 21644 var assignment = genAssignmentCode(value, valueExpression); 21645 el.model = { 21646 value: "(".concat(value, ")"), 21647 expression: JSON.stringify(value), 21648 callback: "function (".concat(baseValueExpression, ") {").concat(assignment, "}") 21649 }; 21650} 21651/** 21652 * Cross-platform codegen helper for generating v-model value assignment code. 21653 */ 21654function genAssignmentCode(value, assignment) { 21655 var res = parseModel(value); 21656 if (res.key === null) { 21657 return "".concat(value, "=").concat(assignment); 21658 } 21659 else { 21660 return "$set(".concat(res.exp, ", ").concat(res.key, ", ").concat(assignment, ")"); 21661 } 21662} 21663/** 21664 * Parse a v-model expression into a base path and a final key segment. 21665 * Handles both dot-path and possible square brackets. 21666 * 21667 * Possible cases: 21668 * 21669 * - test 21670 * - test[key] 21671 * - test[test1[key]] 21672 * - test["a"][key] 21673 * - xxx.test[a[a].test1[key]] 21674 * - test.xxx.a["asa"][test1[key]] 21675 * 21676 */ 21677var len, str, chr, index, expressionPos, expressionEndPos; 21678function parseModel(val) { 21679 // Fix https://github.com/vuejs/vue/pull/7730 21680 // allow v-model="obj.val " (trailing whitespace) 21681 val = val.trim(); 21682 len = val.length; 21683 if (val.indexOf('[') < 0 || val.lastIndexOf(']') < len - 1) { 21684 index = val.lastIndexOf('.'); 21685 if (index > -1) { 21686 return { 21687 exp: val.slice(0, index), 21688 key: '"' + val.slice(index + 1) + '"' 21689 }; 21690 } 21691 else { 21692 return { 21693 exp: val, 21694 key: null 21695 }; 21696 } 21697 } 21698 str = val; 21699 index = expressionPos = expressionEndPos = 0; 21700 while (!eof()) { 21701 chr = next(); 21702 /* istanbul ignore if */ 21703 if (isStringStart(chr)) { 21704 parseString(chr); 21705 } 21706 else if (chr === 0x5b) { 21707 parseBracket(chr); 21708 } 21709 } 21710 return { 21711 exp: val.slice(0, expressionPos), 21712 key: val.slice(expressionPos + 1, expressionEndPos) 21713 }; 21714} 21715function next() { 21716 return str.charCodeAt(++index); 21717} 21718function eof() { 21719 return index >= len; 21720} 21721function isStringStart(chr) { 21722 return chr === 0x22 || chr === 0x27; 21723} 21724function parseBracket(chr) { 21725 var inBracket = 1; 21726 expressionPos = index; 21727 while (!eof()) { 21728 chr = next(); 21729 if (isStringStart(chr)) { 21730 parseString(chr); 21731 continue; 21732 } 21733 if (chr === 0x5b) 21734 inBracket++; 21735 if (chr === 0x5d) 21736 inBracket--; 21737 if (inBracket === 0) { 21738 expressionEndPos = index; 21739 break; 21740 } 21741 } 21742} 21743function parseString(chr) { 21744 var stringQuote = chr; 21745 while (!eof()) { 21746 chr = next(); 21747 if (chr === stringQuote) { 21748 break; 21749 } 21750 } 21751} 21752 21753var warn$1; 21754// in some cases, the event used has to be determined at runtime 21755// so we used some reserved tokens during compile. 21756var RANGE_TOKEN = '__r'; 21757var CHECKBOX_RADIO_TOKEN = '__c'; 21758function model$1(el, dir, _warn) { 21759 warn$1 = _warn; 21760 var value = dir.value; 21761 var modifiers = dir.modifiers; 21762 var tag = el.tag; 21763 var type = el.attrsMap.type; 21764 if (true) { 21765 // inputs with type="file" are read only and setting the input's 21766 // value will throw an error. 21767 if (tag === 'input' && type === 'file') { 21768 warn$1("<".concat(el.tag, " v-model=\"").concat(value, "\" type=\"file\">:\n") + 21769 "File inputs are read only. Use a v-on:change listener instead.", el.rawAttrsMap['v-model']); 21770 } 21771 } 21772 if (el.component) { 21773 genComponentModel(el, value, modifiers); 21774 // component v-model doesn't need extra runtime 21775 return false; 21776 } 21777 else if (tag === 'select') { 21778 genSelect(el, value, modifiers); 21779 } 21780 else if (tag === 'input' && type === 'checkbox') { 21781 genCheckboxModel(el, value, modifiers); 21782 } 21783 else if (tag === 'input' && type === 'radio') { 21784 genRadioModel(el, value, modifiers); 21785 } 21786 else if (tag === 'input' || tag === 'textarea') { 21787 genDefaultModel(el, value, modifiers); 21788 } 21789 else if (!config.isReservedTag(tag)) { 21790 genComponentModel(el, value, modifiers); 21791 // component v-model doesn't need extra runtime 21792 return false; 21793 } 21794 else if (true) { 21795 warn$1("<".concat(el.tag, " v-model=\"").concat(value, "\">: ") + 21796 "v-model is not supported on this element type. " + 21797 "If you are working with contenteditable, it's recommended to " + 21798 'wrap a library dedicated for that purpose inside a custom component.', el.rawAttrsMap['v-model']); 21799 } 21800 // ensure runtime directive metadata 21801 return true; 21802} 21803function genCheckboxModel(el, value, modifiers) { 21804 var number = modifiers && modifiers.number; 21805 var valueBinding = getBindingAttr(el, 'value') || 'null'; 21806 var trueValueBinding = getBindingAttr(el, 'true-value') || 'true'; 21807 var falseValueBinding = getBindingAttr(el, 'false-value') || 'false'; 21808 addProp(el, 'checked', "Array.isArray(".concat(value, ")") + 21809 "?_i(".concat(value, ",").concat(valueBinding, ")>-1") + 21810 (trueValueBinding === 'true' 21811 ? ":(".concat(value, ")") 21812 : ":_q(".concat(value, ",").concat(trueValueBinding, ")"))); 21813 addHandler(el, 'change', "var $$a=".concat(value, ",") + 21814 '$$el=$event.target,' + 21815 "$$c=$$el.checked?(".concat(trueValueBinding, "):(").concat(falseValueBinding, ");") + 21816 'if(Array.isArray($$a)){' + 21817 "var $$v=".concat(number ? '_n(' + valueBinding + ')' : valueBinding, ",") + 21818 '$$i=_i($$a,$$v);' + 21819 "if($$el.checked){$$i<0&&(".concat(genAssignmentCode(value, '$$a.concat([$$v])'), ")}") + 21820 "else{$$i>-1&&(".concat(genAssignmentCode(value, '$$a.slice(0,$$i).concat($$a.slice($$i+1))'), ")}") + 21821 "}else{".concat(genAssignmentCode(value, '$$c'), "}"), null, true); 21822} 21823function genRadioModel(el, value, modifiers) { 21824 var number = modifiers && modifiers.number; 21825 var valueBinding = getBindingAttr(el, 'value') || 'null'; 21826 valueBinding = number ? "_n(".concat(valueBinding, ")") : valueBinding; 21827 addProp(el, 'checked', "_q(".concat(value, ",").concat(valueBinding, ")")); 21828 addHandler(el, 'change', genAssignmentCode(value, valueBinding), null, true); 21829} 21830function genSelect(el, value, modifiers) { 21831 var number = modifiers && modifiers.number; 21832 var selectedVal = "Array.prototype.filter" + 21833 ".call($event.target.options,function(o){return o.selected})" + 21834 ".map(function(o){var val = \"_value\" in o ? o._value : o.value;" + 21835 "return ".concat(number ? '_n(val)' : 'val', "})"); 21836 var assignment = '$event.target.multiple ? $$selectedVal : $$selectedVal[0]'; 21837 var code = "var $$selectedVal = ".concat(selectedVal, ";"); 21838 code = "".concat(code, " ").concat(genAssignmentCode(value, assignment)); 21839 addHandler(el, 'change', code, null, true); 21840} 21841function genDefaultModel(el, value, modifiers) { 21842 var type = el.attrsMap.type; 21843 // warn if v-bind:value conflicts with v-model 21844 // except for inputs with v-bind:type 21845 if (true) { 21846 var value_1 = el.attrsMap['v-bind:value'] || el.attrsMap[':value']; 21847 var typeBinding = el.attrsMap['v-bind:type'] || el.attrsMap[':type']; 21848 if (value_1 && !typeBinding) { 21849 var binding = el.attrsMap['v-bind:value'] ? 'v-bind:value' : ':value'; 21850 warn$1("".concat(binding, "=\"").concat(value_1, "\" conflicts with v-model on the same element ") + 21851 'because the latter already expands to a value binding internally', el.rawAttrsMap[binding]); 21852 } 21853 } 21854 var _a = modifiers || {}, lazy = _a.lazy, number = _a.number, trim = _a.trim; 21855 var needCompositionGuard = !lazy && type !== 'range'; 21856 var event = lazy ? 'change' : type === 'range' ? RANGE_TOKEN : 'input'; 21857 var valueExpression = '$event.target.value'; 21858 if (trim) { 21859 valueExpression = "$event.target.value.trim()"; 21860 } 21861 if (number) { 21862 valueExpression = "_n(".concat(valueExpression, ")"); 21863 } 21864 var code = genAssignmentCode(value, valueExpression); 21865 if (needCompositionGuard) { 21866 code = "if($event.target.composing)return;".concat(code); 21867 } 21868 addProp(el, 'value', "(".concat(value, ")")); 21869 addHandler(el, event, code, null, true); 21870 if (trim || number) { 21871 addHandler(el, 'blur', '$forceUpdate()'); 21872 } 21873} 21874 21875// normalize v-model event tokens that can only be determined at runtime. 21876// it's important to place the event as the first in the array because 21877// the whole point is ensuring the v-model callback gets called before 21878// user-attached handlers. 21879function normalizeEvents(on) { 21880 /* istanbul ignore if */ 21881 if (isDef(on[RANGE_TOKEN])) { 21882 // IE input[type=range] only supports `change` event 21883 var event_1 = isIE ? 'change' : 'input'; 21884 on[event_1] = [].concat(on[RANGE_TOKEN], on[event_1] || []); 21885 delete on[RANGE_TOKEN]; 21886 } 21887 // This was originally intended to fix #4521 but no longer necessary 21888 // after 2.5. Keeping it for backwards compat with generated code from < 2.4 21889 /* istanbul ignore if */ 21890 if (isDef(on[CHECKBOX_RADIO_TOKEN])) { 21891 on.change = [].concat(on[CHECKBOX_RADIO_TOKEN], on.change || []); 21892 delete on[CHECKBOX_RADIO_TOKEN]; 21893 } 21894} 21895var target; 21896function createOnceHandler(event, handler, capture) { 21897 var _target = target; // save current target element in closure 21898 return function onceHandler() { 21899 var res = handler.apply(null, arguments); 21900 if (res !== null) { 21901 remove(event, onceHandler, capture, _target); 21902 } 21903 }; 21904} 21905// #9446: Firefox <= 53 (in particular, ESR 52) has incorrect Event.timeStamp 21906// implementation and does not fire microtasks in between event propagation, so 21907// safe to exclude. 21908var useMicrotaskFix = isUsingMicroTask && !(isFF && Number(isFF[1]) <= 53); 21909function add(name, handler, capture, passive) { 21910 // async edge case #6566: inner click event triggers patch, event handler 21911 // attached to outer element during patch, and triggered again. This 21912 // happens because browsers fire microtask ticks between event propagation. 21913 // the solution is simple: we save the timestamp when a handler is attached, 21914 // and the handler would only fire if the event passed to it was fired 21915 // AFTER it was attached. 21916 if (useMicrotaskFix) { 21917 var attachedTimestamp_1 = currentFlushTimestamp; 21918 var original_1 = handler; 21919 //@ts-expect-error 21920 handler = original_1._wrapper = function (e) { 21921 if ( 21922 // no bubbling, should always fire. 21923 // this is just a safety net in case event.timeStamp is unreliable in 21924 // certain weird environments... 21925 e.target === e.currentTarget || 21926 // event is fired after handler attachment 21927 e.timeStamp >= attachedTimestamp_1 || 21928 // bail for environments that have buggy event.timeStamp implementations 21929 // #9462 iOS 9 bug: event.timeStamp is 0 after history.pushState 21930 // #9681 QtWebEngine event.timeStamp is negative value 21931 e.timeStamp <= 0 || 21932 // #9448 bail if event is fired in another document in a multi-page 21933 // electron/nw.js app, since event.timeStamp will be using a different 21934 // starting reference 21935 e.target.ownerDocument !== document) { 21936 return original_1.apply(this, arguments); 21937 } 21938 }; 21939 } 21940 target.addEventListener(name, handler, supportsPassive ? { capture: capture, passive: passive } : capture); 21941} 21942function remove(name, handler, capture, _target) { 21943 (_target || target).removeEventListener(name, 21944 //@ts-expect-error 21945 handler._wrapper || handler, capture); 21946} 21947function updateDOMListeners(oldVnode, vnode) { 21948 if (isUndef(oldVnode.data.on) && isUndef(vnode.data.on)) { 21949 return; 21950 } 21951 var on = vnode.data.on || {}; 21952 var oldOn = oldVnode.data.on || {}; 21953 // vnode is empty when removing all listeners, 21954 // and use old vnode dom element 21955 target = vnode.elm || oldVnode.elm; 21956 normalizeEvents(on); 21957 updateListeners(on, oldOn, add, remove, createOnceHandler, vnode.context); 21958 target = undefined; 21959} 21960var events = { 21961 create: updateDOMListeners, 21962 update: updateDOMListeners, 21963 // @ts-expect-error emptyNode has actually data 21964 destroy: function (vnode) { return updateDOMListeners(vnode, emptyNode); } 21965}; 21966 21967var svgContainer; 21968function updateDOMProps(oldVnode, vnode) { 21969 if (isUndef(oldVnode.data.domProps) && isUndef(vnode.data.domProps)) { 21970 return; 21971 } 21972 var key, cur; 21973 var elm = vnode.elm; 21974 var oldProps = oldVnode.data.domProps || {}; 21975 var props = vnode.data.domProps || {}; 21976 // clone observed objects, as the user probably wants to mutate it 21977 if (isDef(props.__ob__) || isTrue(props._v_attr_proxy)) { 21978 props = vnode.data.domProps = extend({}, props); 21979 } 21980 for (key in oldProps) { 21981 if (!(key in props)) { 21982 elm[key] = ''; 21983 } 21984 } 21985 for (key in props) { 21986 cur = props[key]; 21987 // ignore children if the node has textContent or innerHTML, 21988 // as these will throw away existing DOM nodes and cause removal errors 21989 // on subsequent patches (#3360) 21990 if (key === 'textContent' || key === 'innerHTML') { 21991 if (vnode.children) 21992 vnode.children.length = 0; 21993 if (cur === oldProps[key]) 21994 continue; 21995 // #6601 work around Chrome version <= 55 bug where single textNode 21996 // replaced by innerHTML/textContent retains its parentNode property 21997 if (elm.childNodes.length === 1) { 21998 elm.removeChild(elm.childNodes[0]); 21999 } 22000 } 22001 if (key === 'value' && elm.tagName !== 'PROGRESS') { 22002 // store value as _value as well since 22003 // non-string values will be stringified 22004 elm._value = cur; 22005 // avoid resetting cursor position when value is the same 22006 var strCur = isUndef(cur) ? '' : String(cur); 22007 if (shouldUpdateValue(elm, strCur)) { 22008 elm.value = strCur; 22009 } 22010 } 22011 else if (key === 'innerHTML' && 22012 isSVG(elm.tagName) && 22013 isUndef(elm.innerHTML)) { 22014 // IE doesn't support innerHTML for SVG elements 22015 svgContainer = svgContainer || document.createElement('div'); 22016 svgContainer.innerHTML = "<svg>".concat(cur, "</svg>"); 22017 var svg = svgContainer.firstChild; 22018 while (elm.firstChild) { 22019 elm.removeChild(elm.firstChild); 22020 } 22021 while (svg.firstChild) { 22022 elm.appendChild(svg.firstChild); 22023 } 22024 } 22025 else if ( 22026 // skip the update if old and new VDOM state is the same. 22027 // `value` is handled separately because the DOM value may be temporarily 22028 // out of sync with VDOM state due to focus, composition and modifiers. 22029 // This #4521 by skipping the unnecessary `checked` update. 22030 cur !== oldProps[key]) { 22031 // some property updates can throw 22032 // e.g. `value` on <progress> w/ non-finite value 22033 try { 22034 elm[key] = cur; 22035 } 22036 catch (e) { } 22037 } 22038 } 22039} 22040function shouldUpdateValue(elm, checkVal) { 22041 return ( 22042 //@ts-expect-error 22043 !elm.composing && 22044 (elm.tagName === 'OPTION' || 22045 isNotInFocusAndDirty(elm, checkVal) || 22046 isDirtyWithModifiers(elm, checkVal))); 22047} 22048function isNotInFocusAndDirty(elm, checkVal) { 22049 // return true when textbox (.number and .trim) loses focus and its value is 22050 // not equal to the updated value 22051 var notInFocus = true; 22052 // #6157 22053 // work around IE bug when accessing document.activeElement in an iframe 22054 try { 22055 notInFocus = document.activeElement !== elm; 22056 } 22057 catch (e) { } 22058 return notInFocus && elm.value !== checkVal; 22059} 22060function isDirtyWithModifiers(elm, newVal) { 22061 var value = elm.value; 22062 var modifiers = elm._vModifiers; // injected by v-model runtime 22063 if (isDef(modifiers)) { 22064 if (modifiers.number) { 22065 return toNumber(value) !== toNumber(newVal); 22066 } 22067 if (modifiers.trim) { 22068 return value.trim() !== newVal.trim(); 22069 } 22070 } 22071 return value !== newVal; 22072} 22073var domProps = { 22074 create: updateDOMProps, 22075 update: updateDOMProps 22076}; 22077 22078var parseStyleText = cached(function (cssText) { 22079 var res = {}; 22080 var listDelimiter = /;(?![^(]*\))/g; 22081 var propertyDelimiter = /:(.+)/; 22082 cssText.split(listDelimiter).forEach(function (item) { 22083 if (item) { 22084 var tmp = item.split(propertyDelimiter); 22085 tmp.length > 1 && (res[tmp[0].trim()] = tmp[1].trim()); 22086 } 22087 }); 22088 return res; 22089}); 22090// merge static and dynamic style data on the same vnode 22091function normalizeStyleData(data) { 22092 var style = normalizeStyleBinding(data.style); 22093 // static style is pre-processed into an object during compilation 22094 // and is always a fresh object, so it's safe to merge into it 22095 return data.staticStyle ? extend(data.staticStyle, style) : style; 22096} 22097// normalize possible array / string values into Object 22098function normalizeStyleBinding(bindingStyle) { 22099 if (Array.isArray(bindingStyle)) { 22100 return toObject(bindingStyle); 22101 } 22102 if (typeof bindingStyle === 'string') { 22103 return parseStyleText(bindingStyle); 22104 } 22105 return bindingStyle; 22106} 22107/** 22108 * parent component style should be after child's 22109 * so that parent component's style could override it 22110 */ 22111function getStyle(vnode, checkChild) { 22112 var res = {}; 22113 var styleData; 22114 if (checkChild) { 22115 var childNode = vnode; 22116 while (childNode.componentInstance) { 22117 childNode = childNode.componentInstance._vnode; 22118 if (childNode && 22119 childNode.data && 22120 (styleData = normalizeStyleData(childNode.data))) { 22121 extend(res, styleData); 22122 } 22123 } 22124 } 22125 if ((styleData = normalizeStyleData(vnode.data))) { 22126 extend(res, styleData); 22127 } 22128 var parentNode = vnode; 22129 // @ts-expect-error parentNode.parent not VNodeWithData 22130 while ((parentNode = parentNode.parent)) { 22131 if (parentNode.data && (styleData = normalizeStyleData(parentNode.data))) { 22132 extend(res, styleData); 22133 } 22134 } 22135 return res; 22136} 22137 22138var cssVarRE = /^--/; 22139var importantRE = /\s*!important$/; 22140var setProp = function (el, name, val) { 22141 /* istanbul ignore if */ 22142 if (cssVarRE.test(name)) { 22143 el.style.setProperty(name, val); 22144 } 22145 else if (importantRE.test(val)) { 22146 el.style.setProperty(hyphenate(name), val.replace(importantRE, ''), 'important'); 22147 } 22148 else { 22149 var normalizedName = normalize(name); 22150 if (Array.isArray(val)) { 22151 // Support values array created by autoprefixer, e.g. 22152 // {display: ["-webkit-box", "-ms-flexbox", "flex"]} 22153 // Set them one by one, and the browser will only set those it can recognize 22154 for (var i = 0, len = val.length; i < len; i++) { 22155 el.style[normalizedName] = val[i]; 22156 } 22157 } 22158 else { 22159 el.style[normalizedName] = val; 22160 } 22161 } 22162}; 22163var vendorNames = ['Webkit', 'Moz', 'ms']; 22164var emptyStyle; 22165var normalize = cached(function (prop) { 22166 emptyStyle = emptyStyle || document.createElement('div').style; 22167 prop = camelize(prop); 22168 if (prop !== 'filter' && prop in emptyStyle) { 22169 return prop; 22170 } 22171 var capName = prop.charAt(0).toUpperCase() + prop.slice(1); 22172 for (var i = 0; i < vendorNames.length; i++) { 22173 var name_1 = vendorNames[i] + capName; 22174 if (name_1 in emptyStyle) { 22175 return name_1; 22176 } 22177 } 22178}); 22179function updateStyle(oldVnode, vnode) { 22180 var data = vnode.data; 22181 var oldData = oldVnode.data; 22182 if (isUndef(data.staticStyle) && 22183 isUndef(data.style) && 22184 isUndef(oldData.staticStyle) && 22185 isUndef(oldData.style)) { 22186 return; 22187 } 22188 var cur, name; 22189 var el = vnode.elm; 22190 var oldStaticStyle = oldData.staticStyle; 22191 var oldStyleBinding = oldData.normalizedStyle || oldData.style || {}; 22192 // if static style exists, stylebinding already merged into it when doing normalizeStyleData 22193 var oldStyle = oldStaticStyle || oldStyleBinding; 22194 var style = normalizeStyleBinding(vnode.data.style) || {}; 22195 // store normalized style under a different key for next diff 22196 // make sure to clone it if it's reactive, since the user likely wants 22197 // to mutate it. 22198 vnode.data.normalizedStyle = isDef(style.__ob__) ? extend({}, style) : style; 22199 var newStyle = getStyle(vnode, true); 22200 for (name in oldStyle) { 22201 if (isUndef(newStyle[name])) { 22202 setProp(el, name, ''); 22203 } 22204 } 22205 for (name in newStyle) { 22206 cur = newStyle[name]; 22207 if (cur !== oldStyle[name]) { 22208 // ie9 setting to null has no effect, must use empty string 22209 setProp(el, name, cur == null ? '' : cur); 22210 } 22211 } 22212} 22213var style$1 = { 22214 create: updateStyle, 22215 update: updateStyle 22216}; 22217 22218var whitespaceRE$1 = /\s+/; 22219/** 22220 * Add class with compatibility for SVG since classList is not supported on 22221 * SVG elements in IE 22222 */ 22223function addClass(el, cls) { 22224 /* istanbul ignore if */ 22225 if (!cls || !(cls = cls.trim())) { 22226 return; 22227 } 22228 /* istanbul ignore else */ 22229 if (el.classList) { 22230 if (cls.indexOf(' ') > -1) { 22231 cls.split(whitespaceRE$1).forEach(function (c) { return el.classList.add(c); }); 22232 } 22233 else { 22234 el.classList.add(cls); 22235 } 22236 } 22237 else { 22238 var cur = " ".concat(el.getAttribute('class') || '', " "); 22239 if (cur.indexOf(' ' + cls + ' ') < 0) { 22240 el.setAttribute('class', (cur + cls).trim()); 22241 } 22242 } 22243} 22244/** 22245 * Remove class with compatibility for SVG since classList is not supported on 22246 * SVG elements in IE 22247 */ 22248function removeClass(el, cls) { 22249 /* istanbul ignore if */ 22250 if (!cls || !(cls = cls.trim())) { 22251 return; 22252 } 22253 /* istanbul ignore else */ 22254 if (el.classList) { 22255 if (cls.indexOf(' ') > -1) { 22256 cls.split(whitespaceRE$1).forEach(function (c) { return el.classList.remove(c); }); 22257 } 22258 else { 22259 el.classList.remove(cls); 22260 } 22261 if (!el.classList.length) { 22262 el.removeAttribute('class'); 22263 } 22264 } 22265 else { 22266 var cur = " ".concat(el.getAttribute('class') || '', " "); 22267 var tar = ' ' + cls + ' '; 22268 while (cur.indexOf(tar) >= 0) { 22269 cur = cur.replace(tar, ' '); 22270 } 22271 cur = cur.trim(); 22272 if (cur) { 22273 el.setAttribute('class', cur); 22274 } 22275 else { 22276 el.removeAttribute('class'); 22277 } 22278 } 22279} 22280 22281function resolveTransition(def) { 22282 if (!def) { 22283 return; 22284 } 22285 /* istanbul ignore else */ 22286 if (typeof def === 'object') { 22287 var res = {}; 22288 if (def.css !== false) { 22289 extend(res, autoCssTransition(def.name || 'v')); 22290 } 22291 extend(res, def); 22292 return res; 22293 } 22294 else if (typeof def === 'string') { 22295 return autoCssTransition(def); 22296 } 22297} 22298var autoCssTransition = cached(function (name) { 22299 return { 22300 enterClass: "".concat(name, "-enter"), 22301 enterToClass: "".concat(name, "-enter-to"), 22302 enterActiveClass: "".concat(name, "-enter-active"), 22303 leaveClass: "".concat(name, "-leave"), 22304 leaveToClass: "".concat(name, "-leave-to"), 22305 leaveActiveClass: "".concat(name, "-leave-active") 22306 }; 22307}); 22308var hasTransition = inBrowser && !isIE9; 22309var TRANSITION = 'transition'; 22310var ANIMATION = 'animation'; 22311// Transition property/event sniffing 22312var transitionProp = 'transition'; 22313var transitionEndEvent = 'transitionend'; 22314var animationProp = 'animation'; 22315var animationEndEvent = 'animationend'; 22316if (hasTransition) { 22317 /* istanbul ignore if */ 22318 if (window.ontransitionend === undefined && 22319 window.onwebkittransitionend !== undefined) { 22320 transitionProp = 'WebkitTransition'; 22321 transitionEndEvent = 'webkitTransitionEnd'; 22322 } 22323 if (window.onanimationend === undefined && 22324 window.onwebkitanimationend !== undefined) { 22325 animationProp = 'WebkitAnimation'; 22326 animationEndEvent = 'webkitAnimationEnd'; 22327 } 22328} 22329// binding to window is necessary to make hot reload work in IE in strict mode 22330var raf = inBrowser 22331 ? window.requestAnimationFrame 22332 ? window.requestAnimationFrame.bind(window) 22333 : setTimeout 22334 : /* istanbul ignore next */ function (/* istanbul ignore next */ fn) { return fn(); }; 22335function nextFrame(fn) { 22336 raf(function () { 22337 // @ts-expect-error 22338 raf(fn); 22339 }); 22340} 22341function addTransitionClass(el, cls) { 22342 var transitionClasses = el._transitionClasses || (el._transitionClasses = []); 22343 if (transitionClasses.indexOf(cls) < 0) { 22344 transitionClasses.push(cls); 22345 addClass(el, cls); 22346 } 22347} 22348function removeTransitionClass(el, cls) { 22349 if (el._transitionClasses) { 22350 remove$2(el._transitionClasses, cls); 22351 } 22352 removeClass(el, cls); 22353} 22354function whenTransitionEnds(el, expectedType, cb) { 22355 var _a = getTransitionInfo(el, expectedType), type = _a.type, timeout = _a.timeout, propCount = _a.propCount; 22356 if (!type) 22357 return cb(); 22358 var event = type === TRANSITION ? transitionEndEvent : animationEndEvent; 22359 var ended = 0; 22360 var end = function () { 22361 el.removeEventListener(event, onEnd); 22362 cb(); 22363 }; 22364 var onEnd = function (e) { 22365 if (e.target === el) { 22366 if (++ended >= propCount) { 22367 end(); 22368 } 22369 } 22370 }; 22371 setTimeout(function () { 22372 if (ended < propCount) { 22373 end(); 22374 } 22375 }, timeout + 1); 22376 el.addEventListener(event, onEnd); 22377} 22378var transformRE = /\b(transform|all)(,|$)/; 22379function getTransitionInfo(el, expectedType) { 22380 var styles = window.getComputedStyle(el); 22381 // JSDOM may return undefined for transition properties 22382 var transitionDelays = (styles[transitionProp + 'Delay'] || '').split(', '); 22383 var transitionDurations = (styles[transitionProp + 'Duration'] || '').split(', '); 22384 var transitionTimeout = getTimeout(transitionDelays, transitionDurations); 22385 var animationDelays = (styles[animationProp + 'Delay'] || '').split(', '); 22386 var animationDurations = (styles[animationProp + 'Duration'] || '').split(', '); 22387 var animationTimeout = getTimeout(animationDelays, animationDurations); 22388 var type; 22389 var timeout = 0; 22390 var propCount = 0; 22391 /* istanbul ignore if */ 22392 if (expectedType === TRANSITION) { 22393 if (transitionTimeout > 0) { 22394 type = TRANSITION; 22395 timeout = transitionTimeout; 22396 propCount = transitionDurations.length; 22397 } 22398 } 22399 else if (expectedType === ANIMATION) { 22400 if (animationTimeout > 0) { 22401 type = ANIMATION; 22402 timeout = animationTimeout; 22403 propCount = animationDurations.length; 22404 } 22405 } 22406 else { 22407 timeout = Math.max(transitionTimeout, animationTimeout); 22408 type = 22409 timeout > 0 22410 ? transitionTimeout > animationTimeout 22411 ? TRANSITION 22412 : ANIMATION 22413 : null; 22414 propCount = type 22415 ? type === TRANSITION 22416 ? transitionDurations.length 22417 : animationDurations.length 22418 : 0; 22419 } 22420 var hasTransform = type === TRANSITION && transformRE.test(styles[transitionProp + 'Property']); 22421 return { 22422 type: type, 22423 timeout: timeout, 22424 propCount: propCount, 22425 hasTransform: hasTransform 22426 }; 22427} 22428function getTimeout(delays, durations) { 22429 /* istanbul ignore next */ 22430 while (delays.length < durations.length) { 22431 delays = delays.concat(delays); 22432 } 22433 return Math.max.apply(null, durations.map(function (d, i) { 22434 return toMs(d) + toMs(delays[i]); 22435 })); 22436} 22437// Old versions of Chromium (below 61.0.3163.100) formats floating pointer numbers 22438// in a locale-dependent way, using a comma instead of a dot. 22439// If comma is not replaced with a dot, the input will be rounded down (i.e. acting 22440// as a floor function) causing unexpected behaviors 22441function toMs(s) { 22442 return Number(s.slice(0, -1).replace(',', '.')) * 1000; 22443} 22444 22445function enter(vnode, toggleDisplay) { 22446 var el = vnode.elm; 22447 // call leave callback now 22448 if (isDef(el._leaveCb)) { 22449 el._leaveCb.cancelled = true; 22450 el._leaveCb(); 22451 } 22452 var data = resolveTransition(vnode.data.transition); 22453 if (isUndef(data)) { 22454 return; 22455 } 22456 /* istanbul ignore if */ 22457 if (isDef(el._enterCb) || el.nodeType !== 1) { 22458 return; 22459 } 22460 var css = data.css, type = data.type, enterClass = data.enterClass, enterToClass = data.enterToClass, enterActiveClass = data.enterActiveClass, appearClass = data.appearClass, appearToClass = data.appearToClass, appearActiveClass = data.appearActiveClass, beforeEnter = data.beforeEnter, enter = data.enter, afterEnter = data.afterEnter, enterCancelled = data.enterCancelled, beforeAppear = data.beforeAppear, appear = data.appear, afterAppear = data.afterAppear, appearCancelled = data.appearCancelled, duration = data.duration; 22461 // activeInstance will always be the <transition> component managing this 22462 // transition. One edge case to check is when the <transition> is placed 22463 // as the root node of a child component. In that case we need to check 22464 // <transition>'s parent for appear check. 22465 var context = activeInstance; 22466 var transitionNode = activeInstance.$vnode; 22467 while (transitionNode && transitionNode.parent) { 22468 context = transitionNode.context; 22469 transitionNode = transitionNode.parent; 22470 } 22471 var isAppear = !context._isMounted || !vnode.isRootInsert; 22472 if (isAppear && !appear && appear !== '') { 22473 return; 22474 } 22475 var startClass = isAppear && appearClass ? appearClass : enterClass; 22476 var activeClass = isAppear && appearActiveClass ? appearActiveClass : enterActiveClass; 22477 var toClass = isAppear && appearToClass ? appearToClass : enterToClass; 22478 var beforeEnterHook = isAppear ? beforeAppear || beforeEnter : beforeEnter; 22479 var enterHook = isAppear ? (isFunction(appear) ? appear : enter) : enter; 22480 var afterEnterHook = isAppear ? afterAppear || afterEnter : afterEnter; 22481 var enterCancelledHook = isAppear 22482 ? appearCancelled || enterCancelled 22483 : enterCancelled; 22484 var explicitEnterDuration = toNumber(isObject(duration) ? duration.enter : duration); 22485 if ( true && explicitEnterDuration != null) { 22486 checkDuration(explicitEnterDuration, 'enter', vnode); 22487 } 22488 var expectsCSS = css !== false && !isIE9; 22489 var userWantsControl = getHookArgumentsLength(enterHook); 22490 var cb = (el._enterCb = once(function () { 22491 if (expectsCSS) { 22492 removeTransitionClass(el, toClass); 22493 removeTransitionClass(el, activeClass); 22494 } 22495 // @ts-expect-error 22496 if (cb.cancelled) { 22497 if (expectsCSS) { 22498 removeTransitionClass(el, startClass); 22499 } 22500 enterCancelledHook && enterCancelledHook(el); 22501 } 22502 else { 22503 afterEnterHook && afterEnterHook(el); 22504 } 22505 el._enterCb = null; 22506 })); 22507 if (!vnode.data.show) { 22508 // remove pending leave element on enter by injecting an insert hook 22509 mergeVNodeHook(vnode, 'insert', function () { 22510 var parent = el.parentNode; 22511 var pendingNode = parent && parent._pending && parent._pending[vnode.key]; 22512 if (pendingNode && 22513 pendingNode.tag === vnode.tag && 22514 pendingNode.elm._leaveCb) { 22515 pendingNode.elm._leaveCb(); 22516 } 22517 enterHook && enterHook(el, cb); 22518 }); 22519 } 22520 // start enter transition 22521 beforeEnterHook && beforeEnterHook(el); 22522 if (expectsCSS) { 22523 addTransitionClass(el, startClass); 22524 addTransitionClass(el, activeClass); 22525 nextFrame(function () { 22526 removeTransitionClass(el, startClass); 22527 // @ts-expect-error 22528 if (!cb.cancelled) { 22529 addTransitionClass(el, toClass); 22530 if (!userWantsControl) { 22531 if (isValidDuration(explicitEnterDuration)) { 22532 setTimeout(cb, explicitEnterDuration); 22533 } 22534 else { 22535 whenTransitionEnds(el, type, cb); 22536 } 22537 } 22538 } 22539 }); 22540 } 22541 if (vnode.data.show) { 22542 toggleDisplay && toggleDisplay(); 22543 enterHook && enterHook(el, cb); 22544 } 22545 if (!expectsCSS && !userWantsControl) { 22546 cb(); 22547 } 22548} 22549function leave(vnode, rm) { 22550 var el = vnode.elm; 22551 // call enter callback now 22552 if (isDef(el._enterCb)) { 22553 el._enterCb.cancelled = true; 22554 el._enterCb(); 22555 } 22556 var data = resolveTransition(vnode.data.transition); 22557 if (isUndef(data) || el.nodeType !== 1) { 22558 return rm(); 22559 } 22560 /* istanbul ignore if */ 22561 if (isDef(el._leaveCb)) { 22562 return; 22563 } 22564 var css = data.css, type = data.type, leaveClass = data.leaveClass, leaveToClass = data.leaveToClass, leaveActiveClass = data.leaveActiveClass, beforeLeave = data.beforeLeave, leave = data.leave, afterLeave = data.afterLeave, leaveCancelled = data.leaveCancelled, delayLeave = data.delayLeave, duration = data.duration; 22565 var expectsCSS = css !== false && !isIE9; 22566 var userWantsControl = getHookArgumentsLength(leave); 22567 var explicitLeaveDuration = toNumber(isObject(duration) ? duration.leave : duration); 22568 if ( true && isDef(explicitLeaveDuration)) { 22569 checkDuration(explicitLeaveDuration, 'leave', vnode); 22570 } 22571 var cb = (el._leaveCb = once(function () { 22572 if (el.parentNode && el.parentNode._pending) { 22573 el.parentNode._pending[vnode.key] = null; 22574 } 22575 if (expectsCSS) { 22576 removeTransitionClass(el, leaveToClass); 22577 removeTransitionClass(el, leaveActiveClass); 22578 } 22579 // @ts-expect-error 22580 if (cb.cancelled) { 22581 if (expectsCSS) { 22582 removeTransitionClass(el, leaveClass); 22583 } 22584 leaveCancelled && leaveCancelled(el); 22585 } 22586 else { 22587 rm(); 22588 afterLeave && afterLeave(el); 22589 } 22590 el._leaveCb = null; 22591 })); 22592 if (delayLeave) { 22593 delayLeave(performLeave); 22594 } 22595 else { 22596 performLeave(); 22597 } 22598 function performLeave() { 22599 // the delayed leave may have already been cancelled 22600 // @ts-expect-error 22601 if (cb.cancelled) { 22602 return; 22603 } 22604 // record leaving element 22605 if (!vnode.data.show && el.parentNode) { 22606 (el.parentNode._pending || (el.parentNode._pending = {}))[vnode.key] = 22607 vnode; 22608 } 22609 beforeLeave && beforeLeave(el); 22610 if (expectsCSS) { 22611 addTransitionClass(el, leaveClass); 22612 addTransitionClass(el, leaveActiveClass); 22613 nextFrame(function () { 22614 removeTransitionClass(el, leaveClass); 22615 // @ts-expect-error 22616 if (!cb.cancelled) { 22617 addTransitionClass(el, leaveToClass); 22618 if (!userWantsControl) { 22619 if (isValidDuration(explicitLeaveDuration)) { 22620 setTimeout(cb, explicitLeaveDuration); 22621 } 22622 else { 22623 whenTransitionEnds(el, type, cb); 22624 } 22625 } 22626 } 22627 }); 22628 } 22629 leave && leave(el, cb); 22630 if (!expectsCSS && !userWantsControl) { 22631 cb(); 22632 } 22633 } 22634} 22635// only used in dev mode 22636function checkDuration(val, name, vnode) { 22637 if (typeof val !== 'number') { 22638 warn$2("<transition> explicit ".concat(name, " duration is not a valid number - ") + 22639 "got ".concat(JSON.stringify(val), "."), vnode.context); 22640 } 22641 else if (isNaN(val)) { 22642 warn$2("<transition> explicit ".concat(name, " duration is NaN - ") + 22643 'the duration expression might be incorrect.', vnode.context); 22644 } 22645} 22646function isValidDuration(val) { 22647 return typeof val === 'number' && !isNaN(val); 22648} 22649/** 22650 * Normalize a transition hook's argument length. The hook may be: 22651 * - a merged hook (invoker) with the original in .fns 22652 * - a wrapped component method (check ._length) 22653 * - a plain function (.length) 22654 */ 22655function getHookArgumentsLength(fn) { 22656 if (isUndef(fn)) { 22657 return false; 22658 } 22659 // @ts-expect-error 22660 var invokerFns = fn.fns; 22661 if (isDef(invokerFns)) { 22662 // invoker 22663 return getHookArgumentsLength(Array.isArray(invokerFns) ? invokerFns[0] : invokerFns); 22664 } 22665 else { 22666 // @ts-expect-error 22667 return (fn._length || fn.length) > 1; 22668 } 22669} 22670function _enter(_, vnode) { 22671 if (vnode.data.show !== true) { 22672 enter(vnode); 22673 } 22674} 22675var transition = inBrowser 22676 ? { 22677 create: _enter, 22678 activate: _enter, 22679 remove: function (vnode, rm) { 22680 /* istanbul ignore else */ 22681 if (vnode.data.show !== true) { 22682 // @ts-expect-error 22683 leave(vnode, rm); 22684 } 22685 else { 22686 rm(); 22687 } 22688 } 22689 } 22690 : {}; 22691 22692var platformModules = [attrs, klass$1, events, domProps, style$1, transition]; 22693 22694// the directive module should be applied last, after all 22695// built-in modules have been applied. 22696var modules$1 = platformModules.concat(baseModules); 22697var patch = createPatchFunction({ nodeOps: nodeOps, modules: modules$1 }); 22698 22699/** 22700 * Not type checking this file because flow doesn't like attaching 22701 * properties to Elements. 22702 */ 22703/* istanbul ignore if */ 22704if (isIE9) { 22705 // http://www.matts411.com/post/internet-explorer-9-oninput/ 22706 document.addEventListener('selectionchange', function () { 22707 var el = document.activeElement; 22708 // @ts-expect-error 22709 if (el && el.vmodel) { 22710 trigger(el, 'input'); 22711 } 22712 }); 22713} 22714var directive = { 22715 inserted: function (el, binding, vnode, oldVnode) { 22716 if (vnode.tag === 'select') { 22717 // #6903 22718 if (oldVnode.elm && !oldVnode.elm._vOptions) { 22719 mergeVNodeHook(vnode, 'postpatch', function () { 22720 directive.componentUpdated(el, binding, vnode); 22721 }); 22722 } 22723 else { 22724 setSelected(el, binding, vnode.context); 22725 } 22726 el._vOptions = [].map.call(el.options, getValue); 22727 } 22728 else if (vnode.tag === 'textarea' || isTextInputType(el.type)) { 22729 el._vModifiers = binding.modifiers; 22730 if (!binding.modifiers.lazy) { 22731 el.addEventListener('compositionstart', onCompositionStart); 22732 el.addEventListener('compositionend', onCompositionEnd); 22733 // Safari < 10.2 & UIWebView doesn't fire compositionend when 22734 // switching focus before confirming composition choice 22735 // this also fixes the issue where some browsers e.g. iOS Chrome 22736 // fires "change" instead of "input" on autocomplete. 22737 el.addEventListener('change', onCompositionEnd); 22738 /* istanbul ignore if */ 22739 if (isIE9) { 22740 el.vmodel = true; 22741 } 22742 } 22743 } 22744 }, 22745 componentUpdated: function (el, binding, vnode) { 22746 if (vnode.tag === 'select') { 22747 setSelected(el, binding, vnode.context); 22748 // in case the options rendered by v-for have changed, 22749 // it's possible that the value is out-of-sync with the rendered options. 22750 // detect such cases and filter out values that no longer has a matching 22751 // option in the DOM. 22752 var prevOptions_1 = el._vOptions; 22753 var curOptions_1 = (el._vOptions = [].map.call(el.options, getValue)); 22754 if (curOptions_1.some(function (o, i) { return !looseEqual(o, prevOptions_1[i]); })) { 22755 // trigger change event if 22756 // no matching option found for at least one value 22757 var needReset = el.multiple 22758 ? binding.value.some(function (v) { return hasNoMatchingOption(v, curOptions_1); }) 22759 : binding.value !== binding.oldValue && 22760 hasNoMatchingOption(binding.value, curOptions_1); 22761 if (needReset) { 22762 trigger(el, 'change'); 22763 } 22764 } 22765 } 22766 } 22767}; 22768function setSelected(el, binding, vm) { 22769 actuallySetSelected(el, binding, vm); 22770 /* istanbul ignore if */ 22771 if (isIE || isEdge) { 22772 setTimeout(function () { 22773 actuallySetSelected(el, binding, vm); 22774 }, 0); 22775 } 22776} 22777function actuallySetSelected(el, binding, vm) { 22778 var value = binding.value; 22779 var isMultiple = el.multiple; 22780 if (isMultiple && !Array.isArray(value)) { 22781 true && 22782 warn$2("<select multiple v-model=\"".concat(binding.expression, "\"> ") + 22783 "expects an Array value for its binding, but got ".concat(Object.prototype.toString 22784 .call(value) 22785 .slice(8, -1)), vm); 22786 return; 22787 } 22788 var selected, option; 22789 for (var i = 0, l = el.options.length; i < l; i++) { 22790 option = el.options[i]; 22791 if (isMultiple) { 22792 selected = looseIndexOf(value, getValue(option)) > -1; 22793 if (option.selected !== selected) { 22794 option.selected = selected; 22795 } 22796 } 22797 else { 22798 if (looseEqual(getValue(option), value)) { 22799 if (el.selectedIndex !== i) { 22800 el.selectedIndex = i; 22801 } 22802 return; 22803 } 22804 } 22805 } 22806 if (!isMultiple) { 22807 el.selectedIndex = -1; 22808 } 22809} 22810function hasNoMatchingOption(value, options) { 22811 return options.every(function (o) { return !looseEqual(o, value); }); 22812} 22813function getValue(option) { 22814 return '_value' in option ? option._value : option.value; 22815} 22816function onCompositionStart(e) { 22817 e.target.composing = true; 22818} 22819function onCompositionEnd(e) { 22820 // prevent triggering an input event for no reason 22821 if (!e.target.composing) 22822 return; 22823 e.target.composing = false; 22824 trigger(e.target, 'input'); 22825} 22826function trigger(el, type) { 22827 var e = document.createEvent('HTMLEvents'); 22828 e.initEvent(type, true, true); 22829 el.dispatchEvent(e); 22830} 22831 22832// recursively search for possible transition defined inside the component root 22833function locateNode(vnode) { 22834 // @ts-expect-error 22835 return vnode.componentInstance && (!vnode.data || !vnode.data.transition) 22836 ? locateNode(vnode.componentInstance._vnode) 22837 : vnode; 22838} 22839var show = { 22840 bind: function (el, _a, vnode) { 22841 var value = _a.value; 22842 vnode = locateNode(vnode); 22843 var transition = vnode.data && vnode.data.transition; 22844 var originalDisplay = (el.__vOriginalDisplay = 22845 el.style.display === 'none' ? '' : el.style.display); 22846 if (value && transition) { 22847 vnode.data.show = true; 22848 enter(vnode, function () { 22849 el.style.display = originalDisplay; 22850 }); 22851 } 22852 else { 22853 el.style.display = value ? originalDisplay : 'none'; 22854 } 22855 }, 22856 update: function (el, _a, vnode) { 22857 var value = _a.value, oldValue = _a.oldValue; 22858 /* istanbul ignore if */ 22859 if (!value === !oldValue) 22860 return; 22861 vnode = locateNode(vnode); 22862 var transition = vnode.data && vnode.data.transition; 22863 if (transition) { 22864 vnode.data.show = true; 22865 if (value) { 22866 enter(vnode, function () { 22867 el.style.display = el.__vOriginalDisplay; 22868 }); 22869 } 22870 else { 22871 leave(vnode, function () { 22872 el.style.display = 'none'; 22873 }); 22874 } 22875 } 22876 else { 22877 el.style.display = value ? el.__vOriginalDisplay : 'none'; 22878 } 22879 }, 22880 unbind: function (el, binding, vnode, oldVnode, isDestroy) { 22881 if (!isDestroy) { 22882 el.style.display = el.__vOriginalDisplay; 22883 } 22884 } 22885}; 22886 22887var platformDirectives = { 22888 model: directive, 22889 show: show 22890}; 22891 22892// Provides transition support for a single element/component. 22893var transitionProps = { 22894 name: String, 22895 appear: Boolean, 22896 css: Boolean, 22897 mode: String, 22898 type: String, 22899 enterClass: String, 22900 leaveClass: String, 22901 enterToClass: String, 22902 leaveToClass: String, 22903 enterActiveClass: String, 22904 leaveActiveClass: String, 22905 appearClass: String, 22906 appearActiveClass: String, 22907 appearToClass: String, 22908 duration: [Number, String, Object] 22909}; 22910// in case the child is also an abstract component, e.g. <keep-alive> 22911// we want to recursively retrieve the real component to be rendered 22912function getRealChild(vnode) { 22913 var compOptions = vnode && vnode.componentOptions; 22914 if (compOptions && compOptions.Ctor.options.abstract) { 22915 return getRealChild(getFirstComponentChild(compOptions.children)); 22916 } 22917 else { 22918 return vnode; 22919 } 22920} 22921function extractTransitionData(comp) { 22922 var data = {}; 22923 var options = comp.$options; 22924 // props 22925 for (var key in options.propsData) { 22926 data[key] = comp[key]; 22927 } 22928 // events. 22929 // extract listeners and pass them directly to the transition methods 22930 var listeners = options._parentListeners; 22931 for (var key in listeners) { 22932 data[camelize(key)] = listeners[key]; 22933 } 22934 return data; 22935} 22936function placeholder(h, rawChild) { 22937 // @ts-expect-error 22938 if (/\d-keep-alive$/.test(rawChild.tag)) { 22939 return h('keep-alive', { 22940 props: rawChild.componentOptions.propsData 22941 }); 22942 } 22943} 22944function hasParentTransition(vnode) { 22945 while ((vnode = vnode.parent)) { 22946 if (vnode.data.transition) { 22947 return true; 22948 } 22949 } 22950} 22951function isSameChild(child, oldChild) { 22952 return oldChild.key === child.key && oldChild.tag === child.tag; 22953} 22954var isNotTextNode = function (c) { return c.tag || isAsyncPlaceholder(c); }; 22955var isVShowDirective = function (d) { return d.name === 'show'; }; 22956var Transition = { 22957 name: 'transition', 22958 props: transitionProps, 22959 abstract: true, 22960 render: function (h) { 22961 var _this = this; 22962 var children = this.$slots.default; 22963 if (!children) { 22964 return; 22965 } 22966 // filter out text nodes (possible whitespaces) 22967 children = children.filter(isNotTextNode); 22968 /* istanbul ignore if */ 22969 if (!children.length) { 22970 return; 22971 } 22972 // warn multiple elements 22973 if ( true && children.length > 1) { 22974 warn$2('<transition> can only be used on a single element. Use ' + 22975 '<transition-group> for lists.', this.$parent); 22976 } 22977 var mode = this.mode; 22978 // warn invalid mode 22979 if ( true && mode && mode !== 'in-out' && mode !== 'out-in') { 22980 warn$2('invalid <transition> mode: ' + mode, this.$parent); 22981 } 22982 var rawChild = children[0]; 22983 // if this is a component root node and the component's 22984 // parent container node also has transition, skip. 22985 if (hasParentTransition(this.$vnode)) { 22986 return rawChild; 22987 } 22988 // apply transition data to child 22989 // use getRealChild() to ignore abstract components e.g. keep-alive 22990 var child = getRealChild(rawChild); 22991 /* istanbul ignore if */ 22992 if (!child) { 22993 return rawChild; 22994 } 22995 if (this._leaving) { 22996 return placeholder(h, rawChild); 22997 } 22998 // ensure a key that is unique to the vnode type and to this transition 22999 // component instance. This key will be used to remove pending leaving nodes 23000 // during entering. 23001 var id = "__transition-".concat(this._uid, "-"); 23002 child.key = 23003 child.key == null 23004 ? child.isComment 23005 ? id + 'comment' 23006 : id + child.tag 23007 : isPrimitive(child.key) 23008 ? String(child.key).indexOf(id) === 0 23009 ? child.key 23010 : id + child.key 23011 : child.key; 23012 var data = ((child.data || (child.data = {})).transition = 23013 extractTransitionData(this)); 23014 var oldRawChild = this._vnode; 23015 var oldChild = getRealChild(oldRawChild); 23016 // mark v-show 23017 // so that the transition module can hand over the control to the directive 23018 if (child.data.directives && child.data.directives.some(isVShowDirective)) { 23019 child.data.show = true; 23020 } 23021 if (oldChild && 23022 oldChild.data && 23023 !isSameChild(child, oldChild) && 23024 !isAsyncPlaceholder(oldChild) && 23025 // #6687 component root is a comment node 23026 !(oldChild.componentInstance && 23027 oldChild.componentInstance._vnode.isComment)) { 23028 // replace old child transition data with fresh one 23029 // important for dynamic transitions! 23030 var oldData = (oldChild.data.transition = extend({}, data)); 23031 // handle transition mode 23032 if (mode === 'out-in') { 23033 // return placeholder node and queue update when leave finishes 23034 this._leaving = true; 23035 mergeVNodeHook(oldData, 'afterLeave', function () { 23036 _this._leaving = false; 23037 _this.$forceUpdate(); 23038 }); 23039 return placeholder(h, rawChild); 23040 } 23041 else if (mode === 'in-out') { 23042 if (isAsyncPlaceholder(child)) { 23043 return oldRawChild; 23044 } 23045 var delayedLeave_1; 23046 var performLeave = function () { 23047 delayedLeave_1(); 23048 }; 23049 mergeVNodeHook(data, 'afterEnter', performLeave); 23050 mergeVNodeHook(data, 'enterCancelled', performLeave); 23051 mergeVNodeHook(oldData, 'delayLeave', function (leave) { 23052 delayedLeave_1 = leave; 23053 }); 23054 } 23055 } 23056 return rawChild; 23057 } 23058}; 23059 23060// Provides transition support for list items. 23061var props = extend({ 23062 tag: String, 23063 moveClass: String 23064}, transitionProps); 23065delete props.mode; 23066var TransitionGroup = { 23067 props: props, 23068 beforeMount: function () { 23069 var _this = this; 23070 var update = this._update; 23071 this._update = function (vnode, hydrating) { 23072 var restoreActiveInstance = setActiveInstance(_this); 23073 // force removing pass 23074 _this.__patch__(_this._vnode, _this.kept, false, // hydrating 23075 true // removeOnly (!important, avoids unnecessary moves) 23076 ); 23077 _this._vnode = _this.kept; 23078 restoreActiveInstance(); 23079 update.call(_this, vnode, hydrating); 23080 }; 23081 }, 23082 render: function (h) { 23083 var tag = this.tag || this.$vnode.data.tag || 'span'; 23084 var map = Object.create(null); 23085 var prevChildren = (this.prevChildren = this.children); 23086 var rawChildren = this.$slots.default || []; 23087 var children = (this.children = []); 23088 var transitionData = extractTransitionData(this); 23089 for (var i = 0; i < rawChildren.length; i++) { 23090 var c = rawChildren[i]; 23091 if (c.tag) { 23092 if (c.key != null && String(c.key).indexOf('__vlist') !== 0) { 23093 children.push(c); 23094 map[c.key] = c; 23095 (c.data || (c.data = {})).transition = transitionData; 23096 } 23097 else if (true) { 23098 var opts = c.componentOptions; 23099 var name_1 = opts 23100 ? getComponentName(opts.Ctor.options) || opts.tag || '' 23101 : c.tag; 23102 warn$2("<transition-group> children must be keyed: <".concat(name_1, ">")); 23103 } 23104 } 23105 } 23106 if (prevChildren) { 23107 var kept = []; 23108 var removed = []; 23109 for (var i = 0; i < prevChildren.length; i++) { 23110 var c = prevChildren[i]; 23111 c.data.transition = transitionData; 23112 // @ts-expect-error .getBoundingClientRect is not typed in Node 23113 c.data.pos = c.elm.getBoundingClientRect(); 23114 if (map[c.key]) { 23115 kept.push(c); 23116 } 23117 else { 23118 removed.push(c); 23119 } 23120 } 23121 this.kept = h(tag, null, kept); 23122 this.removed = removed; 23123 } 23124 return h(tag, null, children); 23125 }, 23126 updated: function () { 23127 var children = this.prevChildren; 23128 var moveClass = this.moveClass || (this.name || 'v') + '-move'; 23129 if (!children.length || !this.hasMove(children[0].elm, moveClass)) { 23130 return; 23131 } 23132 // we divide the work into three loops to avoid mixing DOM reads and writes 23133 // in each iteration - which helps prevent layout thrashing. 23134 children.forEach(callPendingCbs); 23135 children.forEach(recordPosition); 23136 children.forEach(applyTranslation); 23137 // force reflow to put everything in position 23138 // assign to this to avoid being removed in tree-shaking 23139 // $flow-disable-line 23140 this._reflow = document.body.offsetHeight; 23141 children.forEach(function (c) { 23142 if (c.data.moved) { 23143 var el_1 = c.elm; 23144 var s = el_1.style; 23145 addTransitionClass(el_1, moveClass); 23146 s.transform = s.WebkitTransform = s.transitionDuration = ''; 23147 el_1.addEventListener(transitionEndEvent, (el_1._moveCb = function cb(e) { 23148 if (e && e.target !== el_1) { 23149 return; 23150 } 23151 if (!e || /transform$/.test(e.propertyName)) { 23152 el_1.removeEventListener(transitionEndEvent, cb); 23153 el_1._moveCb = null; 23154 removeTransitionClass(el_1, moveClass); 23155 } 23156 })); 23157 } 23158 }); 23159 }, 23160 methods: { 23161 hasMove: function (el, moveClass) { 23162 /* istanbul ignore if */ 23163 if (!hasTransition) { 23164 return false; 23165 } 23166 /* istanbul ignore if */ 23167 if (this._hasMove) { 23168 return this._hasMove; 23169 } 23170 // Detect whether an element with the move class applied has 23171 // CSS transitions. Since the element may be inside an entering 23172 // transition at this very moment, we make a clone of it and remove 23173 // all other transition classes applied to ensure only the move class 23174 // is applied. 23175 var clone = el.cloneNode(); 23176 if (el._transitionClasses) { 23177 el._transitionClasses.forEach(function (cls) { 23178 removeClass(clone, cls); 23179 }); 23180 } 23181 addClass(clone, moveClass); 23182 clone.style.display = 'none'; 23183 this.$el.appendChild(clone); 23184 var info = getTransitionInfo(clone); 23185 this.$el.removeChild(clone); 23186 return (this._hasMove = info.hasTransform); 23187 } 23188 } 23189}; 23190function callPendingCbs(c) { 23191 /* istanbul ignore if */ 23192 if (c.elm._moveCb) { 23193 c.elm._moveCb(); 23194 } 23195 /* istanbul ignore if */ 23196 if (c.elm._enterCb) { 23197 c.elm._enterCb(); 23198 } 23199} 23200function recordPosition(c) { 23201 c.data.newPos = c.elm.getBoundingClientRect(); 23202} 23203function applyTranslation(c) { 23204 var oldPos = c.data.pos; 23205 var newPos = c.data.newPos; 23206 var dx = oldPos.left - newPos.left; 23207 var dy = oldPos.top - newPos.top; 23208 if (dx || dy) { 23209 c.data.moved = true; 23210 var s = c.elm.style; 23211 s.transform = s.WebkitTransform = "translate(".concat(dx, "px,").concat(dy, "px)"); 23212 s.transitionDuration = '0s'; 23213 } 23214} 23215 23216var platformComponents = { 23217 Transition: Transition, 23218 TransitionGroup: TransitionGroup 23219}; 23220 23221// install platform specific utils 23222Vue.config.mustUseProp = mustUseProp; 23223Vue.config.isReservedTag = isReservedTag; 23224Vue.config.isReservedAttr = isReservedAttr; 23225Vue.config.getTagNamespace = getTagNamespace; 23226Vue.config.isUnknownElement = isUnknownElement; 23227// install platform runtime directives & components 23228extend(Vue.options.directives, platformDirectives); 23229extend(Vue.options.components, platformComponents); 23230// install platform patch function 23231Vue.prototype.__patch__ = inBrowser ? patch : noop; 23232// public mount method 23233Vue.prototype.$mount = function (el, hydrating) { 23234 el = el && inBrowser ? query(el) : undefined; 23235 return mountComponent(this, el, hydrating); 23236}; 23237// devtools global hook 23238/* istanbul ignore next */ 23239if (inBrowser) { 23240 setTimeout(function () { 23241 if (config.devtools) { 23242 if (devtools) { 23243 devtools.emit('init', Vue); 23244 } 23245 else if (true) { 23246 // @ts-expect-error 23247 console[console.info ? 'info' : 'log']('Download the Vue Devtools extension for a better development experience:\n' + 23248 'https://github.com/vuejs/vue-devtools'); 23249 } 23250 } 23251 if ( true && 23252 config.productionTip !== false && 23253 typeof console !== 'undefined') { 23254 // @ts-expect-error 23255 console[console.info ? 'info' : 'log']("You are running Vue in development mode.\n" + 23256 "Make sure to turn on production mode when deploying for production.\n" + 23257 "See more tips at https://vuejs.org/guide/deployment.html"); 23258 } 23259 }, 0); 23260} 23261 23262var defaultTagRE = /\{\{((?:.|\r?\n)+?)\}\}/g; 23263var regexEscapeRE = /[-.*+?^${}()|[\]\/\\]/g; 23264var buildRegex = cached(function (delimiters) { 23265 var open = delimiters[0].replace(regexEscapeRE, '\\$&'); 23266 var close = delimiters[1].replace(regexEscapeRE, '\\$&'); 23267 return new RegExp(open + '((?:.|\\n)+?)' + close, 'g'); 23268}); 23269function parseText(text, delimiters) { 23270 //@ts-expect-error 23271 var tagRE = delimiters ? buildRegex(delimiters) : defaultTagRE; 23272 if (!tagRE.test(text)) { 23273 return; 23274 } 23275 var tokens = []; 23276 var rawTokens = []; 23277 var lastIndex = (tagRE.lastIndex = 0); 23278 var match, index, tokenValue; 23279 while ((match = tagRE.exec(text))) { 23280 index = match.index; 23281 // push text token 23282 if (index > lastIndex) { 23283 rawTokens.push((tokenValue = text.slice(lastIndex, index))); 23284 tokens.push(JSON.stringify(tokenValue)); 23285 } 23286 // tag token 23287 var exp = parseFilters(match[1].trim()); 23288 tokens.push("_s(".concat(exp, ")")); 23289 rawTokens.push({ '@binding': exp }); 23290 lastIndex = index + match[0].length; 23291 } 23292 if (lastIndex < text.length) { 23293 rawTokens.push((tokenValue = text.slice(lastIndex))); 23294 tokens.push(JSON.stringify(tokenValue)); 23295 } 23296 return { 23297 expression: tokens.join('+'), 23298 tokens: rawTokens 23299 }; 23300} 23301 23302function transformNode$1(el, options) { 23303 var warn = options.warn || baseWarn; 23304 var staticClass = getAndRemoveAttr(el, 'class'); 23305 if ( true && staticClass) { 23306 var res = parseText(staticClass, options.delimiters); 23307 if (res) { 23308 warn("class=\"".concat(staticClass, "\": ") + 23309 'Interpolation inside attributes has been removed. ' + 23310 'Use v-bind or the colon shorthand instead. For example, ' + 23311 'instead of <div class="{{ val }}">, use <div :class="val">.', el.rawAttrsMap['class']); 23312 } 23313 } 23314 if (staticClass) { 23315 el.staticClass = JSON.stringify(staticClass.replace(/\s+/g, ' ').trim()); 23316 } 23317 var classBinding = getBindingAttr(el, 'class', false /* getStatic */); 23318 if (classBinding) { 23319 el.classBinding = classBinding; 23320 } 23321} 23322function genData$2(el) { 23323 var data = ''; 23324 if (el.staticClass) { 23325 data += "staticClass:".concat(el.staticClass, ","); 23326 } 23327 if (el.classBinding) { 23328 data += "class:".concat(el.classBinding, ","); 23329 } 23330 return data; 23331} 23332var klass = { 23333 staticKeys: ['staticClass'], 23334 transformNode: transformNode$1, 23335 genData: genData$2 23336}; 23337 23338function transformNode(el, options) { 23339 var warn = options.warn || baseWarn; 23340 var staticStyle = getAndRemoveAttr(el, 'style'); 23341 if (staticStyle) { 23342 /* istanbul ignore if */ 23343 if (true) { 23344 var res = parseText(staticStyle, options.delimiters); 23345 if (res) { 23346 warn("style=\"".concat(staticStyle, "\": ") + 23347 'Interpolation inside attributes has been removed. ' + 23348 'Use v-bind or the colon shorthand instead. For example, ' + 23349 'instead of <div style="{{ val }}">, use <div :style="val">.', el.rawAttrsMap['style']); 23350 } 23351 } 23352 el.staticStyle = JSON.stringify(parseStyleText(staticStyle)); 23353 } 23354 var styleBinding = getBindingAttr(el, 'style', false /* getStatic */); 23355 if (styleBinding) { 23356 el.styleBinding = styleBinding; 23357 } 23358} 23359function genData$1(el) { 23360 var data = ''; 23361 if (el.staticStyle) { 23362 data += "staticStyle:".concat(el.staticStyle, ","); 23363 } 23364 if (el.styleBinding) { 23365 data += "style:(".concat(el.styleBinding, "),"); 23366 } 23367 return data; 23368} 23369var style = { 23370 staticKeys: ['staticStyle'], 23371 transformNode: transformNode, 23372 genData: genData$1 23373}; 23374 23375var decoder; 23376var he = { 23377 decode: function (html) { 23378 decoder = decoder || document.createElement('div'); 23379 decoder.innerHTML = html; 23380 return decoder.textContent; 23381 } 23382}; 23383 23384var isUnaryTag = makeMap('area,base,br,col,embed,frame,hr,img,input,isindex,keygen,' + 23385 'link,meta,param,source,track,wbr'); 23386// Elements that you can, intentionally, leave open 23387// (and which close themselves) 23388var canBeLeftOpenTag = makeMap('colgroup,dd,dt,li,options,p,td,tfoot,th,thead,tr,source'); 23389// HTML5 tags https://html.spec.whatwg.org/multipage/indices.html#elements-3 23390// Phrasing Content https://html.spec.whatwg.org/multipage/dom.html#phrasing-content 23391var isNonPhrasingTag = makeMap('address,article,aside,base,blockquote,body,caption,col,colgroup,dd,' + 23392 'details,dialog,div,dl,dt,fieldset,figcaption,figure,footer,form,' + 23393 'h1,h2,h3,h4,h5,h6,head,header,hgroup,hr,html,legend,li,menuitem,meta,' + 23394 'optgroup,option,param,rp,rt,source,style,summary,tbody,td,tfoot,th,thead,' + 23395 'title,tr,track'); 23396 23397/** 23398 * Not type-checking this file because it's mostly vendor code. 23399 */ 23400// Regular Expressions for parsing tags and attributes 23401var attribute = /^\s*([^\s"'<>\/=]+)(?:\s*(=)\s*(?:"([^"]*)"+|'([^']*)'+|([^\s"'=<>`]+)))?/; 23402var dynamicArgAttribute = /^\s*((?:v-[\w-]+:|@|:|#)\[[^=]+?\][^\s"'<>\/=]*)(?:\s*(=)\s*(?:"([^"]*)"+|'([^']*)'+|([^\s"'=<>`]+)))?/; 23403var ncname = "[a-zA-Z_][\\-\\.0-9_a-zA-Z".concat(unicodeRegExp.source, "]*"); 23404var qnameCapture = "((?:".concat(ncname, "\\:)?").concat(ncname, ")"); 23405var startTagOpen = new RegExp("^<".concat(qnameCapture)); 23406var startTagClose = /^\s*(\/?)>/; 23407var endTag = new RegExp("^<\\/".concat(qnameCapture, "[^>]*>")); 23408var doctype = /^<!DOCTYPE [^>]+>/i; 23409// #7298: escape - to avoid being passed as HTML comment when inlined in page 23410var comment = /^<!\--/; 23411var conditionalComment = /^<!\[/; 23412// Special Elements (can contain anything) 23413var isPlainTextElement = makeMap('script,style,textarea', true); 23414var reCache = {}; 23415var decodingMap = { 23416 '<': '<', 23417 '>': '>', 23418 '"': '"', 23419 '&': '&', 23420 ' ': '\n', 23421 '	': '\t', 23422 ''': "'" 23423}; 23424var encodedAttr = /&(?:lt|gt|quot|amp|#39);/g; 23425var encodedAttrWithNewLines = /&(?:lt|gt|quot|amp|#39|#10|#9);/g; 23426// #5992 23427var isIgnoreNewlineTag = makeMap('pre,textarea', true); 23428var shouldIgnoreFirstNewline = function (tag, html) { 23429 return tag && isIgnoreNewlineTag(tag) && html[0] === '\n'; 23430}; 23431function decodeAttr(value, shouldDecodeNewlines) { 23432 var re = shouldDecodeNewlines ? encodedAttrWithNewLines : encodedAttr; 23433 return value.replace(re, function (match) { return decodingMap[match]; }); 23434} 23435function parseHTML(html, options) { 23436 var stack = []; 23437 var expectHTML = options.expectHTML; 23438 var isUnaryTag = options.isUnaryTag || no; 23439 var canBeLeftOpenTag = options.canBeLeftOpenTag || no; 23440 var index = 0; 23441 var last, lastTag; 23442 var _loop_1 = function () { 23443 last = html; 23444 // Make sure we're not in a plaintext content element like script/style 23445 if (!lastTag || !isPlainTextElement(lastTag)) { 23446 var textEnd = html.indexOf('<'); 23447 if (textEnd === 0) { 23448 // Comment: 23449 if (comment.test(html)) { 23450 var commentEnd = html.indexOf('-->'); 23451 if (commentEnd >= 0) { 23452 if (options.shouldKeepComment && options.comment) { 23453 options.comment(html.substring(4, commentEnd), index, index + commentEnd + 3); 23454 } 23455 advance(commentEnd + 3); 23456 return "continue"; 23457 } 23458 } 23459 // https://en.wikipedia.org/wiki/Conditional_comment#Downlevel-revealed_conditional_comment 23460 if (conditionalComment.test(html)) { 23461 var conditionalEnd = html.indexOf(']>'); 23462 if (conditionalEnd >= 0) { 23463 advance(conditionalEnd + 2); 23464 return "continue"; 23465 } 23466 } 23467 // Doctype: 23468 var doctypeMatch = html.match(doctype); 23469 if (doctypeMatch) { 23470 advance(doctypeMatch[0].length); 23471 return "continue"; 23472 } 23473 // End tag: 23474 var endTagMatch = html.match(endTag); 23475 if (endTagMatch) { 23476 var curIndex = index; 23477 advance(endTagMatch[0].length); 23478 parseEndTag(endTagMatch[1], curIndex, index); 23479 return "continue"; 23480 } 23481 // Start tag: 23482 var startTagMatch = parseStartTag(); 23483 if (startTagMatch) { 23484 handleStartTag(startTagMatch); 23485 if (shouldIgnoreFirstNewline(startTagMatch.tagName, html)) { 23486 advance(1); 23487 } 23488 return "continue"; 23489 } 23490 } 23491 var text = void 0, rest = void 0, next = void 0; 23492 if (textEnd >= 0) { 23493 rest = html.slice(textEnd); 23494 while (!endTag.test(rest) && 23495 !startTagOpen.test(rest) && 23496 !comment.test(rest) && 23497 !conditionalComment.test(rest)) { 23498 // < in plain text, be forgiving and treat it as text 23499 next = rest.indexOf('<', 1); 23500 if (next < 0) 23501 break; 23502 textEnd += next; 23503 rest = html.slice(textEnd); 23504 } 23505 text = html.substring(0, textEnd); 23506 } 23507 if (textEnd < 0) { 23508 text = html; 23509 } 23510 if (text) { 23511 advance(text.length); 23512 } 23513 if (options.chars && text) { 23514 options.chars(text, index - text.length, index); 23515 } 23516 } 23517 else { 23518 var endTagLength_1 = 0; 23519 var stackedTag_1 = lastTag.toLowerCase(); 23520 var reStackedTag = reCache[stackedTag_1] || 23521 (reCache[stackedTag_1] = new RegExp('([\\s\\S]*?)(</' + stackedTag_1 + '[^>]*>)', 'i')); 23522 var rest = html.replace(reStackedTag, function (all, text, endTag) { 23523 endTagLength_1 = endTag.length; 23524 if (!isPlainTextElement(stackedTag_1) && stackedTag_1 !== 'noscript') { 23525 text = text 23526 .replace(/<!\--([\s\S]*?)-->/g, '$1') // #7298 23527 .replace(/<!\[CDATA\[([\s\S]*?)]]>/g, '$1'); 23528 } 23529 if (shouldIgnoreFirstNewline(stackedTag_1, text)) { 23530 text = text.slice(1); 23531 } 23532 if (options.chars) { 23533 options.chars(text); 23534 } 23535 return ''; 23536 }); 23537 index += html.length - rest.length; 23538 html = rest; 23539 parseEndTag(stackedTag_1, index - endTagLength_1, index); 23540 } 23541 if (html === last) { 23542 options.chars && options.chars(html); 23543 if ( true && !stack.length && options.warn) { 23544 options.warn("Mal-formatted tag at end of template: \"".concat(html, "\""), { 23545 start: index + html.length 23546 }); 23547 } 23548 return "break"; 23549 } 23550 }; 23551 while (html) { 23552 var state_1 = _loop_1(); 23553 if (state_1 === "break") 23554 break; 23555 } 23556 // Clean up any remaining tags 23557 parseEndTag(); 23558 function advance(n) { 23559 index += n; 23560 html = html.substring(n); 23561 } 23562 function parseStartTag() { 23563 var start = html.match(startTagOpen); 23564 if (start) { 23565 var match = { 23566 tagName: start[1], 23567 attrs: [], 23568 start: index 23569 }; 23570 advance(start[0].length); 23571 var end = void 0, attr = void 0; 23572 while (!(end = html.match(startTagClose)) && 23573 (attr = html.match(dynamicArgAttribute) || html.match(attribute))) { 23574 attr.start = index; 23575 advance(attr[0].length); 23576 attr.end = index; 23577 match.attrs.push(attr); 23578 } 23579 if (end) { 23580 match.unarySlash = end[1]; 23581 advance(end[0].length); 23582 match.end = index; 23583 return match; 23584 } 23585 } 23586 } 23587 function handleStartTag(match) { 23588 var tagName = match.tagName; 23589 var unarySlash = match.unarySlash; 23590 if (expectHTML) { 23591 if (lastTag === 'p' && isNonPhrasingTag(tagName)) { 23592 parseEndTag(lastTag); 23593 } 23594 if (canBeLeftOpenTag(tagName) && lastTag === tagName) { 23595 parseEndTag(tagName); 23596 } 23597 } 23598 var unary = isUnaryTag(tagName) || !!unarySlash; 23599 var l = match.attrs.length; 23600 var attrs = new Array(l); 23601 for (var i = 0; i < l; i++) { 23602 var args = match.attrs[i]; 23603 var value = args[3] || args[4] || args[5] || ''; 23604 var shouldDecodeNewlines = tagName === 'a' && args[1] === 'href' 23605 ? options.shouldDecodeNewlinesForHref 23606 : options.shouldDecodeNewlines; 23607 attrs[i] = { 23608 name: args[1], 23609 value: decodeAttr(value, shouldDecodeNewlines) 23610 }; 23611 if ( true && options.outputSourceRange) { 23612 attrs[i].start = args.start + args[0].match(/^\s*/).length; 23613 attrs[i].end = args.end; 23614 } 23615 } 23616 if (!unary) { 23617 stack.push({ 23618 tag: tagName, 23619 lowerCasedTag: tagName.toLowerCase(), 23620 attrs: attrs, 23621 start: match.start, 23622 end: match.end 23623 }); 23624 lastTag = tagName; 23625 } 23626 if (options.start) { 23627 options.start(tagName, attrs, unary, match.start, match.end); 23628 } 23629 } 23630 function parseEndTag(tagName, start, end) { 23631 var pos, lowerCasedTagName; 23632 if (start == null) 23633 start = index; 23634 if (end == null) 23635 end = index; 23636 // Find the closest opened tag of the same type 23637 if (tagName) { 23638 lowerCasedTagName = tagName.toLowerCase(); 23639 for (pos = stack.length - 1; pos >= 0; pos--) { 23640 if (stack[pos].lowerCasedTag === lowerCasedTagName) { 23641 break; 23642 } 23643 } 23644 } 23645 else { 23646 // If no tag name is provided, clean shop 23647 pos = 0; 23648 } 23649 if (pos >= 0) { 23650 // Close all the open elements, up the stack 23651 for (var i = stack.length - 1; i >= pos; i--) { 23652 if ( true && (i > pos || !tagName) && options.warn) { 23653 options.warn("tag <".concat(stack[i].tag, "> has no matching end tag."), { 23654 start: stack[i].start, 23655 end: stack[i].end 23656 }); 23657 } 23658 if (options.end) { 23659 options.end(stack[i].tag, start, end); 23660 } 23661 } 23662 // Remove the open elements from the stack 23663 stack.length = pos; 23664 lastTag = pos && stack[pos - 1].tag; 23665 } 23666 else if (lowerCasedTagName === 'br') { 23667 if (options.start) { 23668 options.start(tagName, [], true, start, end); 23669 } 23670 } 23671 else if (lowerCasedTagName === 'p') { 23672 if (options.start) { 23673 options.start(tagName, [], false, start, end); 23674 } 23675 if (options.end) { 23676 options.end(tagName, start, end); 23677 } 23678 } 23679 } 23680} 23681 23682var onRE = /^@|^v-on:/; 23683var dirRE = /^v-|^@|^:|^#/; 23684var forAliasRE = /([\s\S]*?)\s+(?:in|of)\s+([\s\S]*)/; 23685var forIteratorRE = /,([^,\}\]]*)(?:,([^,\}\]]*))?$/; 23686var stripParensRE = /^\(|\)$/g; 23687var dynamicArgRE = /^\[.*\]$/; 23688var argRE = /:(.*)$/; 23689var bindRE = /^:|^\.|^v-bind:/; 23690var modifierRE = /\.[^.\]]+(?=[^\]]*$)/g; 23691var slotRE = /^v-slot(:|$)|^#/; 23692var lineBreakRE = /[\r\n]/; 23693var whitespaceRE = /[ \f\t\r\n]+/g; 23694var invalidAttributeRE = /[\s"'<>\/=]/; 23695var decodeHTMLCached = cached(he.decode); 23696var emptySlotScopeToken = "_empty_"; 23697// configurable state 23698var warn; 23699var delimiters; 23700var transforms; 23701var preTransforms; 23702var postTransforms; 23703var platformIsPreTag; 23704var platformMustUseProp; 23705var platformGetTagNamespace; 23706var maybeComponent; 23707function createASTElement(tag, attrs, parent) { 23708 return { 23709 type: 1, 23710 tag: tag, 23711 attrsList: attrs, 23712 attrsMap: makeAttrsMap(attrs), 23713 rawAttrsMap: {}, 23714 parent: parent, 23715 children: [] 23716 }; 23717} 23718/** 23719 * Convert HTML string to AST. 23720 */ 23721function parse(template, options) { 23722 warn = options.warn || baseWarn; 23723 platformIsPreTag = options.isPreTag || no; 23724 platformMustUseProp = options.mustUseProp || no; 23725 platformGetTagNamespace = options.getTagNamespace || no; 23726 var isReservedTag = options.isReservedTag || no; 23727 maybeComponent = function (el) { 23728 return !!(el.component || 23729 el.attrsMap[':is'] || 23730 el.attrsMap['v-bind:is'] || 23731 !(el.attrsMap.is ? isReservedTag(el.attrsMap.is) : isReservedTag(el.tag))); 23732 }; 23733 transforms = pluckModuleFunction(options.modules, 'transformNode'); 23734 preTransforms = pluckModuleFunction(options.modules, 'preTransformNode'); 23735 postTransforms = pluckModuleFunction(options.modules, 'postTransformNode'); 23736 delimiters = options.delimiters; 23737 var stack = []; 23738 var preserveWhitespace = options.preserveWhitespace !== false; 23739 var whitespaceOption = options.whitespace; 23740 var root; 23741 var currentParent; 23742 var inVPre = false; 23743 var inPre = false; 23744 var warned = false; 23745 function warnOnce(msg, range) { 23746 if (!warned) { 23747 warned = true; 23748 warn(msg, range); 23749 } 23750 } 23751 function closeElement(element) { 23752 trimEndingWhitespace(element); 23753 if (!inVPre && !element.processed) { 23754 element = processElement(element, options); 23755 } 23756 // tree management 23757 if (!stack.length && element !== root) { 23758 // allow root elements with v-if, v-else-if and v-else 23759 if (root.if && (element.elseif || element.else)) { 23760 if (true) { 23761 checkRootConstraints(element); 23762 } 23763 addIfCondition(root, { 23764 exp: element.elseif, 23765 block: element 23766 }); 23767 } 23768 else if (true) { 23769 warnOnce("Component template should contain exactly one root element. " + 23770 "If you are using v-if on multiple elements, " + 23771 "use v-else-if to chain them instead.", { start: element.start }); 23772 } 23773 } 23774 if (currentParent && !element.forbidden) { 23775 if (element.elseif || element.else) { 23776 processIfConditions(element, currentParent); 23777 } 23778 else { 23779 if (element.slotScope) { 23780 // scoped slot 23781 // keep it in the children list so that v-else(-if) conditions can 23782 // find it as the prev node. 23783 var name_1 = element.slotTarget || '"default"'; 23784 (currentParent.scopedSlots || (currentParent.scopedSlots = {}))[name_1] = element; 23785 } 23786 currentParent.children.push(element); 23787 element.parent = currentParent; 23788 } 23789 } 23790 // final children cleanup 23791 // filter out scoped slots 23792 element.children = element.children.filter(function (c) { return !c.slotScope; }); 23793 // remove trailing whitespace node again 23794 trimEndingWhitespace(element); 23795 // check pre state 23796 if (element.pre) { 23797 inVPre = false; 23798 } 23799 if (platformIsPreTag(element.tag)) { 23800 inPre = false; 23801 } 23802 // apply post-transforms 23803 for (var i = 0; i < postTransforms.length; i++) { 23804 postTransforms[i](element, options); 23805 } 23806 } 23807 function trimEndingWhitespace(el) { 23808 // remove trailing whitespace node 23809 if (!inPre) { 23810 var lastNode = void 0; 23811 while ((lastNode = el.children[el.children.length - 1]) && 23812 lastNode.type === 3 && 23813 lastNode.text === ' ') { 23814 el.children.pop(); 23815 } 23816 } 23817 } 23818 function checkRootConstraints(el) { 23819 if (el.tag === 'slot' || el.tag === 'template') { 23820 warnOnce("Cannot use <".concat(el.tag, "> as component root element because it may ") + 23821 'contain multiple nodes.', { start: el.start }); 23822 } 23823 if (el.attrsMap.hasOwnProperty('v-for')) { 23824 warnOnce('Cannot use v-for on stateful component root element because ' + 23825 'it renders multiple elements.', el.rawAttrsMap['v-for']); 23826 } 23827 } 23828 parseHTML(template, { 23829 warn: warn, 23830 expectHTML: options.expectHTML, 23831 isUnaryTag: options.isUnaryTag, 23832 canBeLeftOpenTag: options.canBeLeftOpenTag, 23833 shouldDecodeNewlines: options.shouldDecodeNewlines, 23834 shouldDecodeNewlinesForHref: options.shouldDecodeNewlinesForHref, 23835 shouldKeepComment: options.comments, 23836 outputSourceRange: options.outputSourceRange, 23837 start: function (tag, attrs, unary, start, end) { 23838 // check namespace. 23839 // inherit parent ns if there is one 23840 var ns = (currentParent && currentParent.ns) || platformGetTagNamespace(tag); 23841 // handle IE svg bug 23842 /* istanbul ignore if */ 23843 if (isIE && ns === 'svg') { 23844 attrs = guardIESVGBug(attrs); 23845 } 23846 var element = createASTElement(tag, attrs, currentParent); 23847 if (ns) { 23848 element.ns = ns; 23849 } 23850 if (true) { 23851 if (options.outputSourceRange) { 23852 element.start = start; 23853 element.end = end; 23854 element.rawAttrsMap = element.attrsList.reduce(function (cumulated, attr) { 23855 cumulated[attr.name] = attr; 23856 return cumulated; 23857 }, {}); 23858 } 23859 attrs.forEach(function (attr) { 23860 if (invalidAttributeRE.test(attr.name)) { 23861 warn("Invalid dynamic argument expression: attribute names cannot contain " + 23862 "spaces, quotes, <, >, / or =.", options.outputSourceRange 23863 ? { 23864 start: attr.start + attr.name.indexOf("["), 23865 end: attr.start + attr.name.length 23866 } 23867 : undefined); 23868 } 23869 }); 23870 } 23871 if (isForbiddenTag(element) && !isServerRendering()) { 23872 element.forbidden = true; 23873 true && 23874 warn('Templates should only be responsible for mapping the state to the ' + 23875 'UI. Avoid placing tags with side-effects in your templates, such as ' + 23876 "<".concat(tag, ">") + 23877 ', as they will not be parsed.', { start: element.start }); 23878 } 23879 // apply pre-transforms 23880 for (var i = 0; i < preTransforms.length; i++) { 23881 element = preTransforms[i](element, options) || element; 23882 } 23883 if (!inVPre) { 23884 processPre(element); 23885 if (element.pre) { 23886 inVPre = true; 23887 } 23888 } 23889 if (platformIsPreTag(element.tag)) { 23890 inPre = true; 23891 } 23892 if (inVPre) { 23893 processRawAttrs(element); 23894 } 23895 else if (!element.processed) { 23896 // structural directives 23897 processFor(element); 23898 processIf(element); 23899 processOnce(element); 23900 } 23901 if (!root) { 23902 root = element; 23903 if (true) { 23904 checkRootConstraints(root); 23905 } 23906 } 23907 if (!unary) { 23908 currentParent = element; 23909 stack.push(element); 23910 } 23911 else { 23912 closeElement(element); 23913 } 23914 }, 23915 end: function (tag, start, end) { 23916 var element = stack[stack.length - 1]; 23917 // pop stack 23918 stack.length -= 1; 23919 currentParent = stack[stack.length - 1]; 23920 if ( true && options.outputSourceRange) { 23921 element.end = end; 23922 } 23923 closeElement(element); 23924 }, 23925 chars: function (text, start, end) { 23926 if (!currentParent) { 23927 if (true) { 23928 if (text === template) { 23929 warnOnce('Component template requires a root element, rather than just text.', { start: start }); 23930 } 23931 else if ((text = text.trim())) { 23932 warnOnce("text \"".concat(text, "\" outside root element will be ignored."), { 23933 start: start 23934 }); 23935 } 23936 } 23937 return; 23938 } 23939 // IE textarea placeholder bug 23940 /* istanbul ignore if */ 23941 if (isIE && 23942 currentParent.tag === 'textarea' && 23943 currentParent.attrsMap.placeholder === text) { 23944 return; 23945 } 23946 var children = currentParent.children; 23947 if (inPre || text.trim()) { 23948 text = isTextTag(currentParent) 23949 ? text 23950 : decodeHTMLCached(text); 23951 } 23952 else if (!children.length) { 23953 // remove the whitespace-only node right after an opening tag 23954 text = ''; 23955 } 23956 else if (whitespaceOption) { 23957 if (whitespaceOption === 'condense') { 23958 // in condense mode, remove the whitespace node if it contains 23959 // line break, otherwise condense to a single space 23960 text = lineBreakRE.test(text) ? '' : ' '; 23961 } 23962 else { 23963 text = ' '; 23964 } 23965 } 23966 else { 23967 text = preserveWhitespace ? ' ' : ''; 23968 } 23969 if (text) { 23970 if (!inPre && whitespaceOption === 'condense') { 23971 // condense consecutive whitespaces into single space 23972 text = text.replace(whitespaceRE, ' '); 23973 } 23974 var res = void 0; 23975 var child = void 0; 23976 if (!inVPre && text !== ' ' && (res = parseText(text, delimiters))) { 23977 child = { 23978 type: 2, 23979 expression: res.expression, 23980 tokens: res.tokens, 23981 text: text 23982 }; 23983 } 23984 else if (text !== ' ' || 23985 !children.length || 23986 children[children.length - 1].text !== ' ') { 23987 child = { 23988 type: 3, 23989 text: text 23990 }; 23991 } 23992 if (child) { 23993 if ( true && options.outputSourceRange) { 23994 child.start = start; 23995 child.end = end; 23996 } 23997 children.push(child); 23998 } 23999 } 24000 }, 24001 comment: function (text, start, end) { 24002 // adding anything as a sibling to the root node is forbidden 24003 // comments should still be allowed, but ignored 24004 if (currentParent) { 24005 var child = { 24006 type: 3, 24007 text: text, 24008 isComment: true 24009 }; 24010 if ( true && options.outputSourceRange) { 24011 child.start = start; 24012 child.end = end; 24013 } 24014 currentParent.children.push(child); 24015 } 24016 } 24017 }); 24018 return root; 24019} 24020function processPre(el) { 24021 if (getAndRemoveAttr(el, 'v-pre') != null) { 24022 el.pre = true; 24023 } 24024} 24025function processRawAttrs(el) { 24026 var list = el.attrsList; 24027 var len = list.length; 24028 if (len) { 24029 var attrs = (el.attrs = new Array(len)); 24030 for (var i = 0; i < len; i++) { 24031 attrs[i] = { 24032 name: list[i].name, 24033 value: JSON.stringify(list[i].value) 24034 }; 24035 if (list[i].start != null) { 24036 attrs[i].start = list[i].start; 24037 attrs[i].end = list[i].end; 24038 } 24039 } 24040 } 24041 else if (!el.pre) { 24042 // non root node in pre blocks with no attributes 24043 el.plain = true; 24044 } 24045} 24046function processElement(element, options) { 24047 processKey(element); 24048 // determine whether this is a plain element after 24049 // removing structural attributes 24050 element.plain = 24051 !element.key && !element.scopedSlots && !element.attrsList.length; 24052 processRef(element); 24053 processSlotContent(element); 24054 processSlotOutlet(element); 24055 processComponent(element); 24056 for (var i = 0; i < transforms.length; i++) { 24057 element = transforms[i](element, options) || element; 24058 } 24059 processAttrs(element); 24060 return element; 24061} 24062function processKey(el) { 24063 var exp = getBindingAttr(el, 'key'); 24064 if (exp) { 24065 if (true) { 24066 if (el.tag === 'template') { 24067 warn("<template> cannot be keyed. Place the key on real elements instead.", getRawBindingAttr(el, 'key')); 24068 } 24069 if (el.for) { 24070 var iterator = el.iterator2 || el.iterator1; 24071 var parent_1 = el.parent; 24072 if (iterator && 24073 iterator === exp && 24074 parent_1 && 24075 parent_1.tag === 'transition-group') { 24076 warn("Do not use v-for index as key on <transition-group> children, " + 24077 "this is the same as not using keys.", getRawBindingAttr(el, 'key'), true /* tip */); 24078 } 24079 } 24080 } 24081 el.key = exp; 24082 } 24083} 24084function processRef(el) { 24085 var ref = getBindingAttr(el, 'ref'); 24086 if (ref) { 24087 el.ref = ref; 24088 el.refInFor = checkInFor(el); 24089 } 24090} 24091function processFor(el) { 24092 var exp; 24093 if ((exp = getAndRemoveAttr(el, 'v-for'))) { 24094 var res = parseFor(exp); 24095 if (res) { 24096 extend(el, res); 24097 } 24098 else if (true) { 24099 warn("Invalid v-for expression: ".concat(exp), el.rawAttrsMap['v-for']); 24100 } 24101 } 24102} 24103function parseFor(exp) { 24104 var inMatch = exp.match(forAliasRE); 24105 if (!inMatch) 24106 return; 24107 var res = {}; 24108 res.for = inMatch[2].trim(); 24109 var alias = inMatch[1].trim().replace(stripParensRE, ''); 24110 var iteratorMatch = alias.match(forIteratorRE); 24111 if (iteratorMatch) { 24112 res.alias = alias.replace(forIteratorRE, '').trim(); 24113 res.iterator1 = iteratorMatch[1].trim(); 24114 if (iteratorMatch[2]) { 24115 res.iterator2 = iteratorMatch[2].trim(); 24116 } 24117 } 24118 else { 24119 res.alias = alias; 24120 } 24121 return res; 24122} 24123function processIf(el) { 24124 var exp = getAndRemoveAttr(el, 'v-if'); 24125 if (exp) { 24126 el.if = exp; 24127 addIfCondition(el, { 24128 exp: exp, 24129 block: el 24130 }); 24131 } 24132 else { 24133 if (getAndRemoveAttr(el, 'v-else') != null) { 24134 el.else = true; 24135 } 24136 var elseif = getAndRemoveAttr(el, 'v-else-if'); 24137 if (elseif) { 24138 el.elseif = elseif; 24139 } 24140 } 24141} 24142function processIfConditions(el, parent) { 24143 var prev = findPrevElement(parent.children); 24144 if (prev && prev.if) { 24145 addIfCondition(prev, { 24146 exp: el.elseif, 24147 block: el 24148 }); 24149 } 24150 else if (true) { 24151 warn("v-".concat(el.elseif ? 'else-if="' + el.elseif + '"' : 'else', " ") + 24152 "used on element <".concat(el.tag, "> without corresponding v-if."), el.rawAttrsMap[el.elseif ? 'v-else-if' : 'v-else']); 24153 } 24154} 24155function findPrevElement(children) { 24156 var i = children.length; 24157 while (i--) { 24158 if (children[i].type === 1) { 24159 return children[i]; 24160 } 24161 else { 24162 if ( true && children[i].text !== ' ') { 24163 warn("text \"".concat(children[i].text.trim(), "\" between v-if and v-else(-if) ") + 24164 "will be ignored.", children[i]); 24165 } 24166 children.pop(); 24167 } 24168 } 24169} 24170function addIfCondition(el, condition) { 24171 if (!el.ifConditions) { 24172 el.ifConditions = []; 24173 } 24174 el.ifConditions.push(condition); 24175} 24176function processOnce(el) { 24177 var once = getAndRemoveAttr(el, 'v-once'); 24178 if (once != null) { 24179 el.once = true; 24180 } 24181} 24182// handle content being passed to a component as slot, 24183// e.g. <template slot="xxx">, <div slot-scope="xxx"> 24184function processSlotContent(el) { 24185 var slotScope; 24186 if (el.tag === 'template') { 24187 slotScope = getAndRemoveAttr(el, 'scope'); 24188 /* istanbul ignore if */ 24189 if ( true && slotScope) { 24190 warn("the \"scope\" attribute for scoped slots have been deprecated and " + 24191 "replaced by \"slot-scope\" since 2.5. The new \"slot-scope\" attribute " + 24192 "can also be used on plain elements in addition to <template> to " + 24193 "denote scoped slots.", el.rawAttrsMap['scope'], true); 24194 } 24195 el.slotScope = slotScope || getAndRemoveAttr(el, 'slot-scope'); 24196 } 24197 else if ((slotScope = getAndRemoveAttr(el, 'slot-scope'))) { 24198 /* istanbul ignore if */ 24199 if ( true && el.attrsMap['v-for']) { 24200 warn("Ambiguous combined usage of slot-scope and v-for on <".concat(el.tag, "> ") + 24201 "(v-for takes higher priority). Use a wrapper <template> for the " + 24202 "scoped slot to make it clearer.", el.rawAttrsMap['slot-scope'], true); 24203 } 24204 el.slotScope = slotScope; 24205 } 24206 // slot="xxx" 24207 var slotTarget = getBindingAttr(el, 'slot'); 24208 if (slotTarget) { 24209 el.slotTarget = slotTarget === '""' ? '"default"' : slotTarget; 24210 el.slotTargetDynamic = !!(el.attrsMap[':slot'] || el.attrsMap['v-bind:slot']); 24211 // preserve slot as an attribute for native shadow DOM compat 24212 // only for non-scoped slots. 24213 if (el.tag !== 'template' && !el.slotScope) { 24214 addAttr(el, 'slot', slotTarget, getRawBindingAttr(el, 'slot')); 24215 } 24216 } 24217 // 2.6 v-slot syntax 24218 { 24219 if (el.tag === 'template') { 24220 // v-slot on <template> 24221 var slotBinding = getAndRemoveAttrByRegex(el, slotRE); 24222 if (slotBinding) { 24223 if (true) { 24224 if (el.slotTarget || el.slotScope) { 24225 warn("Unexpected mixed usage of different slot syntaxes.", el); 24226 } 24227 if (el.parent && !maybeComponent(el.parent)) { 24228 warn("<template v-slot> can only appear at the root level inside " + 24229 "the receiving component", el); 24230 } 24231 } 24232 var _a = getSlotName(slotBinding), name_2 = _a.name, dynamic = _a.dynamic; 24233 el.slotTarget = name_2; 24234 el.slotTargetDynamic = dynamic; 24235 el.slotScope = slotBinding.value || emptySlotScopeToken; // force it into a scoped slot for perf 24236 } 24237 } 24238 else { 24239 // v-slot on component, denotes default slot 24240 var slotBinding = getAndRemoveAttrByRegex(el, slotRE); 24241 if (slotBinding) { 24242 if (true) { 24243 if (!maybeComponent(el)) { 24244 warn("v-slot can only be used on components or <template>.", slotBinding); 24245 } 24246 if (el.slotScope || el.slotTarget) { 24247 warn("Unexpected mixed usage of different slot syntaxes.", el); 24248 } 24249 if (el.scopedSlots) { 24250 warn("To avoid scope ambiguity, the default slot should also use " + 24251 "<template> syntax when there are other named slots.", slotBinding); 24252 } 24253 } 24254 // add the component's children to its default slot 24255 var slots = el.scopedSlots || (el.scopedSlots = {}); 24256 var _b = getSlotName(slotBinding), name_3 = _b.name, dynamic = _b.dynamic; 24257 var slotContainer_1 = (slots[name_3] = createASTElement('template', [], el)); 24258 slotContainer_1.slotTarget = name_3; 24259 slotContainer_1.slotTargetDynamic = dynamic; 24260 slotContainer_1.children = el.children.filter(function (c) { 24261 if (!c.slotScope) { 24262 c.parent = slotContainer_1; 24263 return true; 24264 } 24265 }); 24266 slotContainer_1.slotScope = slotBinding.value || emptySlotScopeToken; 24267 // remove children as they are returned from scopedSlots now 24268 el.children = []; 24269 // mark el non-plain so data gets generated 24270 el.plain = false; 24271 } 24272 } 24273 } 24274} 24275function getSlotName(binding) { 24276 var name = binding.name.replace(slotRE, ''); 24277 if (!name) { 24278 if (binding.name[0] !== '#') { 24279 name = 'default'; 24280 } 24281 else if (true) { 24282 warn("v-slot shorthand syntax requires a slot name.", binding); 24283 } 24284 } 24285 return dynamicArgRE.test(name) 24286 ? // dynamic [name] 24287 { name: name.slice(1, -1), dynamic: true } 24288 : // static name 24289 { name: "\"".concat(name, "\""), dynamic: false }; 24290} 24291// handle <slot/> outlets 24292function processSlotOutlet(el) { 24293 if (el.tag === 'slot') { 24294 el.slotName = getBindingAttr(el, 'name'); 24295 if ( true && el.key) { 24296 warn("`key` does not work on <slot> because slots are abstract outlets " + 24297 "and can possibly expand into multiple elements. " + 24298 "Use the key on a wrapping element instead.", getRawBindingAttr(el, 'key')); 24299 } 24300 } 24301} 24302function processComponent(el) { 24303 var binding; 24304 if ((binding = getBindingAttr(el, 'is'))) { 24305 el.component = binding; 24306 } 24307 if (getAndRemoveAttr(el, 'inline-template') != null) { 24308 el.inlineTemplate = true; 24309 } 24310} 24311function processAttrs(el) { 24312 var list = el.attrsList; 24313 var i, l, name, rawName, value, modifiers, syncGen, isDynamic; 24314 for (i = 0, l = list.length; i < l; i++) { 24315 name = rawName = list[i].name; 24316 value = list[i].value; 24317 if (dirRE.test(name)) { 24318 // mark element as dynamic 24319 el.hasBindings = true; 24320 // modifiers 24321 modifiers = parseModifiers(name.replace(dirRE, '')); 24322 // support .foo shorthand syntax for the .prop modifier 24323 if (modifiers) { 24324 name = name.replace(modifierRE, ''); 24325 } 24326 if (bindRE.test(name)) { 24327 // v-bind 24328 name = name.replace(bindRE, ''); 24329 value = parseFilters(value); 24330 isDynamic = dynamicArgRE.test(name); 24331 if (isDynamic) { 24332 name = name.slice(1, -1); 24333 } 24334 if ( true && value.trim().length === 0) { 24335 warn("The value for a v-bind expression cannot be empty. Found in \"v-bind:".concat(name, "\"")); 24336 } 24337 if (modifiers) { 24338 if (modifiers.prop && !isDynamic) { 24339 name = camelize(name); 24340 if (name === 'innerHtml') 24341 name = 'innerHTML'; 24342 } 24343 if (modifiers.camel && !isDynamic) { 24344 name = camelize(name); 24345 } 24346 if (modifiers.sync) { 24347 syncGen = genAssignmentCode(value, "$event"); 24348 if (!isDynamic) { 24349 addHandler(el, "update:".concat(camelize(name)), syncGen, null, false, warn, list[i]); 24350 if (hyphenate(name) !== camelize(name)) { 24351 addHandler(el, "update:".concat(hyphenate(name)), syncGen, null, false, warn, list[i]); 24352 } 24353 } 24354 else { 24355 // handler w/ dynamic event name 24356 addHandler(el, "\"update:\"+(".concat(name, ")"), syncGen, null, false, warn, list[i], true // dynamic 24357 ); 24358 } 24359 } 24360 } 24361 if ((modifiers && modifiers.prop) || 24362 (!el.component && platformMustUseProp(el.tag, el.attrsMap.type, name))) { 24363 addProp(el, name, value, list[i], isDynamic); 24364 } 24365 else { 24366 addAttr(el, name, value, list[i], isDynamic); 24367 } 24368 } 24369 else if (onRE.test(name)) { 24370 // v-on 24371 name = name.replace(onRE, ''); 24372 isDynamic = dynamicArgRE.test(name); 24373 if (isDynamic) { 24374 name = name.slice(1, -1); 24375 } 24376 addHandler(el, name, value, modifiers, false, warn, list[i], isDynamic); 24377 } 24378 else { 24379 // normal directives 24380 name = name.replace(dirRE, ''); 24381 // parse arg 24382 var argMatch = name.match(argRE); 24383 var arg = argMatch && argMatch[1]; 24384 isDynamic = false; 24385 if (arg) { 24386 name = name.slice(0, -(arg.length + 1)); 24387 if (dynamicArgRE.test(arg)) { 24388 arg = arg.slice(1, -1); 24389 isDynamic = true; 24390 } 24391 } 24392 addDirective(el, name, rawName, value, arg, isDynamic, modifiers, list[i]); 24393 if ( true && name === 'model') { 24394 checkForAliasModel(el, value); 24395 } 24396 } 24397 } 24398 else { 24399 // literal attribute 24400 if (true) { 24401 var res = parseText(value, delimiters); 24402 if (res) { 24403 warn("".concat(name, "=\"").concat(value, "\": ") + 24404 'Interpolation inside attributes has been removed. ' + 24405 'Use v-bind or the colon shorthand instead. For example, ' + 24406 'instead of <div id="{{ val }}">, use <div :id="val">.', list[i]); 24407 } 24408 } 24409 addAttr(el, name, JSON.stringify(value), list[i]); 24410 // #6887 firefox doesn't update muted state if set via attribute 24411 // even immediately after element creation 24412 if (!el.component && 24413 name === 'muted' && 24414 platformMustUseProp(el.tag, el.attrsMap.type, name)) { 24415 addProp(el, name, 'true', list[i]); 24416 } 24417 } 24418 } 24419} 24420function checkInFor(el) { 24421 var parent = el; 24422 while (parent) { 24423 if (parent.for !== undefined) { 24424 return true; 24425 } 24426 parent = parent.parent; 24427 } 24428 return false; 24429} 24430function parseModifiers(name) { 24431 var match = name.match(modifierRE); 24432 if (match) { 24433 var ret_1 = {}; 24434 match.forEach(function (m) { 24435 ret_1[m.slice(1)] = true; 24436 }); 24437 return ret_1; 24438 } 24439} 24440function makeAttrsMap(attrs) { 24441 var map = {}; 24442 for (var i = 0, l = attrs.length; i < l; i++) { 24443 if ( true && map[attrs[i].name] && !isIE && !isEdge) { 24444 warn('duplicate attribute: ' + attrs[i].name, attrs[i]); 24445 } 24446 map[attrs[i].name] = attrs[i].value; 24447 } 24448 return map; 24449} 24450// for script (e.g. type="x/template") or style, do not decode content 24451function isTextTag(el) { 24452 return el.tag === 'script' || el.tag === 'style'; 24453} 24454function isForbiddenTag(el) { 24455 return (el.tag === 'style' || 24456 (el.tag === 'script' && 24457 (!el.attrsMap.type || el.attrsMap.type === 'text/javascript'))); 24458} 24459var ieNSBug = /^xmlns:NS\d+/; 24460var ieNSPrefix = /^NS\d+:/; 24461/* istanbul ignore next */ 24462function guardIESVGBug(attrs) { 24463 var res = []; 24464 for (var i = 0; i < attrs.length; i++) { 24465 var attr = attrs[i]; 24466 if (!ieNSBug.test(attr.name)) { 24467 attr.name = attr.name.replace(ieNSPrefix, ''); 24468 res.push(attr); 24469 } 24470 } 24471 return res; 24472} 24473function checkForAliasModel(el, value) { 24474 var _el = el; 24475 while (_el) { 24476 if (_el.for && _el.alias === value) { 24477 warn("<".concat(el.tag, " v-model=\"").concat(value, "\">: ") + 24478 "You are binding v-model directly to a v-for iteration alias. " + 24479 "This will not be able to modify the v-for source array because " + 24480 "writing to the alias is like modifying a function local variable. " + 24481 "Consider using an array of objects and use v-model on an object property instead.", el.rawAttrsMap['v-model']); 24482 } 24483 _el = _el.parent; 24484 } 24485} 24486 24487/** 24488 * Expand input[v-model] with dynamic type bindings into v-if-else chains 24489 * Turn this: 24490 * <input v-model="data[type]" :type="type"> 24491 * into this: 24492 * <input v-if="type === 'checkbox'" type="checkbox" v-model="data[type]"> 24493 * <input v-else-if="type === 'radio'" type="radio" v-model="data[type]"> 24494 * <input v-else :type="type" v-model="data[type]"> 24495 */ 24496function preTransformNode(el, options) { 24497 if (el.tag === 'input') { 24498 var map = el.attrsMap; 24499 if (!map['v-model']) { 24500 return; 24501 } 24502 var typeBinding = void 0; 24503 if (map[':type'] || map['v-bind:type']) { 24504 typeBinding = getBindingAttr(el, 'type'); 24505 } 24506 if (!map.type && !typeBinding && map['v-bind']) { 24507 typeBinding = "(".concat(map['v-bind'], ").type"); 24508 } 24509 if (typeBinding) { 24510 var ifCondition = getAndRemoveAttr(el, 'v-if', true); 24511 var ifConditionExtra = ifCondition ? "&&(".concat(ifCondition, ")") : ""; 24512 var hasElse = getAndRemoveAttr(el, 'v-else', true) != null; 24513 var elseIfCondition = getAndRemoveAttr(el, 'v-else-if', true); 24514 // 1. checkbox 24515 var branch0 = cloneASTElement(el); 24516 // process for on the main node 24517 processFor(branch0); 24518 addRawAttr(branch0, 'type', 'checkbox'); 24519 processElement(branch0, options); 24520 branch0.processed = true; // prevent it from double-processed 24521 branch0.if = "(".concat(typeBinding, ")==='checkbox'") + ifConditionExtra; 24522 addIfCondition(branch0, { 24523 exp: branch0.if, 24524 block: branch0 24525 }); 24526 // 2. add radio else-if condition 24527 var branch1 = cloneASTElement(el); 24528 getAndRemoveAttr(branch1, 'v-for', true); 24529 addRawAttr(branch1, 'type', 'radio'); 24530 processElement(branch1, options); 24531 addIfCondition(branch0, { 24532 exp: "(".concat(typeBinding, ")==='radio'") + ifConditionExtra, 24533 block: branch1 24534 }); 24535 // 3. other 24536 var branch2 = cloneASTElement(el); 24537 getAndRemoveAttr(branch2, 'v-for', true); 24538 addRawAttr(branch2, ':type', typeBinding); 24539 processElement(branch2, options); 24540 addIfCondition(branch0, { 24541 exp: ifCondition, 24542 block: branch2 24543 }); 24544 if (hasElse) { 24545 branch0.else = true; 24546 } 24547 else if (elseIfCondition) { 24548 branch0.elseif = elseIfCondition; 24549 } 24550 return branch0; 24551 } 24552 } 24553} 24554function cloneASTElement(el) { 24555 return createASTElement(el.tag, el.attrsList.slice(), el.parent); 24556} 24557var model = { 24558 preTransformNode: preTransformNode 24559}; 24560 24561var modules = [klass, style, model]; 24562 24563function text(el, dir) { 24564 if (dir.value) { 24565 addProp(el, 'textContent', "_s(".concat(dir.value, ")"), dir); 24566 } 24567} 24568 24569function html(el, dir) { 24570 if (dir.value) { 24571 addProp(el, 'innerHTML', "_s(".concat(dir.value, ")"), dir); 24572 } 24573} 24574 24575var directives = { 24576 model: model$1, 24577 text: text, 24578 html: html 24579}; 24580 24581var baseOptions = { 24582 expectHTML: true, 24583 modules: modules, 24584 directives: directives, 24585 isPreTag: isPreTag, 24586 isUnaryTag: isUnaryTag, 24587 mustUseProp: mustUseProp, 24588 canBeLeftOpenTag: canBeLeftOpenTag, 24589 isReservedTag: isReservedTag, 24590 getTagNamespace: getTagNamespace, 24591 staticKeys: genStaticKeys$1(modules) 24592}; 24593 24594var isStaticKey; 24595var isPlatformReservedTag; 24596var genStaticKeysCached = cached(genStaticKeys); 24597/** 24598 * Goal of the optimizer: walk the generated template AST tree 24599 * and detect sub-trees that are purely static, i.e. parts of 24600 * the DOM that never needs to change. 24601 * 24602 * Once we detect these sub-trees, we can: 24603 * 24604 * 1. Hoist them into constants, so that we no longer need to 24605 * create fresh nodes for them on each re-render; 24606 * 2. Completely skip them in the patching process. 24607 */ 24608function optimize(root, options) { 24609 if (!root) 24610 return; 24611 isStaticKey = genStaticKeysCached(options.staticKeys || ''); 24612 isPlatformReservedTag = options.isReservedTag || no; 24613 // first pass: mark all non-static nodes. 24614 markStatic(root); 24615 // second pass: mark static roots. 24616 markStaticRoots(root, false); 24617} 24618function genStaticKeys(keys) { 24619 return makeMap('type,tag,attrsList,attrsMap,plain,parent,children,attrs,start,end,rawAttrsMap' + 24620 (keys ? ',' + keys : '')); 24621} 24622function markStatic(node) { 24623 node.static = isStatic(node); 24624 if (node.type === 1) { 24625 // do not make component slot content static. this avoids 24626 // 1. components not able to mutate slot nodes 24627 // 2. static slot content fails for hot-reloading 24628 if (!isPlatformReservedTag(node.tag) && 24629 node.tag !== 'slot' && 24630 node.attrsMap['inline-template'] == null) { 24631 return; 24632 } 24633 for (var i = 0, l = node.children.length; i < l; i++) { 24634 var child = node.children[i]; 24635 markStatic(child); 24636 if (!child.static) { 24637 node.static = false; 24638 } 24639 } 24640 if (node.ifConditions) { 24641 for (var i = 1, l = node.ifConditions.length; i < l; i++) { 24642 var block = node.ifConditions[i].block; 24643 markStatic(block); 24644 if (!block.static) { 24645 node.static = false; 24646 } 24647 } 24648 } 24649 } 24650} 24651function markStaticRoots(node, isInFor) { 24652 if (node.type === 1) { 24653 if (node.static || node.once) { 24654 node.staticInFor = isInFor; 24655 } 24656 // For a node to qualify as a static root, it should have children that 24657 // are not just static text. Otherwise the cost of hoisting out will 24658 // outweigh the benefits and it's better off to just always render it fresh. 24659 if (node.static && 24660 node.children.length && 24661 !(node.children.length === 1 && node.children[0].type === 3)) { 24662 node.staticRoot = true; 24663 return; 24664 } 24665 else { 24666 node.staticRoot = false; 24667 } 24668 if (node.children) { 24669 for (var i = 0, l = node.children.length; i < l; i++) { 24670 markStaticRoots(node.children[i], isInFor || !!node.for); 24671 } 24672 } 24673 if (node.ifConditions) { 24674 for (var i = 1, l = node.ifConditions.length; i < l; i++) { 24675 markStaticRoots(node.ifConditions[i].block, isInFor); 24676 } 24677 } 24678 } 24679} 24680function isStatic(node) { 24681 if (node.type === 2) { 24682 // expression 24683 return false; 24684 } 24685 if (node.type === 3) { 24686 // text 24687 return true; 24688 } 24689 return !!(node.pre || 24690 (!node.hasBindings && // no dynamic bindings 24691 !node.if && 24692 !node.for && // not v-if or v-for or v-else 24693 !isBuiltInTag(node.tag) && // not a built-in 24694 isPlatformReservedTag(node.tag) && // not a component 24695 !isDirectChildOfTemplateFor(node) && 24696 Object.keys(node).every(isStaticKey))); 24697} 24698function isDirectChildOfTemplateFor(node) { 24699 while (node.parent) { 24700 node = node.parent; 24701 if (node.tag !== 'template') { 24702 return false; 24703 } 24704 if (node.for) { 24705 return true; 24706 } 24707 } 24708 return false; 24709} 24710 24711var fnExpRE = /^([\w$_]+|\([^)]*?\))\s*=>|^function(?:\s+[\w$]+)?\s*\(/; 24712var fnInvokeRE = /\([^)]*?\);*$/; 24713var simplePathRE = /^[A-Za-z_$][\w$]*(?:\.[A-Za-z_$][\w$]*|\['[^']*?']|\["[^"]*?"]|\[\d+]|\[[A-Za-z_$][\w$]*])*$/; 24714// KeyboardEvent.keyCode aliases 24715var keyCodes = { 24716 esc: 27, 24717 tab: 9, 24718 enter: 13, 24719 space: 32, 24720 up: 38, 24721 left: 37, 24722 right: 39, 24723 down: 40, 24724 delete: [8, 46] 24725}; 24726// KeyboardEvent.key aliases 24727var keyNames = { 24728 // #7880: IE11 and Edge use `Esc` for Escape key name. 24729 esc: ['Esc', 'Escape'], 24730 tab: 'Tab', 24731 enter: 'Enter', 24732 // #9112: IE11 uses `Spacebar` for Space key name. 24733 space: [' ', 'Spacebar'], 24734 // #7806: IE11 uses key names without `Arrow` prefix for arrow keys. 24735 up: ['Up', 'ArrowUp'], 24736 left: ['Left', 'ArrowLeft'], 24737 right: ['Right', 'ArrowRight'], 24738 down: ['Down', 'ArrowDown'], 24739 // #9112: IE11 uses `Del` for Delete key name. 24740 delete: ['Backspace', 'Delete', 'Del'] 24741}; 24742// #4868: modifiers that prevent the execution of the listener 24743// need to explicitly return null so that we can determine whether to remove 24744// the listener for .once 24745var genGuard = function (condition) { return "if(".concat(condition, ")return null;"); }; 24746var modifierCode = { 24747 stop: '$event.stopPropagation();', 24748 prevent: '$event.preventDefault();', 24749 self: genGuard("$event.target !== $event.currentTarget"), 24750 ctrl: genGuard("!$event.ctrlKey"), 24751 shift: genGuard("!$event.shiftKey"), 24752 alt: genGuard("!$event.altKey"), 24753 meta: genGuard("!$event.metaKey"), 24754 left: genGuard("'button' in $event && $event.button !== 0"), 24755 middle: genGuard("'button' in $event && $event.button !== 1"), 24756 right: genGuard("'button' in $event && $event.button !== 2") 24757}; 24758function genHandlers(events, isNative) { 24759 var prefix = isNative ? 'nativeOn:' : 'on:'; 24760 var staticHandlers = ""; 24761 var dynamicHandlers = ""; 24762 for (var name_1 in events) { 24763 var handlerCode = genHandler(events[name_1]); 24764 //@ts-expect-error 24765 if (events[name_1] && events[name_1].dynamic) { 24766 dynamicHandlers += "".concat(name_1, ",").concat(handlerCode, ","); 24767 } 24768 else { 24769 staticHandlers += "\"".concat(name_1, "\":").concat(handlerCode, ","); 24770 } 24771 } 24772 staticHandlers = "{".concat(staticHandlers.slice(0, -1), "}"); 24773 if (dynamicHandlers) { 24774 return prefix + "_d(".concat(staticHandlers, ",[").concat(dynamicHandlers.slice(0, -1), "])"); 24775 } 24776 else { 24777 return prefix + staticHandlers; 24778 } 24779} 24780function genHandler(handler) { 24781 if (!handler) { 24782 return 'function(){}'; 24783 } 24784 if (Array.isArray(handler)) { 24785 return "[".concat(handler.map(function (handler) { return genHandler(handler); }).join(','), "]"); 24786 } 24787 var isMethodPath = simplePathRE.test(handler.value); 24788 var isFunctionExpression = fnExpRE.test(handler.value); 24789 var isFunctionInvocation = simplePathRE.test(handler.value.replace(fnInvokeRE, '')); 24790 if (!handler.modifiers) { 24791 if (isMethodPath || isFunctionExpression) { 24792 return handler.value; 24793 } 24794 return "function($event){".concat(isFunctionInvocation ? "return ".concat(handler.value) : handler.value, "}"); // inline statement 24795 } 24796 else { 24797 var code = ''; 24798 var genModifierCode = ''; 24799 var keys = []; 24800 var _loop_1 = function (key) { 24801 if (modifierCode[key]) { 24802 genModifierCode += modifierCode[key]; 24803 // left/right 24804 if (keyCodes[key]) { 24805 keys.push(key); 24806 } 24807 } 24808 else if (key === 'exact') { 24809 var modifiers_1 = handler.modifiers; 24810 genModifierCode += genGuard(['ctrl', 'shift', 'alt', 'meta'] 24811 .filter(function (keyModifier) { return !modifiers_1[keyModifier]; }) 24812 .map(function (keyModifier) { return "$event.".concat(keyModifier, "Key"); }) 24813 .join('||')); 24814 } 24815 else { 24816 keys.push(key); 24817 } 24818 }; 24819 for (var key in handler.modifiers) { 24820 _loop_1(key); 24821 } 24822 if (keys.length) { 24823 code += genKeyFilter(keys); 24824 } 24825 // Make sure modifiers like prevent and stop get executed after key filtering 24826 if (genModifierCode) { 24827 code += genModifierCode; 24828 } 24829 var handlerCode = isMethodPath 24830 ? "return ".concat(handler.value, ".apply(null, arguments)") 24831 : isFunctionExpression 24832 ? "return (".concat(handler.value, ").apply(null, arguments)") 24833 : isFunctionInvocation 24834 ? "return ".concat(handler.value) 24835 : handler.value; 24836 return "function($event){".concat(code).concat(handlerCode, "}"); 24837 } 24838} 24839function genKeyFilter(keys) { 24840 return ( 24841 // make sure the key filters only apply to KeyboardEvents 24842 // #9441: can't use 'keyCode' in $event because Chrome autofill fires fake 24843 // key events that do not have keyCode property... 24844 "if(!$event.type.indexOf('key')&&" + 24845 "".concat(keys.map(genFilterCode).join('&&'), ")return null;")); 24846} 24847function genFilterCode(key) { 24848 var keyVal = parseInt(key, 10); 24849 if (keyVal) { 24850 return "$event.keyCode!==".concat(keyVal); 24851 } 24852 var keyCode = keyCodes[key]; 24853 var keyName = keyNames[key]; 24854 return ("_k($event.keyCode," + 24855 "".concat(JSON.stringify(key), ",") + 24856 "".concat(JSON.stringify(keyCode), ",") + 24857 "$event.key," + 24858 "".concat(JSON.stringify(keyName)) + 24859 ")"); 24860} 24861 24862function on(el, dir) { 24863 if ( true && dir.modifiers) { 24864 warn$2("v-on without argument does not support modifiers."); 24865 } 24866 el.wrapListeners = function (code) { return "_g(".concat(code, ",").concat(dir.value, ")"); }; 24867} 24868 24869function bind(el, dir) { 24870 el.wrapData = function (code) { 24871 return "_b(".concat(code, ",'").concat(el.tag, "',").concat(dir.value, ",").concat(dir.modifiers && dir.modifiers.prop ? 'true' : 'false').concat(dir.modifiers && dir.modifiers.sync ? ',true' : '', ")"); 24872 }; 24873} 24874 24875var baseDirectives = { 24876 on: on, 24877 bind: bind, 24878 cloak: noop 24879}; 24880 24881var CodegenState = /** @class */ (function () { 24882 function CodegenState(options) { 24883 this.options = options; 24884 this.warn = options.warn || baseWarn; 24885 this.transforms = pluckModuleFunction(options.modules, 'transformCode'); 24886 this.dataGenFns = pluckModuleFunction(options.modules, 'genData'); 24887 this.directives = extend(extend({}, baseDirectives), options.directives); 24888 var isReservedTag = options.isReservedTag || no; 24889 this.maybeComponent = function (el) { 24890 return !!el.component || !isReservedTag(el.tag); 24891 }; 24892 this.onceId = 0; 24893 this.staticRenderFns = []; 24894 this.pre = false; 24895 } 24896 return CodegenState; 24897}()); 24898function generate(ast, options) { 24899 var state = new CodegenState(options); 24900 // fix #11483, Root level <script> tags should not be rendered. 24901 var code = ast 24902 ? ast.tag === 'script' 24903 ? 'null' 24904 : genElement(ast, state) 24905 : '_c("div")'; 24906 return { 24907 render: "with(this){return ".concat(code, "}"), 24908 staticRenderFns: state.staticRenderFns 24909 }; 24910} 24911function genElement(el, state) { 24912 if (el.parent) { 24913 el.pre = el.pre || el.parent.pre; 24914 } 24915 if (el.staticRoot && !el.staticProcessed) { 24916 return genStatic(el, state); 24917 } 24918 else if (el.once && !el.onceProcessed) { 24919 return genOnce(el, state); 24920 } 24921 else if (el.for && !el.forProcessed) { 24922 return genFor(el, state); 24923 } 24924 else if (el.if && !el.ifProcessed) { 24925 return genIf(el, state); 24926 } 24927 else if (el.tag === 'template' && !el.slotTarget && !state.pre) { 24928 return genChildren(el, state) || 'void 0'; 24929 } 24930 else if (el.tag === 'slot') { 24931 return genSlot(el, state); 24932 } 24933 else { 24934 // component or element 24935 var code = void 0; 24936 if (el.component) { 24937 code = genComponent(el.component, el, state); 24938 } 24939 else { 24940 var data = void 0; 24941 var maybeComponent = state.maybeComponent(el); 24942 if (!el.plain || (el.pre && maybeComponent)) { 24943 data = genData(el, state); 24944 } 24945 var tag 24946 // check if this is a component in <script setup> 24947 = void 0; 24948 // check if this is a component in <script setup> 24949 var bindings = state.options.bindings; 24950 if (maybeComponent && bindings && bindings.__isScriptSetup !== false) { 24951 tag = checkBindingType(bindings, el.tag); 24952 } 24953 if (!tag) 24954 tag = "'".concat(el.tag, "'"); 24955 var children = el.inlineTemplate ? null : genChildren(el, state, true); 24956 code = "_c(".concat(tag).concat(data ? ",".concat(data) : '' // data 24957 ).concat(children ? ",".concat(children) : '' // children 24958 , ")"); 24959 } 24960 // module transforms 24961 for (var i = 0; i < state.transforms.length; i++) { 24962 code = state.transforms[i](el, code); 24963 } 24964 return code; 24965 } 24966} 24967function checkBindingType(bindings, key) { 24968 var camelName = camelize(key); 24969 var PascalName = capitalize(camelName); 24970 var checkType = function (type) { 24971 if (bindings[key] === type) { 24972 return key; 24973 } 24974 if (bindings[camelName] === type) { 24975 return camelName; 24976 } 24977 if (bindings[PascalName] === type) { 24978 return PascalName; 24979 } 24980 }; 24981 var fromConst = checkType("setup-const" /* BindingTypes.SETUP_CONST */) || 24982 checkType("setup-reactive-const" /* BindingTypes.SETUP_REACTIVE_CONST */); 24983 if (fromConst) { 24984 return fromConst; 24985 } 24986 var fromMaybeRef = checkType("setup-let" /* BindingTypes.SETUP_LET */) || 24987 checkType("setup-ref" /* BindingTypes.SETUP_REF */) || 24988 checkType("setup-maybe-ref" /* BindingTypes.SETUP_MAYBE_REF */); 24989 if (fromMaybeRef) { 24990 return fromMaybeRef; 24991 } 24992} 24993// hoist static sub-trees out 24994function genStatic(el, state) { 24995 el.staticProcessed = true; 24996 // Some elements (templates) need to behave differently inside of a v-pre 24997 // node. All pre nodes are static roots, so we can use this as a location to 24998 // wrap a state change and reset it upon exiting the pre node. 24999 var originalPreState = state.pre; 25000 if (el.pre) { 25001 state.pre = el.pre; 25002 } 25003 state.staticRenderFns.push("with(this){return ".concat(genElement(el, state), "}")); 25004 state.pre = originalPreState; 25005 return "_m(".concat(state.staticRenderFns.length - 1).concat(el.staticInFor ? ',true' : '', ")"); 25006} 25007// v-once 25008function genOnce(el, state) { 25009 el.onceProcessed = true; 25010 if (el.if && !el.ifProcessed) { 25011 return genIf(el, state); 25012 } 25013 else if (el.staticInFor) { 25014 var key = ''; 25015 var parent_1 = el.parent; 25016 while (parent_1) { 25017 if (parent_1.for) { 25018 key = parent_1.key; 25019 break; 25020 } 25021 parent_1 = parent_1.parent; 25022 } 25023 if (!key) { 25024 true && 25025 state.warn("v-once can only be used inside v-for that is keyed. ", el.rawAttrsMap['v-once']); 25026 return genElement(el, state); 25027 } 25028 return "_o(".concat(genElement(el, state), ",").concat(state.onceId++, ",").concat(key, ")"); 25029 } 25030 else { 25031 return genStatic(el, state); 25032 } 25033} 25034function genIf(el, state, altGen, altEmpty) { 25035 el.ifProcessed = true; // avoid recursion 25036 return genIfConditions(el.ifConditions.slice(), state, altGen, altEmpty); 25037} 25038function genIfConditions(conditions, state, altGen, altEmpty) { 25039 if (!conditions.length) { 25040 return altEmpty || '_e()'; 25041 } 25042 var condition = conditions.shift(); 25043 if (condition.exp) { 25044 return "(".concat(condition.exp, ")?").concat(genTernaryExp(condition.block), ":").concat(genIfConditions(conditions, state, altGen, altEmpty)); 25045 } 25046 else { 25047 return "".concat(genTernaryExp(condition.block)); 25048 } 25049 // v-if with v-once should generate code like (a)?_m(0):_m(1) 25050 function genTernaryExp(el) { 25051 return altGen 25052 ? altGen(el, state) 25053 : el.once 25054 ? genOnce(el, state) 25055 : genElement(el, state); 25056 } 25057} 25058function genFor(el, state, altGen, altHelper) { 25059 var exp = el.for; 25060 var alias = el.alias; 25061 var iterator1 = el.iterator1 ? ",".concat(el.iterator1) : ''; 25062 var iterator2 = el.iterator2 ? ",".concat(el.iterator2) : ''; 25063 if ( true && 25064 state.maybeComponent(el) && 25065 el.tag !== 'slot' && 25066 el.tag !== 'template' && 25067 !el.key) { 25068 state.warn("<".concat(el.tag, " v-for=\"").concat(alias, " in ").concat(exp, "\">: component lists rendered with ") + 25069 "v-for should have explicit keys. " + 25070 "See https://v2.vuejs.org/v2/guide/list.html#key for more info.", el.rawAttrsMap['v-for'], true /* tip */); 25071 } 25072 el.forProcessed = true; // avoid recursion 25073 return ("".concat(altHelper || '_l', "((").concat(exp, "),") + 25074 "function(".concat(alias).concat(iterator1).concat(iterator2, "){") + 25075 "return ".concat((altGen || genElement)(el, state)) + 25076 '})'); 25077} 25078function genData(el, state) { 25079 var data = '{'; 25080 // directives first. 25081 // directives may mutate the el's other properties before they are generated. 25082 var dirs = genDirectives(el, state); 25083 if (dirs) 25084 data += dirs + ','; 25085 // key 25086 if (el.key) { 25087 data += "key:".concat(el.key, ","); 25088 } 25089 // ref 25090 if (el.ref) { 25091 data += "ref:".concat(el.ref, ","); 25092 } 25093 if (el.refInFor) { 25094 data += "refInFor:true,"; 25095 } 25096 // pre 25097 if (el.pre) { 25098 data += "pre:true,"; 25099 } 25100 // record original tag name for components using "is" attribute 25101 if (el.component) { 25102 data += "tag:\"".concat(el.tag, "\","); 25103 } 25104 // module data generation functions 25105 for (var i = 0; i < state.dataGenFns.length; i++) { 25106 data += state.dataGenFns[i](el); 25107 } 25108 // attributes 25109 if (el.attrs) { 25110 data += "attrs:".concat(genProps(el.attrs), ","); 25111 } 25112 // DOM props 25113 if (el.props) { 25114 data += "domProps:".concat(genProps(el.props), ","); 25115 } 25116 // event handlers 25117 if (el.events) { 25118 data += "".concat(genHandlers(el.events, false), ","); 25119 } 25120 if (el.nativeEvents) { 25121 data += "".concat(genHandlers(el.nativeEvents, true), ","); 25122 } 25123 // slot target 25124 // only for non-scoped slots 25125 if (el.slotTarget && !el.slotScope) { 25126 data += "slot:".concat(el.slotTarget, ","); 25127 } 25128 // scoped slots 25129 if (el.scopedSlots) { 25130 data += "".concat(genScopedSlots(el, el.scopedSlots, state), ","); 25131 } 25132 // component v-model 25133 if (el.model) { 25134 data += "model:{value:".concat(el.model.value, ",callback:").concat(el.model.callback, ",expression:").concat(el.model.expression, "},"); 25135 } 25136 // inline-template 25137 if (el.inlineTemplate) { 25138 var inlineTemplate = genInlineTemplate(el, state); 25139 if (inlineTemplate) { 25140 data += "".concat(inlineTemplate, ","); 25141 } 25142 } 25143 data = data.replace(/,$/, '') + '}'; 25144 // v-bind dynamic argument wrap 25145 // v-bind with dynamic arguments must be applied using the same v-bind object 25146 // merge helper so that class/style/mustUseProp attrs are handled correctly. 25147 if (el.dynamicAttrs) { 25148 data = "_b(".concat(data, ",\"").concat(el.tag, "\",").concat(genProps(el.dynamicAttrs), ")"); 25149 } 25150 // v-bind data wrap 25151 if (el.wrapData) { 25152 data = el.wrapData(data); 25153 } 25154 // v-on data wrap 25155 if (el.wrapListeners) { 25156 data = el.wrapListeners(data); 25157 } 25158 return data; 25159} 25160function genDirectives(el, state) { 25161 var dirs = el.directives; 25162 if (!dirs) 25163 return; 25164 var res = 'directives:['; 25165 var hasRuntime = false; 25166 var i, l, dir, needRuntime; 25167 for (i = 0, l = dirs.length; i < l; i++) { 25168 dir = dirs[i]; 25169 needRuntime = true; 25170 var gen = state.directives[dir.name]; 25171 if (gen) { 25172 // compile-time directive that manipulates AST. 25173 // returns true if it also needs a runtime counterpart. 25174 needRuntime = !!gen(el, dir, state.warn); 25175 } 25176 if (needRuntime) { 25177 hasRuntime = true; 25178 res += "{name:\"".concat(dir.name, "\",rawName:\"").concat(dir.rawName, "\"").concat(dir.value 25179 ? ",value:(".concat(dir.value, "),expression:").concat(JSON.stringify(dir.value)) 25180 : '').concat(dir.arg ? ",arg:".concat(dir.isDynamicArg ? dir.arg : "\"".concat(dir.arg, "\"")) : '').concat(dir.modifiers ? ",modifiers:".concat(JSON.stringify(dir.modifiers)) : '', "},"); 25181 } 25182 } 25183 if (hasRuntime) { 25184 return res.slice(0, -1) + ']'; 25185 } 25186} 25187function genInlineTemplate(el, state) { 25188 var ast = el.children[0]; 25189 if ( true && (el.children.length !== 1 || ast.type !== 1)) { 25190 state.warn('Inline-template components must have exactly one child element.', { start: el.start }); 25191 } 25192 if (ast && ast.type === 1) { 25193 var inlineRenderFns = generate(ast, state.options); 25194 return "inlineTemplate:{render:function(){".concat(inlineRenderFns.render, "},staticRenderFns:[").concat(inlineRenderFns.staticRenderFns 25195 .map(function (code) { return "function(){".concat(code, "}"); }) 25196 .join(','), "]}"); 25197 } 25198} 25199function genScopedSlots(el, slots, state) { 25200 // by default scoped slots are considered "stable", this allows child 25201 // components with only scoped slots to skip forced updates from parent. 25202 // but in some cases we have to bail-out of this optimization 25203 // for example if the slot contains dynamic names, has v-if or v-for on them... 25204 var needsForceUpdate = el.for || 25205 Object.keys(slots).some(function (key) { 25206 var slot = slots[key]; 25207 return (slot.slotTargetDynamic || slot.if || slot.for || containsSlotChild(slot) // is passing down slot from parent which may be dynamic 25208 ); 25209 }); 25210 // #9534: if a component with scoped slots is inside a conditional branch, 25211 // it's possible for the same component to be reused but with different 25212 // compiled slot content. To avoid that, we generate a unique key based on 25213 // the generated code of all the slot contents. 25214 var needsKey = !!el.if; 25215 // OR when it is inside another scoped slot or v-for (the reactivity may be 25216 // disconnected due to the intermediate scope variable) 25217 // #9438, #9506 25218 // TODO: this can be further optimized by properly analyzing in-scope bindings 25219 // and skip force updating ones that do not actually use scope variables. 25220 if (!needsForceUpdate) { 25221 var parent_2 = el.parent; 25222 while (parent_2) { 25223 if ((parent_2.slotScope && parent_2.slotScope !== emptySlotScopeToken) || 25224 parent_2.for) { 25225 needsForceUpdate = true; 25226 break; 25227 } 25228 if (parent_2.if) { 25229 needsKey = true; 25230 } 25231 parent_2 = parent_2.parent; 25232 } 25233 } 25234 var generatedSlots = Object.keys(slots) 25235 .map(function (key) { return genScopedSlot(slots[key], state); }) 25236 .join(','); 25237 return "scopedSlots:_u([".concat(generatedSlots, "]").concat(needsForceUpdate ? ",null,true" : "").concat(!needsForceUpdate && needsKey ? ",null,false,".concat(hash(generatedSlots)) : "", ")"); 25238} 25239function hash(str) { 25240 var hash = 5381; 25241 var i = str.length; 25242 while (i) { 25243 hash = (hash * 33) ^ str.charCodeAt(--i); 25244 } 25245 return hash >>> 0; 25246} 25247function containsSlotChild(el) { 25248 if (el.type === 1) { 25249 if (el.tag === 'slot') { 25250 return true; 25251 } 25252 return el.children.some(containsSlotChild); 25253 } 25254 return false; 25255} 25256function genScopedSlot(el, state) { 25257 var isLegacySyntax = el.attrsMap['slot-scope']; 25258 if (el.if && !el.ifProcessed && !isLegacySyntax) { 25259 return genIf(el, state, genScopedSlot, "null"); 25260 } 25261 if (el.for && !el.forProcessed) { 25262 return genFor(el, state, genScopedSlot); 25263 } 25264 var slotScope = el.slotScope === emptySlotScopeToken ? "" : String(el.slotScope); 25265 var fn = "function(".concat(slotScope, "){") + 25266 "return ".concat(el.tag === 'template' 25267 ? el.if && isLegacySyntax 25268 ? "(".concat(el.if, ")?").concat(genChildren(el, state) || 'undefined', ":undefined") 25269 : genChildren(el, state) || 'undefined' 25270 : genElement(el, state), "}"); 25271 // reverse proxy v-slot without scope on this.$slots 25272 var reverseProxy = slotScope ? "" : ",proxy:true"; 25273 return "{key:".concat(el.slotTarget || "\"default\"", ",fn:").concat(fn).concat(reverseProxy, "}"); 25274} 25275function genChildren(el, state, checkSkip, altGenElement, altGenNode) { 25276 var children = el.children; 25277 if (children.length) { 25278 var el_1 = children[0]; 25279 // optimize single v-for 25280 if (children.length === 1 && 25281 el_1.for && 25282 el_1.tag !== 'template' && 25283 el_1.tag !== 'slot') { 25284 var normalizationType_1 = checkSkip 25285 ? state.maybeComponent(el_1) 25286 ? ",1" 25287 : ",0" 25288 : ""; 25289 return "".concat((altGenElement || genElement)(el_1, state)).concat(normalizationType_1); 25290 } 25291 var normalizationType = checkSkip 25292 ? getNormalizationType(children, state.maybeComponent) 25293 : 0; 25294 var gen_1 = altGenNode || genNode; 25295 return "[".concat(children.map(function (c) { return gen_1(c, state); }).join(','), "]").concat(normalizationType ? ",".concat(normalizationType) : ''); 25296 } 25297} 25298// determine the normalization needed for the children array. 25299// 0: no normalization needed 25300// 1: simple normalization needed (possible 1-level deep nested array) 25301// 2: full normalization needed 25302function getNormalizationType(children, maybeComponent) { 25303 var res = 0; 25304 for (var i = 0; i < children.length; i++) { 25305 var el = children[i]; 25306 if (el.type !== 1) { 25307 continue; 25308 } 25309 if (needsNormalization(el) || 25310 (el.ifConditions && 25311 el.ifConditions.some(function (c) { return needsNormalization(c.block); }))) { 25312 res = 2; 25313 break; 25314 } 25315 if (maybeComponent(el) || 25316 (el.ifConditions && el.ifConditions.some(function (c) { return maybeComponent(c.block); }))) { 25317 res = 1; 25318 } 25319 } 25320 return res; 25321} 25322function needsNormalization(el) { 25323 return el.for !== undefined || el.tag === 'template' || el.tag === 'slot'; 25324} 25325function genNode(node, state) { 25326 if (node.type === 1) { 25327 return genElement(node, state); 25328 } 25329 else if (node.type === 3 && node.isComment) { 25330 return genComment(node); 25331 } 25332 else { 25333 return genText(node); 25334 } 25335} 25336function genText(text) { 25337 return "_v(".concat(text.type === 2 25338 ? text.expression // no need for () because already wrapped in _s() 25339 : transformSpecialNewlines(JSON.stringify(text.text)), ")"); 25340} 25341function genComment(comment) { 25342 return "_e(".concat(JSON.stringify(comment.text), ")"); 25343} 25344function genSlot(el, state) { 25345 var slotName = el.slotName || '"default"'; 25346 var children = genChildren(el, state); 25347 var res = "_t(".concat(slotName).concat(children ? ",function(){return ".concat(children, "}") : ''); 25348 var attrs = el.attrs || el.dynamicAttrs 25349 ? genProps((el.attrs || []).concat(el.dynamicAttrs || []).map(function (attr) { return ({ 25350 // slot props are camelized 25351 name: camelize(attr.name), 25352 value: attr.value, 25353 dynamic: attr.dynamic 25354 }); })) 25355 : null; 25356 var bind = el.attrsMap['v-bind']; 25357 if ((attrs || bind) && !children) { 25358 res += ",null"; 25359 } 25360 if (attrs) { 25361 res += ",".concat(attrs); 25362 } 25363 if (bind) { 25364 res += "".concat(attrs ? '' : ',null', ",").concat(bind); 25365 } 25366 return res + ')'; 25367} 25368// componentName is el.component, take it as argument to shun flow's pessimistic refinement 25369function genComponent(componentName, el, state) { 25370 var children = el.inlineTemplate ? null : genChildren(el, state, true); 25371 return "_c(".concat(componentName, ",").concat(genData(el, state)).concat(children ? ",".concat(children) : '', ")"); 25372} 25373function genProps(props) { 25374 var staticProps = ""; 25375 var dynamicProps = ""; 25376 for (var i = 0; i < props.length; i++) { 25377 var prop = props[i]; 25378 var value = transformSpecialNewlines(prop.value); 25379 if (prop.dynamic) { 25380 dynamicProps += "".concat(prop.name, ",").concat(value, ","); 25381 } 25382 else { 25383 staticProps += "\"".concat(prop.name, "\":").concat(value, ","); 25384 } 25385 } 25386 staticProps = "{".concat(staticProps.slice(0, -1), "}"); 25387 if (dynamicProps) { 25388 return "_d(".concat(staticProps, ",[").concat(dynamicProps.slice(0, -1), "])"); 25389 } 25390 else { 25391 return staticProps; 25392 } 25393} 25394// #3895, #4268 25395function transformSpecialNewlines(text) { 25396 return text.replace(/\u2028/g, '\\u2028').replace(/\u2029/g, '\\u2029'); 25397} 25398 25399// these keywords should not appear inside expressions, but operators like 25400// typeof, instanceof and in are allowed 25401var prohibitedKeywordRE = new RegExp('\\b' + 25402 ('do,if,for,let,new,try,var,case,else,with,await,break,catch,class,const,' + 25403 'super,throw,while,yield,delete,export,import,return,switch,default,' + 25404 'extends,finally,continue,debugger,function,arguments') 25405 .split(',') 25406 .join('\\b|\\b') + 25407 '\\b'); 25408// these unary operators should not be used as property/method names 25409var unaryOperatorsRE = new RegExp('\\b' + 25410 'delete,typeof,void'.split(',').join('\\s*\\([^\\)]*\\)|\\b') + 25411 '\\s*\\([^\\)]*\\)'); 25412// strip strings in expressions 25413var stripStringRE = /'(?:[^'\\]|\\.)*'|"(?:[^"\\]|\\.)*"|`(?:[^`\\]|\\.)*\$\{|\}(?:[^`\\]|\\.)*`|`(?:[^`\\]|\\.)*`/g; 25414// detect problematic expressions in a template 25415function detectErrors(ast, warn) { 25416 if (ast) { 25417 checkNode(ast, warn); 25418 } 25419} 25420function checkNode(node, warn) { 25421 if (node.type === 1) { 25422 for (var name_1 in node.attrsMap) { 25423 if (dirRE.test(name_1)) { 25424 var value = node.attrsMap[name_1]; 25425 if (value) { 25426 var range = node.rawAttrsMap[name_1]; 25427 if (name_1 === 'v-for') { 25428 checkFor(node, "v-for=\"".concat(value, "\""), warn, range); 25429 } 25430 else if (name_1 === 'v-slot' || name_1[0] === '#') { 25431 checkFunctionParameterExpression(value, "".concat(name_1, "=\"").concat(value, "\""), warn, range); 25432 } 25433 else if (onRE.test(name_1)) { 25434 checkEvent(value, "".concat(name_1, "=\"").concat(value, "\""), warn, range); 25435 } 25436 else { 25437 checkExpression(value, "".concat(name_1, "=\"").concat(value, "\""), warn, range); 25438 } 25439 } 25440 } 25441 } 25442 if (node.children) { 25443 for (var i = 0; i < node.children.length; i++) { 25444 checkNode(node.children[i], warn); 25445 } 25446 } 25447 } 25448 else if (node.type === 2) { 25449 checkExpression(node.expression, node.text, warn, node); 25450 } 25451} 25452function checkEvent(exp, text, warn, range) { 25453 var stripped = exp.replace(stripStringRE, ''); 25454 var keywordMatch = stripped.match(unaryOperatorsRE); 25455 if (keywordMatch && stripped.charAt(keywordMatch.index - 1) !== '$') { 25456 warn("avoid using JavaScript unary operator as property name: " + 25457 "\"".concat(keywordMatch[0], "\" in expression ").concat(text.trim()), range); 25458 } 25459 checkExpression(exp, text, warn, range); 25460} 25461function checkFor(node, text, warn, range) { 25462 checkExpression(node.for || '', text, warn, range); 25463 checkIdentifier(node.alias, 'v-for alias', text, warn, range); 25464 checkIdentifier(node.iterator1, 'v-for iterator', text, warn, range); 25465 checkIdentifier(node.iterator2, 'v-for iterator', text, warn, range); 25466} 25467function checkIdentifier(ident, type, text, warn, range) { 25468 if (typeof ident === 'string') { 25469 try { 25470 new Function("var ".concat(ident, "=_")); 25471 } 25472 catch (e) { 25473 warn("invalid ".concat(type, " \"").concat(ident, "\" in expression: ").concat(text.trim()), range); 25474 } 25475 } 25476} 25477function checkExpression(exp, text, warn, range) { 25478 try { 25479 new Function("return ".concat(exp)); 25480 } 25481 catch (e) { 25482 var keywordMatch = exp 25483 .replace(stripStringRE, '') 25484 .match(prohibitedKeywordRE); 25485 if (keywordMatch) { 25486 warn("avoid using JavaScript keyword as property name: " + 25487 "\"".concat(keywordMatch[0], "\"\n Raw expression: ").concat(text.trim()), range); 25488 } 25489 else { 25490 warn("invalid expression: ".concat(e.message, " in\n\n") + 25491 " ".concat(exp, "\n\n") + 25492 " Raw expression: ".concat(text.trim(), "\n"), range); 25493 } 25494 } 25495} 25496function checkFunctionParameterExpression(exp, text, warn, range) { 25497 try { 25498 new Function(exp, ''); 25499 } 25500 catch (e) { 25501 warn("invalid function parameter expression: ".concat(e.message, " in\n\n") + 25502 " ".concat(exp, "\n\n") + 25503 " Raw expression: ".concat(text.trim(), "\n"), range); 25504 } 25505} 25506 25507var range = 2; 25508function generateCodeFrame(source, start, end) { 25509 if (start === void 0) { start = 0; } 25510 if (end === void 0) { end = source.length; } 25511 var lines = source.split(/\r?\n/); 25512 var count = 0; 25513 var res = []; 25514 for (var i = 0; i < lines.length; i++) { 25515 count += lines[i].length + 1; 25516 if (count >= start) { 25517 for (var j = i - range; j <= i + range || end > count; j++) { 25518 if (j < 0 || j >= lines.length) 25519 continue; 25520 res.push("".concat(j + 1).concat(repeat(" ", 3 - String(j + 1).length), "| ").concat(lines[j])); 25521 var lineLength = lines[j].length; 25522 if (j === i) { 25523 // push underline 25524 var pad = start - (count - lineLength) + 1; 25525 var length_1 = end > count ? lineLength - pad : end - start; 25526 res.push(" | " + repeat(" ", pad) + repeat("^", length_1)); 25527 } 25528 else if (j > i) { 25529 if (end > count) { 25530 var length_2 = Math.min(end - count, lineLength); 25531 res.push(" | " + repeat("^", length_2)); 25532 } 25533 count += lineLength + 1; 25534 } 25535 } 25536 break; 25537 } 25538 } 25539 return res.join('\n'); 25540} 25541function repeat(str, n) { 25542 var result = ''; 25543 if (n > 0) { 25544 // eslint-disable-next-line no-constant-condition 25545 while (true) { 25546 // eslint-disable-line 25547 if (n & 1) 25548 result += str; 25549 n >>>= 1; 25550 if (n <= 0) 25551 break; 25552 str += str; 25553 } 25554 } 25555 return result; 25556} 25557 25558function createFunction(code, errors) { 25559 try { 25560 return new Function(code); 25561 } 25562 catch (err) { 25563 errors.push({ err: err, code: code }); 25564 return noop; 25565 } 25566} 25567function createCompileToFunctionFn(compile) { 25568 var cache = Object.create(null); 25569 return function compileToFunctions(template, options, vm) { 25570 options = extend({}, options); 25571 var warn = options.warn || warn$2; 25572 delete options.warn; 25573 /* istanbul ignore if */ 25574 if (true) { 25575 // detect possible CSP restriction 25576 try { 25577 new Function('return 1'); 25578 } 25579 catch (e) { 25580 if (e.toString().match(/unsafe-eval|CSP/)) { 25581 warn('It seems you are using the standalone build of Vue.js in an ' + 25582 'environment with Content Security Policy that prohibits unsafe-eval. ' + 25583 'The template compiler cannot work in this environment. Consider ' + 25584 'relaxing the policy to allow unsafe-eval or pre-compiling your ' + 25585 'templates into render functions.'); 25586 } 25587 } 25588 } 25589 // check cache 25590 var key = options.delimiters 25591 ? String(options.delimiters) + template 25592 : template; 25593 if (cache[key]) { 25594 return cache[key]; 25595 } 25596 // compile 25597 var compiled = compile(template, options); 25598 // check compilation errors/tips 25599 if (true) { 25600 if (compiled.errors && compiled.errors.length) { 25601 if (options.outputSourceRange) { 25602 compiled.errors.forEach(function (e) { 25603 warn("Error compiling template:\n\n".concat(e.msg, "\n\n") + 25604 generateCodeFrame(template, e.start, e.end), vm); 25605 }); 25606 } 25607 else { 25608 warn("Error compiling template:\n\n".concat(template, "\n\n") + 25609 compiled.errors.map(function (e) { return "- ".concat(e); }).join('\n') + 25610 '\n', vm); 25611 } 25612 } 25613 if (compiled.tips && compiled.tips.length) { 25614 if (options.outputSourceRange) { 25615 compiled.tips.forEach(function (e) { return tip(e.msg, vm); }); 25616 } 25617 else { 25618 compiled.tips.forEach(function (msg) { return tip(msg, vm); }); 25619 } 25620 } 25621 } 25622 // turn code into functions 25623 var res = {}; 25624 var fnGenErrors = []; 25625 res.render = createFunction(compiled.render, fnGenErrors); 25626 res.staticRenderFns = compiled.staticRenderFns.map(function (code) { 25627 return createFunction(code, fnGenErrors); 25628 }); 25629 // check function generation errors. 25630 // this should only happen if there is a bug in the compiler itself. 25631 // mostly for codegen development use 25632 /* istanbul ignore if */ 25633 if (true) { 25634 if ((!compiled.errors || !compiled.errors.length) && fnGenErrors.length) { 25635 warn("Failed to generate render function:\n\n" + 25636 fnGenErrors 25637 .map(function (_a) { 25638 var err = _a.err, code = _a.code; 25639 return "".concat(err.toString(), " in\n\n").concat(code, "\n"); 25640 }) 25641 .join('\n'), vm); 25642 } 25643 } 25644 return (cache[key] = res); 25645 }; 25646} 25647 25648function createCompilerCreator(baseCompile) { 25649 return function createCompiler(baseOptions) { 25650 function compile(template, options) { 25651 var finalOptions = Object.create(baseOptions); 25652 var errors = []; 25653 var tips = []; 25654 var warn = function (msg, range, tip) { 25655 (tip ? tips : errors).push(msg); 25656 }; 25657 if (options) { 25658 if ( true && options.outputSourceRange) { 25659 // $flow-disable-line 25660 var leadingSpaceLength_1 = template.match(/^\s*/)[0].length; 25661 warn = function (msg, range, tip) { 25662 var data = typeof msg === 'string' ? { msg: msg } : msg; 25663 if (range) { 25664 if (range.start != null) { 25665 data.start = range.start + leadingSpaceLength_1; 25666 } 25667 if (range.end != null) { 25668 data.end = range.end + leadingSpaceLength_1; 25669 } 25670 } 25671 (tip ? tips : errors).push(data); 25672 }; 25673 } 25674 // merge custom modules 25675 if (options.modules) { 25676 finalOptions.modules = (baseOptions.modules || []).concat(options.modules); 25677 } 25678 // merge custom directives 25679 if (options.directives) { 25680 finalOptions.directives = extend(Object.create(baseOptions.directives || null), options.directives); 25681 } 25682 // copy other options 25683 for (var key in options) { 25684 if (key !== 'modules' && key !== 'directives') { 25685 finalOptions[key] = options[key]; 25686 } 25687 } 25688 } 25689 finalOptions.warn = warn; 25690 var compiled = baseCompile(template.trim(), finalOptions); 25691 if (true) { 25692 detectErrors(compiled.ast, warn); 25693 } 25694 compiled.errors = errors; 25695 compiled.tips = tips; 25696 return compiled; 25697 } 25698 return { 25699 compile: compile, 25700 compileToFunctions: createCompileToFunctionFn(compile) 25701 }; 25702 }; 25703} 25704 25705// `createCompilerCreator` allows creating compilers that use alternative 25706// parser/optimizer/codegen, e.g the SSR optimizing compiler. 25707// Here we just export a default compiler using the default parts. 25708var createCompiler = createCompilerCreator(function baseCompile(template, options) { 25709 var ast = parse(template.trim(), options); 25710 if (options.optimize !== false) { 25711 optimize(ast, options); 25712 } 25713 var code = generate(ast, options); 25714 return { 25715 ast: ast, 25716 render: code.render, 25717 staticRenderFns: code.staticRenderFns 25718 }; 25719}); 25720 25721var _a = createCompiler(baseOptions), compileToFunctions = _a.compileToFunctions; 25722 25723// check whether current browser encodes a char inside attribute values 25724var div; 25725function getShouldDecode(href) { 25726 div = div || document.createElement('div'); 25727 div.innerHTML = href ? "<a href=\"\n\"/>" : "<div a=\"\n\"/>"; 25728 return div.innerHTML.indexOf(' ') > 0; 25729} 25730// #3663: IE encodes newlines inside attribute values while other browsers don't 25731var shouldDecodeNewlines = inBrowser ? getShouldDecode(false) : false; 25732// #6828: chrome encodes content in a[href] 25733var shouldDecodeNewlinesForHref = inBrowser 25734 ? getShouldDecode(true) 25735 : false; 25736 25737var idToTemplate = cached(function (id) { 25738 var el = query(id); 25739 return el && el.innerHTML; 25740}); 25741var mount = Vue.prototype.$mount; 25742Vue.prototype.$mount = function (el, hydrating) { 25743 el = el && query(el); 25744 /* istanbul ignore if */ 25745 if (el === document.body || el === document.documentElement) { 25746 true && 25747 warn$2("Do not mount Vue to <html> or <body> - mount to normal elements instead."); 25748 return this; 25749 } 25750 var options = this.$options; 25751 // resolve template/el and convert to render function 25752 if (!options.render) { 25753 var template = options.template; 25754 if (template) { 25755 if (typeof template === 'string') { 25756 if (template.charAt(0) === '#') { 25757 template = idToTemplate(template); 25758 /* istanbul ignore if */ 25759 if ( true && !template) { 25760 warn$2("Template element not found or is empty: ".concat(options.template), this); 25761 } 25762 } 25763 } 25764 else if (template.nodeType) { 25765 template = template.innerHTML; 25766 } 25767 else { 25768 if (true) { 25769 warn$2('invalid template option:' + template, this); 25770 } 25771 return this; 25772 } 25773 } 25774 else if (el) { 25775 // @ts-expect-error 25776 template = getOuterHTML(el); 25777 } 25778 if (template) { 25779 /* istanbul ignore if */ 25780 if ( true && config.performance && mark) { 25781 mark('compile'); 25782 } 25783 var _a = compileToFunctions(template, { 25784 outputSourceRange: "development" !== 'production', 25785 shouldDecodeNewlines: shouldDecodeNewlines, 25786 shouldDecodeNewlinesForHref: shouldDecodeNewlinesForHref, 25787 delimiters: options.delimiters, 25788 comments: options.comments 25789 }, this), render = _a.render, staticRenderFns = _a.staticRenderFns; 25790 options.render = render; 25791 options.staticRenderFns = staticRenderFns; 25792 /* istanbul ignore if */ 25793 if ( true && config.performance && mark) { 25794 mark('compile end'); 25795 measure("vue ".concat(this._name, " compile"), 'compile', 'compile end'); 25796 } 25797 } 25798 } 25799 return mount.call(this, el, hydrating); 25800}; 25801/** 25802 * Get outerHTML of elements, taking care 25803 * of SVG elements in IE as well. 25804 */ 25805function getOuterHTML(el) { 25806 if (el.outerHTML) { 25807 return el.outerHTML; 25808 } 25809 else { 25810 var container = document.createElement('div'); 25811 container.appendChild(el.cloneNode(true)); 25812 return container.innerHTML; 25813 } 25814} 25815Vue.compile = compileToFunctions; 25816 25817 25818 25819 25820/***/ })
vendor: 5,350 bytes, lines 25820-25923
25820 25821 25822/******/ }); 25823/************************************************************************/ 25824/******/ // The module cache 25825/******/ var __webpack_module_cache__ = {}; 25826/******/ 25827/******/ // The require function 25828/******/ function __webpack_require__(moduleId) { 25829/******/ // Check if module is in cache 25830/******/ var cachedModule = __webpack_module_cache__[moduleId]; 25831/******/ if (cachedModule !== undefined) { 25832/******/ return cachedModule.exports; 25833/******/ } 25834/******/ // Create a new module (and put it into the cache) 25835/******/ var module = __webpack_module_cache__[moduleId] = { 25836/******/ id: moduleId, 25837/******/ // no module.loaded needed 25838/******/ exports: {} 25839/******/ }; 25840/******/ 25841/******/ // Execute the module function 25842/******/ __webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__); 25843/******/ 25844/******/ // Return the exports of the module 25845/******/ return module.exports; 25846/******/ } 25847/******/ 25848/************************************************************************/ 25849/******/ /* webpack/runtime/compat get default export */ 25850/******/ (() => { 25851/******/ // getDefaultExport function for compatibility with non-harmony modules 25852/******/ __webpack_require__.n = (module) => { 25853/******/ var getter = module && module.__esModule ? 25854/******/ () => (module['default']) : 25855/******/ () => (module); 25856/******/ __webpack_require__.d(getter, { a: getter }); 25857/******/ return getter; 25858/******/ }; 25859/******/ })(); 25860/******/ 25861/******/ /* webpack/runtime/define property getters */ 25862/******/ (() => { 25863/******/ // define getter functions for harmony exports 25864/******/ __webpack_require__.d = (exports, definition) => { 25865/******/ for(var key in definition) { 25866/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { 25867/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); 25868/******/ } 25869/******/ } 25870/******/ }; 25871/******/ })(); 25872/******/ 25873/******/ /* webpack/runtime/global */ 25874/******/ (() => { 25875/******/ __webpack_require__.g = (function() { 25876/******/ if (typeof globalThis === 'object') return globalThis; 25877/******/ try { 25878/******/ return this || new Function('return this')(); 25879/******/ } catch (e) { 25880/******/ if (typeof window === 'object') return window; 25881/******/ } 25882/******/ })(); 25883/******/ })(); 25884/******/ 25885/******/ /* webpack/runtime/hasOwnProperty shorthand */ 25886/******/ (() => { 25887/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop)) 25888/******/ })(); 25889/******/ 25890/******/ /* webpack/runtime/make namespace object */ 25891/******/ (() => { 25892/******/ // define __esModule on exports 25893/******/ __webpack_require__.r = (exports) => { 25894/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { 25895/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); 25896/******/ } 25897/******/ Object.defineProperty(exports, '__esModule', { value: true }); 25898/******/ }; 25899/******/ })(); 25900/******/ 25901/******/ /* webpack/runtime/nonce */ 25902/******/ (() => { 25903/******/ __webpack_require__.nc = undefined; 25904/******/ })(); 25905/******/ 25906/************************************************************************/ 25907var __webpack_exports__ = {}; 25908// This entry need to be wrapped in an IIFE because it need to be in strict mode. 25909(() => { 25910"use strict"; 25911/*!********************************************************!*\ 25912 !*** ./resources/assets/js/museum/sections/contact.js ***! 25913 \********************************************************/ 25914__webpack_require__.r(__webpack_exports__); 25915/* harmony import */ var _general_jquery_global_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../general/jquery-global.js */ "./resources/assets/js/general/jquery-global.js"); 25916/* harmony import */ var _general_vue_global_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../general/vue-global.js */ "./resources/assets/js/general/vue-global.js"); 25917/* harmony import */ var _general_axios_global_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../general/axios-global.js */ "./resources/assets/js/general/axios-global.js"); 25918/* harmony import */ var _utilities_load_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../utilities/load.js */ "./resources/assets/js/museum/utilities/load.js"); 25919/* harmony import */ var _utilities_load_js__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_utilities_load_js__WEBPACK_IMPORTED_MODULE_3__); 25920/* harmony import */ var vue_spinner_src_ClipLoader_vue__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! vue-spinner/src/ClipLoader.vue */ "./node_modules/vue-spinner/src/ClipLoader.vue"); 25921function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } 25922function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } 25923function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string");
25923 return _typeof(key) === "symbol" ? key : String(key); } 25924function _toPrimitive(input, hint) { if (_typeof(input) !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (_typeof(res) !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); } 25925 25926 25927 25928 25929 25930var app = new Vue({ 25931 // =========================== #Punto de entrada ======================= // 25932 25933 el: '#contacto', 25934 // =========================== #Components ======================= // 25935 25936 components: { 25937 ClipLoader: vue_spinner_src_ClipLoader_vue__WEBPACK_IMPORTED_MODULE_4__["default"] 25938 }, 25939 // =========================== #Datos ================================= // 25940 25941 data: _defineProperty({ 25942 loading: false, 25943 success: false, 25944 ciudades: [], 25945 errors: [], 25946 form: { 25947 nombre: null, 25948 apellidos: null, 25949 pais: '', 25950 provincia: '', 25951 email: null, 25952 profesion: '', 25953 mensaje: null, 25954 consentimiento: false, 25955 coleccion: collectionID 25956 }, 25957 sending: false 25958 }, "loading", { 25959 color: '#455e7d', 25960 size: '52px' 25961 }), 25962 // =========================== #Computed properties==================== // 25963 25964 // =========================== #Methods =============================== // 25965 25966 methods: { 25967 getCities: function getCities() { 25968 var _this = this; 25969 this.isLoading = true; 25970 var url = routeCities + '/' + this.form.pais.toLowerCase(); 25971 window.axios.get(url).then(function (response) { 25972 _this.ciudades = response.data.data; 25973 _this.isLoading = false; 25974 })["catch"](function (response) { 25975 console.log(response); 25976 _this.isLoading = false; 25977 }); 25978 }, 25979 submitForm: function submitForm(e) { 25980 var _this2 = this; 25981 var formAction = e.target.action; 25982 this.errors = []; 25983 this.success = false; 25984 this.sending = true; 25985 window.axios.post(formAction, this.form).then(function (response) { 25986 _this2.success = true; 25987 _this2.sending = false; 25988 _this2.clearForm(); 25989 setTimeout(function () { 25990 this.success = false; 25991 }.bind(_this2), 6000); 25992 })["catch"](function (error) { 25993 _this2.errors = error.response.data.errors; 25994 _this2.sending = false; 25995 }); 25996 }, 25997 clearForm: function clearForm() { 25998 this.form.nombre = null; 25999 this.form.apellidos = null; 26000 this.form.pais = ''; 26001 this.form.provincia = ''; 26002 this.form.email = null; 26003 this.form.profesion = ''; 26004 this.form.mensaje = null; 26005 this.form.consentimiento = false; 26006 } 26007 }, 26008 mounted: function mounted() {} 26009}); 26010})(); 26011 26012/******/ })() 26013;
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.