vendor: 3,595 bytes, lines 1-88
1/******/ (function(modules) { // webpackBootstrap 2/******/ // The module cache 3/******/ var installedModules = {}; 4/******/ 5/******/ // The require function 6/******/ function __webpack_require__(moduleId) { 7/******/ 8/******/ // Check if module is in cache 9/******/ if(installedModules[moduleId]) { 10/******/ return installedModules[moduleId].exports; 11/******/ } 12/******/ // Create a new module (and put it into the cache) 13/******/ var module = installedModules[moduleId] = { 14/******/ i: moduleId, 15/******/ l: false, 16/******/ exports: {} 17/******/ }; 18/******/ 19/******/ // Execute the module function 20/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); 21/******/ 22/******/ // Flag the module as loaded 23/******/ module.l = true; 24/******/ 25/******/ // Return the exports of the module 26/******/ return module.exports; 27/******/ } 28/******/ 29/******/ 30/******/ // expose the modules object (__webpack_modules__) 31/******/ __webpack_require__.m = modules; 32/******/ 33/******/ // expose the module cache 34/******/ __webpack_require__.c = installedModules; 35/******/ 36/******/ // define getter function for harmony exports 37/******/ __webpack_require__.d = function(exports, name, getter) { 38/******/ if(!__webpack_require__.o(exports, name)) { 39/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter }); 40/******/ } 41/******/ }; 42/******/ 43/******/ // define __esModule on exports 44/******/ __webpack_require__.r = function(exports) { 45/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { 46/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); 47/******/ } 48/******/ Object.defineProperty(exports, '__esModule', { value: true }); 49/******/ }; 50/******/ 51/******/ // create a fake namespace object 52/******/ // mode & 1: value is a module id, require it 53/******/ // mode & 2: merge all properties of value into the ns 54/******/ // mode & 4: return value when already ns object 55/******/ // mode & 8|1: behave like require 56/******/ __webpack_require__.t = function(value, mode) { 57/******/ if(mode & 1) value = __webpack_require__(value); 58/******/ if(mode & 8) return value; 59/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value; 60/******/ var ns = Object.create(null); 61/******/ __webpack_require__.r(ns); 62/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value }); 63/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key)); 64/******/ return ns; 65/******/ }; 66/******/ 67/******/ // getDefaultExport function for compatibility with non-harmony modules 68/******/ __webpack_require__.n = function(module) { 69/******/ var getter = module && module.__esModule ? 70/******/ function getDefault() { return module['default']; } : 71/******/ function getModuleExports() { return module; }; 72/******/ __webpack_require__.d(getter, 'a', getter); 73/******/ return getter; 74/******/ }; 75/******/ 76/******/ // Object.prototype.hasOwnProperty.call 77/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; 78/******/ 79/******/ // __webpack_public_path__ 80/******/ __webpack_require__.p = "/"; 81/******/ 82/******/ 83/******/ // Load entry module and return exports 84/******/ return __webpack_require__(__webpack_require__.s = 0); 85/******/ }) 86/************************************************************************/ 87/******/ ({ 88
vendor: 2,531 bytes, lines 89-166
89/***/ "./node_modules/asap/browser-asap.js": 90/*!*******************************************!*\ 91 !*** ./node_modules/asap/browser-asap.js ***! 92 \*******************************************/ 93/*! no static exports found */ 94/***/ (function(module, exports, __webpack_require__) { 95 96"use strict"; 97 98 99// rawAsap provides everything we need except exception management. 100var rawAsap = __webpack_require__(/*! ./raw */ "./node_modules/asap/browser-raw.js"); 101// RawTasks are recycled to reduce GC churn. 102var freeTasks = []; 103// We queue errors to ensure they are thrown in right order (FIFO). 104// Array-as-queue is good enough here, since we are just dealing with exceptions. 105var pendingErrors = []; 106var requestErrorThrow = rawAsap.makeRequestCallFromTimer(throwFirstError); 107 108function throwFirstError() { 109 if (pendingErrors.length) { 110 throw pendingErrors.shift(); 111 } 112} 113 114/** 115 * Calls a task as soon as possible after returning, in its own event, with priority 116 * over other events like animation, reflow, and repaint. An error thrown from an 117 * event will not interrupt, nor even substantially slow down the processing of 118 * other events, but will be rather postponed to a lower priority event. 119 * @param {{call}} task A callable object, typically a function that takes no 120 * arguments. 121 */ 122module.exports = asap; 123function asap(task) { 124 var rawTask; 125 if (freeTasks.length) { 126 rawTask = freeTasks.pop(); 127 } else { 128 rawTask = new RawTask(); 129 } 130 rawTask.task = task; 131 rawAsap(rawTask); 132} 133 134// We wrap tasks with recyclable task objects. A task object implements 135// `call`, just like a function. 136function RawTask() { 137 this.task = null; 138} 139 140// The sole purpose of wrapping the task is to catch the exception and recycle 141// the task object after its single use. 142RawTask.prototype.call = function () { 143 try { 144 this.task.call(); 145 } catch (error) { 146 if (asap.onerror) { 147 // This hook exists purely for testing purposes. 148 // Its name will be periodically randomized to break any code that 149 // depends on its existence. 150 asap.onerror(error); 151 } else { 152 // In a web browser, exceptions are not fatal. However, to avoid 153 // slowing down the queue of pending tasks, we rethrow the error in a 154 // lower priority turn. 155 pendingErrors.push(error); 156 requestErrorThrow(); 157 } 158 } finally { 159 this.task = null; 160 freeTasks[freeTasks.length] = this; 161 } 162}; 163 164 165/***/ }), 166
vendor: 10,093 bytes, lines 167-402
167/***/ "./node_modules/asap/browser-raw.js": 168/*!******************************************!*\ 169 !*** ./node_modules/asap/browser-raw.js ***! 170 \******************************************/ 171/*! no static exports found */ 172/***/ (function(module, exports, __webpack_require__) { 173 174"use strict"; 175/* WEBPACK VAR INJECTION */(function(global) { 176 177// Use the fastest means possible to execute a task in its own turn, with 178// priority over other events including IO, animation, reflow, and redraw 179// events in browsers. 180// 181// An exception thrown by a task will permanently interrupt the processing of 182// subsequent tasks. The higher level `asap` function ensures that if an 183// exception is thrown by a task, that the task queue will continue flushing as 184// soon as possible, but if you use `rawAsap` directly, you are responsible to 185// either ensure that no exceptions are thrown from your task, or to manually 186// call `rawAsap.requestFlush` if an exception is thrown. 187module.exports = rawAsap; 188function rawAsap(task) { 189 if (!queue.length) { 190 requestFlush(); 191 flushing = true; 192 } 193 // Equivalent to push, but avoids a function call. 194 queue[queue.length] = task; 195} 196 197var queue = []; 198// Once a flush has been requested, no further calls to `requestFlush` are 199// necessary until the next `flush` completes. 200var flushing = false; 201// `requestFlush` is an implementation-specific method that attempts to kick 202// off a `flush` event as quickly as possible. `flush` will attempt to exhaust 203// the event queue before yielding to the browser's own event loop. 204var requestFlush; 205// The position of the next task to execute in the task queue. This is 206// preserved between calls to `flush` so that it can be resumed if 207// a task throws an exception. 208var index = 0; 209// If a task schedules additional tasks recursively, the task queue can grow 210// unbounded. To prevent memory exhaustion, the task queue will periodically 211// truncate already-completed tasks. 212var capacity = 1024; 213 214// The flush function processes all tasks that have been scheduled with 215// `rawAsap` unless and until one of those tasks throws an exception. 216// If a task throws an exception, `flush` ensures that its state will remain 217// consistent and will resume where it left off when called again. 218// However, `flush` does not make any arrangements to be called again if an 219// exception is thrown. 220function flush() { 221 while (index < queue.length) { 222 var currentIndex = index; 223 // Advance the index before calling the task. This ensures that we will 224 // begin flushing on the next task the task throws an error. 225 index = index + 1; 226 queue[currentIndex].call(); 227 // Prevent leaking memory for long chains of recursive calls to `asap`. 228 // If we call `asap` within tasks scheduled by `asap`, the queue will 229 // grow, but to avoid an O(n) walk for every task we execute, we don't 230 // shift tasks off the queue after they have been executed. 231 // Instead, we periodically shift 1024 tasks off the queue. 232 if (index > capacity) { 233 // Manually shift all values starting at the index back to the 234 // beginning of the queue. 235 for (var scan = 0, newLength = queue.length - index; scan < newLength; scan++) { 236 queue[scan] = queue[scan + index]; 237 } 238 queue.length -= index; 239 index = 0; 240 } 241 } 242 queue.length = 0; 243 index = 0; 244 flushing = false; 245} 246 247// `requestFlush` is implemented using a strategy based on data collected from 248// every available SauceLabs Selenium web driver worker at time of writing. 249// https://docs.google.com/spreadsheets/d/1mG-5UYGup5qxGdEMWkhP6BWCz053NUb2E1QoUTU16uA/edit#gid=783724593 250 251// Safari 6 and 6.1 for desktop, iPad, and iPhone are the only browsers that 252// have WebKitMutationObserver but not un-prefixed MutationObserver. 253// Must use `global` or `self` instead of `window` to work in both frames and web 254// workers. `global` is a provision of Browserify, Mr, Mrs, or Mop. 255 256/* globals self */ 257var scope = typeof global !== "undefined" ? global : self; 258var BrowserMutationObserver = scope.MutationObserver || scope.WebKitMutationObserver; 259 260// MutationObservers are desirable because they have high priority and work 261// reliably everywhere they are implemented. 262// They are implemented in all modern browsers. 263// 264// - Android 4-4.3 265// - Chrome 26-34 266// - Firefox 14-29 267// - Internet Explorer 11 268// - iPad Safari 6-7.1 269// - iPhone Safari 7-7.1 270// - Safari 6-7 271if (typeof BrowserMutationObserver === "function") { 272 requestFlush = makeRequestCallFromMutationObserver(flush); 273 274// MessageChannels are desirable because they give direct access to the HTML 275// task queue, are implemented in Internet Explorer 10, Safari 5.0-1, and Opera 276// 11-12, and in web workers in many engines. 277// Although message channels yield to any queued rendering and IO tasks, they 278// would be better than imposing the 4ms delay of timers. 279// However, they do not work reliably in Internet Explorer or Safari. 280 281// Internet Explorer 10 is the only browser that has setImmediate but does 282// not have MutationObservers. 283// Although setImmediate yields to the browser's renderer, it would be 284// preferrable to falling back to setTimeout since it does not have 285// the minimum 4ms penalty. 286// Unfortunately there appears to be a bug in Internet Explorer 10 Mobile (and 287// Desktop to a lesser extent) that renders both setImmediate and 288// MessageChannel useless for the purposes of ASAP. 289// https://github.com/kriskowal/q/issues/396 290 291// Timers are implemented universally. 292// We fall back to timers in workers in most engines, and in foreground 293// contexts in the following browsers. 294// However, note that even this simple case requires nuances to operate in a 295// broad spectrum of browsers. 296// 297// - Firefox 3-13 298// - Internet Explorer 6-9 299// - iPad Safari 4.3 300// - Lynx 2.8.7 301} else { 302 requestFlush = makeRequestCallFromTimer(flush); 303} 304 305// `requestFlush` requests that the high priority event queue be flushed as 306// soon as possible. 307// This is useful to prevent an error thrown in a task from stalling the event 308// queue if the exception handled by Node.jsâs 309// `process.on("uncaughtException")` or by a domain. 310rawAsap.requestFlush = requestFlush; 311 312// To request a high priority event, we induce a mutation observer by toggling 313// the text of a text node between "1" and "-1". 314function makeRequestCallFromMutationObserver(callback) { 315 var toggle = 1; 316 var observer = new BrowserMutationObserver(callback); 317 var node = document.createTextNode(""); 318 observer.observe(node, {characterData: true}); 319 return function requestCall() { 320 toggle = -toggle; 321 node.data = toggle; 322 }; 323} 324 325// The message channel technique was discovered by Malte Ubl and was the 326// original foundation for this library. 327// http://www.nonblocking.io/2011/06/windownexttick.html 328 329// Safari 6.0.5 (at least) intermittently fails to create message ports on a 330// page's first load. Thankfully, this version of Safari supports 331// MutationObservers, so we don't need to fall back in that case. 332 333// function makeRequestCallFromMessageChannel(callback) { 334// var channel = new MessageChannel(); 335// channel.port1.onmessage = callback; 336// return function requestCall() { 337// channel.port2.postMessage(0); 338// }; 339// } 340 341// For reasons explained above, we are also unable to use `setImmediate` 342// under any circumstances. 343// Even if we were, there is another bug in Internet Explorer 10. 344// It is not sufficient to assign `setImmediate` to `requestFlush` because 345// `setImmediate` must be called *by name* and therefore must be wrapped in a 346// closure. 347// Never forget. 348 349// function makeRequestCallFromSetImmediate(callback) { 350// return function requestCall() { 351// setImmediate(callback); 352// }; 353// } 354 355// Safari 6.0 has a problem where timers will get lost while the user is 356// scrolling. This problem does not impact ASAP because Safari 6.0 supports 357// mutation observers, so that implementation is used instead. 358// However, if we ever elect to use timers in Safari, the prevalent work-around 359// is to add a scroll event listener that calls for a flush. 360 361// `setTimeout` does not call the passed callback if the delay is less than 362// approximately 7 in web workers in Firefox 8 through 18, and sometimes not 363// even then. 364 365function makeRequestCallFromTimer(callback) { 366 return function requestCall() { 367 // We dispatch a timeout with a specified delay of 0 for engines that 368 // can reliably accommodate that request. This will usually be snapped 369 // to a 4 milisecond delay, but once we're flushing, there's no delay 370 // between events. 371 var timeoutHandle = setTimeout(handleTimer, 0); 372 // However, since this timer gets frequently dropped in Firefox 373 // workers, we enlist an interval handle that will try to fire 374 // an event 20 times per second until it succeeds. 375 var intervalHandle = setInterval(handleTimer, 50); 376 377 function handleTimer() { 378 // Whichever timer succeeds will cancel both timers and 379 // execute the callback. 380 clearTimeout(timeoutHandle); 381 clearInterval(intervalHandle); 382 callback(); 383 } 384 }; 385} 386 387// This is for `asap.js` only. 388// Its name will be periodically randomized to break any code that depends on 389// its existence. 390rawAsap.makeRequestCallFromTimer = makeRequestCallFromTimer; 391 392// ASAP was originally a nextTick shim included in Q. This was factored out 393// into this ASAP package. It was later adapted to RSVP which made further 394// amendments. These decisions, particularly to marginalize MessageChannel and 395// to capture the MutationObserver implementation in a closure, were integrated 396// back into ASAP proper. 397// https://github.com/tildeio/rsvp.js/blob/cddf7232546a9cf858524b75cde6f9edf72620a7/lib/rsvp/asap.js 398 399/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../webpack/buildin/global.js */ "./node_modules/webpack/buildin/global.js"))) 400 401/***/ }), 402
vendor: 361 bytes, lines 403-413
403/***/ "./node_modules/axios/index.js": 404/*!*************************************!*\ 405 !*** ./node_modules/axios/index.js ***! 406 \*************************************/ 407/*! no static exports found */ 408/***/ (function(module, exports, __webpack_require__) { 409 410module.exports = __webpack_require__(/*! ./lib/axios */ "./node_modules/axios/lib/axios.js"); 411 412/***/ }), 413
vendor: 5,974 bytes, lines 414-587
414/***/ "./node_modules/axios/lib/adapters/xhr.js": 415/*!************************************************!*\ 416 !*** ./node_modules/axios/lib/adapters/xhr.js ***! 417 \************************************************/ 418/*! no static exports found */ 419/***/ (function(module, exports, __webpack_require__) { 420 421"use strict"; 422 423 424var utils = __webpack_require__(/*! ./../utils */ "./node_modules/axios/lib/utils.js"); 425var settle = __webpack_require__(/*! ./../core/settle */ "./node_modules/axios/lib/core/settle.js"); 426var buildURL = __webpack_require__(/*! ./../helpers/buildURL */ "./node_modules/axios/lib/helpers/buildURL.js"); 427var parseHeaders = __webpack_require__(/*! ./../helpers/parseHeaders */ "./node_modules/axios/lib/helpers/parseHeaders.js"); 428var isURLSameOrigin = __webpack_require__(/*! ./../helpers/isURLSameOrigin */ "./node_modules/axios/lib/helpers/isURLSameOrigin.js"); 429var createError = __webpack_require__(/*! ../core/createError */ "./node_modules/axios/lib/core/createError.js"); 430 431module.exports = function xhrAdapter(config) { 432 return new Promise(function dispatchXhrRequest(resolve, reject) { 433 var requestData = config.data; 434 var requestHeaders = config.headers; 435 436 if (utils.isFormData(requestData)) { 437 delete requestHeaders['Content-Type']; // Let the browser set it 438 } 439 440 var request = new XMLHttpRequest(); 441 442 // HTTP basic authentication 443 if (config.auth) { 444 var username = config.auth.username || ''; 445 var password = config.auth.password || ''; 446 requestHeaders.Authorization = 'Basic ' + btoa(username + ':' + password); 447 } 448 449 request.open(config.method.toUpperCase(), buildURL(config.url, config.params, config.paramsSerializer), true); 450 451 // Set the request timeout in MS 452 request.timeout = config.timeout; 453 454 // Listen for ready state 455 request.onreadystatechange = function handleLoad() { 456 if (!request || request.readyState !== 4) { 457 return; 458 } 459 460 // The request errored out and we didn't get a response, this will be 461 // handled by onerror instead 462 // With one exception: request that using file: protocol, most browsers 463 // will return status as 0 even though it's a successful request 464 if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) { 465 return; 466 } 467 468 // Prepare the response 469 var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null; 470 var responseData = !config.responseType || config.responseType === 'text' ? request.responseText : request.response; 471 var response = { 472 data: responseData, 473 status: request.status, 474 statusText: request.statusText, 475 headers: responseHeaders, 476 config: config, 477 request: request 478 }; 479 480 settle(resolve, reject, response); 481 482 // Clean up request 483 request = null; 484 }; 485 486 // Handle low level network errors 487 request.onerror = function handleError() { 488 // Real errors are hidden from us by the browser 489 // onerror should only fire if it's a network error 490 reject(createError('Network Error', config, null, request)); 491 492 // Clean up request 493 request = null; 494 }; 495 496 // Handle timeout 497 request.ontimeout = function handleTimeout() { 498 reject(createError('timeout of ' + config.timeout + 'ms exceeded', config, 'ECONNABORTED', 499 request)); 500 501 // Clean up request 502 request = null; 503 }; 504 505 // Add xsrf header 506 // This is only done if running in a standard browser environment. 507 // Specifically not if we're in a web worker, or react-native. 508 if (utils.isStandardBrowserEnv()) { 509 var cookies = __webpack_require__(/*! ./../helpers/cookies */ "./node_modules/axios/lib/helpers/cookies.js"); 510 511 // Add xsrf header 512 var xsrfValue = (config.withCredentials || isURLSameOrigin(config.url)) && config.xsrfCookieName ? 513 cookies.read(config.xsrfCookieName) : 514 undefined; 515 516 if (xsrfValue) { 517 requestHeaders[config.xsrfHeaderName] = xsrfValue; 518 } 519 } 520 521 // Add headers to the request 522 if ('setRequestHeader' in request) { 523 utils.forEach(requestHeaders, function setRequestHeader(val, key) { 524 if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') { 525 // Remove Content-Type if data is undefined 526 delete requestHeaders[key]; 527 } else { 528 // Otherwise add header to the request 529 request.setRequestHeader(key, val); 530 } 531 }); 532 } 533 534 // Add withCredentials to request if needed 535 if (config.withCredentials) { 536 request.withCredentials = true; 537 } 538 539 // Add responseType to request if needed 540 if (config.responseType) { 541 try { 542 request.responseType = config.responseType; 543 } catch (e) { 544 // Expected DOMException thrown by browsers not compatible XMLHttpRequest Level 2. 545 // But, this can be suppressed for 'json' type as it can be parsed by default 'transformResponse' function. 546 if (config.responseType !== 'json') { 547 throw e; 548 } 549 } 550 } 551 552 // Handle progress if needed 553 if (typeof config.onDownloadProgress === 'function') { 554 request.addEventListener('progress', config.onDownloadProgress); 555 } 556 557 // Not all browsers support upload events 558 if (typeof config.onUploadProgress === 'function' && request.upload) { 559 request.upload.addEventListener('progress', config.onUploadProgress); 560 } 561 562 if (config.cancelToken) { 563 // Handle cancellation 564 config.cancelToken.promise.then(function onCanceled(cancel) { 565 if (!request) { 566 return; 567 } 568 569 request.abort(); 570 reject(cancel); 571 // Clean up request 572 request = null; 573 }); 574 } 575 576 if (requestData === undefined) { 577 requestData = null; 578 } 579 580 // Send the request 581 request.send(requestData); 582 }); 583}; 584 585 586/***/ }), 587
vendor: 2,132 bytes, lines 588-651
588/***/ "./node_modules/axios/lib/axios.js": 589/*!*****************************************!*\ 590 !*** ./node_modules/axios/lib/axios.js ***! 591 \*****************************************/ 592/*! no static exports found */ 593/***/ (function(module, exports, __webpack_require__) { 594 595"use strict"; 596 597 598var utils = __webpack_require__(/*! ./utils */ "./node_modules/axios/lib/utils.js"); 599var bind = __webpack_require__(/*! ./helpers/bind */ "./node_modules/axios/lib/helpers/bind.js"); 600var Axios = __webpack_require__(/*! ./core/Axios */ "./node_modules/axios/lib/core/Axios.js"); 601var defaults = __webpack_require__(/*! ./defaults */ "./node_modules/axios/lib/defaults.js"); 602 603/** 604 * Create an instance of Axios 605 * 606 * @param {Object} defaultConfig The default config for the instance 607 * @return {Axios} A new instance of Axios 608 */ 609function createInstance(defaultConfig) { 610 var context = new Axios(defaultConfig); 611 var instance = bind(Axios.prototype.request, context); 612 613 // Copy axios.prototype to instance 614 utils.extend(instance, Axios.prototype, context); 615 616 // Copy context to instance 617 utils.extend(instance, context); 618 619 return instance; 620} 621 622// Create the default instance to be exported 623var axios = createInstance(defaults); 624 625// Expose Axios class to allow class inheritance 626axios.Axios = Axios; 627 628// Factory for creating new instances 629axios.create = function create(instanceConfig) { 630 return createInstance(utils.merge(defaults, instanceConfig)); 631}; 632 633// Expose Cancel & CancelToken 634axios.Cancel = __webpack_require__(/*! ./cancel/Cancel */ "./node_modules/axios/lib/cancel/Cancel.js"); 635axios.CancelToken = __webpack_require__(/*! ./cancel/CancelToken */ "./node_modules/axios/lib/cancel/CancelToken.js"); 636axios.isCancel = __webpack_require__(/*! ./cancel/isCancel */ "./node_modules/axios/lib/cancel/isCancel.js"); 637 638// Expose all/spread 639axios.all = function all(promises) { 640 return Promise.all(promises); 641}; 642axios.spread = __webpack_require__(/*! ./helpers/spread */ "./node_modules/axios/lib/helpers/spread.js"); 643 644module.exports = axios; 645 646// Allow use of default import syntax in TypeScript 647module.exports.default = axios; 648 649 650/***/ }), 651
vendor: 702 bytes, lines 652-682
652/***/ "./node_modules/axios/lib/cancel/Cancel.js": 653/*!*************************************************!*\ 654 !*** ./node_modules/axios/lib/cancel/Cancel.js ***! 655 \*************************************************/ 656/*! no static exports found */ 657/***/ (function(module, exports, __webpack_require__) { 658 659"use strict"; 660 661 662/** 663 * A `Cancel` is an object that is thrown when an operation is canceled. 664 * 665 * @class 666 * @param {string=} message The message. 667 */ 668function Cancel(message) { 669 this.message = message; 670} 671 672Cancel.prototype.toString = function toString() { 673 return 'Cancel' + (this.message ? ': ' + this.message : ''); 674}; 675 676Cancel.prototype.__CANCEL__ = true; 677 678module.exports = Cancel; 679 680 681/***/ }), 682
vendor: 1,638 bytes, lines 683-751
683/***/ "./node_modules/axios/lib/cancel/CancelToken.js": 684/*!******************************************************!*\ 685 !*** ./node_modules/axios/lib/cancel/CancelToken.js ***! 686 \******************************************************/ 687/*! no static exports found */ 688/***/ (function(module, exports, __webpack_require__) { 689 690"use strict"; 691 692 693var Cancel = __webpack_require__(/*! ./Cancel */ "./node_modules/axios/lib/cancel/Cancel.js"); 694 695/** 696 * A `CancelToken` is an object that can be used to request cancellation of an operation. 697 * 698 * @class 699 * @param {Function} executor The executor function. 700 */ 701function CancelToken(executor) { 702 if (typeof executor !== 'function') { 703 throw new TypeError('executor must be a function.'); 704 } 705 706 var resolvePromise; 707 this.promise = new Promise(function promiseExecutor(resolve) { 708 resolvePromise = resolve; 709 }); 710 711 var token = this; 712 executor(function cancel(message) { 713 if (token.reason) { 714 // Cancellation has already been requested 715 return; 716 } 717 718 token.reason = new Cancel(message); 719 resolvePromise(token.reason); 720 }); 721} 722 723/** 724 * Throws a `Cancel` if cancellation has been requested. 725 */ 726CancelToken.prototype.throwIfRequested = function throwIfRequested() { 727 if (this.reason) { 728 throw this.reason; 729 } 730}; 731 732/** 733 * Returns an object that contains a new `CancelToken` and a function that, when called, 734 * cancels the `CancelToken`. 735 */ 736CancelToken.source = function source() { 737 var cancel; 738 var token = new CancelToken(function executor(c) { 739 cancel = c; 740 }); 741 return { 742 token: token, 743 cancel: cancel 744 }; 745}; 746 747module.exports = CancelToken; 748 749 750/***/ }), 751
vendor: 427 bytes, lines 752-768
752/***/ "./node_modules/axios/lib/cancel/isCancel.js": 753/*!***************************************************!*\ 754 !*** ./node_modules/axios/lib/cancel/isCancel.js ***! 755 \***************************************************/ 756/*! no static exports found */ 757/***/ (function(module, exports, __webpack_require__) { 758 759"use strict"; 760 761 762module.exports = function isCancel(value) { 763 return !!(value && value.__CANCEL__); 764}; 765 766 767/***/ }), 768
vendor: 2,740 bytes, lines 769-859
769/***/ "./node_modules/axios/lib/core/Axios.js": 770/*!**********************************************!*\ 771 !*** ./node_modules/axios/lib/core/Axios.js ***! 772 \**********************************************/ 773/*! no static exports found */ 774/***/ (function(module, exports, __webpack_require__) { 775 776"use strict"; 777 778 779var defaults = __webpack_require__(/*! ./../defaults */ "./node_modules/axios/lib/defaults.js"); 780var utils = __webpack_require__(/*! ./../utils */ "./node_modules/axios/lib/utils.js"); 781var InterceptorManager = __webpack_require__(/*! ./InterceptorManager */ "./node_modules/axios/lib/core/InterceptorManager.js"); 782var dispatchRequest = __webpack_require__(/*! ./dispatchRequest */ "./node_modules/axios/lib/core/dispatchRequest.js"); 783 784/** 785 * Create a new instance of Axios 786 * 787 * @param {Object} instanceConfig The default config for the instance 788 */ 789function Axios(instanceConfig) { 790 this.defaults = instanceConfig; 791 this.interceptors = { 792 request: new InterceptorManager(), 793 response: new InterceptorManager() 794 }; 795} 796 797/** 798 * Dispatch a request 799 * 800 * @param {Object} config The config specific for this request (merged with this.defaults) 801 */ 802Axios.prototype.request = function request(config) { 803 /*eslint no-param-reassign:0*/ 804 // Allow for axios('example/url'[, config]) a la fetch API 805 if (typeof config === 'string') { 806 config = utils.merge({ 807 url: arguments[0] 808 }, arguments[1]); 809 } 810 811 config = utils.merge(defaults, {method: 'get'}, this.defaults, config); 812 config.method = config.method.toLowerCase(); 813 814 // Hook up interceptors middleware 815 var chain = [dispatchRequest, undefined]; 816 var promise = Promise.resolve(config); 817 818 this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) { 819 chain.unshift(interceptor.fulfilled, interceptor.rejected); 820 }); 821 822 this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) { 823 chain.push(interceptor.fulfilled, interceptor.rejected); 824 }); 825 826 while (chain.length) { 827 promise = promise.then(chain.shift(), chain.shift()); 828 } 829 830 return promise; 831}; 832 833// Provide aliases for supported request methods 834utils.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) { 835 /*eslint func-names:0*/ 836 Axios.prototype[method] = function(url, config) { 837 return this.request(utils.merge(config || {}, { 838 method: method, 839 url: url 840 })); 841 }; 842}); 843 844utils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) { 845 /*eslint func-names:0*/ 846 Axios.prototype[method] = function(url, data, config) { 847 return this.request(utils.merge(config || {}, { 848 method: method, 849 url: url, 850 data: data 851 })); 852 }; 853}); 854 855module.exports = Axios; 856 857 858/***/ }), 859
vendor: 1,661 bytes, lines 860-923
860/***/ "./node_modules/axios/lib/core/InterceptorManager.js": 861/*!***********************************************************!*\ 862 !*** ./node_modules/axios/lib/core/InterceptorManager.js ***! 863 \***********************************************************/ 864/*! no static exports found */ 865/***/ (function(module, exports, __webpack_require__) { 866 867"use strict"; 868 869 870var utils = __webpack_require__(/*! ./../utils */ "./node_modules/axios/lib/utils.js"); 871 872function InterceptorManager() { 873 this.handlers = []; 874} 875 876/** 877 * Add a new interceptor to the stack 878 * 879 * @param {Function} fulfilled The function to handle `then` for a `Promise` 880 * @param {Function} rejected The function to handle `reject` for a `Promise` 881 * 882 * @return {Number} An ID used to remove interceptor later 883 */ 884InterceptorManager.prototype.use = function use(fulfilled, rejected) { 885 this.handlers.push({ 886 fulfilled: fulfilled, 887 rejected: rejected 888 }); 889 return this.handlers.length - 1; 890}; 891 892/** 893 * Remove an interceptor from the stack 894 * 895 * @param {Number} id The ID that was returned by `use` 896 */ 897InterceptorManager.prototype.eject = function eject(id) { 898 if (this.handlers[id]) { 899 this.handlers[id] = null; 900 } 901}; 902 903/** 904 * Iterate over all the registered interceptors 905 * 906 * This method is particularly useful for skipping over any 907 * interceptors that may have become `null` calling `eject`. 908 * 909 * @param {Function} fn The function to call for each interceptor 910 */ 911InterceptorManager.prototype.forEach = function forEach(fn) { 912 utils.forEach(this.handlers, function forEachHandler(h) { 913 if (h !== null) { 914 fn(h); 915 } 916 }); 917}; 918 919module.exports = InterceptorManager; 920 921 922/***/ }), 923
vendor: 1,019 bytes, lines 924-953
924/***/ "./node_modules/axios/lib/core/createError.js": 925/*!****************************************************!*\ 926 !*** ./node_modules/axios/lib/core/createError.js ***! 927 \****************************************************/ 928/*! no static exports found */ 929/***/ (function(module, exports, __webpack_require__) { 930 931"use strict"; 932 933 934var enhanceError = __webpack_require__(/*! ./enhanceError */ "./node_modules/axios/lib/core/enhanceError.js"); 935 936/** 937 * Create an Error with the specified message, config, error code, request and response. 938 * 939 * @param {string} message The error message. 940 * @param {Object} config The config. 941 * @param {string} [code] The error code (for example, 'ECONNABORTED'). 942 * @param {Object} [request] The request. 943 * @param {Object} [response] The response. 944 * @returns {Error} The created error. 945 */ 946module.exports = function createError(message, config, code, request, response) { 947 var error = new Error(message); 948 return enhanceError(error, config, code, request, response); 949}; 950 951 952/***/ }), 953
vendor: 2,918 bytes, lines 954-1051
954/***/ "./node_modules/axios/lib/core/dispatchRequest.js": 955/*!********************************************************!*\ 956 !*** ./node_modules/axios/lib/core/dispatchRequest.js ***! 957 \********************************************************/ 958/*! no static exports found */ 959/***/ (function(module, exports, __webpack_require__) { 960 961"use strict"; 962 963 964var utils = __webpack_require__(/*! ./../utils */ "./node_modules/axios/lib/utils.js"); 965var transformData = __webpack_require__(/*! ./transformData */ "./node_modules/axios/lib/core/transformData.js"); 966var isCancel = __webpack_require__(/*! ../cancel/isCancel */ "./node_modules/axios/lib/cancel/isCancel.js"); 967var defaults = __webpack_require__(/*! ../defaults */ "./node_modules/axios/lib/defaults.js"); 968var isAbsoluteURL = __webpack_require__(/*! ./../helpers/isAbsoluteURL */ "./node_modules/axios/lib/helpers/isAbsoluteURL.js"); 969var combineURLs = __webpack_require__(/*! ./../helpers/combineURLs */ "./node_modules/axios/lib/helpers/combineURLs.js"); 970 971/** 972 * Throws a `Cancel` if cancellation has been requested. 973 */ 974function throwIfCancellationRequested(config) { 975 if (config.cancelToken) { 976 config.cancelToken.throwIfRequested(); 977 } 978} 979 980/** 981 * Dispatch a request to the server using the configured adapter. 982 * 983 * @param {object} config The config that is to be used for the request 984 * @returns {Promise} The Promise to be fulfilled 985 */ 986module.exports = function dispatchRequest(config) { 987 throwIfCancellationRequested(config); 988 989 // Support baseURL config 990 if (config.baseURL && !isAbsoluteURL(config.url)) { 991 config.url = combineURLs(config.baseURL, config.url); 992 } 993 994 // Ensure headers exist 995 config.headers = config.headers || {}; 996 997 // Transform request data 998 config.data = transformData( 999 config.data, 1000 config.headers, 1001 config.transformRequest 1002 ); 1003 1004 // Flatten headers 1005 config.headers = utils.merge( 1006 config.headers.common || {}, 1007 config.headers[config.method] || {}, 1008 config.headers || {} 1009 ); 1010 1011 utils.forEach( 1012 ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'], 1013 function cleanHeaderConfig(method) { 1014 delete config.headers[method]; 1015 } 1016 ); 1017 1018 var adapter = config.adapter || defaults.adapter; 1019 1020 return adapter(config).then(function onAdapterResolution(response) { 1021 throwIfCancellationRequested(config); 1022 1023 // Transform response data 1024 response.data = transformData( 1025 response.data, 1026 response.headers, 1027 config.transformResponse 1028 ); 1029 1030 return response; 1031 }, function onAdapterRejection(reason) { 1032 if (!isCancel(reason)) { 1033 throwIfCancellationRequested(config); 1034 1035 // Transform response data 1036 if (reason && reason.response) { 1037 reason.response.data = transformData( 1038 reason.response.data, 1039 reason.response.headers, 1040 config.transformResponse 1041 ); 1042 } 1043 } 1044 1045 return Promise.reject(reason); 1046 }); 1047}; 1048 1049 1050/***/ }), 1051
vendor: 925 bytes, lines 1052-1084
1052/***/ "./node_modules/axios/lib/core/enhanceError.js": 1053/*!*****************************************************!*\ 1054 !*** ./node_modules/axios/lib/core/enhanceError.js ***! 1055 \*****************************************************/ 1056/*! no static exports found */ 1057/***/ (function(module, exports, __webpack_require__) { 1058 1059"use strict"; 1060 1061 1062/** 1063 * Update an Error with the specified config, error code, and response. 1064 * 1065 * @param {Error} error The error to update. 1066 * @param {Object} config The config. 1067 * @param {string} [code] The error code (for example, 'ECONNABORTED'). 1068 * @param {Object} [request] The request. 1069 * @param {Object} [response] The response. 1070 * @returns {Error} The error. 1071 */ 1072module.exports = function enhanceError(error, config, code, request, response) { 1073 error.config = config; 1074 if (code) { 1075 error.code = code; 1076 } 1077 error.request = request; 1078 error.response = response; 1079 return error; 1080}; 1081 1082 1083/***/ }), 1084
vendor: 1,130 bytes, lines 1085-1122
1085/***/ "./node_modules/axios/lib/core/settle.js": 1086/*!***********************************************!*\ 1087 !*** ./node_modules/axios/lib/core/settle.js ***! 1088 \***********************************************/ 1089/*! no static exports found */ 1090/***/ (function(module, exports, __webpack_require__) { 1091 1092"use strict"; 1093 1094 1095var createError = __webpack_require__(/*! ./createError */ "./node_modules/axios/lib/core/createError.js"); 1096 1097/** 1098 * Resolve or reject a Promise based on response status. 1099 * 1100 * @param {Function} resolve A function that resolves the promise. 1101 * @param {Function} reject A function that rejects the promise. 1102 * @param {object} response The response. 1103 */ 1104module.exports = function settle(resolve, reject, response) { 1105 var validateStatus = response.config.validateStatus; 1106 // Note: status is not exposed by XDomainRequest 1107 if (!response.status || !validateStatus || validateStatus(response.status)) { 1108 resolve(response); 1109 } else { 1110 reject(createError( 1111 'Request failed with status code ' + response.status, 1112 response.config, 1113 null, 1114 response.request, 1115 response 1116 )); 1117 } 1118}; 1119 1120 1121/***/ }), 1122
vendor: 940 bytes, lines 1123-1154
1123/***/ "./node_modules/axios/lib/core/transformData.js": 1124/*!******************************************************!*\ 1125 !*** ./node_modules/axios/lib/core/transformData.js ***! 1126 \******************************************************/ 1127/*! no static exports found */ 1128/***/ (function(module, exports, __webpack_require__) { 1129 1130"use strict"; 1131 1132 1133var utils = __webpack_require__(/*! ./../utils */ "./node_modules/axios/lib/utils.js"); 1134 1135/** 1136 * Transform the data for a request or a response 1137 * 1138 * @param {Object|String} data The data to be transformed 1139 * @param {Array} headers The headers for the request or response 1140 * @param {Array|Function} fns A single function or Array of functions 1141 * @returns {*} The resulting transformed data 1142 */ 1143module.exports = function transformData(data, headers, fns) { 1144 /*eslint no-param-reassign:0*/ 1145 utils.forEach(fns, function transform(fn) { 1146 data = fn(data, headers); 1147 }); 1148 1149 return data; 1150}; 1151 1152 1153/***/ }), 1154
vendor: 3,157 bytes, lines 1155-1263
1155/***/ "./node_modules/axios/lib/defaults.js": 1156/*!********************************************!*\ 1157 !*** ./node_modules/axios/lib/defaults.js ***! 1158 \********************************************/ 1159/*! no static exports found */ 1160/***/ (function(module, exports, __webpack_require__) { 1161 1162"use strict"; 1163/* WEBPACK VAR INJECTION */(function(process) { 1164 1165var utils = __webpack_require__(/*! ./utils */ "./node_modules/axios/lib/utils.js"); 1166var normalizeHeaderName = __webpack_require__(/*! ./helpers/normalizeHeaderName */ "./node_modules/axios/lib/helpers/normalizeHeaderName.js"); 1167 1168var DEFAULT_CONTENT_TYPE = { 1169 'Content-Type': 'application/x-www-form-urlencoded' 1170}; 1171 1172function setContentTypeIfUnset(headers, value) { 1173 if (!utils.isUndefined(headers) && utils.isUndefined(headers['Content-Type'])) { 1174 headers['Content-Type'] = value; 1175 } 1176} 1177 1178function getDefaultAdapter() { 1179 var adapter; 1180 if (typeof XMLHttpRequest !== 'undefined') { 1181 // For browsers use XHR adapter 1182 adapter = __webpack_require__(/*! ./adapters/xhr */ "./node_modules/axios/lib/adapters/xhr.js"); 1183 } else if (typeof process !== 'undefined') { 1184 // For node use HTTP adapter 1185 adapter = __webpack_require__(/*! ./adapters/http */ "./node_modules/axios/lib/adapters/xhr.js"); 1186 } 1187 return adapter; 1188} 1189 1190var defaults = { 1191 adapter: getDefaultAdapter(), 1192 1193 transformRequest: [function transformRequest(data, headers) { 1194 normalizeHeaderName(headers, 'Content-Type'); 1195 if (utils.isFormData(data) || 1196 utils.isArrayBuffer(data) || 1197 utils.isBuffer(data) || 1198 utils.isStream(data) || 1199 utils.isFile(data) || 1200 utils.isBlob(data) 1201 ) { 1202 return data; 1203 } 1204 if (utils.isArrayBufferView(data)) { 1205 return data.buffer; 1206 } 1207 if (utils.isURLSearchParams(data)) { 1208 setContentTypeIfUnset(headers, 'application/x-www-form-urlencoded;charset=utf-8'); 1209 return data.toString(); 1210 } 1211 if (utils.isObject(data)) { 1212 setContentTypeIfUnset(headers, 'application/json;charset=utf-8'); 1213 return JSON.stringify(data); 1214 } 1215 return data; 1216 }], 1217 1218 transformResponse: [function transformResponse(data) { 1219 /*eslint no-param-reassign:0*/ 1220 if (typeof data === 'string') { 1221 try { 1222 data = JSON.parse(data); 1223 } catch (e) { /* Ignore */ } 1224 } 1225 return data; 1226 }], 1227 1228 /** 1229 * A timeout in milliseconds to abort a request. If set to 0 (default) a 1230 * timeout is not created. 1231 */ 1232 timeout: 0, 1233 1234 xsrfCookieName: 'XSRF-TOKEN', 1235 xsrfHeaderName: 'X-XSRF-TOKEN', 1236 1237 maxContentLength: -1, 1238 1239 validateStatus: function validateStatus(status) { 1240 return status >= 200 && status < 300; 1241 } 1242}; 1243 1244defaults.headers = { 1245 common: { 1246 'Accept': 'application/json, text/plain, */*' 1247 } 1248}; 1249 1250utils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) { 1251 defaults.headers[method] = {}; 1252}); 1253 1254utils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) { 1255 defaults.headers[method] = utils.merge(DEFAULT_CONTENT_TYPE); 1256}); 1257 1258module.exports = defaults; 1259 1260/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../process/browser.js */ "./node_modules/process/browser.js"))) 1261 1262/***/ }), 1263
vendor: 569 bytes, lines 1264-1286
1264/***/ "./node_modules/axios/lib/helpers/bind.js": 1265/*!************************************************!*\ 1266 !*** ./node_modules/axios/lib/helpers/bind.js ***! 1267 \************************************************/ 1268/*! no static exports found */ 1269/***/ (function(module, exports, __webpack_require__) { 1270 1271"use strict"; 1272 1273 1274module.exports = function bind(fn, thisArg) { 1275 return function wrap() { 1276 var args = new Array(arguments.length); 1277 for (var i = 0; i < args.length; i++) { 1278 args[i] = arguments[i]; 1279 } 1280 return fn.apply(thisArg, args); 1281 }; 1282}; 1283 1284 1285/***/ }), 1286
vendor: 1,931 bytes, lines 1287-1364
1287/***/ "./node_modules/axios/lib/helpers/buildURL.js": 1288/*!****************************************************!*\ 1289 !*** ./node_modules/axios/lib/helpers/buildURL.js ***! 1290 \****************************************************/ 1291/*! no static exports found */ 1292/***/ (function(module, exports, __webpack_require__) { 1293 1294"use strict"; 1295 1296 1297var utils = __webpack_require__(/*! ./../utils */ "./node_modules/axios/lib/utils.js"); 1298 1299function encode(val) { 1300 return encodeURIComponent(val). 1301 replace(/%40/gi, '@'). 1302 replace(/%3A/gi, ':'). 1303 replace(/%24/g, '$'). 1304 replace(/%2C/gi, ','). 1305 replace(/%20/g, '+'). 1306 replace(/%5B/gi, '['). 1307 replace(/%5D/gi, ']'); 1308} 1309 1310/** 1311 * Build a URL by appending params to the end 1312 * 1313 * @param {string} url The base of the url (e.g., http://www.google.com) 1314 * @param {object} [params] The params to be appended 1315 * @returns {string} The formatted url 1316 */ 1317module.exports = function buildURL(url, params, paramsSerializer) { 1318 /*eslint no-param-reassign:0*/ 1319 if (!params) { 1320 return url; 1321 } 1322 1323 var serializedParams; 1324 if (paramsSerializer) { 1325 serializedParams = paramsSerializer(params); 1326 } else if (utils.isURLSearchParams(params)) { 1327 serializedParams = params.toString(); 1328 } else { 1329 var parts = []; 1330 1331 utils.forEach(params, function serialize(val, key) { 1332 if (val === null || typeof val === 'undefined') { 1333 return; 1334 } 1335 1336 if (utils.isArray(val)) { 1337 key = key + '[]'; 1338 } else { 1339 val = [val]; 1340 } 1341 1342 utils.forEach(val, function parseValue(v) { 1343 if (utils.isDate(v)) { 1344 v = v.toISOString(); 1345 } else if (utils.isObject(v)) { 1346 v = JSON.stringify(v); 1347 } 1348 parts.push(encode(key) + '=' + encode(v)); 1349 }); 1350 }); 1351 1352 serializedParams = parts.join('&'); 1353 } 1354 1355 if (serializedParams) { 1356 url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams; 1357 } 1358 1359 return url; 1360}; 1361 1362 1363/***/ }), 1364
vendor: 721 bytes, lines 1365-1390
1365/***/ "./node_modules/axios/lib/helpers/combineURLs.js": 1366/*!*******************************************************!*\ 1367 !*** ./node_modules/axios/lib/helpers/combineURLs.js ***! 1368 \*******************************************************/ 1369/*! no static exports found */ 1370/***/ (function(module, exports, __webpack_require__) { 1371 1372"use strict"; 1373 1374 1375/** 1376 * Creates a new URL by combining the specified URLs 1377 * 1378 * @param {string} baseURL The base URL 1379 * @param {string} relativeURL The relative URL 1380 * @returns {string} The combined URL 1381 */ 1382module.exports = function combineURLs(baseURL, relativeURL) { 1383 return relativeURL 1384 ? baseURL.replace(/\/+$/, '') + '/' + relativeURL.replace(/^\/+/, '') 1385 : baseURL; 1386}; 1387 1388 1389/***/ }), 1390
vendor: 1,743 bytes, lines 1391-1455
1391/***/ "./node_modules/axios/lib/helpers/cookies.js": 1392/*!***************************************************!*\ 1393 !*** ./node_modules/axios/lib/helpers/cookies.js ***! 1394 \***************************************************/ 1395/*! no static exports found */ 1396/***/ (function(module, exports, __webpack_require__) { 1397 1398"use strict"; 1399 1400 1401var utils = __webpack_require__(/*! ./../utils */ "./node_modules/axios/lib/utils.js"); 1402 1403module.exports = ( 1404 utils.isStandardBrowserEnv() ? 1405 1406 // Standard browser envs support document.cookie 1407 (function standardBrowserEnv() { 1408 return { 1409 write: function write(name, value, expires, path, domain, secure) { 1410 var cookie = []; 1411 cookie.push(name + '=' + encodeURIComponent(value)); 1412 1413 if (utils.isNumber(expires)) { 1414 cookie.push('expires=' + new Date(expires).toGMTString()); 1415 } 1416 1417 if (utils.isString(path)) { 1418 cookie.push('path=' + path); 1419 } 1420 1421 if (utils.isString(domain)) { 1422 cookie.push('domain=' + domain); 1423 } 1424 1425 if (secure === true) { 1426 cookie.push('secure'); 1427 } 1428 1429 document.cookie = cookie.join('; '); 1430 }, 1431 1432 read: function read(name) { 1433 var match = document.cookie.match(new RegExp('(^|;\\s*)(' + name + ')=([^;]*)')); 1434 return (match ? decodeURIComponent(match[3]) : null); 1435 }, 1436 1437 remove: function remove(name) { 1438 this.write(name, '', Date.now() - 86400000); 1439 } 1440 }; 1441 })() : 1442 1443 // Non standard browser env (web workers, react-native) lack needed support. 1444 (function nonStandardBrowserEnv() { 1445 return { 1446 write: function write() {}, 1447 read: function read() { return null; }, 1448 remove: function remove() {} 1449 }; 1450 })() 1451); 1452 1453 1454/***/ }), 1455
vendor: 912 bytes, lines 1456-1481
1456/***/ "./node_modules/axios/lib/helpers/isAbsoluteURL.js": 1457/*!*********************************************************!*\ 1458 !*** ./node_modules/axios/lib/helpers/isAbsoluteURL.js ***! 1459 \*********************************************************/ 1460/*! no static exports found */ 1461/***/ (function(module, exports, __webpack_require__) { 1462 1463"use strict"; 1464 1465 1466/** 1467 * Determines whether the specified URL is absolute 1468 * 1469 * @param {string} url The URL to test 1470 * @returns {boolean} True if the specified URL is absolute, otherwise false 1471 */ 1472module.exports = function isAbsoluteURL(url) { 1473 // A URL is considered absolute if it begins with "<scheme>://" or "//" (protocol-relative URL). 1474 // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed 1475 // by any combination of letters, digits, plus, period, or hyphen. 1476 return /^([a-z][a-z\d\+\-\.]*:)?\/\//i.test(url); 1477}; 1478 1479 1480/***/ }), 1481
vendor: 2,655 bytes, lines 1482-1561
1482/***/ "./node_modules/axios/lib/helpers/isURLSameOrigin.js": 1483/*!***********************************************************!*\ 1484 !*** ./node_modules/axios/lib/helpers/isURLSameOrigin.js ***! 1485 \***********************************************************/ 1486/*! no static exports found */ 1487/***/ (function(module, exports, __webpack_require__) { 1488 1489"use strict"; 1490 1491 1492var utils = __webpack_require__(/*! ./../utils */ "./node_modules/axios/lib/utils.js"); 1493 1494module.exports = ( 1495 utils.isStandardBrowserEnv() ? 1496 1497 // Standard browser envs have full support of the APIs needed to test 1498 // whether the request URL is of the same origin as current location. 1499 (function standardBrowserEnv() { 1500 var msie = /(msie|trident)/i.test(navigator.userAgent); 1501 var urlParsingNode = document.createElement('a'); 1502 var originURL; 1503 1504 /** 1505 * Parse a URL to discover it's components 1506 * 1507 * @param {String} url The URL to be parsed 1508 * @returns {Object} 1509 */ 1510 function resolveURL(url) { 1511 var href = url; 1512 1513 if (msie) { 1514 // IE needs attribute set twice to normalize properties 1515 urlParsingNode.setAttribute('href', href); 1516 href = urlParsingNode.href; 1517 } 1518 1519 urlParsingNode.setAttribute('href', href); 1520 1521 // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils 1522 return { 1523 href: urlParsingNode.href, 1524 protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '', 1525 host: urlParsingNode.host, 1526 search: urlParsingNode.search ? urlParsingNode.search.replace(/^\?/, '') : '', 1527 hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '', 1528 hostname: urlParsingNode.hostname, 1529 port: urlParsingNode.port, 1530 pathname: (urlParsingNode.pathname.charAt(0) === '/') ? 1531 urlParsingNode.pathname : 1532 '/' + urlParsingNode.pathname 1533 }; 1534 } 1535 1536 originURL = resolveURL(window.location.href); 1537 1538 /** 1539 * Determine if a URL shares the same origin as the current location 1540 * 1541 * @param {String} requestURL The URL to test 1542 * @returns {boolean} True if URL shares the same origin, otherwise false 1543 */ 1544 return function isURLSameOrigin(requestURL) { 1545 var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL; 1546 return (parsed.protocol === originURL.protocol && 1547 parsed.host === originURL.host); 1548 }; 1549 })() : 1550 1551 // Non standard browser envs (web workers, react-native) lack needed support. 1552 (function nonStandardBrowserEnv() { 1553 return function isURLSameOrigin() { 1554 return true; 1555 }; 1556 })() 1557); 1558 1559 1560/***/ }), 1561
vendor: 783 bytes, lines 1562-1585
1562/***/ "./node_modules/axios/lib/helpers/normalizeHeaderName.js": 1563/*!***************************************************************!*\ 1564 !*** ./node_modules/axios/lib/helpers/normalizeHeaderName.js ***! 1565 \***************************************************************/ 1566/*! no static exports found */ 1567/***/ (function(module, exports, __webpack_require__) { 1568 1569"use strict"; 1570 1571 1572var utils = __webpack_require__(/*! ../utils */ "./node_modules/axios/lib/utils.js"); 1573 1574module.exports = function normalizeHeaderName(headers, normalizedName) { 1575 utils.forEach(headers, function processHeader(value, name) { 1576 if (name !== normalizedName && name.toUpperCase() === normalizedName.toUpperCase()) { 1577 headers[normalizedName] = value; 1578 delete headers[name]; 1579 } 1580 }); 1581}; 1582 1583 1584/***/ }), 1585
vendor: 1,791 bytes, lines 1586-1650
1586/***/ "./node_modules/axios/lib/helpers/parseHeaders.js": 1587/*!********************************************************!*\ 1588 !*** ./node_modules/axios/lib/helpers/parseHeaders.js ***! 1589 \********************************************************/ 1590/*! no static exports found */ 1591/***/ (function(module, exports, __webpack_require__) { 1592 1593"use strict"; 1594 1595 1596var utils = __webpack_require__(/*! ./../utils */ "./node_modules/axios/lib/utils.js"); 1597 1598// Headers whose duplicates are ignored by node 1599// c.f. https://nodejs.org/api/http.html#http_message_headers 1600var ignoreDuplicateOf = [ 1601 'age', 'authorization', 'content-length', 'content-type', 'etag', 1602 'expires', 'from', 'host', 'if-modified-since', 'if-unmodified-since', 1603 'last-modified', 'location', 'max-forwards', 'proxy-authorization', 1604 'referer', 'retry-after', 'user-agent' 1605]; 1606 1607/** 1608 * Parse headers into an object 1609 * 1610 * ``` 1611 * Date: Wed, 27 Aug 2014 08:58:49 GMT 1612 * Content-Type: application/json 1613 * Connection: keep-alive 1614 * Transfer-Encoding: chunked 1615 * ``` 1616 * 1617 * @param {String} headers Headers needing to be parsed 1618 * @returns {Object} Headers parsed into an object 1619 */ 1620module.exports = function parseHeaders(headers) { 1621 var parsed = {}; 1622 var key; 1623 var val; 1624 var i; 1625 1626 if (!headers) { return parsed; } 1627 1628 utils.forEach(headers.split('\n'), function parser(line) { 1629 i = line.indexOf(':'); 1630 key = utils.trim(line.substr(0, i)).toLowerCase(); 1631 val = utils.trim(line.substr(i + 1)); 1632 1633 if (key) { 1634 if (parsed[key] && ignoreDuplicateOf.indexOf(key) >= 0) { 1635 return; 1636 } 1637 if (key === 'set-cookie') { 1638 parsed[key] = (parsed[key] ? parsed[key] : []).concat([val]); 1639 } else { 1640 parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val; 1641 } 1642 } 1643 }); 1644 1645 return parsed; 1646}; 1647 1648 1649/***/ }), 1650
vendor: 885 bytes, lines 1651-1689
1651/***/ "./node_modules/axios/lib/helpers/spread.js": 1652/*!**************************************************!*\ 1653 !*** ./node_modules/axios/lib/helpers/spread.js ***! 1654 \**************************************************/ 1655/*! no static exports found */ 1656/***/ (function(module, exports, __webpack_require__) { 1657 1658"use strict"; 1659 1660 1661/** 1662 * Syntactic sugar for invoking a function and expanding an array for arguments. 1663 * 1664 * Common use case would be to use `Function.prototype.apply`. 1665 * 1666 * ```js 1667 * function f(x, y, z) {} 1668 * var args = [1, 2, 3]; 1669 * f.apply(null, args); 1670 * ``` 1671 * 1672 * With `spread` this example can be re-written. 1673 * 1674 * ```js 1675 * spread(function(x, y, z) {})([1, 2, 3]); 1676 * ``` 1677 * 1678 * @param {Function} callback 1679 * @returns {Function} 1680 */ 1681module.exports = function spread(callback) { 1682 return function wrap(arr) { 1683 return callback.apply(null, arr); 1684 }; 1685}; 1686 1687 1688/***/ }), 1689
vendor: 7,939 bytes, lines 1690-2004
1690/***/ "./node_modules/axios/lib/utils.js": 1691/*!*****************************************!*\ 1692 !*** ./node_modules/axios/lib/utils.js ***! 1693 \*****************************************/ 1694/*! no static exports found */ 1695/***/ (function(module, exports, __webpack_require__) { 1696 1697"use strict"; 1698 1699 1700var bind = __webpack_require__(/*! ./helpers/bind */ "./node_modules/axios/lib/helpers/bind.js"); 1701var isBuffer = __webpack_require__(/*! is-buffer */ "./node_modules/is-buffer/index.js"); 1702 1703/*global toString:true*/ 1704 1705// utils is a library of generic helper functions non-specific to axios 1706 1707var toString = Object.prototype.toString; 1708 1709/** 1710 * Determine if a value is an Array 1711 * 1712 * @param {Object} val The value to test 1713 * @returns {boolean} True if value is an Array, otherwise false 1714 */ 1715function isArray(val) { 1716 return toString.call(val) === '[object Array]'; 1717} 1718 1719/** 1720 * Determine if a value is an ArrayBuffer 1721 * 1722 * @param {Object} val The value to test 1723 * @returns {boolean} True if value is an ArrayBuffer, otherwise false 1724 */ 1725function isArrayBuffer(val) { 1726 return toString.call(val) === '[object ArrayBuffer]'; 1727} 1728 1729/** 1730 * Determine if a value is a FormData 1731 * 1732 * @param {Object} val The value to test 1733 * @returns {boolean} True if value is an FormData, otherwise false 1734 */ 1735function isFormData(val) { 1736 return (typeof FormData !== 'undefined') && (val instanceof FormData); 1737} 1738 1739/** 1740 * Determine if a value is a view on an ArrayBuffer 1741 * 1742 * @param {Object} val The value to test 1743 * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false 1744 */ 1745function isArrayBufferView(val) { 1746 var result; 1747 if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) { 1748 result = ArrayBuffer.isView(val); 1749 } else { 1750 result = (val) && (val.buffer) && (val.buffer instanceof ArrayBuffer); 1751 } 1752 return result; 1753} 1754 1755/** 1756 * Determine if a value is a String 1757 * 1758 * @param {Object} val The value to test 1759 * @returns {boolean} True if value is a String, otherwise false 1760 */ 1761function isString(val) { 1762 return typeof val === 'string'; 1763} 1764 1765/** 1766 * Determine if a value is a Number 1767 * 1768 * @param {Object} val The value to test 1769 * @returns {boolean} True if value is a Number, otherwise false 1770 */ 1771function isNumber(val) { 1772 return typeof val === 'number'; 1773} 1774 1775/** 1776 * Determine if a value is undefined 1777 * 1778 * @param {Object} val The value to test 1779 * @returns {boolean} True if the value is undefined, otherwise false 1780 */ 1781function isUndefined(val) { 1782 return typeof val === 'undefined'; 1783} 1784 1785/** 1786 * Determine if a value is an Object 1787 * 1788 * @param {Object} val The value to test 1789 * @returns {boolean} True if value is an Object, otherwise false 1790 */ 1791function isObject(val) { 1792 return val !== null && typeof val === 'object'; 1793} 1794 1795/** 1796 * Determine if a value is a Date 1797 * 1798 * @param {Object} val The value to test 1799 * @returns {boolean} True if value is a Date, otherwise false 1800 */ 1801function isDate(val) { 1802 return toString.call(val) === '[object Date]'; 1803} 1804 1805/** 1806 * Determine if a value is a File 1807 * 1808 * @param {Object} val The value to test 1809 * @returns {boolean} True if value is a File, otherwise false 1810 */ 1811function isFile(val) { 1812 return toString.call(val) === '[object File]'; 1813} 1814 1815/** 1816 * Determine if a value is a Blob 1817 * 1818 * @param {Object} val The value to test 1819 * @returns {boolean} True if value is a Blob, otherwise false 1820 */ 1821function isBlob(val) { 1822 return toString.call(val) === '[object Blob]'; 1823} 1824 1825/** 1826 * Determine if a value is a Function 1827 * 1828 * @param {Object} val The value to test 1829 * @returns {boolean} True if value is a Function, otherwise false 1830 */ 1831function isFunction(val) { 1832 return toString.call(val) === '[object Function]'; 1833} 1834 1835/** 1836 * Determine if a value is a Stream 1837 * 1838 * @param {Object} val The value to test 1839 * @returns {boolean} True if value is a Stream, otherwise false 1840 */ 1841function isStream(val) { 1842 return isObject(val) && isFunction(val.pipe); 1843} 1844 1845/** 1846 * Determine if a value is a URLSearchParams object 1847 * 1848 * @param {Object} val The value to test 1849 * @returns {boolean} True if value is a URLSearchParams object, otherwise false 1850 */ 1851function isURLSearchParams(val) { 1852 return typeof URLSearchParams !== 'undefined' && val instanceof URLSearchParams; 1853} 1854 1855/** 1856 * Trim excess whitespace off the beginning and end of a string 1857 * 1858 * @param {String} str The String to trim 1859 * @returns {String} The String freed of excess whitespace 1860 */ 1861function trim(str) { 1862 return str.replace(/^\s*/, '').replace(/\s*$/, ''); 1863} 1864 1865/** 1866 * Determine if we're running in a standard browser environment 1867 * 1868 * This allows axios to run in a web worker, and react-native. 1869 * Both environments support XMLHttpRequest, but not fully standard globals. 1870 * 1871 * web workers: 1872 * typeof window -> undefined 1873 * typeof document -> undefined 1874 * 1875 * react-native: 1876 * navigator.product -> 'ReactNative' 1877 */ 1878function isStandardBrowserEnv() { 1879 if (typeof navigator !== 'undefined' && navigator.product === 'ReactNative') { 1880 return false; 1881 } 1882 return ( 1883 typeof window !== 'undefined' && 1884 typeof document !== 'undefined' 1885 ); 1886} 1887 1888/** 1889 * Iterate over an Array or an Object invoking a function for each item. 1890 * 1891 * If `obj` is an Array callback will be called passing 1892 * the value, index, and complete array for each item. 1893 * 1894 * If 'obj' is an Object callback will be called passing 1895 * the value, key, and complete object for each property. 1896 * 1897 * @param {Object|Array} obj The object to iterate 1898 * @param {Function} fn The callback to invoke for each item 1899 */ 1900function forEach(obj, fn) { 1901 // Don't bother if no value provided 1902 if (obj === null || typeof obj === 'undefined') { 1903 return; 1904 } 1905 1906 // Force an array if not already something iterable 1907 if (typeof obj !== 'object') { 1908 /*eslint no-param-reassign:0*/ 1909 obj = [obj]; 1910 } 1911 1912 if (isArray(obj)) { 1913 // Iterate over array values 1914 for (var i = 0, l = obj.length; i < l; i++) { 1915 fn.call(null, obj[i], i, obj); 1916 } 1917 } else { 1918 // Iterate over object keys 1919 for (var key in obj) { 1920 if (Object.prototype.hasOwnProperty.call(obj, key)) { 1921 fn.call(null, obj[key], key, obj); 1922 } 1923 } 1924 } 1925} 1926 1927/** 1928 * Accepts varargs expecting each argument to be an object, then 1929 * immutably merges the properties of each object and returns result. 1930 * 1931 * When multiple objects contain the same key the later object in 1932 * the arguments list will take precedence. 1933 * 1934 * Example: 1935 * 1936 * ```js 1937 * var result = merge({foo: 123}, {foo: 456}); 1938 * console.log(result.foo); // outputs 456 1939 * ``` 1940 * 1941 * @param {Object} obj1 Object to merge 1942 * @returns {Object} Result of all merge properties 1943 */ 1944function merge(/* obj1, obj2, obj3, ... */) { 1945 var result = {}; 1946 function assignValue(val, key) { 1947 if (typeof result[key] === 'object' && typeof val === 'object') { 1948 result[key] = merge(result[key], val); 1949 } else { 1950 result[key] = val; 1951 } 1952 } 1953 1954 for (var i = 0, l = arguments.length; i < l; i++) { 1955 forEach(arguments[i], assignValue); 1956 } 1957 return result; 1958} 1959 1960/** 1961 * Extends object a by mutably adding to it the properties of object b. 1962 * 1963 * @param {Object} a The object to be extended 1964 * @param {Object} b The object to copy properties from 1965 * @param {Object} thisArg The object to bind function to 1966 * @return {Object} The resulting value of object a 1967 */ 1968function extend(a, b, thisArg) { 1969 forEach(b, function assignValue(val, key) { 1970 if (thisArg && typeof val === 'function') { 1971 a[key] = bind(val, thisArg); 1972 } else { 1973 a[key] = val; 1974 } 1975 }); 1976 return a; 1977} 1978 1979module.exports = { 1980 isArray: isArray, 1981 isArrayBuffer: isArrayBuffer, 1982 isBuffer: isBuffer, 1983 isFormData: isFormData, 1984 isArrayBufferView: isArrayBufferView, 1985 isString: isString, 1986 isNumber: isNumber, 1987 isObject: isObject, 1988 isUndefined: isUndefined, 1989 isDate: isDate, 1990 isFile: isFile, 1991 isBlob: isBlob, 1992 isFunction: isFunction, 1993 isStream: isStream, 1994 isURLSearchParams: isURLSearchParams, 1995 isStandardBrowserEnv: isStandardBrowserEnv, 1996 forEach: forEach, 1997 merge: merge, 1998 extend: extend, 1999 trim: trim 2000}; 2001 2002 2003/***/ }), 2004
vendor: 137,882 bytes, lines 2005-6370
2005/***/ "./node_modules/bootstrap/dist/js/bootstrap.js": 2006/*!*****************************************************!*\ 2007 !*** ./node_modules/bootstrap/dist/js/bootstrap.js ***! 2008 \*****************************************************/ 2009/*! no static exports found */ 2010/***/ (function(module, exports, __webpack_require__) { 2011 2012/*! 2013 * Bootstrap v4.6.2 (https://getbootstrap.com/) 2014 * Copyright 2011-2022 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) 2015 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 2016 */ 2017(function (global, factory) { 2018 true ? factory(exports, __webpack_require__(/*! jquery */ "./node_modules/jquery/dist/jquery.js"), __webpack_require__(/*! popper.js */ "./node_modules/popper.js/dist/esm/popper.js")) : 2019 undefined; 2020})(this, (function (exports, $, Popper) { 'use strict'; 2021 2022 function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; } 2023 2024 var $__default = /*#__PURE__*/_interopDefaultLegacy($); 2025 var Popper__default = /*#__PURE__*/_interopDefaultLegacy(Popper); 2026 2027 function _defineProperties(target, props) { 2028 for (var i = 0; i < props.length; i++) { 2029 var descriptor = props[i]; 2030 descriptor.enumerable = descriptor.enumerable || false; 2031 descriptor.configurable = true; 2032 if ("value" in descriptor) descriptor.writable = true; 2033 Object.defineProperty(target, descriptor.key, descriptor); 2034 } 2035 } 2036 2037 function _createClass(Constructor, protoProps, staticProps) { 2038 if (protoProps) _defineProperties(Constructor.prototype, protoProps); 2039 if (staticProps) _defineProperties(Constructor, staticProps); 2040 Object.defineProperty(Constructor, "prototype", { 2041 writable: false 2042 }); 2043 return Constructor; 2044 } 2045 2046 function _extends() { 2047 _extends = Object.assign ? Object.assign.bind() : function (target) { 2048 for (var i = 1; i < arguments.length; i++) { 2049 var source = arguments[i]; 2050 2051 for (var key in source) { 2052 if (Object.prototype.hasOwnProperty.call(source, key)) { 2053 target[key] = source[key]; 2054 } 2055 } 2056 } 2057 2058 return target; 2059 }; 2060 return _extends.apply(this, arguments); 2061 } 2062 2063 function _inheritsLoose(subClass, superClass) { 2064 subClass.prototype = Object.create(superClass.prototype); 2065 subClass.prototype.constructor = subClass; 2066 2067 _setPrototypeOf(subClass, superClass); 2068 } 2069 2070 function _setPrototypeOf(o, p) { 2071 _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { 2072 o.__proto__ = p; 2073 return o; 2074 }; 2075 return _setPrototypeOf(o, p); 2076 } 2077 2078 /** 2079 * -------------------------------------------------------------------------- 2080 * Bootstrap (v4.6.2): util.js 2081 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 2082 * -------------------------------------------------------------------------- 2083 */ 2084 /** 2085 * Private TransitionEnd Helpers 2086 */ 2087 2088 var TRANSITION_END = 'transitionend'; 2089 var MAX_UID = 1000000; 2090 var MILLISECONDS_MULTIPLIER = 1000; // Shoutout AngusCroll (https://goo.gl/pxwQGp) 2091 2092 function toType(obj) { 2093 if (obj === null || typeof obj === 'undefined') { 2094 return "" + obj; 2095 } 2096 2097 return {}.toString.call(obj).match(/\s([a-z]+)/i)[1].toLowerCase(); 2098 } 2099 2100 function getSpecialTransitionEndEvent() { 2101 return { 2102 bindType: TRANSITION_END, 2103 delegateType: TRANSITION_END, 2104 handle: function handle(event) { 2105 if ($__default["default"](event.target).is(this)) { 2106 return event.handleObj.handler.apply(this, arguments); // eslint-disable-line prefer-rest-params 2107 } 2108 2109 return undefined; 2110 } 2111 }; 2112 } 2113 2114 function transitionEndEmulator(duration) { 2115 var _this = this; 2116 2117 var called = false; 2118 $__default["default"](this).one(Util.TRANSITION_END, function () { 2119 called = true; 2120 }); 2121 setTimeout(function () { 2122 if (!called) { 2123 Util.triggerTransitionEnd(_this); 2124 } 2125 }, duration); 2126 return this; 2127 } 2128 2129 function setTransitionEndSupport() { 2130 $__default["default"].fn.emulateTransitionEnd = transitionEndEmulator; 2131 $__default["default"].event.special[Util.TRANSITION_END] = getSpecialTransitionEndEvent(); 2132 } 2133 /** 2134 * Public Util API 2135 */ 2136 2137 2138 var Util = { 2139 TRANSITION_END: 'bsTransitionEnd', 2140 getUID: function getUID(prefix) { 2141 do { 2142 // eslint-disable-next-line no-bitwise 2143 prefix += ~~(Math.random() * MAX_UID); // "~~" acts like a faster Math.floor() here 2144 } while (document.getElementById(prefix)); 2145 2146 return prefix; 2147 }, 2148 getSelectorFromElement: function getSelectorFromElement(element) { 2149 var selector = element.getAttribute('data-target'); 2150 2151 if (!selector || selector === '#') { 2152 var hrefAttr = element.getAttribute('href'); 2153 selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : ''; 2154 } 2155 2156 try { 2157 return document.querySelector(selector) ? selector : null; 2158 } catch (_) { 2159 return null; 2160 } 2161 }, 2162 getTransitionDurationFromElement: function getTransitionDurationFromElement(element) { 2163 if (!element) { 2164 return 0; 2165 } // Get transition-duration of the element 2166 2167 2168 var transitionDuration = $__default["default"](element).css('transition-duration'); 2169 var transitionDelay = $__default["default"](element).css('transition-delay'); 2170 var floatTransitionDuration = parseFloat(transitionDuration); 2171 var floatTransitionDelay = parseFloat(transitionDelay); // Return 0 if element or transition duration is not found 2172 2173 if (!floatTransitionDuration && !floatTransitionDelay) { 2174 return 0; 2175 } // If multiple durations are defined, take the first 2176 2177 2178 transitionDuration = transitionDuration.split(',')[0]; 2179 transitionDelay = transitionDelay.split(',')[0]; 2180 return (parseFloat(transitionDuration) + parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER; 2181 }, 2182 reflow: function reflow(element) { 2183 return element.offsetHeight; 2184 }, 2185 triggerTransitionEnd: function triggerTransitionEnd(element) { 2186 $__default["default"](element).trigger(TRANSITION_END); 2187 }, 2188 supportsTransitionEnd: function supportsTransitionEnd() { 2189 return Boolean(TRANSITION_END); 2190 }, 2191 isElement: function isElement(obj) { 2192 return (obj[0] || obj).nodeType; 2193 }, 2194 typeCheckConfig: function typeCheckConfig(componentName, config, configTypes) { 2195 for (var property in configTypes) { 2196 if (Object.prototype.hasOwnProperty.call(configTypes, property)) { 2197 var expectedTypes = configTypes[property]; 2198 var value = config[property]; 2199 var valueType = value && Util.isElement(value) ? 'element' : toType(value); 2200 2201 if (!new RegExp(expectedTypes).test(valueType)) { 2202 throw new Error(componentName.toUpperCase() + ": " + ("Option \"" + property + "\" provided type \"" + valueType + "\" ") + ("but expected type \"" + expectedTypes + "\".")); 2203 } 2204 } 2205 } 2206 }, 2207 findShadowRoot: function findShadowRoot(element) { 2208 if (!document.documentElement.attachShadow) { 2209 return null; 2210 } // Can find the shadow root otherwise it'll return the document 2211 2212 2213 if (typeof element.getRootNode === 'function') { 2214 var root = element.getRootNode(); 2215 return root instanceof ShadowRoot ? root : null; 2216 } 2217 2218 if (element instanceof ShadowRoot) { 2219 return element; 2220 } // when we don't find a shadow root 2221 2222 2223 if (!element.parentNode) { 2224 return null; 2225 } 2226 2227 return Util.findShadowRoot(element.parentNode); 2228 }, 2229 jQueryDetection: function jQueryDetection() { 2230 if (typeof $__default["default"] === 'undefined') { 2231 throw new TypeError('Bootstrap\'s JavaScript requires jQuery. jQuery must be included before Bootstrap\'s JavaScript.'); 2232 } 2233 2234 var version = $__default["default"].fn.jquery.split(' ')[0].split('.'); 2235 var minMajor = 1; 2236 var ltMajor = 2; 2237 var minMinor = 9; 2238 var minPatch = 1; 2239 var maxMajor = 4; 2240 2241 if (version[0] < ltMajor && version[1] < minMinor || version[0] === minMajor && version[1] === minMinor && version[2] < minPatch || version[0] >= maxMajor) { 2242 throw new Error('Bootstrap\'s JavaScript requires at least jQuery v1.9.1 but less than v4.0.0'); 2243 } 2244 } 2245 }; 2246 Util.jQueryDetection(); 2247 setTransitionEndSupport(); 2248 2249 /** 2250 * Constants 2251 */ 2252 2253 var NAME$a = 'alert'; 2254 var VERSION$a = '4.6.2'; 2255 var DATA_KEY$a = 'bs.alert'; 2256 var EVENT_KEY$a = "." + DATA_KEY$a; 2257 var DATA_API_KEY$7 = '.data-api'; 2258 var JQUERY_NO_CONFLICT$a = $__default["default"].fn[NAME$a]; 2259 var CLASS_NAME_ALERT = 'alert'; 2260 var CLASS_NAME_FADE$5 = 'fade'; 2261 var CLASS_NAME_SHOW$7 = 'show'; 2262 var EVENT_CLOSE = "close" + EVENT_KEY$a; 2263 var EVENT_CLOSED = "closed" + EVENT_KEY$a; 2264 var EVENT_CLICK_DATA_API$6 = "click" + EVENT_KEY$a + DATA_API_KEY$7; 2265 var SELECTOR_DISMISS = '[data-dismiss="alert"]'; 2266 /** 2267 * Class definition 2268 */ 2269 2270 var Alert = /*#__PURE__*/function () { 2271 function Alert(element) { 2272 this._element = element; 2273 } // Getters 2274 2275 2276 var _proto = Alert.prototype; 2277 2278 // Public 2279 _proto.close = function close(element) { 2280 var rootElement = this._element; 2281 2282 if (element) { 2283 rootElement = this._getRootElement(element); 2284 } 2285 2286 var customEvent = this._triggerCloseEvent(rootElement); 2287 2288 if (customEvent.isDefaultPrevented()) { 2289 return; 2290 } 2291 2292 this._removeElement(rootElement); 2293 }; 2294 2295 _proto.dispose = function dispose() { 2296 $__default["default"].removeData(this._element, DATA_KEY$a); 2297 this._element = null; 2298 } // Private 2299 ; 2300 2301 _proto._getRootElement = function _getRootElement(element) { 2302 var selector = Util.getSelectorFromElement(element); 2303 var parent = false; 2304 2305 if (selector) { 2306 parent = document.querySelector(selector); 2307 } 2308 2309 if (!parent) { 2310 parent = $__default["default"](element).closest("." + CLASS_NAME_ALERT)[0]; 2311 } 2312 2313 return parent; 2314 }; 2315 2316 _proto._triggerCloseEvent = function _triggerCloseEvent(element) { 2317 var closeEvent = $__default["default"].Event(EVENT_CLOSE); 2318 $__default["default"](element).trigger(closeEvent); 2319 return closeEvent; 2320 }; 2321 2322 _proto._removeElement = function _removeElement(element) { 2323 var _this = this; 2324 2325 $__default["default"](element).removeClass(CLASS_NAME_SHOW$7); 2326 2327 if (!$__default["default"](element).hasClass(CLASS_NAME_FADE$5)) { 2328 this._destroyElement(element); 2329 2330 return; 2331 } 2332 2333 var transitionDuration = Util.getTransitionDurationFromElement(element); 2334 $__default["default"](element).one(Util.TRANSITION_END, function (event) { 2335 return _this._destroyElement(element, event); 2336 }).emulateTransitionEnd(transitionDuration); 2337 }; 2338 2339 _proto._destroyElement = function _destroyElement(element) { 2340 $__default["default"](element).detach().trigger(EVENT_CLOSED).remove(); 2341 } // Static 2342 ; 2343 2344 Alert._jQueryInterface = function _jQueryInterface(config) { 2345 return this.each(function () { 2346 var $element = $__default["default"](this); 2347 var data = $element.data(DATA_KEY$a); 2348 2349 if (!data) { 2350 data = new Alert(this); 2351 $element.data(DATA_KEY$a, data); 2352 } 2353 2354 if (config === 'close') { 2355 data[config](this); 2356 } 2357 }); 2358 }; 2359 2360 Alert._handleDismiss = function _handleDismiss(alertInstance) { 2361 return function (event) { 2362 if (event) { 2363 event.preventDefault(); 2364 } 2365 2366 alertInstance.close(this); 2367 }; 2368 }; 2369 2370 _createClass(Alert, null, [{ 2371 key: "VERSION", 2372 get: function get() { 2373 return VERSION$a; 2374 } 2375 }]); 2376 2377 return Alert; 2378 }(); 2379 /** 2380 * Data API implementation 2381 */ 2382 2383 2384 $__default["default"](document).on(EVENT_CLICK_DATA_API$6, SELECTOR_DISMISS, Alert._handleDismiss(new Alert())); 2385 /** 2386 * jQuery 2387 */ 2388 2389 $__default["default"].fn[NAME$a] = Alert._jQueryInterface; 2390 $__default["default"].fn[NAME$a].Constructor = Alert; 2391 2392 $__default["default"].fn[NAME$a].noConflict = function () { 2393 $__default["default"].fn[NAME$a] = JQUERY_NO_CONFLICT$a; 2394 return Alert._jQueryInterface; 2395 }; 2396 2397 /** 2398 * Constants 2399 */ 2400 2401 var NAME$9 = 'button'; 2402 var VERSION$9 = '4.6.2'; 2403 var DATA_KEY$9 = 'bs.button'; 2404 var EVENT_KEY$9 = "." + DATA_KEY$9; 2405 var DATA_API_KEY$6 = '.data-api'; 2406 var JQUERY_NO_CONFLICT$9 = $__default["default"].fn[NAME$9]; 2407 var CLASS_NAME_ACTIVE$3 = 'active'; 2408 var CLASS_NAME_BUTTON = 'btn'; 2409 var CLASS_NAME_FOCUS = 'focus'; 2410 var EVENT_CLICK_DATA_API$5 = "click" + EVENT_KEY$9 + DATA_API_KEY$6; 2411 var EVENT_FOCUS_BLUR_DATA_API = "focus" + EVENT_KEY$9 + DATA_API_KEY$6 + " " + ("blur" + EVENT_KEY$9 + DATA_API_KEY$6); 2412 var EVENT_LOAD_DATA_API$2 = "load" + EVENT_KEY$9 + DATA_API_KEY$6; 2413 var SELECTOR_DATA_TOGGLE_CARROT = '[data-toggle^="button"]'; 2414 var SELECTOR_DATA_TOGGLES = '[data-toggle="buttons"]'; 2415 var SELECTOR_DATA_TOGGLE$4 = '[data-toggle="button"]'; 2416 var SELECTOR_DATA_TOGGLES_BUTTONS = '[data-toggle="buttons"] .btn'; 2417 var SELECTOR_INPUT = 'input:not([type="hidden"])'; 2418 var SELECTOR_ACTIVE$2 = '.active'; 2419 var SELECTOR_BUTTON = '.btn'; 2420 /** 2421 * Class definition 2422 */ 2423 2424 var Button = /*#__PURE__*/function () { 2425 function Button(element) { 2426 this._element = element; 2427 this.shouldAvoidTriggerChange = false; 2428 } // Getters 2429 2430 2431 var _proto = Button.prototype; 2432 2433 // Public 2434 _proto.toggle = function toggle() { 2435 var triggerChangeEvent = true; 2436 var addAriaPressed = true; 2437 var rootElement = $__default["default"](this._element).closest(SELECTOR_DATA_TOGGLES)[0]; 2438 2439 if (rootElement) { 2440 var input = this._element.querySelector(SELECTOR_INPUT); 2441 2442 if (input) { 2443 if (input.type === 'radio') { 2444 if (input.checked && this._element.classList.contains(CLASS_NAME_ACTIVE$3)) { 2445 triggerChangeEvent = false; 2446 } else { 2447 var activeElement = rootElement.querySelector(SELECTOR_ACTIVE$2); 2448 2449 if (activeElement) { 2450 $__default["default"](activeElement).removeClass(CLASS_NAME_ACTIVE$3); 2451 } 2452 } 2453 } 2454 2455 if (triggerChangeEvent) { 2456 // if it's not a radio button or checkbox don't add a pointless/invalid checked property to the input 2457 if (input.type === 'checkbox' || input.type === 'radio') { 2458 input.checked = !this._element.classList.contains(CLASS_NAME_ACTIVE$3); 2459 } 2460 2461 if (!this.shouldAvoidTriggerChange) { 2462 $__default["default"](input).trigger('change'); 2463 } 2464 } 2465 2466 input.focus(); 2467 addAriaPressed = false; 2468 } 2469 } 2470 2471 if (!(this._element.hasAttribute('disabled') || this._element.classList.contains('disabled'))) { 2472 if (addAriaPressed) { 2473 this._element.setAttribute('aria-pressed', !this._element.classList.contains(CLASS_NAME_ACTIVE$3)); 2474 } 2475 2476 if (triggerChangeEvent) { 2477 $__default["default"](this._element).toggleClass(CLASS_NAME_ACTIVE$3); 2478 } 2479 } 2480 }; 2481 2482 _proto.dispose = function dispose() { 2483 $__default["default"].removeData(this._element, DATA_KEY$9); 2484 this._element = null; 2485 } // Static 2486 ; 2487 2488 Button._jQueryInterface = function _jQueryInterface(config, avoidTriggerChange) { 2489 return this.each(function () { 2490 var $element = $__default["default"](this); 2491 var data = $element.data(DATA_KEY$9); 2492 2493 if (!data) { 2494 data = new Button(this); 2495 $element.data(DATA_KEY$9, data); 2496 } 2497 2498 data.shouldAvoidTriggerChange = avoidTriggerChange; 2499 2500 if (config === 'toggle') { 2501 data[config](); 2502 } 2503 }); 2504 }; 2505 2506 _createClass(Button, null, [{ 2507 key: "VERSION", 2508 get: function get() { 2509 return VERSION$9; 2510 } 2511 }]); 2512 2513 return Button; 2514 }(); 2515 /** 2516 * Data API implementation 2517 */ 2518 2519 2520 $__default["default"](document).on(EVENT_CLICK_DATA_API$5, SELECTOR_DATA_TOGGLE_CARROT, function (event) { 2521 var button = event.target; 2522 var initialButton = button; 2523 2524 if (!$__default["default"](button).hasClass(CLASS_NAME_BUTTON)) { 2525 button = $__default["default"](button).closest(SELECTOR_BUTTON)[0]; 2526 } 2527 2528 if (!button || button.hasAttribute('disabled') || button.classList.contains('disabled')) { 2529 event.preventDefault(); // work around Firefox bug #1540995 2530 } else { 2531 var inputBtn = button.querySelector(SELECTOR_INPUT); 2532 2533 if (inputBtn && (inputBtn.hasAttribute('disabled') || inputBtn.classList.contains('disabled'))) { 2534 event.preventDefault(); // work around Firefox bug #1540995 2535 2536 return; 2537 } 2538 2539 if (initialButton.tagName === 'INPUT' || button.tagName !== 'LABEL') { 2540 Button._jQueryInterface.call($__default["default"](button), 'toggle', initialButton.tagName === 'INPUT'); 2541 } 2542 } 2543 }).on(EVENT_FOCUS_BLUR_DATA_API, SELECTOR_DATA_TOGGLE_CARROT, function (event) { 2544 var button = $__default["default"](event.target).closest(SELECTOR_BUTTON)[0]; 2545 $__default["default"](button).toggleClass(CLASS_NAME_FOCUS, /^focus(in)?$/.test(event.type)); 2546 }); 2547 $__default["default"](window).on(EVENT_LOAD_DATA_API$2, function () { 2548 // ensure correct active class is set to match the controls' actual values/states 2549 // find all checkboxes/readio buttons inside data-toggle groups 2550 var buttons = [].slice.call(document.querySelectorAll(SELECTOR_DATA_TOGGLES_BUTTONS)); 2551 2552 for (var i = 0, len = buttons.length; i < len; i++) { 2553 var button = buttons[i]; 2554 var input = button.querySelector(SELECTOR_INPUT); 2555 2556 if (input.checked || input.hasAttribute('checked')) { 2557 button.classList.add(CLASS_NAME_ACTIVE$3); 2558 } else { 2559 button.classList.remove(CLASS_NAME_ACTIVE$3); 2560 } 2561 } // find all button toggles 2562 2563 2564 buttons = [].slice.call(document.querySelectorAll(SELECTOR_DATA_TOGGLE$4)); 2565 2566 for (var _i = 0, _len = buttons.length; _i < _len; _i++) { 2567 var _button = buttons[_i]; 2568 2569 if (_button.getAttribute('aria-pressed') === 'true') { 2570 _button.classList.add(CLASS_NAME_ACTIVE$3); 2571 } else { 2572 _button.classList.remove(CLASS_NAME_ACTIVE$3); 2573 } 2574 } 2575 }); 2576 /** 2577 * jQuery 2578 */ 2579 2580 $__default["default"].fn[NAME$9] = Button._jQueryInterface; 2581 $__default["default"].fn[NAME$9].Constructor = Button; 2582 2583 $__default["default"].fn[NAME$9].noConflict = function () { 2584 $__default["default"].fn[NAME$9] = JQUERY_NO_CONFLICT$9; 2585 return Button._jQueryInterface; 2586 }; 2587 2588 /** 2589 * Constants 2590 */ 2591 2592 var NAME$8 = 'carousel'; 2593 var VERSION$8 = '4.6.2'; 2594 var DATA_KEY$8 = 'bs.carousel'; 2595 var EVENT_KEY$8 = "." + DATA_KEY$8; 2596 var DATA_API_KEY$5 = '.data-api'; 2597 var JQUERY_NO_CONFLICT$8 = $__default["default"].fn[NAME$8]; 2598 var ARROW_LEFT_KEYCODE = 37; // KeyboardEvent.which value for left arrow key 2599 2600 var ARROW_RIGHT_KEYCODE = 39; // KeyboardEvent.which value for right arrow key 2601 2602 var TOUCHEVENT_COMPAT_WAIT = 500; // Time for mouse compat events to fire after touch 2603 2604 var SWIPE_THRESHOLD = 40; 2605 var CLASS_NAME_CAROUSEL = 'carousel'; 2606 var CLASS_NAME_ACTIVE$2 = 'active'; 2607 var CLASS_NAME_SLIDE = 'slide'; 2608 var CLASS_NAME_RIGHT = 'carousel-item-right'; 2609 var CLASS_NAME_LEFT = 'carousel-item-left'; 2610 var CLASS_NAME_NEXT = 'carousel-item-next'; 2611 var CLASS_NAME_PREV = 'carousel-item-prev'; 2612 var CLASS_NAME_POINTER_EVENT = 'pointer-event'; 2613 var DIRECTION_NEXT = 'next'; 2614 var DIRECTION_PREV = 'prev'; 2615 var DIRECTION_LEFT = 'left'; 2616 var DIRECTION_RIGHT = 'right'; 2617 var EVENT_SLIDE = "slide" + EVENT_KEY$8; 2618 var EVENT_SLID = "slid" + EVENT_KEY$8; 2619 var EVENT_KEYDOWN = "keydown" + EVENT_KEY$8; 2620 var EVENT_MOUSEENTER = "mouseenter" + EVENT_KEY$8; 2621 var EVENT_MOUSELEAVE = "mouseleave" + EVENT_KEY$8; 2622 var EVENT_TOUCHSTART = "touchstart" + EVENT_KEY$8; 2623 var EVENT_TOUCHMOVE = "touchmove" + EVENT_KEY$8; 2624 var EVENT_TOUCHEND = "touchend" + EVENT_KEY$8; 2625 var EVENT_POINTERDOWN = "pointerdown" + EVENT_KEY$8; 2626 var EVENT_POINTERUP = "pointerup" + EVENT_KEY$8; 2627 var EVENT_DRAG_START = "dragstart" + EVENT_KEY$8; 2628 var EVENT_LOAD_DATA_API$1 = "load" + EVENT_KEY$8 + DATA_API_KEY$5; 2629 var EVENT_CLICK_DATA_API$4 = "click" + EVENT_KEY$8 + DATA_API_KEY$5; 2630 var SELECTOR_ACTIVE$1 = '.active'; 2631 var SELECTOR_ACTIVE_ITEM = '.active.carousel-item'; 2632 var SELECTOR_ITEM = '.carousel-item'; 2633 var SELECTOR_ITEM_IMG = '.carousel-item img'; 2634 var SELECTOR_NEXT_PREV = '.carousel-item-next, .carousel-item-prev'; 2635 var SELECTOR_INDICATORS = '.carousel-indicators'; 2636 var SELECTOR_DATA_SLIDE = '[data-slide], [data-slide-to]'; 2637 var SELECTOR_DATA_RIDE = '[data-ride="carousel"]'; 2638 var Default$7 = { 2639 interval: 5000, 2640 keyboard: true, 2641 slide: false, 2642 pause: 'hover', 2643 wrap: true, 2644 touch: true 2645 }; 2646 var DefaultType$7 = { 2647 interval: '(number|boolean)', 2648 keyboard: 'boolean', 2649 slide: '(boolean|string)', 2650 pause: '(string|boolean)', 2651 wrap: 'boolean', 2652 touch: 'boolean' 2653 }; 2654 var PointerType = { 2655 TOUCH: 'touch', 2656 PEN: 'pen' 2657 }; 2658 /** 2659 * Class definition 2660 */ 2661 2662 var Carousel = /*#__PURE__*/function () { 2663 function Carousel(element, config) { 2664 this._items = null; 2665 this._interval = null; 2666 this._activeElement = null; 2667 this._isPaused = false; 2668 this._isSliding = false; 2669 this.touchTimeout = null; 2670 this.touchStartX = 0; 2671 this.touchDeltaX = 0; 2672 this._config = this._getConfig(config); 2673 this._element = element; 2674 this._indicatorsElement = this._element.querySelector(SELECTOR_INDICATORS); 2675 this._touchSupported = 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0; 2676 this._pointerEvent = Boolean(window.PointerEvent || window.MSPointerEvent); 2677 2678 this._addEventListeners(); 2679 } // Getters 2680 2681 2682 var _proto = Carousel.prototype; 2683 2684 // Public 2685 _proto.next = function next() { 2686 if (!this._isSliding) { 2687 this._slide(DIRECTION_NEXT); 2688 } 2689 }; 2690 2691 _proto.nextWhenVisible = function nextWhenVisible() { 2692 var $element = $__default["default"](this._element); // Don't call next when the page isn't visible 2693 // or the carousel or its parent isn't visible 2694 2695 if (!document.hidden && $element.is(':visible') && $element.css('visibility') !== 'hidden') { 2696 this.next(); 2697 } 2698 }; 2699 2700 _proto.prev = function prev() { 2701 if (!this._isSliding) { 2702 this._slide(DIRECTION_PREV); 2703 } 2704 }; 2705 2706 _proto.pause = function pause(event) { 2707 if (!event) { 2708 this._isPaused = true; 2709 } 2710 2711 if (this._element.querySelector(SELECTOR_NEXT_PREV)) { 2712 Util.triggerTransitionEnd(this._element); 2713 this.cycle(true); 2714 } 2715 2716 clearInterval(this._interval); 2717 this._interval = null; 2718 }; 2719 2720 _proto.cycle = function cycle(event) { 2721 if (!event) { 2722 this._isPaused = false; 2723 } 2724 2725 if (this._interval) { 2726 clearInterval(this._interval); 2727 this._interval = null; 2728 } 2729 2730 if (this._config.interval && !this._isPaused) { 2731 this._updateInterval(); 2732 2733 this._interval = setInterval((document.visibilityState ? this.nextWhenVisible : this.next).bind(this), this._config.interval); 2734 } 2735 }; 2736 2737 _proto.to = function to(index) { 2738 var _this = this; 2739 2740 this._activeElement = this._element.querySelector(SELECTOR_ACTIVE_ITEM); 2741 2742 var activeIndex = this._getItemIndex(this._activeElement); 2743 2744 if (index > this._items.length - 1 || index < 0) { 2745 return; 2746 } 2747 2748 if (this._isSliding) { 2749 $__default["default"](this._element).one(EVENT_SLID, function () { 2750 return _this.to(index); 2751 }); 2752 return; 2753 } 2754 2755 if (activeIndex === index) { 2756 this.pause(); 2757 this.cycle(); 2758 return; 2759 } 2760 2761 var direction = index > activeIndex ? DIRECTION_NEXT : DIRECTION_PREV; 2762 2763 this._slide(direction, this._items[index]); 2764 }; 2765 2766 _proto.dispose = function dispose() { 2767 $__default["default"](this._element).off(EVENT_KEY$8); 2768 $__default["default"].removeData(this._element, DATA_KEY$8); 2769 this._items = null; 2770 this._config = null; 2771 this._element = null; 2772 this._interval = null; 2773 this._isPaused = null; 2774 this._isSliding = null; 2775 this._activeElement = null; 2776 this._indicatorsElement = null; 2777 } // Private 2778 ; 2779 2780 _proto._getConfig = function _getConfig(config) { 2781 config = _extends({}, Default$7, config); 2782 Util.typeCheckConfig(NAME$8, config, DefaultType$7); 2783 return config; 2784 }; 2785 2786 _proto._handleSwipe = function _handleSwipe() { 2787 var absDeltax = Math.abs(this.touchDeltaX); 2788 2789 if (absDeltax <= SWIPE_THRESHOLD) { 2790 return; 2791 } 2792 2793 var direction = absDeltax / this.touchDeltaX; 2794 this.touchDeltaX = 0; // swipe left 2795 2796 if (direction > 0) { 2797 this.prev(); 2798 } // swipe right 2799 2800 2801 if (direction < 0) { 2802 this.next(); 2803 } 2804 }; 2805 2806 _proto._addEventListeners = function _addEventListeners() { 2807 var _this2 = this; 2808 2809 if (this._config.keyboard) { 2810 $__default["default"](this._element).on(EVENT_KEYDOWN, function (event) { 2811 return _this2._keydown(event); 2812 }); 2813 } 2814 2815 if (this._config.pause === 'hover') { 2816 $__default["default"](this._element).on(EVENT_MOUSEENTER, function (event) { 2817 return _this2.pause(event); 2818 }).on(EVENT_MOUSELEAVE, function (event) { 2819 return _this2.cycle(event); 2820 }); 2821 } 2822 2823 if (this._config.touch) { 2824 this._addTouchEventListeners(); 2825 } 2826 }; 2827 2828 _proto._addTouchEventListeners = function _addTouchEventListeners() { 2829 var _this3 = this; 2830 2831 if (!this._touchSupported) { 2832 return; 2833 } 2834 2835 var start = function start(event) { 2836 if (_this3._pointerEvent && PointerType[event.originalEvent.pointerType.toUpperCase()]) { 2837 _this3.touchStartX = event.originalEvent.clientX; 2838 } else if (!_this3._pointerEvent) { 2839 _this3.touchStartX = event.originalEvent.touches[0].clientX; 2840 } 2841 }; 2842 2843 var move = function move(event) { 2844 // ensure swiping with one touch and not pinching 2845 _this3.touchDeltaX = event.originalEvent.touches && event.originalEvent.touches.length > 1 ? 0 : event.originalEvent.touches[0].clientX - _this3.touchStartX; 2846 }; 2847 2848 var end = function end(event) { 2849 if (_this3._pointerEvent && PointerType[event.originalEvent.pointerType.toUpperCase()]) { 2850 _this3.touchDeltaX = event.originalEvent.clientX - _this3.touchStartX; 2851 } 2852 2853 _this3._handleSwipe(); 2854 2855 if (_this3._config.pause === 'hover') { 2856 // If it's a touch-enabled device, mouseenter/leave are fired as 2857 // part of the mouse compatibility events on first tap - the carousel 2858 // would stop cycling until user tapped out of it; 2859 // here, we listen for touchend, explicitly pause the carousel 2860 // (as if it's the second time we tap on it, mouseenter compat event 2861 // is NOT fired) and after a timeout (to allow for mouse compatibility 2862 // events to fire) we explicitly restart cycling 2863 _this3.pause(); 2864 2865 if (_this3.touchTimeout) { 2866 clearTimeout(_this3.touchTimeout); 2867 } 2868 2869 _this3.touchTimeout = setTimeout(function (event) { 2870 return _this3.cycle(event); 2871 }, TOUCHEVENT_COMPAT_WAIT + _this3._config.interval); 2872 } 2873 }; 2874 2875 $__default["default"](this._element.querySelectorAll(SELECTOR_ITEM_IMG)).on(EVENT_DRAG_START, function (e) { 2876 return e.preventDefault(); 2877 }); 2878 2879 if (this._pointerEvent) { 2880 $__default["default"](this._element).on(EVENT_POINTERDOWN, function (event) { 2881 return start(event); 2882 }); 2883 $__default["default"](this._element).on(EVENT_POINTERUP, function (event) { 2884 return end(event); 2885 }); 2886 2887 this._element.classList.add(CLASS_NAME_POINTER_EVENT); 2888 } else { 2889 $__default["default"](this._element).on(EVENT_TOUCHSTART, function (event) { 2890 return start(event); 2891 }); 2892 $__default["default"](this._element).on(EVENT_TOUCHMOVE, function (event) { 2893 return move(event); 2894 }); 2895 $__default["default"](this._element).on(EVENT_TOUCHEND, function (event) { 2896 return end(event); 2897 }); 2898 } 2899 }; 2900 2901 _proto._keydown = function _keydown(event) { 2902 if (/input|textarea/i.test(event.target.tagName)) { 2903 return; 2904 } 2905 2906 switch (event.which) { 2907 case ARROW_LEFT_KEYCODE: 2908 event.preventDefault(); 2909 this.prev(); 2910 break; 2911 2912 case ARROW_RIGHT_KEYCODE: 2913 event.preventDefault(); 2914 this.next(); 2915 break; 2916 } 2917 }; 2918 2919 _proto._getItemIndex = function _getItemIndex(element) { 2920 this._items = element && element.parentNode ? [].slice.call(element.parentNode.querySelectorAll(SELECTOR_ITEM)) : []; 2921 return this._items.indexOf(element); 2922 }; 2923 2924 _proto._getItemByDirection = function _getItemByDirection(direction, activeElement) { 2925 var isNextDirection = direction === DIRECTION_NEXT; 2926 var isPrevDirection = direction === DIRECTION_PREV; 2927 2928 var activeIndex = this._getItemIndex(activeElement); 2929 2930 var lastItemIndex = this._items.length - 1; 2931 var isGoingToWrap = isPrevDirection && activeIndex === 0 || isNextDirection && activeIndex === lastItemIndex; 2932 2933 if (isGoingToWrap && !this._config.wrap) { 2934 return activeElement; 2935 } 2936 2937 var delta = direction === DIRECTION_PREV ? -1 : 1; 2938 var itemIndex = (activeIndex + delta) % this._items.length; 2939 return itemIndex === -1 ? this._items[this._items.length - 1] : this._items[itemIndex]; 2940 }; 2941 2942 _proto._triggerSlideEvent = function _triggerSlideEvent(relatedTarget, eventDirectionName) { 2943 var targetIndex = this._getItemIndex(relatedTarget); 2944 2945 var fromIndex = this._getItemIndex(this._element.querySelector(SELECTOR_ACTIVE_ITEM)); 2946 2947 var slideEvent = $__default["default"].Event(EVENT_SLIDE, { 2948 relatedTarget: relatedTarget, 2949 direction: eventDirectionName, 2950 from: fromIndex, 2951 to: targetIndex 2952 }); 2953 $__default["default"](this._element).trigger(slideEvent); 2954 return slideEvent; 2955 }; 2956 2957 _proto._setActiveIndicatorElement = function _setActiveIndicatorElement(element) { 2958 if (this._indicatorsElement) { 2959 var indicators = [].slice.call(this._indicatorsElement.querySelectorAll(SELECTOR_ACTIVE$1)); 2960 $__default["default"](indicators).removeClass(CLASS_NAME_ACTIVE$2); 2961 2962 var nextIndicator = this._indicatorsElement.children[this._getItemIndex(element)]; 2963 2964 if (nextIndicator) { 2965 $__default["default"](nextIndicator).addClass(CLASS_NAME_ACTIVE$2); 2966 } 2967 } 2968 }; 2969 2970 _proto._updateInterval = function _updateInterval() { 2971 var element = this._activeElement || this._element.querySelector(SELECTOR_ACTIVE_ITEM); 2972 2973 if (!element) { 2974 return; 2975 } 2976 2977 var elementInterval = parseInt(element.getAttribute('data-interval'), 10); 2978 2979 if (elementInterval) { 2980 this._config.defaultInterval = this._config.defaultInterval || this._config.interval; 2981 this._config.interval = elementInterval; 2982 } else { 2983 this._config.interval = this._config.defaultInterval || this._config.interval; 2984 } 2985 }; 2986 2987 _proto._slide = function _slide(direction, element) { 2988 var _this4 = this; 2989 2990 var activeElement = this._element.querySelector(SELECTOR_ACTIVE_ITEM); 2991 2992 var activeElementIndex = this._getItemIndex(activeElement); 2993 2994 var nextElement = element || activeElement && this._getItemByDirection(direction, activeElement); 2995 2996 var nextElementIndex = this._getItemIndex(nextElement); 2997 2998 var isCycling = Boolean(this._interval); 2999 var directionalClassName; 3000 var orderClassName; 3001 var eventDirectionName; 3002 3003 if (direction === DIRECTION_NEXT) { 3004 directionalClassName = CLASS_NAME_LEFT; 3005 orderClassName = CLASS_NAME_NEXT; 3006 eventDirectionName = DIRECTION_LEFT; 3007 } else { 3008 directionalClassName = CLASS_NAME_RIGHT; 3009 orderClassName = CLASS_NAME_PREV; 3010 eventDirectionName = DIRECTION_RIGHT; 3011 } 3012 3013 if (nextElement && $__default["default"](nextElement).hasClass(CLASS_NAME_ACTIVE$2)) { 3014 this._isSliding = false; 3015 return; 3016 } 3017 3018 var slideEvent = this._triggerSlideEvent(nextElement, eventDirectionName); 3019 3020 if (slideEvent.isDefaultPrevented()) { 3021 return; 3022 } 3023 3024 if (!activeElement || !nextElement) { 3025 // Some weirdness is happening, so we bail 3026 return; 3027 } 3028 3029 this._isSliding = true; 3030 3031 if (isCycling) { 3032 this.pause(); 3033 } 3034 3035 this._setActiveIndicatorElement(nextElement); 3036 3037 this._activeElement = nextElement; 3038 var slidEvent = $__default["default"].Event(EVENT_SLID, { 3039 relatedTarget: nextElement, 3040 direction: eventDirectionName, 3041 from: activeElementIndex, 3042 to: nextElementIndex 3043 }); 3044 3045 if ($__default["default"](this._element).hasClass(CLASS_NAME_SLIDE)) { 3046 $__default["default"](nextElement).addClass(orderClassName); 3047 Util.reflow(nextElement); 3048 $__default["default"](activeElement).addClass(directionalClassName); 3049 $__default["default"](nextElement).addClass(directionalClassName); 3050 var transitionDuration = Util.getTransitionDurationFromElement(activeElement); 3051 $__default["default"](activeElement).one(Util.TRANSITION_END, function () { 3052 $__default["default"](nextElement).removeClass(directionalClassName + " " + orderClassName).addClass(CLASS_NAME_ACTIVE$2); 3053 $__default["default"](activeElement).removeClass(CLASS_NAME_ACTIVE$2 + " " + orderClassName + " " + directionalClassName); 3054 _this4._isSliding = false; 3055 setTimeout(function () { 3056 return $__default["default"](_this4._element).trigger(slidEvent); 3057 }, 0); 3058 }).emulateTransitionEnd(transitionDuration); 3059 } else { 3060 $__default["default"](activeElement).removeClass(CLASS_NAME_ACTIVE$2); 3061 $__default["default"](nextElement).addClass(CLASS_NAME_ACTIVE$2); 3062 this._isSliding = false; 3063 $__default["default"](this._element).trigger(slidEvent); 3064 } 3065 3066 if (isCycling) { 3067 this.cycle(); 3068 } 3069 } // Static 3070 ; 3071 3072 Carousel._jQueryInterface = function _jQueryInterface(config) { 3073 return this.each(function () { 3074 var data = $__default["default"](this).data(DATA_KEY$8); 3075 3076 var _config = _extends({}, Default$7, $__default["default"](this).data()); 3077 3078 if (typeof config === 'object') { 3079 _config = _extends({}, _config, config); 3080 } 3081 3082 var action = typeof config === 'string' ? config : _config.slide; 3083 3084 if (!data) { 3085 data = new Carousel(this, _config); 3086 $__default["default"](this).data(DATA_KEY$8, data); 3087 } 3088 3089 if (typeof config === 'number') { 3090 data.to(config); 3091 } else if (typeof action === 'string') { 3092 if (typeof data[action] === 'undefined') { 3093 throw new TypeError("No method named \"" + action + "\""); 3094 } 3095 3096 data[action](); 3097 } else if (_config.interval && _config.ride) { 3098 data.pause(); 3099 data.cycle(); 3100 } 3101 }); 3102 }; 3103 3104 Carousel._dataApiClickHandler = function _dataApiClickHandler(event) { 3105 var selector = Util.getSelectorFromElement(this); 3106 3107 if (!selector) { 3108 return; 3109 } 3110 3111 var target = $__default["default"](selector)[0]; 3112 3113 if (!target || !$__default["default"](target).hasClass(CLASS_NAME_CAROUSEL)) { 3114 return; 3115 } 3116 3117 var config = _extends({}, $__default["default"](target).data(), $__default["default"](this).data()); 3118 3119 var slideIndex = this.getAttribute('data-slide-to'); 3120 3121 if (slideIndex) { 3122 config.interval = false; 3123 } 3124 3125 Carousel._jQueryInterface.call($__default["default"](target), config); 3126 3127 if (slideIndex) { 3128 $__default["default"](target).data(DATA_KEY$8).to(slideIndex); 3129 } 3130 3131 event.preventDefault(); 3132 }; 3133 3134 _createClass(Carousel, null, [{ 3135 key: "VERSION", 3136 get: function get() { 3137 return VERSION$8; 3138 } 3139 }, { 3140 key: "Default", 3141 get: function get() { 3142 return Default$7; 3143 } 3144 }]); 3145 3146 return Carousel; 3147 }(); 3148 /** 3149 * Data API implementation 3150 */ 3151 3152 3153 $__default["default"](document).on(EVENT_CLICK_DATA_API$4, SELECTOR_DATA_SLIDE, Carousel._dataApiClickHandler); 3154 $__default["default"](window).on(EVENT_LOAD_DATA_API$1, function () { 3155 var carousels = [].slice.call(document.querySelectorAll(SELECTOR_DATA_RIDE)); 3156 3157 for (var i = 0, len = carousels.length; i < len; i++) { 3158 var $carousel = $__default["default"](carousels[i]); 3159 3160 Carousel._jQueryInterface.call($carousel, $carousel.data()); 3161 } 3162 }); 3163 /** 3164 * jQuery 3165 */ 3166 3167 $__default["default"].fn[NAME$8] = Carousel._jQueryInterface; 3168 $__default["default"].fn[NAME$8].Constructor = Carousel; 3169 3170 $__default["default"].fn[NAME$8].noConflict = function () { 3171 $__default["default"].fn[NAME$8] = JQUERY_NO_CONFLICT$8; 3172 return Carousel._jQueryInterface; 3173 }; 3174 3175 /** 3176 * Constants 3177 */ 3178 3179 var NAME$7 = 'collapse'; 3180 var VERSION$7 = '4.6.2'; 3181 var DATA_KEY$7 = 'bs.collapse'; 3182 var EVENT_KEY$7 = "." + DATA_KEY$7; 3183 var DATA_API_KEY$4 = '.data-api'; 3184 var JQUERY_NO_CONFLICT$7 = $__default["default"].fn[NAME$7]; 3185 var CLASS_NAME_SHOW$6 = 'show'; 3186 var CLASS_NAME_COLLAPSE = 'collapse'; 3187 var CLASS_NAME_COLLAPSING = 'collapsing'; 3188 var CLASS_NAME_COLLAPSED = 'collapsed'; 3189 var DIMENSION_WIDTH = 'width'; 3190 var DIMENSION_HEIGHT = 'height'; 3191 var EVENT_SHOW$4 = "show" + EVENT_KEY$7; 3192 var EVENT_SHOWN$4 = "shown" + EVENT_KEY$7; 3193 var EVENT_HIDE$4 = "hide" + EVENT_KEY$7; 3194 var EVENT_HIDDEN$4 = "hidden" + EVENT_KEY$7; 3195 var EVENT_CLICK_DATA_API$3 = "click" + EVENT_KEY$7 + DATA_API_KEY$4; 3196 var SELECTOR_ACTIVES = '.show, .collapsing'; 3197 var SELECTOR_DATA_TOGGLE$3 = '[data-toggle="collapse"]'; 3198 var Default$6 = { 3199 toggle: true, 3200 parent: '' 3201 }; 3202 var DefaultType$6 = { 3203 toggle: 'boolean', 3204 parent: '(string|element)' 3205 }; 3206 /** 3207 * Class definition 3208 */ 3209 3210 var Collapse = /*#__PURE__*/function () { 3211 function Collapse(element, config) { 3212 this._isTransitioning = false; 3213 this._element = element; 3214 this._config = this._getConfig(config); 3215 this._triggerArray = [].slice.call(document.querySelectorAll("[data-toggle=\"collapse\"][href=\"#" + element.id + "\"]," + ("[data-toggle=\"collapse\"][data-target=\"#" + element.id + "\"]"))); 3216 var toggleList = [].slice.call(document.querySelectorAll(SELECTOR_DATA_TOGGLE$3)); 3217 3218 for (var i = 0, len = toggleList.length; i < len; i++) { 3219 var elem = toggleList[i]; 3220 var selector = Util.getSelectorFromElement(elem); 3221 var filterElement = [].slice.call(document.querySelectorAll(selector)).filter(function (foundElem) { 3222 return foundElem === element; 3223 }); 3224 3225 if (selector !== null && filterElement.length > 0) { 3226 this._selector = selector; 3227 3228 this._triggerArray.push(elem); 3229 } 3230 } 3231 3232 this._parent = this._config.parent ? this._getParent() : null; 3233 3234 if (!this._config.parent) { 3235 this._addAriaAndCollapsedClass(this._element, this._triggerArray); 3236 } 3237 3238 if (this._config.toggle) { 3239 this.toggle(); 3240 } 3241 } // Getters 3242 3243 3244 var _proto = Collapse.prototype; 3245 3246 // Public 3247 _proto.toggle = function toggle() { 3248 if ($__default["default"](this._element).hasClass(CLASS_NAME_SHOW$6)) { 3249 this.hide(); 3250 } else { 3251 this.show(); 3252 } 3253 }; 3254 3255 _proto.show = function show() { 3256 var _this = this; 3257 3258 if (this._isTransitioning || $__default["default"](this._element).hasClass(CLASS_NAME_SHOW$6)) { 3259 return; 3260 } 3261 3262 var actives; 3263 var activesData; 3264 3265 if (this._parent) { 3266 actives = [].slice.call(this._parent.querySelectorAll(SELECTOR_ACTIVES)).filter(function (elem) { 3267 if (typeof _this._config.parent === 'string') { 3268 return elem.getAttribute('data-parent') === _this._config.parent; 3269 } 3270 3271 return elem.classList.contains(CLASS_NAME_COLLAPSE); 3272 }); 3273 3274 if (actives.length === 0) { 3275 actives = null; 3276 } 3277 } 3278 3279 if (actives) { 3280 activesData = $__default["default"](actives).not(this._selector).data(DATA_KEY$7); 3281 3282 if (activesData && activesData._isTransitioning) { 3283 return; 3284 } 3285 } 3286 3287 var startEvent = $__default["default"].Event(EVENT_SHOW$4); 3288 $__default["default"](this._element).trigger(startEvent); 3289 3290 if (startEvent.isDefaultPrevented()) { 3291 return; 3292 } 3293 3294 if (actives) { 3295 Collapse._jQueryInterface.call($__default["default"](actives).not(this._selector), 'hide'); 3296 3297 if (!activesData) { 3298 $__default["default"](actives).data(DATA_KEY$7, null); 3299 } 3300 } 3301 3302 var dimension = this._getDimension(); 3303 3304 $__default["default"](this._element).removeClass(CLASS_NAME_COLLAPSE).addClass(CLASS_NAME_COLLAPSING); 3305 this._element.style[dimension] = 0; 3306 3307 if (this._triggerArray.length) { 3308 $__default["default"](this._triggerArray).removeClass(CLASS_NAME_COLLAPSED).attr('aria-expanded', true); 3309 } 3310 3311 this.setTransitioning(true); 3312 3313 var complete = function complete() { 3314 $__default["default"](_this._element).removeClass(CLASS_NAME_COLLAPSING).addClass(CLASS_NAME_COLLAPSE + " " + CLASS_NAME_SHOW$6); 3315 _this._element.style[dimension] = ''; 3316 3317 _this.setTransitioning(false); 3318 3319 $__default["default"](_this._element).trigger(EVENT_SHOWN$4); 3320 }; 3321 3322 var capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1); 3323 var scrollSize = "scroll" + capitalizedDimension; 3324 var transitionDuration = Util.getTransitionDurationFromElement(this._element); 3325 $__default["default"](this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration); 3326 this._element.style[dimension] = this._element[scrollSize] + "px"; 3327 }; 3328 3329 _proto.hide = function hide() { 3330 var _this2 = this; 3331 3332 if (this._isTransitioning || !$__default["default"](this._element).hasClass(CLASS_NAME_SHOW$6)) { 3333 return; 3334 } 3335 3336 var startEvent = $__default["default"].Event(EVENT_HIDE$4); 3337 $__default["default"](this._element).trigger(startEvent); 3338 3339 if (startEvent.isDefaultPrevented()) { 3340 return; 3341 } 3342 3343 var dimension = this._getDimension(); 3344 3345 this._element.style[dimension] = this._element.getBoundingClientRect()[dimension] + "px"; 3346 Util.reflow(this._element); 3347 $__default["default"](this._element).addClass(CLASS_NAME_COLLAPSING).removeClass(CLASS_NAME_COLLAPSE + " " + CLASS_NAME_SHOW$6); 3348 var triggerArrayLength = this._triggerArray.length; 3349 3350 if (triggerArrayLength > 0) { 3351 for (var i = 0; i < triggerArrayLength; i++) { 3352 var trigger = this._triggerArray[i]; 3353 var selector = Util.getSelectorFromElement(trigger); 3354 3355 if (selector !== null) { 3356 var $elem = $__default["default"]([].slice.call(document.querySelectorAll(selector))); 3357 3358 if (!$elem.hasClass(CLASS_NAME_SHOW$6)) { 3359 $__default["default"](trigger).addClass(CLASS_NAME_COLLAPSED).attr('aria-expanded', false); 3360 } 3361 } 3362 } 3363 } 3364 3365 this.setTransitioning(true); 3366 3367 var complete = function complete() { 3368 _this2.setTransitioning(false); 3369 3370 $__default["default"](_this2._element).removeClass(CLASS_NAME_COLLAPSING).addClass(CLASS_NAME_COLLAPSE).trigger(EVENT_HIDDEN$4); 3371 }; 3372 3373 this._element.style[dimension] = ''; 3374 var transitionDuration = Util.getTransitionDurationFromElement(this._element); 3375 $__default["default"](this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration); 3376 }; 3377 3378 _proto.setTransitioning = function setTransitioning(isTransitioning) { 3379 this._isTransitioning = isTransitioning; 3380 }; 3381 3382 _proto.dispose = function dispose() { 3383 $__default["default"].removeData(this._element, DATA_KEY$7); 3384 this._config = null; 3385 this._parent = null; 3386 this._element = null; 3387 this._triggerArray = null; 3388 this._isTransitioning = null; 3389 } // Private 3390 ; 3391 3392 _proto._getConfig = function _getConfig(config) { 3393 config = _extends({}, Default$6, config); 3394 config.toggle = Boolean(config.toggle); // Coerce string values 3395 3396 Util.typeCheckConfig(NAME$7, config, DefaultType$6); 3397 return config; 3398 }; 3399 3400 _proto._getDimension = function _getDimension() { 3401 var hasWidth = $__default["default"](this._element).hasClass(DIMENSION_WIDTH); 3402 return hasWidth ? DIMENSION_WIDTH : DIMENSION_HEIGHT; 3403 }; 3404 3405 _proto._getParent = function _getParent() { 3406 var _this3 = this; 3407 3408 var parent; 3409 3410 if (Util.isElement(this._config.parent)) { 3411 parent = this._config.parent; // It's a jQuery object 3412 3413 if (typeof this._config.parent.jquery !== 'undefined') { 3414 parent = this._config.parent[0]; 3415 } 3416 } else { 3417 parent = document.querySelector(this._config.parent); 3418 } 3419 3420 var selector = "[data-toggle=\"collapse\"][data-parent=\"" + this._config.parent + "\"]"; 3421 var children = [].slice.call(parent.querySelectorAll(selector)); 3422 $__default["default"](children).each(function (i, element) { 3423 _this3._addAriaAndCollapsedClass(Collapse._getTargetFromElement(element), [element]); 3424 }); 3425 return parent; 3426 }; 3427 3428 _proto._addAriaAndCollapsedClass = function _addAriaAndCollapsedClass(element, triggerArray) { 3429 var isOpen = $__default["default"](element).hasClass(CLASS_NAME_SHOW$6); 3430 3431 if (triggerArray.length) { 3432 $__default["default"](triggerArray).toggleClass(CLASS_NAME_COLLAPSED, !isOpen).attr('aria-expanded', isOpen); 3433 } 3434 } // Static 3435 ; 3436 3437 Collapse._getTargetFromElement = function _getTargetFromElement(element) { 3438 var selector = Util.getSelectorFromElement(element); 3439 return selector ? document.querySelector(selector) : null; 3440 }; 3441 3442 Collapse._jQueryInterface = function _jQueryInterface(config) { 3443 return this.each(function () { 3444 var $element = $__default["default"](this); 3445 var data = $element.data(DATA_KEY$7); 3446 3447 var _config = _extends({}, Default$6, $element.data(), typeof config === 'object' && config ? config : {}); 3448 3449 if (!data && _config.toggle && typeof config === 'string' && /show|hide/.test(config)) { 3450 _config.toggle = false; 3451 } 3452 3453 if (!data) { 3454 data = new Collapse(this, _config); 3455 $element.data(DATA_KEY$7, data); 3456 } 3457 3458 if (typeof config === 'string') { 3459 if (typeof data[config] === 'undefined') { 3460 throw new TypeError("No method named \"" + config + "\""); 3461 } 3462 3463 data[config](); 3464 } 3465 }); 3466 }; 3467 3468 _createClass(Collapse, null, [{ 3469 key: "VERSION", 3470 get: function get() { 3471 return VERSION$7; 3472 } 3473 }, { 3474 key: "Default", 3475 get: function get() { 3476 return Default$6; 3477 } 3478 }]); 3479 3480 return Collapse; 3481 }(); 3482 /** 3483 * Data API implementation 3484 */ 3485 3486 3487 $__default["default"](document).on(EVENT_CLICK_DATA_API$3, SELECTOR_DATA_TOGGLE$3, function (event) { 3488 // preventDefault only for <a> elements (which change the URL) not inside the collapsible element 3489 if (event.currentTarget.tagName === 'A') { 3490 event.preventDefault(); 3491 } 3492 3493 var $trigger = $__default["default"](this); 3494 var selector = Util.getSelectorFromElement(this); 3495 var selectors = [].slice.call(document.querySelectorAll(selector)); 3496 $__default["default"](selectors).each(function () { 3497 var $target = $__default["default"](this); 3498 var data = $target.data(DATA_KEY$7); 3499 var config = data ? 'toggle' : $trigger.data(); 3500 3501 Collapse._jQueryInterface.call($target, config); 3502 }); 3503 }); 3504 /** 3505 * jQuery 3506 */ 3507 3508 $__default["default"].fn[NAME$7] = Collapse._jQueryInterface; 3509 $__default["default"].fn[NAME$7].Constructor = Collapse; 3510 3511 $__default["default"].fn[NAME$7].noConflict = function () { 3512 $__default["default"].fn[NAME$7] = JQUERY_NO_CONFLICT$7; 3513 return Collapse._jQueryInterface; 3514 }; 3515 3516 /** 3517 * Constants 3518 */ 3519 3520 var NAME$6 = 'dropdown'; 3521 var VERSION$6 = '4.6.2'; 3522 var DATA_KEY$6 = 'bs.dropdown'; 3523 var EVENT_KEY$6 = "." + DATA_KEY$6; 3524 var DATA_API_KEY$3 = '.data-api'; 3525 var JQUERY_NO_CONFLICT$6 = $__default["default"].fn[NAME$6]; 3526 var ESCAPE_KEYCODE$1 = 27; // KeyboardEvent.which value for Escape (Esc) key 3527 3528 var SPACE_KEYCODE = 32; // KeyboardEvent.which value for space key 3529 3530 var TAB_KEYCODE = 9; // KeyboardEvent.which value for tab key 3531 3532 var ARROW_UP_KEYCODE = 38; // KeyboardEvent.which value for up arrow key 3533 3534 var ARROW_DOWN_KEYCODE = 40; // KeyboardEvent.which value for down arrow key 3535 3536 var RIGHT_MOUSE_BUTTON_WHICH = 3; // MouseEvent.which value for the right button (assuming a right-handed mouse) 3537 3538 var REGEXP_KEYDOWN = new RegExp(ARROW_UP_KEYCODE + "|" + ARROW_DOWN_KEYCODE + "|" + ESCAPE_KEYCODE$1); 3539 var CLASS_NAME_DISABLED$1 = 'disabled'; 3540 var CLASS_NAME_SHOW$5 = 'show'; 3541 var CLASS_NAME_DROPUP = 'dropup'; 3542 var CLASS_NAME_DROPRIGHT = 'dropright'; 3543 var CLASS_NAME_DROPLEFT = 'dropleft'; 3544 var CLASS_NAME_MENURIGHT = 'dropdown-menu-right'; 3545 var CLASS_NAME_POSITION_STATIC = 'position-static'; 3546 var EVENT_HIDE$3 = "hide" + EVENT_KEY$6; 3547 var EVENT_HIDDEN$3 = "hidden" + EVENT_KEY$6; 3548 var EVENT_SHOW$3 = "show" + EVENT_KEY$6; 3549 var EVENT_SHOWN$3 = "shown" + EVENT_KEY$6; 3550 var EVENT_CLICK = "click" + EVENT_KEY$6; 3551 var EVENT_CLICK_DATA_API$2 = "click" + EVENT_KEY$6 + DATA_API_KEY$3; 3552 var EVENT_KEYDOWN_DATA_API = "keydown" + EVENT_KEY$6 + DATA_API_KEY$3; 3553 var EVENT_KEYUP_DATA_API = "keyup" + EVENT_KEY$6 + DATA_API_KEY$3; 3554 var SELECTOR_DATA_TOGGLE$2 = '[data-toggle="dropdown"]'; 3555 var SELECTOR_FORM_CHILD = '.dropdown form'; 3556 var SELECTOR_MENU = '.dropdown-menu'; 3557 var SELECTOR_NAVBAR_NAV = '.navbar-nav'; 3558 var SELECTOR_VISIBLE_ITEMS = '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)'; 3559 var PLACEMENT_TOP = 'top-start'; 3560 var PLACEMENT_TOPEND = 'top-end'; 3561 var PLACEMENT_BOTTOM = 'bottom-start'; 3562 var PLACEMENT_BOTTOMEND = 'bottom-end'; 3563 var PLACEMENT_RIGHT = 'right-start'; 3564 var PLACEMENT_LEFT = 'left-start'; 3565 var Default$5 = { 3566 offset: 0, 3567 flip: true, 3568 boundary: 'scrollParent', 3569 reference: 'toggle', 3570 display: 'dynamic', 3571 popperConfig: null 3572 }; 3573 var DefaultType$5 = { 3574 offset: '(number|string|function)', 3575 flip: 'boolean', 3576 boundary: '(string|element)', 3577 reference: '(string|element)', 3578 display: 'string', 3579 popperConfig: '(null|object)' 3580 }; 3581 /** 3582 * Class definition 3583 */ 3584 3585 var Dropdown = /*#__PURE__*/function () { 3586 function Dropdown(element, config) { 3587 this._element = element; 3588 this._popper = null; 3589 this._config = this._getConfig(config); 3590 this._menu = this._getMenuElement(); 3591 this._inNavbar = this._detectNavbar(); 3592 3593 this._addEventListeners(); 3594 } // Getters 3595 3596 3597 var _proto = Dropdown.prototype; 3598 3599 // Public 3600 _proto.toggle = function toggle() { 3601 if (this._element.disabled || $__default["default"](this._element).hasClass(CLASS_NAME_DISABLED$1)) { 3602 return; 3603 } 3604 3605 var isActive = $__default["default"](this._menu).hasClass(CLASS_NAME_SHOW$5); 3606 3607 Dropdown._clearMenus(); 3608 3609 if (isActive) { 3610 return; 3611 } 3612 3613 this.show(true); 3614 }; 3615 3616 _proto.show = function show(usePopper) { 3617 if (usePopper === void 0) { 3618 usePopper = false; 3619 } 3620 3621 if (this._element.disabled || $__default["default"](this._element).hasClass(CLASS_NAME_DISABLED$1) || $__default["default"](this._menu).hasClass(CLASS_NAME_SHOW$5)) { 3622 return; 3623 } 3624 3625 var relatedTarget = { 3626 relatedTarget: this._element 3627 }; 3628 var showEvent = $__default["default"].Event(EVENT_SHOW$3, relatedTarget); 3629 3630 var parent = Dropdown._getParentFromElement(this._element); 3631 3632 $__default["default"](parent).trigger(showEvent); 3633 3634 if (showEvent.isDefaultPrevented()) { 3635 return; 3636 } // Totally disable Popper for Dropdowns in Navbar 3637 3638 3639 if (!this._inNavbar && usePopper) { 3640 // Check for Popper dependency 3641 if (typeof Popper__default["default"] === 'undefined') { 3642 throw new TypeError('Bootstrap\'s dropdowns require Popper (https://popper.js.org)'); 3643 } 3644 3645 var referenceElement = this._element; 3646 3647 if (this._config.reference === 'parent') { 3648 referenceElement = parent; 3649 } else if (Util.isElement(this._config.reference)) { 3650 referenceElement = this._config.reference; // Check if it's jQuery element 3651 3652 if (typeof this._config.reference.jquery !== 'undefined') { 3653 referenceElement = this._config.reference[0]; 3654 } 3655 } // If boundary is not `scrollParent`, then set position to `static` 3656 // to allow the menu to "escape" the scroll parent's boundaries 3657 // https://github.com/twbs/bootstrap/issues/24251 3658 3659 3660 if (this._config.boundary !== 'scrollParent') { 3661 $__default["default"](parent).addClass(CLASS_NAME_POSITION_STATIC); 3662 } 3663 3664 this._popper = new Popper__default["default"](referenceElement, this._menu, this._getPopperConfig()); 3665 } // If this is a touch-enabled device we add extra 3666 // empty mouseover listeners to the body's immediate children; 3667 // only needed because of broken event delegation on iOS 3668 // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html 3669 3670 3671 if ('ontouchstart' in document.documentElement && $__default["default"](parent).closest(SELECTOR_NAVBAR_NAV).length === 0) { 3672 $__default["default"](document.body).children().on('mouseover', null, $__default["default"].noop); 3673 } 3674 3675 this._element.focus(); 3676 3677 this._element.setAttribute('aria-expanded', true); 3678 3679 $__default["default"](this._menu).toggleClass(CLASS_NAME_SHOW$5); 3680 $__default["default"](parent).toggleClass(CLASS_NAME_SHOW$5).trigger($__default["default"].Event(EVENT_SHOWN$3, relatedTarget)); 3681 }; 3682 3683 _proto.hide = function hide() { 3684 if (this._element.disabled || $__default["default"](this._element).hasClass(CLASS_NAME_DISABLED$1) || !$__default["default"](this._menu).hasClass(CLASS_NAME_SHOW$5)) { 3685 return; 3686 } 3687 3688 var relatedTarget = { 3689 relatedTarget: this._element 3690 }; 3691 var hideEvent = $__default["default"].Event(EVENT_HIDE$3, relatedTarget); 3692 3693 var parent = Dropdown._getParentFromElement(this._element); 3694 3695 $__default["default"](parent).trigger(hideEvent); 3696 3697 if (hideEvent.isDefaultPrevented()) { 3698 return; 3699 } 3700 3701 if (this._popper) { 3702 this._popper.destroy(); 3703 } 3704 3705 $__default["default"](this._menu).toggleClass(CLASS_NAME_SHOW$5); 3706 $__default["default"](parent).toggleClass(CLASS_NAME_SHOW$5).trigger($__default["default"].Event(EVENT_HIDDEN$3, relatedTarget)); 3707 }; 3708 3709 _proto.dispose = function dispose() { 3710 $__default["default"].removeData(this._element, DATA_KEY$6); 3711 $__default["default"](this._element).off(EVENT_KEY$6); 3712 this._element = null; 3713 this._menu = null; 3714 3715 if (this._popper !== null) { 3716 this._popper.destroy(); 3717 3718 this._popper = null; 3719 } 3720 }; 3721 3722 _proto.update = function update() { 3723 this._inNavbar = this._detectNavbar(); 3724 3725 if (this._popper !== null) { 3726 this._popper.scheduleUpdate(); 3727 } 3728 } // Private 3729 ; 3730 3731 _proto._addEventListeners = function _addEventListeners() { 3732 var _this = this; 3733 3734 $__default["default"](this._element).on(EVENT_CLICK, function (event) { 3735 event.preventDefault(); 3736 event.stopPropagation(); 3737 3738 _this.toggle(); 3739 }); 3740 }; 3741 3742 _proto._getConfig = function _getConfig(config) { 3743 config = _extends({}, this.constructor.Default, $__default["default"](this._element).data(), config); 3744 Util.typeCheckConfig(NAME$6, config, this.constructor.DefaultType); 3745 return config; 3746 }; 3747 3748 _proto._getMenuElement = function _getMenuElement() { 3749 if (!this._menu) { 3750 var parent = Dropdown._getParentFromElement(this._element); 3751 3752 if (parent) { 3753 this._menu = parent.querySelector(SELECTOR_MENU); 3754 } 3755 } 3756 3757 return this._menu; 3758 }; 3759 3760 _proto._getPlacement = function _getPlacement() { 3761 var $parentDropdown = $__default["default"](this._element.parentNode); 3762 var placement = PLACEMENT_BOTTOM; // Handle dropup 3763 3764 if ($parentDropdown.hasClass(CLASS_NAME_DROPUP)) { 3765 placement = $__default["default"](this._menu).hasClass(CLASS_NAME_MENURIGHT) ? PLACEMENT_TOPEND : PLACEMENT_TOP; 3766 } else if ($parentDropdown.hasClass(CLASS_NAME_DROPRIGHT)) { 3767 placement = PLACEMENT_RIGHT; 3768 } else if ($parentDropdown.hasClass(CLASS_NAME_DROPLEFT)) { 3769 placement = PLACEMENT_LEFT; 3770 } else if ($__default["default"](this._menu).hasClass(CLASS_NAME_MENURIGHT)) { 3771 placement = PLACEMENT_BOTTOMEND; 3772 } 3773 3774 return placement; 3775 }; 3776 3777 _proto._detectNavbar = function _detectNavbar() { 3778 return $__default["default"](this._element).closest('.navbar').length > 0; 3779 }; 3780 3781 _proto._getOffset = function _getOffset() { 3782 var _this2 = this; 3783 3784 var offset = {}; 3785 3786 if (typeof this._config.offset === 'function') { 3787 offset.fn = function (data) { 3788 data.offsets = _extends({}, data.offsets, _this2._config.offset(data.offsets, _this2._element)); 3789 return data; 3790 }; 3791 } else { 3792 offset.offset = this._config.offset; 3793 } 3794 3795 return offset; 3796 }; 3797 3798 _proto._getPopperConfig = function _getPopperConfig() { 3799 var popperConfig = { 3800 placement: this._getPlacement(), 3801 modifiers: { 3802 offset: this._getOffset(), 3803 flip: { 3804 enabled: this._config.flip 3805 }, 3806 preventOverflow: { 3807 boundariesElement: this._config.boundary 3808 } 3809 } 3810 }; // Disable Popper if we have a static display 3811 3812 if (this._config.display === 'static') { 3813 popperConfig.modifiers.applyStyle = { 3814 enabled: false 3815 }; 3816 } 3817 3818 return _extends({}, popperConfig, this._config.popperConfig); 3819 } // Static 3820 ; 3821 3822 Dropdown._jQueryInterface = function _jQueryInterface(config) { 3823 return this.each(function () { 3824 var data = $__default["default"](this).data(DATA_KEY$6); 3825 3826 var _config = typeof config === 'object' ? config : null; 3827 3828 if (!data) { 3829 data = new Dropdown(this, _config); 3830 $__default["default"](this).data(DATA_KEY$6, data); 3831 } 3832 3833 if (typeof config === 'string') { 3834 if (typeof data[config] === 'undefined') { 3835 throw new TypeError("No method named \"" + config + "\""); 3836 } 3837 3838 data[config](); 3839 } 3840 }); 3841 }; 3842 3843 Dropdown._clearMenus = function _clearMenus(event) { 3844 if (event && (event.which === RIGHT_MOUSE_BUTTON_WHICH || event.type === 'keyup' && event.which !== TAB_KEYCODE)) { 3845 return; 3846 } 3847 3848 var toggles = [].slice.call(document.querySelectorAll(SELECTOR_DATA_TOGGLE$2)); 3849 3850 for (var i = 0, len = toggles.length; i < len; i++) { 3851 var parent = Dropdown._getParentFromElement(toggles[i]); 3852 3853 var context = $__default["default"](toggles[i]).data(DATA_KEY$6); 3854 var relatedTarget = { 3855 relatedTarget: toggles[i] 3856 }; 3857 3858 if (event && event.type === 'click') { 3859 relatedTarget.clickEvent = event; 3860 } 3861 3862 if (!context) { 3863 continue; 3864 } 3865 3866 var dropdownMenu = context._menu; 3867 3868 if (!$__default["default"](parent).hasClass(CLASS_NAME_SHOW$5)) { 3869 continue; 3870 } 3871 3872 if (event && (event.type === 'click' && /input|textarea/i.test(event.target.tagName) || event.type === 'keyup' && event.which === TAB_KEYCODE) && $__default["default"].contains(parent, event.target)) { 3873 continue; 3874 } 3875 3876 var hideEvent = $__default["default"].Event(EVENT_HIDE$3, relatedTarget); 3877 $__default["default"](parent).trigger(hideEvent); 3878 3879 if (hideEvent.isDefaultPrevented()) { 3880 continue; 3881 } // If this is a touch-enabled device we remove the extra 3882 // empty mouseover listeners we added for iOS support 3883 3884 3885 if ('ontouchstart' in document.documentElement) { 3886 $__default["default"](document.body).children().off('mouseover', null, $__default["default"].noop); 3887 } 3888 3889 toggles[i].setAttribute('aria-expanded', 'false'); 3890 3891 if (context._popper) { 3892 context._popper.destroy(); 3893 } 3894 3895 $__default["default"](dropdownMenu).removeClass(CLASS_NAME_SHOW$5); 3896 $__default["default"](parent).removeClass(CLASS_NAME_SHOW$5).trigger($__default["default"].Event(EVENT_HIDDEN$3, relatedTarget)); 3897 } 3898 }; 3899 3900 Dropdown._getParentFromElement = function _getParentFromElement(element) { 3901 var parent; 3902 var selector = Util.getSelectorFromElement(element); 3903 3904 if (selector) { 3905 parent = document.querySelector(selector); 3906 } 3907 3908 return parent || element.parentNode; 3909 } // eslint-disable-next-line complexity 3910 ; 3911 3912 Dropdown._dataApiKeydownHandler = function _dataApiKeydownHandler(event) { 3913 // If not input/textarea: 3914 // - And not a key in REGEXP_KEYDOWN => not a dropdown command 3915 // If input/textarea: 3916 // - If space key => not a dropdown command 3917 // - If key is other than escape 3918 // - If key is not up or down => not a dropdown command 3919 // - If trigger inside the menu => not a dropdown command 3920 if (/input|textarea/i.test(event.target.tagName) ? event.which === SPACE_KEYCODE || event.which !== ESCAPE_KEYCODE$1 && (event.which !== ARROW_DOWN_KEYCODE && event.which !== ARROW_UP_KEYCODE || $__default["default"](event.target).closest(SELECTOR_MENU).length) : !REGEXP_KEYDOWN.test(event.which)) { 3921 return; 3922 } 3923 3924 if (this.disabled || $__default["default"](this).hasClass(CLASS_NAME_DISABLED$1)) { 3925 return; 3926 } 3927 3928 var parent = Dropdown._getParentFromElement(this); 3929 3930 var isActive = $__default["default"](parent).hasClass(CLASS_NAME_SHOW$5); 3931 3932 if (!isActive && event.which === ESCAPE_KEYCODE$1) { 3933 return; 3934 } 3935 3936 event.preventDefault(); 3937 event.stopPropagation(); 3938 3939 if (!isActive || event.which === ESCAPE_KEYCODE$1 || event.which === SPACE_KEYCODE) { 3940 if (event.which === ESCAPE_KEYCODE$1) { 3941 $__default["default"](parent.querySelector(SELECTOR_DATA_TOGGLE$2)).trigger('focus'); 3942 } 3943 3944 $__default["default"](this).trigger('click'); 3945 return; 3946 } 3947 3948 var items = [].slice.call(parent.querySelectorAll(SELECTOR_VISIBLE_ITEMS)).filter(function (item) { 3949 return $__default["default"](item).is(':visible'); 3950 }); 3951 3952 if (items.length === 0) { 3953 return; 3954 } 3955 3956 var index = items.indexOf(event.target); 3957 3958 if (event.which === ARROW_UP_KEYCODE && index > 0) { 3959 // Up 3960 index--; 3961 } 3962 3963 if (event.which === ARROW_DOWN_KEYCODE && index < items.length - 1) { 3964 // Down 3965 index++; 3966 } 3967 3968 if (index < 0) { 3969 index = 0; 3970 } 3971 3972 items[index].focus(); 3973 }; 3974 3975 _createClass(Dropdown, null, [{ 3976 key: "VERSION", 3977 get: function get() { 3978 return VERSION$6; 3979 } 3980 }, { 3981 key: "Default", 3982 get: function get() { 3983 return Default$5; 3984 } 3985 }, { 3986 key: "DefaultType", 3987 get: function get() { 3988 return DefaultType$5; 3989 } 3990 }]); 3991 3992 return Dropdown; 3993 }(); 3994 /** 3995 * Data API implementation 3996 */ 3997 3998 3999 $__default["default"](document).on(EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE$2, Dropdown._dataApiKeydownHandler).on(EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown._dataApiKeydownHandler).on(EVENT_CLICK_DATA_API$2 + " " + EVENT_KEYUP_DATA_API, Dropdown._clearMenus).on(EVENT_CLICK_DATA_API$2, SELECTOR_DATA_TOGGLE$2, function (event) { 4000 event.preventDefault(); 4001 event.stopPropagation(); 4002 4003 Dropdown._jQueryInterface.call($__default["default"](this), 'toggle'); 4004 }).on(EVENT_CLICK_DATA_API$2, SELECTOR_FORM_CHILD, function (e) { 4005 e.stopPropagation(); 4006 }); 4007 /** 4008 * jQuery 4009 */ 4010 4011 $__default["default"].fn[NAME$6] = Dropdown._jQueryInterface; 4012 $__default["default"].fn[NAME$6].Constructor = Dropdown; 4013 4014 $__default["default"].fn[NAME$6].noConflict = function () { 4015 $__default["default"].fn[NAME$6] = JQUERY_NO_CONFLICT$6; 4016 return Dropdown._jQueryInterface; 4017 }; 4018 4019 /** 4020 * Constants 4021 */ 4022 4023 var NAME$5 = 'modal'; 4024 var VERSION$5 = '4.6.2'; 4025 var DATA_KEY$5 = 'bs.modal'; 4026 var EVENT_KEY$5 = "." + DATA_KEY$5; 4027 var DATA_API_KEY$2 = '.data-api'; 4028 var JQUERY_NO_CONFLICT$5 = $__default["default"].fn[NAME$5]; 4029 var ESCAPE_KEYCODE = 27; // KeyboardEvent.which value for Escape (Esc) key 4030 4031 var CLASS_NAME_SCROLLABLE = 'modal-dialog-scrollable'; 4032 var CLASS_NAME_SCROLLBAR_MEASURER = 'modal-scrollbar-measure'; 4033 var CLASS_NAME_BACKDROP = 'modal-backdrop'; 4034 var CLASS_NAME_OPEN = 'modal-open'; 4035 var CLASS_NAME_FADE$4 = 'fade'; 4036 var CLASS_NAME_SHOW$4 = 'show'; 4037 var CLASS_NAME_STATIC = 'modal-static'; 4038 var EVENT_HIDE$2 = "hide" + EVENT_KEY$5; 4039 var EVENT_HIDE_PREVENTED = "hidePrevented" + EVENT_KEY$5; 4040 var EVENT_HIDDEN$2 = "hidden" + EVENT_KEY$5; 4041 var EVENT_SHOW$2 = "show" + EVENT_KEY$5; 4042 var EVENT_SHOWN$2 = "shown" + EVENT_KEY$5; 4043 var EVENT_FOCUSIN = "focusin" + EVENT_KEY$5; 4044 var EVENT_RESIZE = "resize" + EVENT_KEY$5; 4045 var EVENT_CLICK_DISMISS$1 = "click.dismiss" + EVENT_KEY$5; 4046 var EVENT_KEYDOWN_DISMISS = "keydown.dismiss" + EVENT_KEY$5; 4047 var EVENT_MOUSEUP_DISMISS = "mouseup.dismiss" + EVENT_KEY$5; 4048 var EVENT_MOUSEDOWN_DISMISS = "mousedown.dismiss" + EVENT_KEY$5; 4049 var EVENT_CLICK_DATA_API$1 = "click" + EVENT_KEY$5 + DATA_API_KEY$2; 4050 var SELECTOR_DIALOG = '.modal-dialog'; 4051 var SELECTOR_MODAL_BODY = '.modal-body'; 4052 var SELECTOR_DATA_TOGGLE$1 = '[data-toggle="modal"]'; 4053 var SELECTOR_DATA_DISMISS$1 = '[data-dismiss="modal"]'; 4054 var SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top'; 4055 var SELECTOR_STICKY_CONTENT = '.sticky-top'; 4056 var Default$4 = { 4057 backdrop: true, 4058 keyboard: true, 4059 focus: true, 4060 show: true 4061 }; 4062 var DefaultType$4 = { 4063 backdrop: '(boolean|string)', 4064 keyboard: 'boolean', 4065 focus: 'boolean', 4066 show: 'boolean' 4067 }; 4068 /** 4069 * Class definition 4070 */ 4071 4072 var Modal = /*#__PURE__*/function () { 4073 function Modal(element, config) { 4074 this._config = this._getConfig(config); 4075 this._element = element; 4076 this._dialog = element.querySelector(SELECTOR_DIALOG); 4077 this._backdrop = null; 4078 this._isShown = false; 4079 this._isBodyOverflowing = false; 4080 this._ignoreBackdropClick = false; 4081 this._isTransitioning = false; 4082 this._scrollbarWidth = 0; 4083 } // Getters 4084 4085 4086 var _proto = Modal.prototype; 4087 4088 // Public 4089 _proto.toggle = function toggle(relatedTarget) { 4090 return this._isShown ? this.hide() : this.show(relatedTarget); 4091 }; 4092 4093 _proto.show = function show(relatedTarget) { 4094 var _this = this; 4095 4096 if (this._isShown || this._isTransitioning) { 4097 return; 4098 } 4099 4100 var showEvent = $__default["default"].Event(EVENT_SHOW$2, { 4101 relatedTarget: relatedTarget 4102 }); 4103 $__default["default"](this._element).trigger(showEvent); 4104 4105 if (showEvent.isDefaultPrevented()) { 4106 return; 4107 } 4108 4109 this._isShown = true; 4110 4111 if ($__default["default"](this._element).hasClass(CLASS_NAME_FADE$4)) { 4112 this._isTransitioning = true; 4113 } 4114 4115 this._checkScrollbar(); 4116 4117 this._setScrollbar(); 4118 4119 this._adjustDialog(); 4120 4121 this._setEscapeEvent(); 4122 4123 this._setResizeEvent(); 4124 4125 $__default["default"](this._element).on(EVENT_CLICK_DISMISS$1, SELECTOR_DATA_DISMISS$1, function (event) { 4126 return _this.hide(event); 4127 }); 4128 $__default["default"](this._dialog).on(EVENT_MOUSEDOWN_DISMISS, function () { 4129 $__default["default"](_this._element).one(EVENT_MOUSEUP_DISMISS, function (event) { 4130 if ($__default["default"](event.target).is(_this._element)) { 4131 _this._ignoreBackdropClick = true; 4132 } 4133 }); 4134 }); 4135 4136 this._showBackdrop(function () { 4137 return _this._showElement(relatedTarget); 4138 }); 4139 }; 4140 4141 _proto.hide = function hide(event) { 4142 var _this2 = this; 4143 4144 if (event) { 4145 event.preventDefault(); 4146 } 4147 4148 if (!this._isShown || this._isTransitioning) { 4149 return; 4150 } 4151 4152 var hideEvent = $__default["default"].Event(EVENT_HIDE$2); 4153 $__default["default"](this._element).trigger(hideEvent); 4154 4155 if (!this._isShown || hideEvent.isDefaultPrevented()) { 4156 return; 4157 } 4158 4159 this._isShown = false; 4160 var transition = $__default["default"](this._element).hasClass(CLASS_NAME_FADE$4); 4161 4162 if (transition) { 4163 this._isTransitioning = true; 4164 } 4165 4166 this._setEscapeEvent(); 4167 4168 this._setResizeEvent(); 4169 4170 $__default["default"](document).off(EVENT_FOCUSIN); 4171 $__default["default"](this._element).removeClass(CLASS_NAME_SHOW$4); 4172 $__default["default"](this._element).off(EVENT_CLICK_DISMISS$1); 4173 $__default["default"](this._dialog).off(EVENT_MOUSEDOWN_DISMISS); 4174 4175 if (transition) { 4176 var transitionDuration = Util.getTransitionDurationFromElement(this._element); 4177 $__default["default"](this._element).one(Util.TRANSITION_END, function (event) { 4178 return _this2._hideModal(event); 4179 }).emulateTransitionEnd(transitionDuration); 4180 } else { 4181 this._hideModal(); 4182 } 4183 }; 4184 4185 _proto.dispose = function dispose() { 4186 [window, this._element, this._dialog].forEach(function (htmlElement) { 4187 return $__default["default"](htmlElement).off(EVENT_KEY$5); 4188 }); 4189 /** 4190 * `document` has 2 events `EVENT_FOCUSIN` and `EVENT_CLICK_DATA_API` 4191 * Do not move `document` in `htmlElements` array 4192 * It will remove `EVENT_CLICK_DATA_API` event that should remain 4193 */ 4194 4195 $__default["default"](document).off(EVENT_FOCUSIN); 4196 $__default["default"].removeData(this._element, DATA_KEY$5); 4197 this._config = null; 4198 this._element = null; 4199 this._dialog = null; 4200 this._backdrop = null; 4201 this._isShown = null; 4202 this._isBodyOverflowing = null; 4203 this._ignoreBackdropClick = null; 4204 this._isTransitioning = null; 4205 this._scrollbarWidth = null; 4206 }; 4207 4208 _proto.handleUpdate = function handleUpdate() { 4209 this._adjustDialog(); 4210 } // Private 4211 ; 4212 4213 _proto._getConfig = function _getConfig(config) { 4214 config = _extends({}, Default$4, config); 4215 Util.typeCheckConfig(NAME$5, config, DefaultType$4); 4216 return config; 4217 }; 4218 4219 _proto._triggerBackdropTransition = function _triggerBackdropTransition() { 4220 var _this3 = this; 4221 4222 var hideEventPrevented = $__default["default"].Event(EVENT_HIDE_PREVENTED); 4223 $__default["default"](this._element).trigger(hideEventPrevented); 4224 4225 if (hideEventPrevented.isDefaultPrevented()) { 4226 return; 4227 } 4228 4229 var isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight; 4230 4231 if (!isModalOverflowing) { 4232 this._element.style.overflowY = 'hidden'; 4233 } 4234 4235 this._element.classList.add(CLASS_NAME_STATIC); 4236 4237 var modalTransitionDuration = Util.getTransitionDurationFromElement(this._dialog); 4238 $__default["default"](this._element).off(Util.TRANSITION_END); 4239 $__default["default"](this._element).one(Util.TRANSITION_END, function () { 4240 _this3._element.classList.remove(CLASS_NAME_STATIC); 4241 4242 if (!isModalOverflowing) { 4243 $__default["default"](_this3._element).one(Util.TRANSITION_END, function () { 4244 _this3._element.style.overflowY = ''; 4245 }).emulateTransitionEnd(_this3._element, modalTransitionDuration); 4246 } 4247 }).emulateTransitionEnd(modalTransitionDuration); 4248 4249 this._element.focus(); 4250 }; 4251 4252 _proto._showElement = function _showElement(relatedTarget) { 4253 var _this4 = this; 4254 4255 var transition = $__default["default"](this._element).hasClass(CLASS_NAME_FADE$4); 4256 var modalBody = this._dialog ? this._dialog.querySelector(SELECTOR_MODAL_BODY) : null; 4257 4258 if (!this._element.parentNode || this._element.parentNode.nodeType !== Node.ELEMENT_NODE) { 4259 // Don't move modal's DOM position 4260 document.body.appendChild(this._element); 4261 } 4262 4263 this._element.style.display = 'block'; 4264 4265 this._element.removeAttribute('aria-hidden'); 4266 4267 this._element.setAttribute('aria-modal', true); 4268 4269 this._element.setAttribute('role', 'dialog'); 4270 4271 if ($__default["default"](this._dialog).hasClass(CLASS_NAME_SCROLLABLE) && modalBody) { 4272 modalBody.scrollTop = 0; 4273 } else { 4274 this._element.scrollTop = 0; 4275 } 4276 4277 if (transition) { 4278 Util.reflow(this._element); 4279 } 4280 4281 $__default["default"](this._element).addClass(CLASS_NAME_SHOW$4); 4282 4283 if (this._config.focus) { 4284 this._enforceFocus(); 4285 } 4286 4287 var shownEvent = $__default["default"].Event(EVENT_SHOWN$2, { 4288 relatedTarget: relatedTarget 4289 }); 4290 4291 var transitionComplete = function transitionComplete() { 4292 if (_this4._config.focus) { 4293 _this4._element.focus(); 4294 } 4295 4296 _this4._isTransitioning = false; 4297 $__default["default"](_this4._element).trigger(shownEvent); 4298 }; 4299 4300 if (transition) { 4301 var transitionDuration = Util.getTransitionDurationFromElement(this._dialog); 4302 $__default["default"](this._dialog).one(Util.TRANSITION_END, transitionComplete).emulateTransitionEnd(transitionDuration); 4303 } else { 4304 transitionComplete(); 4305 } 4306 }; 4307 4308 _proto._enforceFocus = function _enforceFocus() { 4309 var _this5 = this; 4310 4311 $__default["default"](document).off(EVENT_FOCUSIN) // Guard against infinite focus loop 4312 .on(EVENT_FOCUSIN, function (event) { 4313 if (document !== event.target && _this5._element !== event.target && $__default["default"](_this5._element).has(event.target).length === 0) { 4314 _this5._element.focus(); 4315 } 4316 }); 4317 }; 4318 4319 _proto._setEscapeEvent = function _setEscapeEvent() { 4320 var _this6 = this; 4321 4322 if (this._isShown) { 4323 $__default["default"](this._element).on(EVENT_KEYDOWN_DISMISS, function (event) { 4324 if (_this6._config.keyboard && event.which === ESCAPE_KEYCODE) { 4325 event.preventDefault(); 4326 4327 _this6.hide(); 4328 } else if (!_this6._config.keyboard && event.which === ESCAPE_KEYCODE) { 4329 _this6._triggerBackdropTransition(); 4330 } 4331 }); 4332 } else if (!this._isShown) { 4333 $__default["default"](this._element).off(EVENT_KEYDOWN_DISMISS); 4334 } 4335 }; 4336 4337 _proto._setResizeEvent = function _setResizeEvent() { 4338 var _this7 = this; 4339 4340 if (this._isShown) { 4341 $__default["default"](window).on(EVENT_RESIZE, function (event) { 4342 return _this7.handleUpdate(event); 4343 }); 4344 } else { 4345 $__default["default"](window).off(EVENT_RESIZE); 4346 } 4347 }; 4348 4349 _proto._hideModal = function _hideModal() { 4350 var _this8 = this; 4351 4352 this._element.style.display = 'none'; 4353 4354 this._element.setAttribute('aria-hidden', true); 4355 4356 this._element.removeAttribute('aria-modal'); 4357 4358 this._element.removeAttribute('role'); 4359 4360 this._isTransitioning = false; 4361 4362 this._showBackdrop(function () { 4363 $__default["default"](document.body).removeClass(CLASS_NAME_OPEN); 4364 4365 _this8._resetAdjustments(); 4366 4367 _this8._resetScrollbar(); 4368 4369 $__default["default"](_this8._element).trigger(EVENT_HIDDEN$2); 4370 }); 4371 }; 4372 4373 _proto._removeBackdrop = function _removeBackdrop() { 4374 if (this._backdrop) { 4375 $__default["default"](this._backdrop).remove(); 4376 this._backdrop = null; 4377 } 4378 }; 4379 4380 _proto._showBackdrop = function _showBackdrop(callback) { 4381 var _this9 = this; 4382 4383 var animate = $__default["default"](this._element).hasClass(CLASS_NAME_FADE$4) ? CLASS_NAME_FADE$4 : ''; 4384 4385 if (this._isShown && this._config.backdrop) { 4386 this._backdrop = document.createElement('div'); 4387 this._backdrop.className = CLASS_NAME_BACKDROP; 4388 4389 if (animate) { 4390 this._backdrop.classList.add(animate); 4391 } 4392 4393 $__default["default"](this._backdrop).appendTo(document.body); 4394 $__default["default"](this._element).on(EVENT_CLICK_DISMISS$1, function (event) { 4395 if (_this9._ignoreBackdropClick) { 4396 _this9._ignoreBackdropClick = false; 4397 return; 4398 } 4399 4400 if (event.target !== event.currentTarget) { 4401 return; 4402 } 4403 4404 if (_this9._config.backdrop === 'static') { 4405 _this9._triggerBackdropTransition(); 4406 } else { 4407 _this9.hide(); 4408 } 4409 }); 4410 4411 if (animate) { 4412 Util.reflow(this._backdrop); 4413 } 4414 4415 $__default["default"](this._backdrop).addClass(CLASS_NAME_SHOW$4); 4416 4417 if (!callback) { 4418 return; 4419 } 4420 4421 if (!animate) { 4422 callback(); 4423 return; 4424 } 4425 4426 var backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop); 4427 $__default["default"](this._backdrop).one(Util.TRANSITION_END, callback).emulateTransitionEnd(backdropTransitionDuration); 4428 } else if (!this._isShown && this._backdrop) { 4429 $__default["default"](this._backdrop).removeClass(CLASS_NAME_SHOW$4); 4430 4431 var callbackRemove = function callbackRemove() { 4432 _this9._removeBackdrop(); 4433 4434 if (callback) { 4435 callback(); 4436 } 4437 }; 4438 4439 if ($__default["default"](this._element).hasClass(CLASS_NAME_FADE$4)) { 4440 var _backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop); 4441 4442 $__default["default"](this._backdrop).one(Util.TRANSITION_END, callbackRemove).emulateTransitionEnd(_backdropTransitionDuration); 4443 } else { 4444 callbackRemove(); 4445 } 4446 } else if (callback) { 4447 callback(); 4448 } 4449 } // ---------------------------------------------------------------------- 4450 // the following methods are used to handle overflowing modals 4451 // todo (fat): these should probably be refactored out of modal.js 4452 // ---------------------------------------------------------------------- 4453 ; 4454 4455 _proto._adjustDialog = function _adjustDialog() { 4456 var isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight; 4457 4458 if (!this._isBodyOverflowing && isModalOverflowing) { 4459 this._element.style.paddingLeft = this._scrollbarWidth + "px"; 4460 } 4461 4462 if (this._isBodyOverflowing && !isModalOverflowing) { 4463 this._element.style.paddingRight = this._scrollbarWidth + "px"; 4464 } 4465 }; 4466 4467 _proto._resetAdjustments = function _resetAdjustments() { 4468 this._element.style.paddingLeft = ''; 4469 this._element.style.paddingRight = ''; 4470 }; 4471 4472 _proto._checkScrollbar = function _checkScrollbar() { 4473 var rect = document.body.getBoundingClientRect(); 4474 this._isBodyOverflowing = Math.round(rect.left + rect.right) < window.innerWidth; 4475 this._scrollbarWidth = this._getScrollbarWidth(); 4476 }; 4477 4478 _proto._setScrollbar = function _setScrollbar() { 4479 var _this10 = this; 4480 4481 if (this._isBodyOverflowing) { 4482 // Note: DOMNode.style.paddingRight returns the actual value or '' if not set 4483 // while $(DOMNode).css('padding-right') returns the calculated value or 0 if not set 4484 var fixedContent = [].slice.call(document.querySelectorAll(SELECTOR_FIXED_CONTENT)); 4485 var stickyContent = [].slice.call(document.querySelectorAll(SELECTOR_STICKY_CONTENT)); // Adjust fixed content padding 4486 4487 $__default["default"](fixedContent).each(function (index, element) { 4488 var actualPadding = element.style.paddingRight; 4489 var calculatedPadding = $__default["default"](element).css('padding-right'); 4490 $__default["default"](element).data('padding-right', actualPadding).css('padding-right', parseFloat(calculatedPadding) + _this10._scrollbarWidth + "px"); 4491 }); // Adjust sticky content margin 4492 4493 $__default["default"](stickyContent).each(function (index, element) { 4494 var actualMargin = element.style.marginRight; 4495 var calculatedMargin = $__default["default"](element).css('margin-right'); 4496 $__default["default"](element).data('margin-right', actualMargin).css('margin-right', parseFloat(calculatedMargin) - _this10._scrollbarWidth + "px"); 4497 }); // Adjust body padding 4498 4499 var actualPadding = document.body.style.paddingRight; 4500 var calculatedPadding = $__default["default"](document.body).css('padding-right'); 4501 $__default["default"](document.body).data('padding-right', actualPadding).css('padding-right', parseFloat(calculatedPadding) + this._scrollbarWidth + "px"); 4502 } 4503 4504 $__default["default"](document.body).addClass(CLASS_NAME_OPEN); 4505 }; 4506 4507 _proto._resetScrollbar = function _resetScrollbar() { 4508 // Restore fixed content padding 4509 var fixedContent = [].slice.call(document.querySelectorAll(SELECTOR_FIXED_CONTENT)); 4510 $__default["default"](fixedContent).each(function (index, element) { 4511 var padding = $__default["default"](element).data('padding-right'); 4512 $__default["default"](element).removeData('padding-right'); 4513 element.style.paddingRight = padding ? padding : ''; 4514 }); // Restore sticky content 4515 4516 var elements = [].slice.call(document.querySelectorAll("" + SELECTOR_STICKY_CONTENT)); 4517 $__default["default"](elements).each(function (index, element) { 4518 var margin = $__default["default"](element).data('margin-right'); 4519 4520 if (typeof margin !== 'undefined') { 4521 $__default["default"](element).css('margin-right', margin).removeData('margin-right'); 4522 } 4523 }); // Restore body padding 4524 4525 var padding = $__default["default"](document.body).data('padding-right'); 4526 $__default["default"](document.body).removeData('padding-right'); 4527 document.body.style.paddingRight = padding ? padding : ''; 4528 }; 4529 4530 _proto._getScrollbarWidth = function _getScrollbarWidth() { 4531 // thx d.walsh 4532 var scrollDiv = document.createElement('div'); 4533 scrollDiv.className = CLASS_NAME_SCROLLBAR_MEASURER; 4534 document.body.appendChild(scrollDiv); 4535 var scrollbarWidth = scrollDiv.getBoundingClientRect().width - scrollDiv.clientWidth; 4536 document.body.removeChild(scrollDiv); 4537 return scrollbarWidth; 4538 } // Static 4539 ; 4540 4541 Modal._jQueryInterface = function _jQueryInterface(config, relatedTarget) { 4542 return this.each(function () { 4543 var data = $__default["default"](this).data(DATA_KEY$5); 4544 4545 var _config = _extends({}, Default$4, $__default["default"](this).data(), typeof config === 'object' && config ? config : {}); 4546 4547 if (!data) { 4548 data = new Modal(this, _config); 4549 $__default["default"](this).data(DATA_KEY$5, data); 4550 } 4551 4552 if (typeof config === 'string') { 4553 if (typeof data[config] === 'undefined') { 4554 throw new TypeError("No method named \"" + config + "\""); 4555 } 4556 4557 data[config](relatedTarget); 4558 } else if (_config.show) { 4559 data.show(relatedTarget); 4560 } 4561 }); 4562 }; 4563 4564 _createClass(Modal, null, [{ 4565 key: "VERSION", 4566 get: function get() { 4567 return VERSION$5; 4568 } 4569 }, { 4570 key: "Default", 4571 get: function get() { 4572 return Default$4; 4573 } 4574 }]); 4575 4576 return Modal; 4577 }(); 4578 /** 4579 * Data API implementation 4580 */ 4581 4582 4583 $__default["default"](document).on(EVENT_CLICK_DATA_API$1, SELECTOR_DATA_TOGGLE$1, function (event) { 4584 var _this11 = this; 4585 4586 var target; 4587 var selector = Util.getSelectorFromElement(this); 4588 4589 if (selector) { 4590 target = document.querySelector(selector); 4591 } 4592 4593 var config = $__default["default"](target).data(DATA_KEY$5) ? 'toggle' : _extends({}, $__default["default"](target).data(), $__default["default"](this).data()); 4594 4595 if (this.tagName === 'A' || this.tagName === 'AREA') { 4596 event.preventDefault(); 4597 } 4598 4599 var $target = $__default["default"](target).one(EVENT_SHOW$2, function (showEvent) { 4600 if (showEvent.isDefaultPrevented()) { 4601 // Only register focus restorer if modal will actually get shown 4602 return; 4603 } 4604 4605 $target.one(EVENT_HIDDEN$2, function () { 4606 if ($__default["default"](_this11).is(':visible')) { 4607 _this11.focus(); 4608 } 4609 }); 4610 }); 4611 4612 Modal._jQueryInterface.call($__default["default"](target), config, this); 4613 }); 4614 /** 4615 * jQuery 4616 */ 4617 4618 $__default["default"].fn[NAME$5] = Modal._jQueryInterface; 4619 $__default["default"].fn[NAME$5].Constructor = Modal; 4620 4621 $__default["default"].fn[NAME$5].noConflict = function () { 4622 $__default["default"].fn[NAME$5] = JQUERY_NO_CONFLICT$5; 4623 return Modal._jQueryInterface; 4624 }; 4625 4626 /** 4627 * -------------------------------------------------------------------------- 4628 * Bootstrap (v4.6.2): tools/sanitizer.js 4629 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 4630 * -------------------------------------------------------------------------- 4631 */ 4632 var uriAttrs = ['background', 'cite', 'href', 'itemtype', 'longdesc', 'poster', 'src', 'xlink:href']; 4633 var ARIA_ATTRIBUTE_PATTERN = /^aria-[\w-]*$/i; 4634 var DefaultWhitelist = { 4635 // Global attributes allowed on any supplied element below. 4636 '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN], 4637 a: ['target', 'href', 'title', 'rel'], 4638 area: [], 4639 b: [], 4640 br: [], 4641 col: [], 4642 code: [], 4643 div: [], 4644 em: [], 4645 hr: [], 4646 h1: [], 4647 h2: [], 4648 h3: [], 4649 h4: [], 4650 h5: [], 4651 h6: [], 4652 i: [], 4653 img: ['src', 'srcset', 'alt', 'title', 'width', 'height'], 4654 li: [], 4655 ol: [], 4656 p: [], 4657 pre: [], 4658 s: [], 4659 small: [], 4660 span: [], 4661 sub: [], 4662 sup: [], 4663 strong: [], 4664 u: [], 4665 ul: [] 4666 }; 4667 /** 4668 * A pattern that recognizes a commonly useful subset of URLs that are safe. 4669 * 4670 * Shoutout to Angular https://github.com/angular/angular/blob/12.2.x/packages/core/src/sanitization/url_sanitizer.ts 4671 */ 4672 4673 var SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file|sms):|[^#&/:?]*(?:[#/?]|$))/i; 4674 /** 4675 * A pattern that matches safe data URLs. Only matches image, video and audio types. 4676 * 4677 * Shoutout to Angular https://github.com/angular/angular/blob/12.2.x/packages/core/src/sanitization/url_sanitizer.ts 4678 */ 4679 4680 var DATA_URL_PATTERN = /^data:(?:image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\/(?:mpeg|mp4|ogg|webm)|audio\/(?:mp3|oga|ogg|opus));base64,[\d+/a-z]+=*$/i; 4681 4682 function allowedAttribute(attr, allowedAttributeList) { 4683 var attrName = attr.nodeName.toLowerCase(); 4684 4685 if (allowedAttributeList.indexOf(attrName) !== -1) { 4686 if (uriAttrs.indexOf(attrName) !== -1) { 4687 return Boolean(SAFE_URL_PATTERN.test(attr.nodeValue) || DATA_URL_PATTERN.test(attr.nodeValue)); 4688 } 4689 4690 return true; 4691 } 4692 4693 var regExp = allowedAttributeList.filter(function (attrRegex) { 4694 return attrRegex instanceof RegExp; 4695 }); // Check if a regular expression validates the attribute. 4696 4697 for (var i = 0, len = regExp.length; i < len; i++) { 4698 if (regExp[i].test(attrName)) { 4699 return true; 4700 } 4701 } 4702 4703 return false; 4704 } 4705 4706 function sanitizeHtml(unsafeHtml, whiteList, sanitizeFn) { 4707 if (unsafeHtml.length === 0) { 4708 return unsafeHtml; 4709 } 4710 4711 if (sanitizeFn && typeof sanitizeFn === 'function') { 4712 return sanitizeFn(unsafeHtml); 4713 } 4714 4715 var domParser = new window.DOMParser(); 4716 var createdDocument = domParser.parseFromString(unsafeHtml, 'text/html'); 4717 var whitelistKeys = Object.keys(whiteList); 4718 var elements = [].slice.call(createdDocument.body.querySelectorAll('*')); 4719 4720 var _loop = function _loop(i, len) { 4721 var el = elements[i]; 4722 var elName = el.nodeName.toLowerCase(); 4723 4724 if (whitelistKeys.indexOf(el.nodeName.toLowerCase()) === -1) { 4725 el.parentNode.removeChild(el); 4726 return "continue"; 4727 } 4728 4729 var attributeList = [].slice.call(el.attributes); // eslint-disable-next-line unicorn/prefer-spread 4730 4731 var whitelistedAttributes = [].concat(whiteList['*'] || [], whiteList[elName] || []); 4732 attributeList.forEach(function (attr) { 4733 if (!allowedAttribute(attr, whitelistedAttributes)) { 4734 el.removeAttribute(attr.nodeName); 4735 } 4736 }); 4737 }; 4738 4739 for (var i = 0, len = elements.length; i < len; i++) { 4740 var _ret = _loop(i); 4741 4742 if (_ret === "continue") continue; 4743 } 4744 4745 return createdDocument.body.innerHTML; 4746 } 4747 4748 /** 4749 * Constants 4750 */ 4751 4752 var NAME$4 = 'tooltip'; 4753 var VERSION$4 = '4.6.2'; 4754 var DATA_KEY$4 = 'bs.tooltip'; 4755 var EVENT_KEY$4 = "." + DATA_KEY$4; 4756 var JQUERY_NO_CONFLICT$4 = $__default["default"].fn[NAME$4]; 4757 var CLASS_PREFIX$1 = 'bs-tooltip'; 4758 var BSCLS_PREFIX_REGEX$1 = new RegExp("(^|\\s)" + CLASS_PREFIX$1 + "\\S+", 'g'); 4759 var DISALLOWED_ATTRIBUTES = ['sanitize', 'whiteList', 'sanitizeFn']; 4760 var CLASS_NAME_FADE$3 = 'fade'; 4761 var CLASS_NAME_SHOW$3 = 'show'; 4762 var HOVER_STATE_SHOW = 'show'; 4763 var HOVER_STATE_OUT = 'out'; 4764 var SELECTOR_TOOLTIP_INNER = '.tooltip-inner'; 4765 var SELECTOR_ARROW = '.arrow'; 4766 var TRIGGER_HOVER = 'hover'; 4767 var TRIGGER_FOCUS = 'focus'; 4768 var TRIGGER_CLICK = 'click'; 4769 var TRIGGER_MANUAL = 'manual'; 4770 var AttachmentMap = { 4771 AUTO: 'auto', 4772 TOP: 'top', 4773 RIGHT: 'right', 4774 BOTTOM: 'bottom', 4775 LEFT: 'left' 4776 }; 4777 var Default$3 = { 4778 animation: true, 4779 template: '<div class="tooltip" role="tooltip">' + '<div class="arrow"></div>' + '<div class="tooltip-inner"></div></div>', 4780 trigger: 'hover focus', 4781 title: '', 4782 delay: 0, 4783 html: false, 4784 selector: false, 4785 placement: 'top', 4786 offset: 0, 4787 container: false, 4788 fallbackPlacement: 'flip', 4789 boundary: 'scrollParent', 4790 customClass: '', 4791 sanitize: true, 4792 sanitizeFn: null, 4793 whiteList: DefaultWhitelist, 4794 popperConfig: null 4795 }; 4796 var DefaultType$3 = { 4797 animation: 'boolean', 4798 template: 'string', 4799 title: '(string|element|function)', 4800 trigger: 'string', 4801 delay: '(number|object)', 4802 html: 'boolean', 4803 selector: '(string|boolean)', 4804 placement: '(string|function)', 4805 offset: '(number|string|function)', 4806 container: '(string|element|boolean)', 4807 fallbackPlacement: '(string|array)', 4808 boundary: '(string|element)', 4809 customClass: '(string|function)', 4810 sanitize: 'boolean', 4811 sanitizeFn: '(null|function)', 4812 whiteList: 'object', 4813 popperConfig: '(null|object)' 4814 }; 4815 var Event$1 = { 4816 HIDE: "hide" + EVENT_KEY$4, 4817 HIDDEN: "hidden" + EVENT_KEY$4, 4818 SHOW: "show" + EVENT_KEY$4, 4819 SHOWN: "shown" + EVENT_KEY$4, 4820 INSERTED: "inserted" + EVENT_KEY$4, 4821 CLICK: "click" + EVENT_KEY$4, 4822 FOCUSIN: "focusin" + EVENT_KEY$4, 4823 FOCUSOUT: "focusout" + EVENT_KEY$4, 4824 MOUSEENTER: "mouseenter" + EVENT_KEY$4, 4825 MOUSELEAVE: "mouseleave" + EVENT_KEY$4 4826 }; 4827 /** 4828 * Class definition 4829 */ 4830 4831 var Tooltip = /*#__PURE__*/function () { 4832 function Tooltip(element, config) { 4833 if (typeof Popper__default["default"] === 'undefined') { 4834 throw new TypeError('Bootstrap\'s tooltips require Popper (https://popper.js.org)'); 4835 } // Private 4836 4837 4838 this._isEnabled = true; 4839 this._timeout = 0; 4840 this._hoverState = ''; 4841 this._activeTrigger = {}; 4842 this._popper = null; // Protected 4843 4844 this.element = element; 4845 this.config = this._getConfig(config); 4846 this.tip = null; 4847 4848 this._setListeners(); 4849 } // Getters 4850 4851 4852 var _proto = Tooltip.prototype; 4853 4854 // Public 4855 _proto.enable = function enable() { 4856 this._isEnabled = true; 4857 }; 4858 4859 _proto.disable = function disable() { 4860 this._isEnabled = false; 4861 }; 4862 4863 _proto.toggleEnabled = function toggleEnabled() { 4864 this._isEnabled = !this._isEnabled; 4865 }; 4866 4867 _proto.toggle = function toggle(event) { 4868 if (!this._isEnabled) { 4869 return; 4870 } 4871 4872 if (event) { 4873 var dataKey = this.constructor.DATA_KEY; 4874 var context = $__default["default"](event.currentTarget).data(dataKey); 4875 4876 if (!context) { 4877 context = new this.constructor(event.currentTarget, this._getDelegateConfig()); 4878 $__default["default"](event.currentTarget).data(dataKey, context); 4879 } 4880 4881 context._activeTrigger.click = !context._activeTrigger.click; 4882 4883 if (context._isWithActiveTrigger()) { 4884 context._enter(null, context); 4885 } else { 4886 context._leave(null, context); 4887 } 4888 } else { 4889 if ($__default["default"](this.getTipElement()).hasClass(CLASS_NAME_SHOW$3)) { 4890 this._leave(null, this); 4891 4892 return; 4893 } 4894 4895 this._enter(null, this); 4896 } 4897 }; 4898 4899 _proto.dispose = function dispose() { 4900 clearTimeout(this._timeout); 4901 $__default["default"].removeData(this.element, this.constructor.DATA_KEY); 4902 $__default["default"](this.element).off(this.constructor.EVENT_KEY); 4903 $__default["default"](this.element).closest('.modal').off('hide.bs.modal', this._hideModalHandler); 4904 4905 if (this.tip) { 4906 $__default["default"](this.tip).remove(); 4907 } 4908 4909 this._isEnabled = null; 4910 this._timeout = null; 4911 this._hoverState = null; 4912 this._activeTrigger = null; 4913 4914 if (this._popper) { 4915 this._popper.destroy(); 4916 } 4917 4918 this._popper = null; 4919 this.element = null; 4920 this.config = null; 4921 this.tip = null; 4922 }; 4923 4924 _proto.show = function show() { 4925 var _this = this; 4926 4927 if ($__default["default"](this.element).css('display') === 'none') { 4928 throw new Error('Please use show on visible elements'); 4929 } 4930 4931 var showEvent = $__default["default"].Event(this.constructor.Event.SHOW); 4932 4933 if (this.isWithContent() && this._isEnabled) { 4934 $__default["default"](this.element).trigger(showEvent); 4935 var shadowRoot = Util.findShadowRoot(this.element); 4936 var isInTheDom = $__default["default"].contains(shadowRoot !== null ? shadowRoot : this.element.ownerDocument.documentElement, this.element); 4937 4938 if (showEvent.isDefaultPrevented() || !isInTheDom) { 4939 return; 4940 } 4941 4942 var tip = this.getTipElement(); 4943 var tipId = Util.getUID(this.constructor.NAME); 4944 tip.setAttribute('id', tipId); 4945 this.element.setAttribute('aria-describedby', tipId); 4946 this.setContent(); 4947 4948 if (this.config.animation) { 4949 $__default["default"](tip).addClass(CLASS_NAME_FADE$3); 4950 } 4951 4952 var placement = typeof this.config.placement === 'function' ? this.config.placement.call(this, tip, this.element) : this.config.placement; 4953 4954 var attachment = this._getAttachment(placement); 4955 4956 this.addAttachmentClass(attachment); 4957 4958 var container = this._getContainer(); 4959 4960 $__default["default"](tip).data(this.constructor.DATA_KEY, this); 4961 4962 if (!$__default["default"].contains(this.element.ownerDocument.documentElement, this.tip)) { 4963 $__default["default"](tip).appendTo(container); 4964 } 4965 4966 $__default["default"](this.element).trigger(this.constructor.Event.INSERTED); 4967 this._popper = new Popper__default["default"](this.element, tip, this._getPopperConfig(attachment)); 4968 $__default["default"](tip).addClass(CLASS_NAME_SHOW$3); 4969 $__default["default"](tip).addClass(this.config.customClass); // If this is a touch-enabled device we add extra 4970 // empty mouseover listeners to the body's immediate children; 4971 // only needed because of broken event delegation on iOS 4972 // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html 4973 4974 if ('ontouchstart' in document.documentElement) { 4975 $__default["default"](document.body).children().on('mouseover', null, $__default["default"].noop); 4976 } 4977 4978 var complete = function complete() { 4979 if (_this.config.animation) { 4980 _this._fixTransition(); 4981 } 4982 4983 var prevHoverState = _this._hoverState; 4984 _this._hoverState = null; 4985 $__default["default"](_this.element).trigger(_this.constructor.Event.SHOWN); 4986 4987 if (prevHoverState === HOVER_STATE_OUT) { 4988 _this._leave(null, _this); 4989 } 4990 }; 4991 4992 if ($__default["default"](this.tip).hasClass(CLASS_NAME_FADE$3)) { 4993 var transitionDuration = Util.getTransitionDurationFromElement(this.tip); 4994 $__default["default"](this.tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration); 4995 } else { 4996 complete(); 4997 } 4998 } 4999 }; 5000 5001 _proto.hide = function hide(callback) { 5002 var _this2 = this; 5003 5004 var tip = this.getTipElement(); 5005 var hideEvent = $__default["default"].Event(this.constructor.Event.HIDE); 5006 5007 var complete = function complete() { 5008 if (_this2._hoverState !== HOVER_STATE_SHOW && tip.parentNode) { 5009 tip.parentNode.removeChild(tip); 5010 } 5011 5012 _this2._cleanTipClass(); 5013 5014 _this2.element.removeAttribute('aria-describedby'); 5015 5016 $__default["default"](_this2.element).trigger(_this2.constructor.Event.HIDDEN); 5017 5018 if (_this2._popper !== null) { 5019 _this2._popper.destroy(); 5020 } 5021 5022 if (callback) { 5023 callback(); 5024 } 5025 }; 5026 5027 $__default["default"](this.element).trigger(hideEvent); 5028 5029 if (hideEvent.isDefaultPrevented()) { 5030 return; 5031 } 5032 5033 $__default["default"](tip).removeClass(CLASS_NAME_SHOW$3); // If this is a touch-enabled device we remove the extra 5034 // empty mouseover listeners we added for iOS support 5035 5036 if ('ontouchstart' in document.documentElement) { 5037 $__default["default"](document.body).children().off('mouseover', null, $__default["default"].noop); 5038 } 5039 5040 this._activeTrigger[TRIGGER_CLICK] = false; 5041 this._activeTrigger[TRIGGER_FOCUS] = false; 5042 this._activeTrigger[TRIGGER_HOVER] = false; 5043 5044 if ($__default["default"](this.tip).hasClass(CLASS_NAME_FADE$3)) { 5045 var transitionDuration = Util.getTransitionDurationFromElement(tip); 5046 $__default["default"](tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration); 5047 } else { 5048 complete(); 5049 } 5050 5051 this._hoverState = ''; 5052 }; 5053 5054 _proto.update = function update() { 5055 if (this._popper !== null) { 5056 this._popper.scheduleUpdate(); 5057 } 5058 } // Protected 5059 ; 5060 5061 _proto.isWithContent = function isWithContent() { 5062 return Boolean(this.getTitle()); 5063 }; 5064 5065 _proto.addAttachmentClass = function addAttachmentClass(attachment) { 5066 $__default["default"](this.getTipElement()).addClass(CLASS_PREFIX$1 + "-" + attachment); 5067 }; 5068 5069 _proto.getTipElement = function getTipElement() { 5070 this.tip = this.tip || $__default["default"](this.config.template)[0]; 5071 return this.tip; 5072 }; 5073 5074 _proto.setContent = function setContent() { 5075 var tip = this.getTipElement(); 5076 this.setElementContent($__default["default"](tip.querySelectorAll(SELECTOR_TOOLTIP_INNER)), this.getTitle()); 5077 $__default["default"](tip).removeClass(CLASS_NAME_FADE$3 + " " + CLASS_NAME_SHOW$3); 5078 }; 5079 5080 _proto.setElementContent = function setElementContent($element, content) { 5081 if (typeof content === 'object' && (content.nodeType || content.jquery)) { 5082 // Content is a DOM node or a jQuery 5083 if (this.config.html) { 5084 if (!$__default["default"](content).parent().is($element)) { 5085 $element.empty().append(content); 5086 } 5087 } else { 5088 $element.text($__default["default"](content).text()); 5089 } 5090 5091 return; 5092 } 5093 5094 if (this.config.html) { 5095 if (this.config.sanitize) { 5096 content = sanitizeHtml(content, this.config.whiteList, this.config.sanitizeFn); 5097 } 5098 5099 $element.html(content); 5100 } else { 5101 $element.text(content); 5102 } 5103 }; 5104 5105 _proto.getTitle = function getTitle() { 5106 var title = this.element.getAttribute('data-original-title'); 5107 5108 if (!title) { 5109 title = typeof this.config.title === 'function' ? this.config.title.call(this.element) : this.config.title; 5110 } 5111 5112 return title; 5113 } // Private 5114 ; 5115 5116 _proto._getPopperConfig = function _getPopperConfig(attachment) { 5117 var _this3 = this; 5118 5119 var defaultBsConfig = { 5120 placement: attachment, 5121 modifiers: { 5122 offset: this._getOffset(), 5123 flip: { 5124 behavior: this.config.fallbackPlacement 5125 }, 5126 arrow: { 5127 element: SELECTOR_ARROW 5128 }, 5129 preventOverflow: { 5130 boundariesElement: this.config.boundary 5131 } 5132 }, 5133 onCreate: function onCreate(data) { 5134 if (data.originalPlacement !== data.placement) { 5135 _this3._handlePopperPlacementChange(data); 5136 } 5137 }, 5138 onUpdate: function onUpdate(data) { 5139 return _this3._handlePopperPlacementChange(data); 5140 } 5141 }; 5142 return _extends({}, defaultBsConfig, this.config.popperConfig); 5143 }; 5144 5145 _proto._getOffset = function _getOffset() { 5146 var _this4 = this; 5147 5148 var offset = {}; 5149 5150 if (typeof this.config.offset === 'function') { 5151 offset.fn = function (data) { 5152 data.offsets = _extends({}, data.offsets, _this4.config.offset(data.offsets, _this4.element)); 5153 return data; 5154 }; 5155 } else { 5156 offset.offset = this.config.offset; 5157 } 5158 5159 return offset; 5160 }; 5161 5162 _proto._getContainer = function _getContainer() { 5163 if (this.config.container === false) { 5164 return document.body; 5165 } 5166 5167 if (Util.isElement(this.config.container)) { 5168 return $__default["default"](this.config.container); 5169 } 5170 5171 return $__default["default"](document).find(this.config.container); 5172 }; 5173 5174 _proto._getAttachment = function _getAttachment(placement) { 5175 return AttachmentMap[placement.toUpperCase()]; 5176 }; 5177 5178 _proto._setListeners = function _setListeners() { 5179 var _this5 = this; 5180 5181 var triggers = this.config.trigger.split(' '); 5182 triggers.forEach(function (trigger) { 5183 if (trigger === 'click') { 5184 $__default["default"](_this5.element).on(_this5.constructor.Event.CLICK, _this5.config.selector, function (event) { 5185 return _this5.toggle(event); 5186 }); 5187 } else if (trigger !== TRIGGER_MANUAL) { 5188 var eventIn = trigger === TRIGGER_HOVER ? _this5.constructor.Event.MOUSEENTER : _this5.constructor.Event.FOCUSIN; 5189 var eventOut = trigger === TRIGGER_HOVER ? _this5.constructor.Event.MOUSELEAVE : _this5.constructor.Event.FOCUSOUT; 5190 $__default["default"](_this5.element).on(eventIn, _this5.config.selector, function (event) { 5191 return _this5._enter(event); 5192 }).on(eventOut, _this5.config.selector, function (event) { 5193 return _this5._leave(event); 5194 }); 5195 } 5196 }); 5197 5198 this._hideModalHandler = function () { 5199 if (_this5.element) { 5200 _this5.hide(); 5201 } 5202 }; 5203 5204 $__default["default"](this.element).closest('.modal').on('hide.bs.modal', this._hideModalHandler); 5205 5206 if (this.config.selector) { 5207 this.config = _extends({}, this.config, { 5208 trigger: 'manual', 5209 selector: '' 5210 }); 5211 } else { 5212 this._fixTitle(); 5213 } 5214 }; 5215 5216 _proto._fixTitle = function _fixTitle() { 5217 var titleType = typeof this.element.getAttribute('data-original-title'); 5218 5219 if (this.element.getAttribute('title') || titleType !== 'string') { 5220 this.element.setAttribute('data-original-title', this.element.getAttribute('title') || ''); 5221 this.element.setAttribute('title', ''); 5222 } 5223 }; 5224 5225 _proto._enter = function _enter(event, context) { 5226 var dataKey = this.constructor.DATA_KEY; 5227 context = context || $__default["default"](event.currentTarget).data(dataKey); 5228 5229 if (!context) { 5230 context = new this.constructor(event.currentTarget, this._getDelegateConfig()); 5231 $__default["default"](event.currentTarget).data(dataKey, context); 5232 } 5233 5234 if (event) { 5235 context._activeTrigger[event.type === 'focusin' ? TRIGGER_FOCUS : TRIGGER_HOVER] = true; 5236 } 5237 5238 if ($__default["default"](context.getTipElement()).hasClass(CLASS_NAME_SHOW$3) || context._hoverState === HOVER_STATE_SHOW) { 5239 context._hoverState = HOVER_STATE_SHOW; 5240 return; 5241 } 5242 5243 clearTimeout(context._timeout); 5244 context._hoverState = HOVER_STATE_SHOW; 5245 5246 if (!context.config.delay || !context.config.delay.show) { 5247 context.show(); 5248 return; 5249 } 5250 5251 context._timeout = setTimeout(function () { 5252 if (context._hoverState === HOVER_STATE_SHOW) { 5253 context.show(); 5254 } 5255 }, context.config.delay.show); 5256 }; 5257 5258 _proto._leave = function _leave(event, context) { 5259 var dataKey = this.constructor.DATA_KEY; 5260 context = context || $__default["default"](event.currentTarget).data(dataKey); 5261 5262 if (!context) { 5263 context = new this.constructor(event.currentTarget, this._getDelegateConfig()); 5264 $__default["default"](event.currentTarget).data(dataKey, context); 5265 } 5266 5267 if (event) { 5268 context._activeTrigger[event.type === 'focusout' ? TRIGGER_FOCUS : TRIGGER_HOVER] = false; 5269 } 5270 5271 if (context._isWithActiveTrigger()) { 5272 return; 5273 } 5274 5275 clearTimeout(context._timeout); 5276 context._hoverState = HOVER_STATE_OUT; 5277 5278 if (!context.config.delay || !context.config.delay.hide) { 5279 context.hide(); 5280 return; 5281 } 5282 5283 context._timeout = setTimeout(function () { 5284 if (context._hoverState === HOVER_STATE_OUT) { 5285 context.hide(); 5286 } 5287 }, context.config.delay.hide); 5288 }; 5289 5290 _proto._isWithActiveTrigger = function _isWithActiveTrigger() { 5291 for (var trigger in this._activeTrigger) { 5292 if (this._activeTrigger[trigger]) { 5293 return true; 5294 } 5295 } 5296 5297 return false; 5298 }; 5299 5300 _proto._getConfig = function _getConfig(config) { 5301 var dataAttributes = $__default["default"](this.element).data(); 5302 Object.keys(dataAttributes).forEach(function (dataAttr) { 5303 if (DISALLOWED_ATTRIBUTES.indexOf(dataAttr) !== -1) { 5304 delete dataAttributes[dataAttr]; 5305 } 5306 }); 5307 config = _extends({}, this.constructor.Default, dataAttributes, typeof config === 'object' && config ? config : {}); 5308 5309 if (typeof config.delay === 'number') { 5310 config.delay = { 5311 show: config.delay, 5312 hide: config.delay 5313 }; 5314 } 5315 5316 if (typeof config.title === 'number') { 5317 config.title = config.title.toString(); 5318 } 5319 5320 if (typeof config.content === 'number') { 5321 config.content = config.content.toString(); 5322 } 5323 5324 Util.typeCheckConfig(NAME$4, config, this.constructor.DefaultType); 5325 5326 if (config.sanitize) { 5327 config.template = sanitizeHtml(config.template, config.whiteList, config.sanitizeFn); 5328 } 5329 5330 return config; 5331 }; 5332 5333 _proto._getDelegateConfig = function _getDelegateConfig() { 5334 var config = {}; 5335 5336 if (this.config) { 5337 for (var key in this.config) { 5338 if (this.constructor.Default[key] !== this.config[key]) { 5339 config[key] = this.config[key]; 5340 } 5341 } 5342 } 5343 5344 return config; 5345 }; 5346 5347 _proto._cleanTipClass = function _cleanTipClass() { 5348 var $tip = $__default["default"](this.getTipElement()); 5349 var tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX$1); 5350 5351 if (tabClass !== null && tabClass.length) { 5352 $tip.removeClass(tabClass.join('')); 5353 } 5354 }; 5355 5356 _proto._handlePopperPlacementChange = function _handlePopperPlacementChange(popperData) { 5357 this.tip = popperData.instance.popper; 5358 5359 this._cleanTipClass(); 5360 5361 this.addAttachmentClass(this._getAttachment(popperData.placement)); 5362 }; 5363 5364 _proto._fixTransition = function _fixTransition() { 5365 var tip = this.getTipElement(); 5366 var initConfigAnimation = this.config.animation; 5367 5368 if (tip.getAttribute('x-placement') !== null) { 5369 return; 5370 } 5371 5372 $__default["default"](tip).removeClass(CLASS_NAME_FADE$3); 5373 this.config.animation = false; 5374 this.hide(); 5375 this.show(); 5376 this.config.animation = initConfigAnimation; 5377 } // Static 5378 ; 5379 5380 Tooltip._jQueryInterface = function _jQueryInterface(config) { 5381 return this.each(function () { 5382 var $element = $__default["default"](this); 5383 var data = $element.data(DATA_KEY$4); 5384 5385 var _config = typeof config === 'object' && config; 5386 5387 if (!data && /dispose|hide/.test(config)) { 5388 return; 5389 } 5390 5391 if (!data) { 5392 data = new Tooltip(this, _config); 5393 $element.data(DATA_KEY$4, data); 5394 } 5395 5396 if (typeof config === 'string') { 5397 if (typeof data[config] === 'undefined') { 5398 throw new TypeError("No method named \"" + config + "\""); 5399 } 5400 5401 data[config](); 5402 } 5403 }); 5404 }; 5405 5406 _createClass(Tooltip, null, [{ 5407 key: "VERSION", 5408 get: function get() { 5409 return VERSION$4; 5410 } 5411 }, { 5412 key: "Default", 5413 get: function get() { 5414 return Default$3; 5415 } 5416 }, { 5417 key: "NAME", 5418 get: function get() { 5419 return NAME$4; 5420 } 5421 }, { 5422 key: "DATA_KEY", 5423 get: function get() { 5424 return DATA_KEY$4; 5425 } 5426 }, { 5427 key: "Event", 5428 get: function get() { 5429 return Event$1; 5430 } 5431 }, { 5432 key: "EVENT_KEY", 5433 get: function get() { 5434 return EVENT_KEY$4; 5435 } 5436 }, { 5437 key: "DefaultType", 5438 get: function get() { 5439 return DefaultType$3; 5440 } 5441 }]); 5442 5443 return Tooltip; 5444 }(); 5445 /** 5446 * jQuery 5447 */ 5448 5449 5450 $__default["default"].fn[NAME$4] = Tooltip._jQueryInterface; 5451 $__default["default"].fn[NAME$4].Constructor = Tooltip; 5452 5453 $__default["default"].fn[NAME$4].noConflict = function () { 5454 $__default["default"].fn[NAME$4] = JQUERY_NO_CONFLICT$4; 5455 return Tooltip._jQueryInterface; 5456 }; 5457 5458 /** 5459 * Constants 5460 */ 5461 5462 var NAME$3 = 'popover'; 5463 var VERSION$3 = '4.6.2'; 5464 var DATA_KEY$3 = 'bs.popover'; 5465 var EVENT_KEY$3 = "." + DATA_KEY$3; 5466 var JQUERY_NO_CONFLICT$3 = $__default["default"].fn[NAME$3]; 5467 var CLASS_PREFIX = 'bs-popover'; 5468 var BSCLS_PREFIX_REGEX = new RegExp("(^|\\s)" + CLASS_PREFIX + "\\S+", 'g'); 5469 var CLASS_NAME_FADE$2 = 'fade'; 5470 var CLASS_NAME_SHOW$2 = 'show'; 5471 var SELECTOR_TITLE = '.popover-header'; 5472 var SELECTOR_CONTENT = '.popover-body'; 5473 5474 var Default$2 = _extends({}, Tooltip.Default, { 5475 placement: 'right', 5476 trigger: 'click', 5477 content: '', 5478 template: '<div class="popover" role="tooltip">' + '<div class="arrow"></div>' + '<h3 class="popover-header"></h3>' + '<div class="popover-body"></div></div>' 5479 }); 5480 5481 var DefaultType$2 = _extends({}, Tooltip.DefaultType, { 5482 content: '(string|element|function)' 5483 }); 5484 5485 var Event = { 5486 HIDE: "hide" + EVENT_KEY$3, 5487 HIDDEN: "hidden" + EVENT_KEY$3, 5488 SHOW: "show" + EVENT_KEY$3, 5489 SHOWN: "shown" + EVENT_KEY$3, 5490 INSERTED: "inserted" + EVENT_KEY$3, 5491 CLICK: "click" + EVENT_KEY$3, 5492 FOCUSIN: "focusin" + EVENT_KEY$3, 5493 FOCUSOUT: "focusout" + EVENT_KEY$3, 5494 MOUSEENTER: "mouseenter" + EVENT_KEY$3, 5495 MOUSELEAVE: "mouseleave" + EVENT_KEY$3 5496 }; 5497 /** 5498 * Class definition 5499 */ 5500 5501 var Popover = /*#__PURE__*/function (_Tooltip) { 5502 _inheritsLoose(Popover, _Tooltip); 5503 5504 function Popover() { 5505 return _Tooltip.apply(this, arguments) || this; 5506 } 5507 5508 var _proto = Popover.prototype; 5509 5510 // Overrides 5511 _proto.isWithContent = function isWithContent() { 5512 return this.getTitle() || this._getContent(); 5513 }; 5514 5515 _proto.addAttachmentClass = function addAttachmentClass(attachment) { 5516 $__default["default"](this.getTipElement()).addClass(CLASS_PREFIX + "-" + attachment); 5517 }; 5518 5519 _proto.getTipElement = function getTipElement() { 5520 this.tip = this.tip || $__default["default"](this.config.template)[0]; 5521 return this.tip; 5522 }; 5523 5524 _proto.setContent = function setContent() { 5525 var $tip = $__default["default"](this.getTipElement()); // We use append for html objects to maintain js events 5526 5527 this.setElementContent($tip.find(SELECTOR_TITLE), this.getTitle()); 5528 5529 var content = this._getContent(); 5530 5531 if (typeof content === 'function') { 5532 content = content.call(this.element); 5533 } 5534 5535 this.setElementContent($tip.find(SELECTOR_CONTENT), content); 5536 $tip.removeClass(CLASS_NAME_FADE$2 + " " + CLASS_NAME_SHOW$2); 5537 } // Private 5538 ; 5539 5540 _proto._getContent = function _getContent() { 5541 return this.element.getAttribute('data-content') || this.config.content; 5542 }; 5543 5544 _proto._cleanTipClass = function _cleanTipClass() { 5545 var $tip = $__default["default"](this.getTipElement()); 5546 var tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX); 5547 5548 if (tabClass !== null && tabClass.length > 0) { 5549 $tip.removeClass(tabClass.join('')); 5550 } 5551 } // Static 5552 ; 5553 5554 Popover._jQueryInterface = function _jQueryInterface(config) { 5555 return this.each(function () { 5556 var data = $__default["default"](this).data(DATA_KEY$3); 5557 5558 var _config = typeof config === 'object' ? config : null; 5559 5560 if (!data && /dispose|hide/.test(config)) { 5561 return; 5562 } 5563 5564 if (!data) { 5565 data = new Popover(this, _config); 5566 $__default["default"](this).data(DATA_KEY$3, data); 5567 } 5568 5569 if (typeof config === 'string') { 5570 if (typeof data[config] === 'undefined') { 5571 throw new TypeError("No method named \"" + config + "\""); 5572 } 5573 5574 data[config](); 5575 } 5576 }); 5577 }; 5578 5579 _createClass(Popover, null, [{ 5580 key: "VERSION", 5581 get: // Getters 5582 function get() { 5583 return VERSION$3; 5584 } 5585 }, { 5586 key: "Default", 5587 get: function get() { 5588 return Default$2; 5589 } 5590 }, { 5591 key: "NAME", 5592 get: function get() { 5593 return NAME$3; 5594 } 5595 }, { 5596 key: "DATA_KEY", 5597 get: function get() { 5598 return DATA_KEY$3; 5599 } 5600 }, { 5601 key: "Event", 5602 get: function get() { 5603 return Event; 5604 } 5605 }, { 5606 key: "EVENT_KEY", 5607 get: function get() { 5608 return EVENT_KEY$3; 5609 } 5610 }, { 5611 key: "DefaultType", 5612 get: function get() { 5613 return DefaultType$2; 5614 } 5615 }]); 5616 5617 return Popover; 5618 }(Tooltip); 5619 /** 5620 * jQuery 5621 */ 5622 5623 5624 $__default["default"].fn[NAME$3] = Popover._jQueryInterface; 5625 $__default["default"].fn[NAME$3].Constructor = Popover; 5626 5627 $__default["default"].fn[NAME$3].noConflict = function () { 5628 $__default["default"].fn[NAME$3] = JQUERY_NO_CONFLICT$3; 5629 return Popover._jQueryInterface; 5630 }; 5631 5632 /** 5633 * Constants 5634 */ 5635 5636 var NAME$2 = 'scrollspy'; 5637 var VERSION$2 = '4.6.2'; 5638 var DATA_KEY$2 = 'bs.scrollspy'; 5639 var EVENT_KEY$2 = "." + DATA_KEY$2; 5640 var DATA_API_KEY$1 = '.data-api'; 5641 var JQUERY_NO_CONFLICT$2 = $__default["default"].fn[NAME$2]; 5642 var CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item'; 5643 var CLASS_NAME_ACTIVE$1 = 'active'; 5644 var EVENT_ACTIVATE = "activate" + EVENT_KEY$2; 5645 var EVENT_SCROLL = "scroll" + EVENT_KEY$2; 5646 var EVENT_LOAD_DATA_API = "load" + EVENT_KEY$2 + DATA_API_KEY$1; 5647 var METHOD_OFFSET = 'offset'; 5648 var METHOD_POSITION = 'position'; 5649 var SELECTOR_DATA_SPY = '[data-spy="scroll"]'; 5650 var SELECTOR_NAV_LIST_GROUP$1 = '.nav, .list-group'; 5651 var SELECTOR_NAV_LINKS = '.nav-link'; 5652 var SELECTOR_NAV_ITEMS = '.nav-item'; 5653 var SELECTOR_LIST_ITEMS = '.list-group-item'; 5654 var SELECTOR_DROPDOWN$1 = '.dropdown'; 5655 var SELECTOR_DROPDOWN_ITEMS = '.dropdown-item'; 5656 var SELECTOR_DROPDOWN_TOGGLE$1 = '.dropdown-toggle'; 5657 var Default$1 = { 5658 offset: 10, 5659 method: 'auto', 5660 target: '' 5661 }; 5662 var DefaultType$1 = { 5663 offset: 'number', 5664 method: 'string', 5665 target: '(string|element)' 5666 }; 5667 /** 5668 * Class definition 5669 */ 5670 5671 var ScrollSpy = /*#__PURE__*/function () { 5672 function ScrollSpy(element, config) { 5673 var _this = this; 5674 5675 this._element = element; 5676 this._scrollElement = element.tagName === 'BODY' ? window : element; 5677 this._config = this._getConfig(config); 5678 this._selector = this._config.target + " " + SELECTOR_NAV_LINKS + "," + (this._config.target + " " + SELECTOR_LIST_ITEMS + ",") + (this._config.target + " " + SELECTOR_DROPDOWN_ITEMS); 5679 this._offsets = []; 5680 this._targets = []; 5681 this._activeTarget = null; 5682 this._scrollHeight = 0; 5683 $__default["default"](this._scrollElement).on(EVENT_SCROLL, function (event) { 5684 return _this._process(event); 5685 }); 5686 this.refresh(); 5687 5688 this._process(); 5689 } // Getters 5690 5691 5692 var _proto = ScrollSpy.prototype; 5693 5694 // Public 5695 _proto.refresh = function refresh() { 5696 var _this2 = this; 5697 5698 var autoMethod = this._scrollElement === this._scrollElement.window ? METHOD_OFFSET : METHOD_POSITION; 5699 var offsetMethod = this._config.method === 'auto' ? autoMethod : this._config.method; 5700 var offsetBase = offsetMethod === METHOD_POSITION ? this._getScrollTop() : 0; 5701 this._offsets = []; 5702 this._targets = []; 5703 this._scrollHeight = this._getScrollHeight(); 5704 var targets = [].slice.call(document.querySelectorAll(this._selector)); 5705 targets.map(function (element) { 5706 var target; 5707 var targetSelector = Util.getSelectorFromElement(element); 5708 5709 if (targetSelector) { 5710 target = document.querySelector(targetSelector); 5711 } 5712 5713 if (target) { 5714 var targetBCR = target.getBoundingClientRect(); 5715 5716 if (targetBCR.width || targetBCR.height) { 5717 // TODO (fat): remove sketch reliance on jQuery position/offset 5718 return [$__default["default"](target)[offsetMethod]().top + offsetBase, targetSelector]; 5719 } 5720 } 5721 5722 return null; 5723 }).filter(Boolean).sort(function (a, b) { 5724 return a[0] - b[0]; 5725 }).forEach(function (item) { 5726 _this2._offsets.push(item[0]); 5727 5728 _this2._targets.push(item[1]); 5729 }); 5730 }; 5731 5732 _proto.dispose = function dispose() { 5733 $__default["default"].removeData(this._element, DATA_KEY$2); 5734 $__default["default"](this._scrollElement).off(EVENT_KEY$2); 5735 this._element = null; 5736 this._scrollElement = null; 5737 this._config = null; 5738 this._selector = null; 5739 this._offsets = null; 5740 this._targets = null; 5741 this._activeTarget = null; 5742 this._scrollHeight = null; 5743 } // Private 5744 ; 5745 5746 _proto._getConfig = function _getConfig(config) { 5747 config = _extends({}, Default$1, typeof config === 'object' && config ? config : {}); 5748 5749 if (typeof config.target !== 'string' && Util.isElement(config.target)) { 5750 var id = $__default["default"](config.target).attr('id'); 5751 5752 if (!id) { 5753 id = Util.getUID(NAME$2); 5754 $__default["default"](config.target).attr('id', id); 5755 } 5756 5757 config.target = "#" + id; 5758 } 5759 5760 Util.typeCheckConfig(NAME$2, config, DefaultType$1); 5761 return config; 5762 }; 5763 5764 _proto._getScrollTop = function _getScrollTop() { 5765 return this._scrollElement === window ? this._scrollElement.pageYOffset : this._scrollElement.scrollTop; 5766 }; 5767 5768 _proto._getScrollHeight = function _getScrollHeight() { 5769 return this._scrollElement.scrollHeight || Math.max(document.body.scrollHeight, document.documentElement.scrollHeight); 5770 }; 5771 5772 _proto._getOffsetHeight = function _getOffsetHeight() { 5773 return this._scrollElement === window ? window.innerHeight : this._scrollElement.getBoundingClientRect().height; 5774 }; 5775 5776 _proto._process = function _process() { 5777 var scrollTop = this._getScrollTop() + this._config.offset; 5778 5779 var scrollHeight = this._getScrollHeight(); 5780 5781 var maxScroll = this._config.offset + scrollHeight - this._getOffsetHeight(); 5782 5783 if (this._scrollHeight !== scrollHeight) { 5784 this.refresh(); 5785 } 5786 5787 if (scrollTop >= maxScroll) { 5788 var target = this._targets[this._targets.length - 1]; 5789 5790 if (this._activeTarget !== target) { 5791 this._activate(target); 5792 } 5793 5794 return; 5795 } 5796 5797 if (this._activeTarget && scrollTop < this._offsets[0] && this._offsets[0] > 0) { 5798 this._activeTarget = null; 5799 5800 this._clear(); 5801 5802 return; 5803 } 5804 5805 for (var i = this._offsets.length; i--;) { 5806 var isActiveTarget = this._activeTarget !== this._targets[i] && scrollTop >= this._offsets[i] && (typeof this._offsets[i + 1] === 'undefined' || scrollTop < this._offsets[i + 1]); 5807 5808 if (isActiveTarget) { 5809 this._activate(this._targets[i]); 5810 } 5811 } 5812 }; 5813 5814 _proto._activate = function _activate(target) { 5815 this._activeTarget = target; 5816 5817 this._clear(); 5818 5819 var queries = this._selector.split(',').map(function (selector) { 5820 return selector + "[data-target=\"" + target + "\"]," + selector + "[href=\"" + target + "\"]"; 5821 }); 5822 5823 var $link = $__default["default"]([].slice.call(document.querySelectorAll(queries.join(',')))); 5824 5825 if ($link.hasClass(CLASS_NAME_DROPDOWN_ITEM)) { 5826 $link.closest(SELECTOR_DROPDOWN$1).find(SELECTOR_DROPDOWN_TOGGLE$1).addClass(CLASS_NAME_ACTIVE$1); 5827 $link.addClass(CLASS_NAME_ACTIVE$1); 5828 } else { 5829 // Set triggered link as active 5830 $link.addClass(CLASS_NAME_ACTIVE$1); // Set triggered links parents as active 5831 // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor 5832 5833 $link.parents(SELECTOR_NAV_LIST_GROUP$1).prev(SELECTOR_NAV_LINKS + ", " + SELECTOR_LIST_ITEMS).addClass(CLASS_NAME_ACTIVE$1); // Handle special case when .nav-link is inside .nav-item 5834 5835 $link.parents(SELECTOR_NAV_LIST_GROUP$1).prev(SELECTOR_NAV_ITEMS).children(SELECTOR_NAV_LINKS).addClass(CLASS_NAME_ACTIVE$1); 5836 } 5837 5838 $__default["default"](this._scrollElement).trigger(EVENT_ACTIVATE, { 5839 relatedTarget: target 5840 }); 5841 }; 5842 5843 _proto._clear = function _clear() { 5844 [].slice.call(document.querySelectorAll(this._selector)).filter(function (node) { 5845 return node.classList.contains(CLASS_NAME_ACTIVE$1); 5846 }).forEach(function (node) { 5847 return node.classList.remove(CLASS_NAME_ACTIVE$1); 5848 }); 5849 } // Static 5850 ; 5851 5852 ScrollSpy._jQueryInterface = function _jQueryInterface(config) { 5853 return this.each(function () { 5854 var data = $__default["default"](this).data(DATA_KEY$2); 5855 5856 var _config = typeof config === 'object' && config; 5857 5858 if (!data) { 5859 data = new ScrollSpy(this, _config); 5860 $__default["default"](this).data(DATA_KEY$2, data); 5861 } 5862 5863 if (typeof config === 'string') { 5864 if (typeof data[config] === 'undefined') { 5865 throw new TypeError("No method named \"" + config + "\""); 5866 } 5867 5868 data[config](); 5869 } 5870 }); 5871 }; 5872 5873 _createClass(ScrollSpy, null, [{ 5874 key: "VERSION", 5875 get: function get() { 5876 return VERSION$2; 5877 } 5878 }, { 5879 key: "Default", 5880 get: function get() { 5881 return Default$1; 5882 } 5883 }]); 5884 5885 return ScrollSpy; 5886 }(); 5887 /** 5888 * Data API implementation 5889 */ 5890 5891 5892 $__default["default"](window).on(EVENT_LOAD_DATA_API, function () { 5893 var scrollSpys = [].slice.call(document.querySelectorAll(SELECTOR_DATA_SPY)); 5894 var scrollSpysLength = scrollSpys.length; 5895 5896 for (var i = scrollSpysLength; i--;) { 5897 var $spy = $__default["default"](scrollSpys[i]); 5898 5899 ScrollSpy._jQueryInterface.call($spy, $spy.data()); 5900 } 5901 }); 5902 /** 5903 * jQuery 5904 */ 5905 5906 $__default["default"].fn[NAME$2] = ScrollSpy._jQueryInterface; 5907 $__default["default"].fn[NAME$2].Constructor = ScrollSpy; 5908 5909 $__default["default"].fn[NAME$2].noConflict = function () { 5910 $__default["default"].fn[NAME$2] = JQUERY_NO_CONFLICT$2; 5911 return ScrollSpy._jQueryInterface; 5912 }; 5913 5914 /** 5915 * Constants 5916 */ 5917 5918 var NAME$1 = 'tab'; 5919 var VERSION$1 = '4.6.2'; 5920 var DATA_KEY$1 = 'bs.tab'; 5921 var EVENT_KEY$1 = "." + DATA_KEY$1; 5922 var DATA_API_KEY = '.data-api'; 5923 var JQUERY_NO_CONFLICT$1 = $__default["default"].fn[NAME$1]; 5924 var CLASS_NAME_DROPDOWN_MENU = 'dropdown-menu'; 5925 var CLASS_NAME_ACTIVE = 'active'; 5926 var CLASS_NAME_DISABLED = 'disabled'; 5927 var CLASS_NAME_FADE$1 = 'fade'; 5928 var CLASS_NAME_SHOW$1 = 'show'; 5929 var EVENT_HIDE$1 = "hide" + EVENT_KEY$1; 5930 var EVENT_HIDDEN$1 = "hidden" + EVENT_KEY$1; 5931 var EVENT_SHOW$1 = "show" + EVENT_KEY$1; 5932 var EVENT_SHOWN$1 = "shown" + EVENT_KEY$1; 5933 var EVENT_CLICK_DATA_API = "click" + EVENT_KEY$1 + DATA_API_KEY; 5934 var SELECTOR_DROPDOWN = '.dropdown'; 5935 var SELECTOR_NAV_LIST_GROUP = '.nav, .list-group'; 5936 var SELECTOR_ACTIVE = '.active'; 5937 var SELECTOR_ACTIVE_UL = '> li > .active'; 5938 var SELECTOR_DATA_TOGGLE = '[data-toggle="tab"], [data-toggle="pill"], [data-toggle="list"]'; 5939 var SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle'; 5940 var SELECTOR_DROPDOWN_ACTIVE_CHILD = '> .dropdown-menu .active'; 5941 /** 5942 * Class definition 5943 */ 5944 5945 var Tab = /*#__PURE__*/function () { 5946 function Tab(element) { 5947 this._element = element; 5948 } // Getters 5949 5950 5951 var _proto = Tab.prototype; 5952 5953 // Public 5954 _proto.show = function show() { 5955 var _this = this; 5956 5957 if (this._element.parentNode && this._element.parentNode.nodeType === Node.ELEMENT_NODE && $__default["default"](this._element).hasClass(CLASS_NAME_ACTIVE) || $__default["default"](this._element).hasClass(CLASS_NAME_DISABLED) || this._element.hasAttribute('disabled')) { 5958 return; 5959 } 5960 5961 var target; 5962 var previous; 5963 var listElement = $__default["default"](this._element).closest(SELECTOR_NAV_LIST_GROUP)[0]; 5964 var selector = Util.getSelectorFromElement(this._element); 5965 5966 if (listElement) { 5967 var itemSelector = listElement.nodeName === 'UL' || listElement.nodeName === 'OL' ? SELECTOR_ACTIVE_UL : SELECTOR_ACTIVE; 5968 previous = $__default["default"].makeArray($__default["default"](listElement).find(itemSelector)); 5969 previous = previous[previous.length - 1]; 5970 } 5971 5972 var hideEvent = $__default["default"].Event(EVENT_HIDE$1, { 5973 relatedTarget: this._element 5974 }); 5975 var showEvent = $__default["default"].Event(EVENT_SHOW$1, { 5976 relatedTarget: previous 5977 }); 5978 5979 if (previous) { 5980 $__default["default"](previous).trigger(hideEvent); 5981 } 5982 5983 $__default["default"](this._element).trigger(showEvent); 5984 5985 if (showEvent.isDefaultPrevented() || hideEvent.isDefaultPrevented()) { 5986 return; 5987 } 5988 5989 if (selector) { 5990 target = document.querySelector(selector); 5991 } 5992 5993 this._activate(this._element, listElement); 5994 5995 var complete = function complete() { 5996 var hiddenEvent = $__default["default"].Event(EVENT_HIDDEN$1, { 5997 relatedTarget: _this._element 5998 }); 5999 var shownEvent = $__default["default"].Event(EVENT_SHOWN$1, { 6000 relatedTarget: previous 6001 }); 6002 $__default["default"](previous).trigger(hiddenEvent); 6003 $__default["default"](_this._element).trigger(shownEvent); 6004 }; 6005 6006 if (target) { 6007 this._activate(target, target.parentNode, complete); 6008 } else { 6009 complete(); 6010 } 6011 }; 6012 6013 _proto.dispose = function dispose() { 6014 $__default["default"].removeData(this._element, DATA_KEY$1); 6015 this._element = null; 6016 } // Private 6017 ; 6018 6019 _proto._activate = function _activate(element, container, callback) { 6020 var _this2 = this; 6021 6022 var activeElements = container && (container.nodeName === 'UL' || container.nodeName === 'OL') ? $__default["default"](container).find(SELECTOR_ACTIVE_UL) : $__default["default"](container).children(SELECTOR_ACTIVE); 6023 var active = activeElements[0]; 6024 var isTransitioning = callback && active && $__default["default"](active).hasClass(CLASS_NAME_FADE$1); 6025 6026 var complete = function complete() { 6027 return _this2._transitionComplete(element, active, callback); 6028 }; 6029 6030 if (active && isTransitioning) { 6031 var transitionDuration = Util.getTransitionDurationFromElement(active); 6032 $__default["default"](active).removeClass(CLASS_NAME_SHOW$1).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration); 6033 } else { 6034 complete(); 6035 } 6036 }; 6037 6038 _proto._transitionComplete = function _transitionComplete(element, active, callback) { 6039 if (active) { 6040 $__default["default"](active).removeClass(CLASS_NAME_ACTIVE); 6041 var dropdownChild = $__default["default"](active.parentNode).find(SELECTOR_DROPDOWN_ACTIVE_CHILD)[0]; 6042 6043 if (dropdownChild) { 6044 $__default["default"](dropdownChild).removeClass(CLASS_NAME_ACTIVE); 6045 } 6046 6047 if (active.getAttribute('role') === 'tab') { 6048 active.setAttribute('aria-selected', false); 6049 } 6050 } 6051 6052 $__default["default"](element).addClass(CLASS_NAME_ACTIVE); 6053 6054 if (element.getAttribute('role') === 'tab') { 6055 element.setAttribute('aria-selected', true); 6056 } 6057 6058 Util.reflow(element); 6059 6060 if (element.classList.contains(CLASS_NAME_FADE$1)) { 6061 element.classList.add(CLASS_NAME_SHOW$1); 6062 } 6063 6064 var parent = element.parentNode; 6065 6066 if (parent && parent.nodeName === 'LI') { 6067 parent = parent.parentNode; 6068 } 6069 6070 if (parent && $__default["default"](parent).hasClass(CLASS_NAME_DROPDOWN_MENU)) { 6071 var dropdownElement = $__default["default"](element).closest(SELECTOR_DROPDOWN)[0]; 6072 6073 if (dropdownElement) { 6074 var dropdownToggleList = [].slice.call(dropdownElement.querySelectorAll(SELECTOR_DROPDOWN_TOGGLE)); 6075 $__default["default"](dropdownToggleList).addClass(CLASS_NAME_ACTIVE); 6076 } 6077 6078 element.setAttribute('aria-expanded', true); 6079 } 6080 6081 if (callback) { 6082 callback(); 6083 } 6084 } // Static 6085 ; 6086 6087 Tab._jQueryInterface = function _jQueryInterface(config) { 6088 return this.each(function () { 6089 var $this = $__default["default"](this); 6090 var data = $this.data(DATA_KEY$1); 6091 6092 if (!data) { 6093 data = new Tab(this); 6094 $this.data(DATA_KEY$1, data); 6095 } 6096 6097 if (typeof config === 'string') { 6098 if (typeof data[config] === 'undefined') { 6099 throw new TypeError("No method named \"" + config + "\""); 6100 } 6101 6102 data[config](); 6103 } 6104 }); 6105 }; 6106 6107 _createClass(Tab, null, [{ 6108 key: "VERSION", 6109 get: function get() { 6110 return VERSION$1; 6111 } 6112 }]); 6113 6114 return Tab; 6115 }(); 6116 /** 6117 * Data API implementation 6118 */ 6119 6120 6121 $__default["default"](document).on(EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) { 6122 event.preventDefault(); 6123 6124 Tab._jQueryInterface.call($__default["default"](this), 'show'); 6125 }); 6126 /** 6127 * jQuery 6128 */ 6129 6130 $__default["default"].fn[NAME$1] = Tab._jQueryInterface; 6131 $__default["default"].fn[NAME$1].Constructor = Tab; 6132 6133 $__default["default"].fn[NAME$1].noConflict = function () { 6134 $__default["default"].fn[NAME$1] = JQUERY_NO_CONFLICT$1; 6135 return Tab._jQueryInterface; 6136 }; 6137 6138 /** 6139 * Constants 6140 */ 6141 6142 var NAME = 'toast'; 6143 var VERSION = '4.6.2'; 6144 var DATA_KEY = 'bs.toast'; 6145 var EVENT_KEY = "." + DATA_KEY; 6146 var JQUERY_NO_CONFLICT = $__default["default"].fn[NAME]; 6147 var CLASS_NAME_FADE = 'fade'; 6148 var CLASS_NAME_HIDE = 'hide'; 6149 var CLASS_NAME_SHOW = 'show'; 6150 var CLASS_NAME_SHOWING = 'showing'; 6151 var EVENT_CLICK_DISMISS = "click.dismiss" + EVENT_KEY; 6152 var EVENT_HIDE = "hide" + EVENT_KEY; 6153 var EVENT_HIDDEN = "hidden" + EVENT_KEY; 6154 var EVENT_SHOW = "show" + EVENT_KEY; 6155 var EVENT_SHOWN = "shown" + EVENT_KEY; 6156 var SELECTOR_DATA_DISMISS = '[data-dismiss="toast"]'; 6157 var Default = { 6158 animation: true, 6159 autohide: true, 6160 delay: 500 6161 }; 6162 var DefaultType = { 6163 animation: 'boolean', 6164 autohide: 'boolean', 6165 delay: 'number' 6166 }; 6167 /** 6168 * Class definition 6169 */ 6170 6171 var Toast = /*#__PURE__*/function () { 6172 function Toast(element, config) { 6173 this._element = element; 6174 this._config = this._getConfig(config); 6175 this._timeout = null; 6176 6177 this._setListeners(); 6178 } // Getters 6179 6180 6181 var _proto = Toast.prototype; 6182 6183 // Public 6184 _proto.show = function show() { 6185 var _this = this; 6186 6187 var showEvent = $__default["default"].Event(EVENT_SHOW); 6188 $__default["default"](this._element).trigger(showEvent); 6189 6190 if (showEvent.isDefaultPrevented()) { 6191 return; 6192 } 6193 6194 this._clearTimeout(); 6195 6196 if (this._config.animation) { 6197 this._element.classList.add(CLASS_NAME_FADE); 6198 } 6199 6200 var complete = function complete() { 6201 _this._element.classList.remove(CLASS_NAME_SHOWING); 6202 6203 _this._element.classList.add(CLASS_NAME_SHOW); 6204 6205 $__default["default"](_this._element).trigger(EVENT_SHOWN); 6206 6207 if (_this._config.autohide) { 6208 _this._timeout = setTimeout(function () { 6209 _this.hide(); 6210 }, _this._config.delay); 6211 } 6212 }; 6213 6214 this._element.classList.remove(CLASS_NAME_HIDE); 6215 6216 Util.reflow(this._element); 6217 6218 this._element.classList.add(CLASS_NAME_SHOWING); 6219 6220 if (this._config.animation) { 6221 var transitionDuration = Util.getTransitionDurationFromElement(this._element); 6222 $__default["default"](this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration); 6223 } else { 6224 complete(); 6225 } 6226 }; 6227 6228 _proto.hide = function hide() { 6229 if (!this._element.classList.contains(CLASS_NAME_SHOW)) { 6230 return; 6231 } 6232 6233 var hideEvent = $__default["default"].Event(EVENT_HIDE); 6234 $__default["default"](this._element).trigger(hideEvent); 6235 6236 if (hideEvent.isDefaultPrevented()) { 6237 return; 6238 } 6239 6240 this._close(); 6241 }; 6242 6243 _proto.dispose = function dispose() { 6244 this._clearTimeout(); 6245 6246 if (this._element.classList.contains(CLASS_NAME_SHOW)) { 6247 this._element.classList.remove(CLASS_NAME_SHOW); 6248 } 6249 6250 $__default["default"](this._element).off(EVENT_CLICK_DISMISS); 6251 $__default["default"].removeData(this._element, DATA_KEY); 6252 this._element = null; 6253 this._config = null; 6254 } // Private 6255 ; 6256 6257 _proto._getConfig = function _getConfig(config) { 6258 config = _extends({}, Default, $__default["default"](this._element).data(), typeof config === 'object' && config ? config : {}); 6259 Util.typeCheckConfig(NAME, config, this.constructor.DefaultType); 6260 return config; 6261 }; 6262 6263 _proto._setListeners = function _setListeners() { 6264 var _this2 = this; 6265 6266 $__default["default"](this._element).on(EVENT_CLICK_DISMISS, SELECTOR_DATA_DISMISS, function () { 6267 return _this2.hide(); 6268 }); 6269 }; 6270 6271 _proto._close = function _close() { 6272 var _this3 = this; 6273 6274 var complete = function complete() { 6275 _this3._element.classList.add(CLASS_NAME_HIDE); 6276 6277 $__default["default"](_this3._element).trigger(EVENT_HIDDEN); 6278 }; 6279 6280 this._element.classList.remove(CLASS_NAME_SHOW); 6281 6282 if (this._config.animation) { 6283 var transitionDuration = Util.getTransitionDurationFromElement(this._element); 6284 $__default["default"](this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration); 6285 } else { 6286 complete(); 6287 } 6288 }; 6289 6290 _proto._clearTimeout = function _clearTimeout() { 6291 clearTimeout(this._timeout); 6292 this._timeout = null; 6293 } // Static 6294 ; 6295 6296 Toast._jQueryInterface = function _jQueryInterface(config) { 6297 return this.each(function () { 6298 var $element = $__default["default"](this); 6299 var data = $element.data(DATA_KEY); 6300 6301 var _config = typeof config === 'object' && config; 6302 6303 if (!data) { 6304 data = new Toast(this, _config); 6305 $element.data(DATA_KEY, data); 6306 } 6307 6308 if (typeof config === 'string') { 6309 if (typeof data[config] === 'undefined') { 6310 throw new TypeError("No method named \"" + config + "\""); 6311 } 6312 6313 data[config](this); 6314 } 6315 }); 6316 }; 6317 6318 _createClass(Toast, null, [{ 6319 key: "VERSION", 6320 get: function get() { 6321 return VERSION; 6322 } 6323 }, { 6324 key: "DefaultType", 6325 get: function get() { 6326 return DefaultType; 6327 } 6328 }, { 6329 key: "Default", 6330 get: function get() { 6331 return Default; 6332 } 6333 }]); 6334 6335 return Toast; 6336 }(); 6337 /** 6338 * jQuery 6339 */ 6340 6341 6342 $__default["default"].fn[NAME] = Toast._jQueryInterface; 6343 $__default["default"].fn[NAME].Constructor = Toast; 6344 6345 $__default["default"].fn[NAME].noConflict = function () { 6346 $__default["default"].fn[NAME] = JQUERY_NO_CONFLICT; 6347 return Toast._jQueryInterface; 6348 }; 6349 6350 exports.Alert = Alert; 6351 exports.Button = Button; 6352 exports.Carousel = Carousel; 6353 exports.Collapse = Collapse; 6354 exports.Dropdown = Dropdown; 6355 exports.Modal = Modal; 6356 exports.Popover = Popover; 6357 exports.Scrollspy = ScrollSpy; 6358 exports.Tab = Tab; 6359 exports.Toast = Toast; 6360 exports.Tooltip = Tooltip; 6361 exports.Util = Util; 6362 6363 Object.defineProperty(exports, '__esModule', { value: true }); 6364 6365})); 6366//# sourceMappingURL=bootstrap.js.map 6367 6368 6369/***/ }), 6370
vendor: 60,628 bytes, lines 6371-8038
6371/***/ "./node_modules/dinero.js/build/esm/dinero.js": 6372/*!****************************************************!*\ 6373 !*** ./node_modules/dinero.js/build/esm/dinero.js ***! 6374 \****************************************************/ 6375/*! exports provided: default */ 6376/***/ (function(module, __webpack_exports__, __webpack_require__) { 6377 6378"use strict"; 6379__webpack_require__.r(__webpack_exports__); 6380/** 6381 * Default values for all Dinero objects. 6382 * 6383 * You can override default values for all subsequent Dinero objects by changing them directly on the global `Dinero` object. 6384 * Existing instances won't be affected. 6385 * 6386 * @property {Number} defaultAmount - The default amount for new Dinero objects (see {@link module:Dinero Dinero} for format). 6387 * @property {String} defaultCurrency - The default currency for new Dinero objects (see {@link module:Dinero Dinero} for format). 6388 * @property {Number} defaultPrecision - The default precision for new Dinero objects (see {@link module:Dinero Dinero} for format). 6389 * 6390 * @example 6391 * // Will set currency to 'EUR' for all Dinero objects. 6392 * Dinero.defaultCurrency = 'EUR' 6393 * 6394 * @type {Object} 6395 */ 6396var Defaults = { 6397 defaultAmount: 0, 6398 defaultCurrency: 'USD', 6399 defaultPrecision: 2 6400}; 6401/** 6402 * Global settings for all Dinero objects. 6403 * 6404 * You can override global values for all subsequent Dinero objects by changing them directly on the global `Dinero` object. 6405 * Existing instances won't be affected. 6406 * 6407 * @property {String} globalLocale - The global locale for new Dinero objects (see {@link module:Dinero~setLocale setLocale} for format). 6408 * @property {String} globalFormat - The global format for new Dinero objects (see {@link module:Dinero~toFormat toFormat} for format). 6409 * @property {String} globalRoundingMode - The global rounding mode for new Dinero objects (see {@link module:Dinero~multiply multiply} or {@link module:Dinero~divide divide} for format). 6410 * @property {String} globalFormatRoundingMode - The global rounding mode to format new Dinero objects (see {@link module:Dinero~toFormat toFormat} or {@link module:Dinero~toRoundedUnit toRoundedUnit} for format). 6411 * @property {(String|Promise)} globalExchangeRatesApi.endpoint - The global exchange rate API endpoint for new Dinero objects, or the global promise that resolves to the exchanges rates (see {@link module:Dinero~convert convert} for format). 6412 * @property {String} globalExchangeRatesApi.propertyPath - The global exchange rate API property path for new Dinero objects (see {@link module:Dinero~convert convert} for format). 6413 * @property {Object} globalExchangeRatesApi.headers - The global exchange rate API headers for new Dinero objects (see {@link module:Dinero~convert convert} for format). 6414 * 6415 * @example 6416 * // Will set locale to 'fr-FR' for all Dinero objects. 6417 * Dinero.globalLocale = 'fr-FR' 6418 * @example 6419 * // Will set global exchange rate API parameters for all Dinero objects. 6420 * Dinero.globalExchangeRatesApi = { 6421 * endpoint: 'https://yourexchangerates.api/latest?base={{from}}', 6422 * propertyPath: 'data.rates.{{to}}', 6423 * headers: { 6424 * 'user-key': 'xxxxxxxxx' 6425 * } 6426 * } 6427 * 6428 * @type {Object} 6429 */ 6430 6431var Globals = { 6432 globalLocale: 'en-US', 6433 globalFormat: '$0,0.00', 6434 globalRoundingMode: 'HALF_EVEN', 6435 globalFormatRoundingMode: 'HALF_AWAY_FROM_ZERO', 6436 globalExchangeRatesApi: { 6437 endpoint: undefined, 6438 headers: undefined, 6439 propertyPath: undefined 6440 } 6441}; 6442 6443function _typeof(obj) { 6444 "@babel/helpers - typeof"; 6445 6446 if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { 6447 _typeof = function (obj) { 6448 return typeof obj; 6449 }; 6450 } else { 6451 _typeof = function (obj) { 6452 return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; 6453 }; 6454 } 6455 6456 return _typeof(obj); 6457} 6458 6459function _toArray(arr) { 6460 return _arrayWithHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableRest(); 6461} 6462 6463function _arrayWithHoles(arr) { 6464 if (Array.isArray(arr)) return arr; 6465} 6466 6467function _iterableToArray(iter) { 6468 if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); 6469} 6470 6471function _unsupportedIterableToArray(o, minLen) { 6472 if (!o) return; 6473 if (typeof o === "string") return _arrayLikeToArray(o, minLen); 6474 var n = Object.prototype.toString.call(o).slice(8, -1); 6475 if (n === "Object" && o.constructor) n = o.constructor.name; 6476 if (n === "Map" || n === "Set") return Array.from(o); 6477 if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); 6478} 6479 6480function _arrayLikeToArray(arr, len) { 6481 if (len == null || len > arr.length) len = arr.length; 6482 6483 for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; 6484 6485 return arr2; 6486} 6487 6488function _nonIterableRest() { 6489 throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); 6490} 6491 6492/** 6493 * Static methods for Dinero. 6494 * @ignore 6495 * 6496 * @type {Object} 6497 */ 6498var Static = { 6499 /** 6500 * Returns an array of Dinero objects, normalized to the same precision (the highest). 6501 * 6502 * @memberof module:Dinero 6503 * @method 6504 * 6505 * @param {Dinero[]} objects - An array of Dinero objects 6506 * 6507 * @example 6508 * // returns an array of Dinero objects 6509 * // both with a precision of 3 6510 * // and an amount of 1000 6511 * Dinero.normalizePrecision([ 6512 * Dinero({ amount: 100, precision: 2 }), 6513 * Dinero({ amount: 1000, precision: 3 }) 6514 * ]) 6515 * 6516 * @return {Dinero[]} 6517 */ 6518 normalizePrecision: function normalizePrecision(objects) { 6519 var highestPrecision = objects.reduce(function (a, b) { 6520 return Math.max(a.getPrecision(), b.getPrecision()); 6521 }); 6522 return objects.map(function (object) { 6523 return object.getPrecision() !== highestPrecision ? object.convertPrecision(highestPrecision) : object; 6524 }); 6525 }, 6526 6527 /** 6528 * Returns the smallest Dinero object from an array of Dinero objects 6529 * 6530 * @memberof module:Dinero 6531 * @method 6532 * 6533 * @param {Dinero[]} objects - An array of Dinero objects 6534 * 6535 * @example 6536 * // returns the smallest Dinero object with amount of 500 from an array of Dinero objects with different precisions 6537 * Dinero.minimum([ 6538 * Dinero({ amount: 500, precision: 3 }), 6539 * Dinero({ amount: 100, precision: 2 }) 6540 * ]) 6541 * @example 6542 * // returns the smallest Dinero object with amount of 50 from an array of Dinero objects 6543 * Dinero.minimum([ 6544 * Dinero({ amount: 50 }), 6545 * Dinero({ amount: 100 }) 6546 * ]) 6547 * 6548 * @return {Dinero[]} 6549 */ 6550 minimum: function minimum(objects) { 6551 var _objects = _toArray(objects), 6552 firstObject = _objects[0], 6553 tailObjects = _objects.slice(1); 6554 6555 var currentMinimum = firstObject; 6556 tailObjects.forEach(function (obj) { 6557 currentMinimum = currentMinimum.lessThan(obj) ? currentMinimum : obj; 6558 }); 6559 return currentMinimum; 6560 }, 6561 6562 /** 6563 * Returns the biggest Dinero object from an array of Dinero objects 6564 * 6565 * @memberof module:Dinero 6566 * @method 6567 * 6568 * @param {Dinero[]} objects - An array of Dinero objects 6569 * 6570 * @example 6571 * // returns the biggest Dinero object with amount of 20, from an array of Dinero objects with different precisions 6572 * Dinero.maximum([ 6573 * Dinero({ amount: 20, precision: 2 }), 6574 * Dinero({ amount: 150, precision: 3 }) 6575 * ]) 6576 * @example 6577 * // returns the biggest Dinero object with amount of 100, from an array of Dinero objects 6578 * Dinero.maximum([ 6579 * Dinero({ amount: 100 }), 6580 * Dinero({ amount: 50 }) 6581 * ]) 6582 * 6583 * @return {Dinero[]} 6584 */ 6585 maximum: function maximum(objects) { 6586 var _objects2 = _toArray(objects), 6587 firstObject = _objects2[0], 6588 tailObjects = _objects2.slice(1); 6589 6590 var currentMaximum = firstObject; 6591 tailObjects.forEach(function (obj) { 6592 currentMaximum = currentMaximum.greaterThan(obj) ? currentMaximum : obj; 6593 }); 6594 return currentMaximum; 6595 } 6596}; 6597 6598/** 6599 * Returns whether a value is numeric. 6600 * @ignore 6601 * 6602 * @param {} value - The value to test. 6603 * 6604 * @return {Boolean} 6605 */ 6606function isNumeric(value) { 6607 return !isNaN(parseInt(value)) && isFinite(value); 6608} 6609/** 6610 * Returns whether a value is a percentage. 6611 * @ignore 6612 * 6613 * @param {} percentage - The percentage to test. 6614 * 6615 * @return {Boolean} 6616 */ 6617 6618function isPercentage(percentage) { 6619 return isNumeric(percentage) && percentage <= 100 && percentage >= 0; 6620} 6621/** 6622 * Returns whether an array of ratios is valid. 6623 * @ignore 6624 * 6625 * @param {} ratios - The ratios to test. 6626 * 6627 * @return {Boolean} 6628 */ 6629 6630function areValidRatios(ratios) { 6631 return ratios.length > 0 && ratios.every(function (ratio) { 6632 return ratio >= 0; 6633 }) && ratios.some(function (ratio) { 6634 return ratio > 0; 6635 }); 6636} 6637/** 6638 * Returns whether a value is even. 6639 * @ignore 6640 * 6641 * @param {Number} value - The value to test. 6642 * 6643 * @return {Boolean} 6644 */ 6645 6646function isEven(value) { 6647 return value % 2 === 0; 6648} 6649/** 6650 * Returns whether a value is a float. 6651 * @ignore 6652 * 6653 * @param {} value - The value to test. 6654 * 6655 * @return {Boolean} 6656 */ 6657 6658function isFloat(value) { 6659 return isNumeric(value) && !Number.isInteger(value); 6660} 6661/** 6662 * Returns how many fraction digits a number has. 6663 * @ignore 6664 * 6665 * @param {Number} [number=0] - The number to test. 6666 * 6667 * @return {Number} 6668 */ 6669 6670function countFractionDigits() { 6671 var number = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; 6672 var stringRepresentation = number.toString(); 6673 6674 if (stringRepresentation.indexOf('e-') > 0) { 6675 // It's too small for a normal string representation, e.g. 1e-7 instead of 0.00000001 6676 return parseInt(stringRepresentation.split('e-')[1]); 6677 } else { 6678 var fractionDigits = stringRepresentation.split('.')[1]; 6679 return fractionDigits ? fractionDigits.length : 0; 6680 } 6681} 6682/** 6683 * Returns whether a number is half. 6684 * @ignore 6685 * 6686 * @param {Number} number - The number to test. 6687 * 6688 * @return {Number} 6689 */ 6690 6691function isHalf(number) { 6692 return Math.abs(number) % 1 === 0.5; 6693} 6694/** 6695 * Fetches a JSON resource. 6696 * @ignore 6697 * 6698 * @param {String} url - The resource to fetch. 6699 * @param {Object} [options.headers] - The headers to pass. 6700 * 6701 * @throws {Error} If `request.status` is lesser than 200 or greater or equal to 400. 6702 * @throws {Error} If network fails. 6703 * 6704 * @return {JSON} 6705 */ 6706 6707function getJSON(url) { 6708 var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; 6709 return new Promise(function (resolve, reject) { 6710 var request = Object.assign(new XMLHttpRequest(), { 6711 onreadystatechange: function onreadystatechange() { 6712 if (request.readyState === 4) { 6713 if (request.status >= 200 && request.status < 400) resolve(JSON.parse(request.responseText));else reject(new Error(request.statusText)); 6714 } 6715 }, 6716 onerror: function onerror() { 6717 reject(new Error('Network error')); 6718 } 6719 }); 6720 request.open('GET', url, true); 6721 setXHRHeaders(request, options.headers); 6722 request.send(); 6723 }); 6724} 6725/** 6726 * Returns an XHR object with attached headers. 6727 * @ignore 6728 * 6729 * @param {XMLHttpRequest} xhr - The XHR request to set headers to. 6730 * @param {Object} headers - The headers to set. 6731 * 6732 * @return {XMLHttpRequest} 6733 */ 6734 6735function setXHRHeaders(xhr) { 6736 var headers = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; 6737 6738 for (var header in headers) { 6739 xhr.setRequestHeader(header, headers[header]); 6740 } 6741 6742 return xhr; 6743} 6744/** 6745 * Returns whether a value is undefined. 6746 * @ignore 6747 * 6748 * @param {} value - The value to test. 6749 * 6750 * @return {Boolean} 6751 */ 6752 6753function isUndefined(value) { 6754 return typeof value === 'undefined'; 6755} 6756/** 6757 * Returns an object flattened to one level deep. 6758 * @ignore 6759 * 6760 * @param {Object} object - The object to flatten. 6761 * @param {String} separator - The separator to use between flattened nodes. 6762 * 6763 * @return {Object} 6764 */ 6765 6766function flattenObject(object) { 6767 var separator = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '.'; 6768 var finalObject = {}; 6769 Object.entries(object).forEach(function (item) { 6770 if (_typeof(item[1]) === 'object') { 6771 var flatObject = flattenObject(item[1]); 6772 Object.entries(flatObject).forEach(function (node) { 6773 finalObject[item[0] + separator + node[0]] = node[1]; 6774 }); 6775 } else { 6776 finalObject[item[0]] = item[1]; 6777 } 6778 }); 6779 return finalObject; 6780} 6781/** 6782 * Returns whether a value is thenable. 6783 * @ignore 6784 * 6785 * @param {} value - The value to test. 6786 * 6787 * @return {Boolean} 6788 */ 6789 6790function isThenable(value) { 6791 return Boolean(value) && (_typeof(value) === 'object' || typeof value === 'function') && typeof value.then === 'function'; 6792} 6793 6794function Calculator() { 6795 var floatMultiply = function floatMultiply(a, b) { 6796 var getFactor = function getFactor(number) { 6797 return Math.pow(10, countFractionDigits(number)); 6798 }; 6799 6800 var factor = Math.max(getFactor(a), getFactor(b)); 6801 return Math.round(a * factor) * Math.round(b * factor) / (factor * factor); 6802 }; 6803 6804 var roundingModes = { 6805 HALF_ODD: function HALF_ODD(number) { 6806 var rounded = Math.round(number); 6807 return isHalf(number) ? isEven(rounded) ? rounded - 1 : rounded : rounded; 6808 }, 6809 HALF_EVEN: function HALF_EVEN(number) { 6810 var rounded = Math.round(number); 6811 return isHalf(number) ? isEven(rounded) ? rounded : rounded - 1 : rounded; 6812 }, 6813 HALF_UP: function HALF_UP(number) { 6814 return Math.round(number); 6815 }, 6816 HALF_DOWN: function HALF_DOWN(number) { 6817 return isHalf(number) ? Math.floor(number) : Math.round(number); 6818 }, 6819 HALF_TOWARDS_ZERO: function HALF_TOWARDS_ZERO(number) { 6820 return isHalf(number) ? Math.sign(number) * Math.floor(Math.abs(number)) : Math.round(number); 6821 }, 6822 HALF_AWAY_FROM_ZERO: function HALF_AWAY_FROM_ZERO(number) { 6823 return isHalf(number) ? Math.sign(number) * Math.ceil(Math.abs(number)) : Math.round(number); 6824 }, 6825 DOWN: function DOWN(number) { 6826 return Math.floor(number); 6827 } 6828 }; 6829 return { 6830 /** 6831 * Returns the sum of two numbers. 6832 * @ignore 6833 * 6834 * @param {Number} a - The first number to add. 6835 * @param {Number} b - The second number to add. 6836 * 6837 * @return {Number} 6838 */ 6839 add: function add(a, b) { 6840 return a + b; 6841 }, 6842 6843 /** 6844 * Returns the difference of two numbers. 6845 * @ignore 6846 * 6847 * @param {Number} a - The first number to subtract. 6848 * @param {Number} b - The second number to subtract. 6849 * 6850 * @return {Number} 6851 */ 6852 subtract: function subtract(a, b) { 6853 return a - b; 6854 }, 6855 6856 /** 6857 * Returns the product of two numbers. 6858 * @ignore 6859 * 6860 * @param {Number} a - The first number to multiply. 6861 * @param {Number} b - The second number to multiply. 6862 * 6863 * @return {Number} 6864 */ 6865 multiply: function multiply(a, b) { 6866 return isFloat(a) || isFloat(b) ? floatMultiply(a, b) : a * b; 6867 }, 6868 6869 /** 6870 * Returns the quotient of two numbers. 6871 * @ignore 6872 * 6873 * @param {Number} a - The first number to divide. 6874 * @param {Number} b - The second number to divide. 6875 * 6876 * @return {Number} 6877 */ 6878 divide: function divide(a, b) { 6879 return a / b; 6880 }, 6881 6882 /** 6883 * Returns the remainder of two numbers. 6884 * @ignore 6885 * 6886 * @param {Number} a - The first number to divide. 6887 * @param {Number} b - The second number to divide. 6888 * 6889 * @return {Number} 6890 */ 6891 modulo: function modulo(a, b) { 6892 return a % b; 6893 }, 6894 6895 /** 6896 * Returns a rounded number based off a specific rounding mode. 6897 * @ignore 6898 * 6899 * @param {Number} number - The number to round. 6900 * @param {String} [roundingMode='HALF_EVEN'] - The rounding mode to use. 6901 * 6902 * @returns {Number} 6903 */ 6904 round: function round(number) { 6905 var roundingMode = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'HALF_EVEN'; 6906 return roundingModes[roundingMode](number); 6907 } 6908 }; 6909} 6910 6911var calculator = Calculator(); 6912function Format(format) { 6913 var matches = /^(?:(\$|USD)?0(?:(,)0)?(\.)?(0+)?|0(?:(,)0)?(\.)?(0+)?\s?(dollar)?)$/gm.exec(format); 6914 return { 6915 /** 6916 * Returns the matches. 6917 * @ignore 6918 * 6919 * @return {Array} 6920 */ 6921 getMatches: function getMatches() { 6922 return matches !== null ? matches.slice(1).filter(function (match) { 6923 return !isUndefined(match); 6924 }) : []; 6925 }, 6926 6927 /** 6928 * Returns the amount of fraction digits to display. 6929 * @ignore 6930 * 6931 * @return {Number} 6932 */ 6933 getMinimumFractionDigits: function getMinimumFractionDigits() { 6934 var decimalPosition = function decimalPosition(match) { 6935 return match === '.'; 6936 }; 6937 6938 return !isUndefined(this.getMatches().find(decimalPosition)) ? this.getMatches()[calculator.add(this.getMatches().findIndex(decimalPosition), 1)].split('').length : 0; 6939 }, 6940 6941 /** 6942 * Returns the currency display mode. 6943 * @ignore 6944 * 6945 * @return {String} 6946 */ 6947 getCurrencyDisplay: function getCurrencyDisplay() { 6948 var modes = { 6949 USD: 'code', 6950 dollar: 'name', 6951 $: 'symbol' 6952 }; 6953 return modes[this.getMatches().find(function (match) { 6954 return match === 'USD' || match === 'dollar' || match === '$'; 6955 })]; 6956 }, 6957 6958 /** 6959 * Returns the formatting style. 6960 * @ignore 6961 * 6962 * @return {String} 6963 */ 6964 getStyle: function getStyle() { 6965 return !isUndefined(this.getCurrencyDisplay(this.getMatches())) ? 'currency' : 'decimal'; 6966 }, 6967 6968 /** 6969 * Returns whether grouping should be used or not. 6970 * @ignore 6971 * 6972 * @return {Boolean} 6973 */ 6974 getUseGrouping: function getUseGrouping() { 6975 return !isUndefined(this.getMatches().find(function (match) { 6976 return match === ','; 6977 })); 6978 } 6979 }; 6980} 6981 6982function CurrencyConverter(options) { 6983 /* istanbul ignore next */ 6984 var mergeTags = function mergeTags() { 6985 var string = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ''; 6986 var tags = arguments.length > 1 ? arguments[1] : undefined; 6987 6988 for (var tag in tags) { 6989 string = string.replace("{{".concat(tag, "}}"), tags[tag]); 6990 } 6991 6992 return string; 6993 }; 6994 /* istanbul ignore next */ 6995 6996 6997 var getRatesFromRestApi = function getRatesFromRestApi(from, to) { 6998 return getJSON(mergeTags(options.endpoint, { 6999 from: from, 7000 to: to 7001 }), { 7002 headers: options.headers 7003 }); 7004 }; 7005 7006 return { 7007 /** 7008 * Returns the exchange rate. 7009 * @ignore 7010 * 7011 * @param {String} from - The base currency. 7012 * @param {String} to - The destination currency. 7013 * 7014 * @return {Promise} 7015 */ 7016 getExchangeRate: function getExchangeRate(from, to) { 7017 return (isThenable(options.endpoint) ? options.endpoint : getRatesFromRestApi(from, to)).then(function (data) { 7018 return flattenObject(data)[mergeTags(options.propertyPath, { 7019 from: from, 7020 to: to 7021 })]; 7022 }); 7023 } 7024 }; 7025} 7026 7027/** 7028 * Performs an assertion. 7029 * @ignore 7030 * 7031 * @param {Boolean} condition - The expression to assert. 7032 * @param {String} errorMessage - The message to throw if the assertion fails 7033 * @param {ErrorConstructor} [ErrorType=Error] - The error to throw if the assertion fails. 7034 * 7035 * @throws {Error} If `condition` returns `false`. 7036 */ 7037 7038function assert(condition, errorMessage) { 7039 var ErrorType = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : Error; 7040 if (!condition) throw new ErrorType(errorMessage); 7041} 7042/** 7043 * Asserts a value is a percentage. 7044 * @ignore 7045 * 7046 * @param {} percentage - The percentage to test. 7047 * 7048 * @throws {RangeError} If `percentage` is out of range. 7049 */ 7050 7051function assertPercentage(percentage) { 7052 assert(isPercentage(percentage), 'You must provide a numeric value between 0 and 100.', RangeError); 7053} 7054/** 7055 * Asserts an array of ratios is valid. 7056 * @ignore 7057 * 7058 * @param {} ratios - The ratios to test. 7059 * 7060 * @throws {TypeError} If `ratios` are invalid. 7061 */ 7062 7063function assertValidRatios(ratios) { 7064 assert(areValidRatios(ratios), 'You must provide a non-empty array of numeric values greater than 0.', TypeError); 7065} 7066/** 7067 * Asserts a value is an integer. 7068 * @ignore 7069 * 7070 * @param {} number - The value to test. 7071 * 7072 * @throws {TypeError} 7073 */ 7074 7075function assertInteger(number) { 7076 assert(Number.isInteger(number), 'You must provide an integer.', TypeError); 7077} 7078 7079var calculator$1 = Calculator(); 7080/** 7081 * A Dinero object is an immutable data structure representing a specific monetary value. 7082 * It comes with methods for creating, parsing, manipulating, testing, transforming and formatting them. 7083 * 7084 * A Dinero object has: 7085 * 7086 * * An `amount`, expressed in minor currency units, as an integer. 7087 * * A `currency`, expressed as an {@link https://en.wikipedia.org/wiki/ISO_4217#Active_codes ISO 4217 currency code}. 7088 * * A `precision`, expressed as an integer, to represent the number of decimal places in the `amount`. 7089 * This is helpful when you want to represent fractional minor currency units (e.g.: $10.4545). 7090 * You can also use it to represent a currency with a different [exponent](https://en.wikipedia.org/wiki/ISO_4217#Treatment_of_minor_currency_units_.28the_.22exponent.22.29) than `2` (e.g.: Iraqi dinar with 1000 fils in 1 dinar (exponent of `3`), Japanese yen with no sub-units (exponent of `0`)). 7091 * * An optional `locale` property that affects how output strings are formatted. 7092 * 7093 * Here's an overview of the public API: 7094 * 7095 * * **Access:** {@link module:Dinero~getAmount getAmount}, {@link module:Dinero~getCurrency getCurrency}, {@link module:Dinero~getLocale getLocale} and {@link module:Dinero~getPrecision getPrecision}. 7096 * * **Manipulation:** {@link module:Dinero~add add}, {@link module:Dinero~subtract subtract}, {@link module:Dinero~multiply multiply}, {@link module:Dinero~divide divide}, {@link module:Dinero~percentage percentage}, {@link module:Dinero~allocate allocate} and {@link module:Dinero~convert convert}. 7097 * * **Testing:** {@link module:Dinero~equalsTo equalsTo}, {@link module:Dinero~lessThan lessThan}, {@link module:Dinero~lessThanOrEqual lessThanOrEqual}, {@link module:Dinero~greaterThan greaterThan}, {@link module:Dinero~greaterThanOrEqual greaterThanOrEqual}, {@link module:Dinero~isZero isZero}, {@link module:Dinero~isPositive isPositive}, {@link module:Dinero~isNegative isNegative}, {@link module:Dinero~hasSubUnits hasSubUnits}, {@link module:Dinero~hasSameCurrency hasSameCurrency} and {@link module:Dinero~hasSameAmount hasSameAmount}. 7098 * * **Configuration:** {@link module:Dinero~setLocale setLocale}. 7099 * * **Conversion & formatting:** {@link module:Dinero~toFormat toFormat}, {@link module:Dinero~toUnit toUnit}, {@link module:Dinero~toRoundedUnit toRoundedUnit}, {@link module:Dinero~toObject toObject}, {@link module:Dinero~toJSON toJSON}, {@link module:Dinero~convertPrecision convertPrecision} and {@link module:Dinero.normalizePrecision normalizePrecision}. 7100 * 7101 * Dinero.js uses `number`s under the hood, so it's constrained by the [double-precision floating-point format](https://en.wikipedia.org/wiki/Double-precision_floating-point_format). Using values over [`Number.MAX_SAFE_INTEGER`](https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Objets_globaux/Number/MAX_SAFE_INTEGER) or below [`Number.MIN_SAFE_INTEGER`](https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Objets_globaux/Number/MIN_SAFE_INTEGER) will yield unpredictable results. 7102 * Same goes with performing calculations: once the internal `amount` value exceeds those limits, precision is no longer guaranteed. 7103 * 7104 * @module Dinero 7105 * @param {Number} [options.amount=0] - The amount in minor currency units (as an integer). 7106 * @param {String} [options.currency='USD'] - An ISO 4217 currency code. 7107 * @param {String} [options.precision=2] - The number of decimal places to represent. 7108 * 7109 * @throws {TypeError} If `amount` or `precision` is invalid. Integers over [`Number.MAX_SAFE_INTEGER`](https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Objets_globaux/Number/MAX_SAFE_INTEGER) or below [`Number.MIN_SAFE_INTEGER`](https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Objets_globaux/Number/MIN_SAFE_INTEGER) are considered valid, even though they can lead to imprecise amounts. 7110 * 7111 * @return {Object} 7112 */ 7113 7114var Dinero = function Dinero(options) { 7115 var _Object$assign = Object.assign({}, { 7116 amount: Dinero.defaultAmount, 7117 currency: Dinero.defaultCurrency, 7118 precision: Dinero.defaultPrecision 7119 }, options), 7120 amount = _Object$assign.amount, 7121 currency = _Object$assign.currency, 7122 precision = _Object$assign.precision; 7123 7124 assertInteger(amount); 7125 assertInteger(precision); 7126 var globalLocale = Dinero.globalLocale, 7127 globalFormat = Dinero.globalFormat, 7128 globalRoundingMode = Dinero.globalRoundingMode, 7129 globalFormatRoundingMode = Dinero.globalFormatRoundingMode; 7130 var globalExchangeRatesApi = Object.assign({}, Dinero.globalExchangeRatesApi); 7131 /** 7132 * Uses ES5 function notation so `this` can be passed through call, apply and bind 7133 * @ignore 7134 */ 7135 7136 var create = function create(options) { 7137 var obj = Object.assign({}, Object.assign({}, { 7138 amount: amount, 7139 currency: currency, 7140 precision: precision 7141 }, options), Object.assign({}, { 7142 locale: this.locale 7143 }, options)); 7144 return Object.assign(Dinero({ 7145 amount: obj.amount, 7146 currency: obj.currency, 7147 precision: obj.precision 7148 }), { 7149 locale: obj.locale 7150 }); 7151 }; 7152 /** 7153 * Uses ES5 function notation so `this` can be passed through call, apply and bind 7154 * @ignore 7155 */ 7156 7157 7158 var assertSameCurrency = function assertSameCurrency(comparator) { 7159 assert(this.hasSameCurrency(comparator), 'You must provide a Dinero instance with the same currency.', TypeError); 7160 }; 7161 7162 return { 7163 /** 7164 * Returns the amount. 7165 * 7166 * @example 7167 * // returns 500 7168 * Dinero({ amount: 500 }).getAmount() 7169 * 7170 * @return {Number} 7171 */ 7172 getAmount: function getAmount() { 7173 return amount; 7174 }, 7175 7176 /** 7177 * Returns the currency. 7178 * 7179 * @example 7180 * // returns 'EUR' 7181 * Dinero({ currency: 'EUR' }).getCurrency() 7182 * 7183 * @return {String} 7184 */ 7185 getCurrency: function getCurrency() { 7186 return currency; 7187 }, 7188 7189 /** 7190 * Returns the locale. 7191 * 7192 * @example 7193 * // returns 'fr-FR' 7194 * Dinero().setLocale('fr-FR').getLocale() 7195 * 7196 * @return {String} 7197 */ 7198 getLocale: function getLocale() { 7199 return this.locale || globalLocale; 7200 }, 7201 7202 /** 7203 * Returns a new Dinero object with an embedded locale. 7204 * 7205 * @param {String} newLocale - The new locale as an {@link http://tools.ietf.org/html/rfc5646 BCP 47 language tag}. 7206 * 7207 * @example 7208 * // Returns a Dinero object with locale 'ja-JP' 7209 * Dinero().setLocale('ja-JP') 7210 * 7211 * @return {Dinero} 7212 */ 7213 setLocale: function setLocale(newLocale) { 7214 return create.call(this, { 7215 locale: newLocale 7216 }); 7217 }, 7218 7219 /** 7220 * Returns the precision. 7221 * 7222 * @example 7223 * // returns 3 7224 * Dinero({ precision: 3 }).getPrecision() 7225 * 7226 * @return {Number} 7227 */ 7228 getPrecision: function getPrecision() { 7229 return precision; 7230 }, 7231 7232 /** 7233 * Returns a new Dinero object with a new precision and a converted amount. 7234 * 7235 * By default, fractional minor currency units are rounded using the **half to even** rule ([banker's rounding](http://wiki.c2.com/?BankersRounding)). 7236 * This can be necessary when you need to convert objects to a smaller precision. 7237 * 7238 * Rounding *can* lead to accuracy issues as you chain many times. Consider a minimal amount of subsequent conversions for safer results. 7239 * You can also specify a different `roundingMode` to better fit your needs. 7240 * 7241 * @param {Number} newPrecision - The new precision. 7242 * @param {String} [roundingMode='HALF_EVEN'] - The rounding mode to use: `'HALF_ODD'`, `'HALF_EVEN'`, `'HALF_UP'`, `'HALF_DOWN'`, `'HALF_TOWARDS_ZERO'`, `'HALF_AWAY_FROM_ZERO'` or `'DOWN'`. 7243 * 7244 * @example 7245 * // Returns a Dinero object with precision 3 and amount 1000 7246 * Dinero({ amount: 100, precision: 2 }).convertPrecision(3) 7247 * 7248 * @throws {TypeError} If `newPrecision` is invalid. 7249 * 7250 * @return {Dinero} 7251 */ 7252 convertPrecision: function convertPrecision(newPrecision) { 7253 var roundingMode = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : globalFormatRoundingMode; 7254 assertInteger(newPrecision); 7255 var precision = this.getPrecision(); 7256 var isNewPrecisionLarger = newPrecision > precision; 7257 var operation = isNewPrecisionLarger ? calculator$1.multiply : calculator$1.divide; 7258 var terms = isNewPrecisionLarger ? [newPrecision, precision] : [precision, newPrecision]; 7259 var factor = Math.pow(10, calculator$1.subtract.apply(calculator$1, terms)); 7260 return create.call(this, { 7261 amount: calculator$1.round(operation(this.getAmount(), factor), roundingMode), 7262 precision: newPrecision 7263 }); 7264 }, 7265 7266 /** 7267 * Returns a new Dinero object that represents the sum of this and an other Dinero object. 7268 * 7269 * If Dinero objects have a different `precision`, they will be first converted to the highest. 7270 * 7271 * @param {Dinero} addend - The Dinero object to add. 7272 * 7273 * @example 7274 * // returns a Dinero object with amount 600 7275 * Dinero({ amount: 400 }).add(Dinero({ amount: 200 })) 7276 * @example 7277 * // returns a Dinero object with amount 144545 and precision 4 7278 * Dinero({ amount: 400 }).add(Dinero({ amount: 104545, precision: 4 })) 7279 * 7280 * @throws {TypeError} If `addend` has a different currency. 7281 * 7282 * @return {Dinero} 7283 */ 7284 add: function add(addend) { 7285 assertSameCurrency.call(this, addend); 7286 var addends = Dinero.normalizePrecision([this, addend]); 7287 return create.call(this, { 7288 amount: calculator$1.add(addends[0].getAmount(), addends[1].getAmount()), 7289 precision: addends[0].getPrecision() 7290 }); 7291 }, 7292 7293 /** 7294 * Returns a new Dinero object that represents the difference of this and an other Dinero object. 7295 * 7296 * If Dinero objects have a different `precision`, they will be first converted to the highest. 7297 * 7298 * @param {Dinero} subtrahend - The Dinero object to subtract. 7299 * 7300 * @example 7301 * // returns a Dinero object with amount 200 7302 * Dinero({ amount: 400 }).subtract(Dinero({ amount: 200 })) 7303 * @example 7304 * // returns a Dinero object with amount 64545 and precision 4 7305 * Dinero({ amount: 104545, precision: 4 }).subtract(Dinero({ amount: 400 })) 7306 * 7307 * @throws {TypeError} If `subtrahend` has a different currency. 7308 * 7309 * @return {Dinero} 7310 */ 7311 subtract: function subtract(subtrahend) { 7312 assertSameCurrency.call(this, subtrahend); 7313 var subtrahends = Dinero.normalizePrecision([this, subtrahend]); 7314 return create.call(this, { 7315 amount: calculator$1.subtract(subtrahends[0].getAmount(), subtrahends[1].getAmount()), 7316 precision: subtrahends[0].getPrecision() 7317 }); 7318 }, 7319 7320 /** 7321 * Returns a new Dinero object that represents the multiplied value by the given factor. 7322 * 7323 * By default, fractional minor currency units are rounded using the **half to even** rule ([banker's rounding](http://wiki.c2.com/?BankersRounding)). 7324 * 7325 * Rounding *can* lead to accuracy issues as you chain many times. Consider a minimal amount of subsequent calculations for safer results. 7326 * You can also specify a different `roundingMode` to better fit your needs. 7327 * 7328 * @param {Number} multiplier - The factor to multiply by. 7329 * @param {String} [roundingMode='HALF_EVEN'] - The rounding mode to use: `'HALF_ODD'`, `'HALF_EVEN'`, `'HALF_UP'`, `'HALF_DOWN'`, `'HALF_TOWARDS_ZERO'`, `'HALF_AWAY_FROM_ZERO'` or `'DOWN'`. 7330 * 7331 * @example 7332 * // returns a Dinero object with amount 1600 7333 * Dinero({ amount: 400 }).multiply(4) 7334 * @example 7335 * // returns a Dinero object with amount 800 7336 * Dinero({ amount: 400 }).multiply(2.001) 7337 * @example 7338 * // returns a Dinero object with amount 801 7339 * Dinero({ amount: 400 }).multiply(2.00125, 'HALF_UP') 7340 * 7341 * @return {Dinero} 7342 */ 7343 multiply: function multiply(multiplier) { 7344 var roundingMode = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : globalRoundingMode; 7345 return create.call(this, { 7346 amount: calculator$1.round(calculator$1.multiply(this.getAmount(), multiplier), roundingMode) 7347 }); 7348 }, 7349 7350 /** 7351 * Returns a new Dinero object that represents the divided value by the given factor. 7352 * 7353 * By default, fractional minor currency units are rounded using the **half to even** rule ([banker's rounding](http://wiki.c2.com/?BankersRounding)). 7354 * 7355 * Rounding *can* lead to accuracy issues as you chain many times. Consider a minimal amount of subsequent calculations for safer results. 7356 * You can also specify a different `roundingMode` to better fit your needs. 7357 * 7358 * As rounding is applied, precision may be lost in the process. If you want to accurately split a Dinero object, use {@link module:Dinero~allocate allocate} instead. 7359 * 7360 * @param {Number} divisor - The factor to divide by. 7361 * @param {String} [roundingMode='HALF_EVEN'] - The rounding mode to use: `'HALF_ODD'`, `'HALF_EVEN'`, `'HALF_UP'`, `'HALF_DOWN'`, `'HALF_TOWARDS_ZERO'`, `'HALF_AWAY_FROM_ZERO'` or `'DOWN'`. 7362 * 7363 * @example 7364 * // returns a Dinero object with amount 100 7365 * Dinero({ amount: 400 }).divide(4) 7366 * @example 7367 * // returns a Dinero object with amount 52 7368 * Dinero({ amount: 105 }).divide(2) 7369 * @example 7370 * // returns a Dinero object with amount 53 7371 * Dinero({ amount: 105 }).divide(2, 'HALF_UP') 7372 * 7373 * @return {Dinero} 7374 */ 7375 divide: function divide(divisor) { 7376 var roundingMode = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : globalRoundingMode; 7377 return create.call(this, { 7378 amount: calculator$1.round(calculator$1.divide(this.getAmount(), divisor), roundingMode) 7379 }); 7380 }, 7381 7382 /** 7383 * Returns a new Dinero object that represents a percentage of this. 7384 * 7385 * As rounding is applied, precision may be lost in the process. If you want to accurately split a Dinero object, use {@link module:Dinero~allocate allocate} instead. 7386 * 7387 * @param {Number} percentage - The percentage to extract (between 0 and 100). 7388 * @param {String} [roundingMode='HALF_EVEN'] - The rounding mode to use: `'HALF_ODD'`, `'HALF_EVEN'`, `'HALF_UP'`, `'HALF_DOWN'`, `'HALF_TOWARDS_ZERO'`, `'HALF_AWAY_FROM_ZERO'` or `'DOWN'`. 7389 * 7390 * @example 7391 * // returns a Dinero object with amount 5000 7392 * Dinero({ amount: 10000 }).percentage(50) 7393 * @example 7394 * // returns a Dinero object with amount 29 7395 * Dinero({ amount: 57 }).percentage(50, "HALF_ODD") 7396 * 7397 * @throws {RangeError} If `percentage` is out of range. 7398 * 7399 * @return {Dinero} 7400 */ 7401 percentage: function percentage(_percentage) { 7402 var roundingMode = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : globalRoundingMode; 7403 assertPercentage(_percentage); 7404 return this.multiply(calculator$1.divide(_percentage, 100), roundingMode); 7405 }, 7406 7407 /** 7408 * Allocates the amount of a Dinero object according to a list of ratios. 7409 * 7410 * Sometimes you need to split monetary values but percentages can't cut it without adding or losing pennies. 7411 * A good example is invoicing: let's say you need to bill $1,000.03 and you want a 50% downpayment. 7412 * If you use {@link module:Dinero~percentage percentage}, you'll get an accurate Dinero object but the amount won't be billable: you can't split a penny. 7413 * If you round it, you'll bill a penny extra. 7414 * With {@link module:Dinero~allocate allocate}, you can split a monetary amount then distribute the remainder as evenly as possible. 7415 * 7416 * You can use percentage style or ratio style for `ratios`: `[25, 75]` and `[1, 3]` will do the same thing. 7417 * 7418 * Since v1.8.0, you can use zero ratios (such as [0, 50, 50]). If there's a remainder to distribute, zero ratios are skipped and return a Dinero object with amount zero. 7419 * 7420 * @param {Number[]} ratios - The ratios to allocate the money to. 7421 * 7422 * @example 7423 * // returns an array of two Dinero objects 7424 * // the first one with an amount of 502 7425 * // the second one with an amount of 501 7426 * Dinero({ amount: 1003 }).allocate([50, 50]) 7427 * @example 7428 * // returns an array of two Dinero objects 7429 * // the first one with an amount of 25 7430 * // the second one with an amount of 75 7431 * Dinero({ amount: 100 }).allocate([1, 3]) 7432 * @example 7433 * // since version 1.8.0 7434 * // returns an array of three Dinero objects 7435 * // the first one with an amount of 0 7436 * // the second one with an amount of 502 7437 * // the third one with an amount of 501 7438 * Dinero({ amount: 1003 }).allocate([0, 50, 50]) 7439 * 7440 * @throws {TypeError} If ratios are invalid. 7441 * 7442 * @return {Dinero[]} 7443 */ 7444 allocate: function allocate(ratios) { 7445 var _this = this; 7446 7447 assertValidRatios(ratios); 7448 var total = ratios.reduce(function (a, b) { 7449 return calculator$1.add(a, b); 7450 }); 7451 var remainder = this.getAmount(); 7452 var shares = ratios.map(function (ratio) { 7453 var share = Math.floor(calculator$1.divide(calculator$1.multiply(_this.getAmount(), ratio), total)); 7454 remainder = calculator$1.subtract(remainder, share); 7455 return create.call(_this, { 7456 amount: share 7457 }); 7458 }); 7459 var i = 0; 7460 7461 while (remainder > 0) { 7462 if (ratios[i] > 0) { 7463 shares[i] = shares[i].add(create.call(this, { 7464 amount: 1 7465 })); 7466 remainder = calculator$1.subtract(remainder, 1); 7467 } 7468 7469 i += 1; 7470 } 7471 7472 return shares; 7473 }, 7474 7475 /** 7476 * Returns a Promise containing a new Dinero object converted to another currency. 7477 * 7478 * You have two options to provide the exchange rates: 7479 * 7480 * 1. **Use an exchange rate REST API, and let Dinero handle the fetching and conversion.** 7481 * This is a simple option if you have access to an exchange rate REST API and want Dinero to do the rest. 7482 * 2. **Fetch the exchange rates on your own and provide them directly.** 7483 * This is useful if you're fetching your rates from somewhere else (a file, a database), use a different protocol or query language than REST (SOAP, GraphQL) or want to fetch rates once and cache them instead of making new requests every time. 7484 * 7485 * **If you want to use a REST API**, you must provide a third-party endpoint yourself. Dinero doesn't come bundled with an exchange rates endpoint. 7486 * 7487 * Here are some exchange rate APIs you can use: 7488 * 7489 * * [Fixer](https://fixer.io) 7490 * * [Open Exchange Rates](https://openexchangerates.org) 7491 * * [Coinbase](https://api.coinbase.com/v2/exchange-rates) 7492 * * More [foreign](https://github.com/toddmotto/public-apis#currency-exchange) and [crypto](https://github.com/toddmotto/public-apis#cryptocurrency) exchange rate APIs. 7493 * 7494 * **If you want to fetch your own rates and provide them directly**, you need to pass a promise that resolves to the exchanges rates. 7495 * 7496 * In both cases, you need to specify at least: 7497 * 7498 * * a **destination currency**: the currency in which you want to convert your Dinero object. You can specify it with `currency`. 7499 * * an **endpoint**: the API URL to query exchange rates, with parameters, or a promise that resolves to the exchange rates. You can specify it with `options.endpoint`. 7500 * * a **property path**: the path to access the wanted rate in your API's JSON response (or the custom promise's payload). For example, with a response of: 7501 * ```json 7502 * { 7503 * "data": { 7504 * "base": "USD", 7505 * "destination": "EUR", 7506 * "rate": "0.827728919" 7507 * } 7508 * } 7509 * ``` 7510 * Then the property path is `'data.rate'`. You can specify it with `options.propertyPath`. 7511 * 7512 * The base currency (the one of your Dinero object) and the destination currency can be used as "merge tags" with the mustache syntax, respectively `{{from}}` and `{{to}}`. 7513 * You can use these tags to refer to these values in `options.endpoint` and `options.propertyPath`. 7514 * 7515 * For example, if you need to specify the base currency as a query parameter, you can do the following: 7516 * 7517 * ```js 7518 * { 7519 * endpoint: 'https://yourexchangerates.api/latest?base={{from}}' 7520 * } 7521 * ``` 7522 * 7523 * @param {String} currency - The destination currency, expressed as an {@link https://en.wikipedia.org/wiki/ISO_4217#Active_codes ISO 4217 currency code}. 7524 * @param {(String|Promise)} options.endpoint - The API endpoint to retrieve exchange rates. You can substitute this with a promise that resolves to the exchanges rates if you already have them. 7525 * @param {String} [options.propertyPath='rates.{{to}}'] - The property path to the rate. 7526 * @param {Object} [options.headers] - The HTTP headers to provide, if needed. 7527 * @param {String} [options.roundingMode='HALF_EVEN'] - The rounding mode to use: `'HALF_ODD'`, `'HALF_EVEN'`, `'HALF_UP'`, `'HALF_DOWN'`, `'HALF_TOWARDS_ZERO'`, `'HALF_AWAY_FROM_ZERO'` or `'DOWN'`. 7528 * 7529 * @example 7530 * // your global API parameters 7531 * Dinero.globalExchangeRatesApi = { ... } 7532 * 7533 * // returns a Promise containing a Dinero object with the destination currency 7534 * // and the initial amount converted to the new currency. 7535 * Dinero({ amount: 500 }).convert('EUR') 7536 * @example 7537 * // returns a Promise containing a Dinero object, 7538 * // with specific API parameters and rounding mode for this specific instance. 7539 * Dinero({ amount: 500 }) 7540 * .convert('XBT', { 7541 * endpoint: 'https://yourexchangerates.api/latest?base={{from}}', 7542 * propertyPath: 'data.rates.{{to}}', 7543 * headers: { 7544 * 'user-key': 'xxxxxxxxx' 7545 * }, 7546 * roundingMode: 'HALF_UP' 7547 * }) 7548 * @example 7549 * // usage with exchange rates provided as a custom promise 7550 * // using the default `propertyPath` format (so it doesn't have to be specified) 7551 * const rates = { 7552 * rates: { 7553 * EUR: 0.81162 7554 * } 7555 * } 7556 * 7557 * Dinero({ amount: 500 }) 7558 * .convert('EUR', { 7559 * endpoint: new Promise(resolve => resolve(rates)) 7560 * }) 7561 * @example 7562 * // usage with Promise.prototype.then and Promise.prototype.catch 7563 * Dinero({ amount: 500 }) 7564 * .convert('EUR') 7565 * .then(dinero => { 7566 * dinero.getCurrency() // returns 'EUR' 7567 * }) 7568 * .catch(err => { 7569 * // handle errors 7570 * }) 7571 * @example 7572 * // usage with async/await 7573 * (async () => { 7574 * const price = await Dinero({ amount: 500 }).convert('EUR') 7575 * price.getCurrency() // returns 'EUR' 7576 * })() 7577 * 7578 * @return {Promise} 7579 */ 7580 convert: function convert(currency) { 7581 var _this2 = this; 7582 7583 var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}, 7584 _ref$endpoint = _ref.endpoint, 7585 endpoint = _ref$endpoint === void 0 ? globalExchangeRatesApi.endpoint : _ref$endpoint, 7586 _ref$propertyPath = _ref.propertyPath, 7587 propertyPath = _ref$propertyPath === void 0 ? globalExchangeRatesApi.propertyPath || 'rates.{{to}}' : _ref$propertyPath, 7588 _ref$headers = _ref.headers, 7589 headers = _ref$headers === void 0 ? globalExchangeRatesApi.headers : _ref$headers, 7590 _ref$roundingMode = _ref.roundingMode, 7591 roundingMode = _ref$roundingMode === void 0 ? globalRoundingMode : _ref$roundingMode; 7592 7593 var options = Object.assign({}, { 7594 endpoint: endpoint, 7595 propertyPath: propertyPath, 7596 headers: headers, 7597 roundingMode: roundingMode 7598 }); 7599 return CurrencyConverter(options).getExchangeRate(this.getCurrency(), currency).then(function (rate) { 7600 assert(!isUndefined(rate), "No rate was found for the destination currency \"".concat(currency, "\"."), TypeError); 7601 return create.call(_this2, { 7602 amount: calculator$1.round(calculator$1.multiply(_this2.getAmount(), parseFloat(rate)), options.roundingMode), 7603 currency: currency 7604 }); 7605 }); 7606 }, 7607 7608 /** 7609 * Checks whether the value represented by this object equals to the other. 7610 * 7611 * @param {Dinero} comparator - The Dinero object to compare to. 7612 * 7613 * @example 7614 * // returns true 7615 * Dinero({ amount: 500, currency: 'EUR' }).equalsTo(Dinero({ amount: 500, currency: 'EUR' })) 7616 * @example 7617 * // returns false 7618 * Dinero({ amount: 500, currency: 'EUR' }).equalsTo(Dinero({ amount: 800, currency: 'EUR' })) 7619 * @example 7620 * // returns false 7621 * Dinero({ amount: 500, currency: 'USD' }).equalsTo(Dinero({ amount: 500, currency: 'EUR' })) 7622 * @example 7623 * // returns false 7624 * Dinero({ amount: 500, currency: 'USD' }).equalsTo(Dinero({ amount: 800, currency: 'EUR' })) 7625 * @example 7626 * // returns true 7627 * Dinero({ amount: 1000, currency: 'EUR', precision: 2 }).equalsTo(Dinero({ amount: 10000, currency: 'EUR', precision: 3 })) 7628 * @example 7629 * // returns false 7630 * Dinero({ amount: 10000, currency: 'EUR', precision: 2 }).equalsTo(Dinero({ amount: 10000, currency: 'EUR', precision: 3 })) 7631 * 7632 * @return {Boolean} 7633 */ 7634 equalsTo: function equalsTo(comparator) { 7635 return this.hasSameAmount(comparator) && this.hasSameCurrency(comparator); 7636 }, 7637 7638 /** 7639 * Checks whether the value represented by this object is less than the other. 7640 * 7641 * @param {Dinero} comparator - The Dinero object to compare to. 7642 * 7643 * @example 7644 * // returns true 7645 * Dinero({ amount: 500 }).lessThan(Dinero({ amount: 800 })) 7646 * @example 7647 * // returns false 7648 * Dinero({ amount: 800 }).lessThan(Dinero({ amount: 500 })) 7649 * @example 7650 * // returns true 7651 * Dinero({ amount: 5000, precision: 3 }).lessThan(Dinero({ amount: 800 })) 7652 * @example 7653 * // returns false 7654 * Dinero({ amount: 800 }).lessThan(Dinero({ amount: 5000, precision: 3 })) 7655 * 7656 * @throws {TypeError} If `comparator` has a different currency. 7657 * 7658 * @return {Boolean} 7659 */ 7660 lessThan: function lessThan(comparator) { 7661 assertSameCurrency.call(this, comparator); 7662 var comparators = Dinero.normalizePrecision([this, comparator]); 7663 return comparators[0].getAmount() < comparators[1].getAmount(); 7664 }, 7665 7666 /** 7667 * Checks whether the value represented by this object is less than or equal to the other. 7668 * 7669 * @param {Dinero} comparator - The Dinero object to compare to. 7670 * 7671 * @example 7672 * // returns true 7673 * Dinero({ amount: 500 }).lessThanOrEqual(Dinero({ amount: 800 })) 7674 * @example 7675 * // returns true 7676 * Dinero({ amount: 500 }).lessThanOrEqual(Dinero({ amount: 500 })) 7677 * @example 7678 * // returns false 7679 * Dinero({ amount: 500 }).lessThanOrEqual(Dinero({ amount: 300 })) 7680 * @example 7681 * // returns true 7682 * Dinero({ amount: 5000, precision: 3 }).lessThanOrEqual(Dinero({ amount: 800 })) 7683 * @example 7684 * // returns true 7685 * Dinero({ amount: 5000, precision: 3 }).lessThanOrEqual(Dinero({ amount: 500 })) 7686 * @example 7687 * // returns false 7688 * Dinero({ amount: 800 }).lessThanOrEqual(Dinero({ amount: 5000, precision: 3 })) 7689 * 7690 * @throws {TypeError} If `comparator` has a different currency. 7691 * 7692 * @return {Boolean} 7693 */ 7694 lessThanOrEqual: function lessThanOrEqual(comparator) { 7695 assertSameCurrency.call(this, comparator); 7696 var comparators = Dinero.normalizePrecision([this, comparator]); 7697 return comparators[0].getAmount() <= comparators[1].getAmount(); 7698 }, 7699 7700 /** 7701 * Checks whether the value represented by this object is greater than the other. 7702 * 7703 * @param {Dinero} comparator - The Dinero object to compare to. 7704 * 7705 * @example 7706 * // returns false 7707 * Dinero({ amount: 500 }).greaterThan(Dinero({ amount: 800 })) 7708 * @example 7709 * // returns true 7710 * Dinero({ amount: 800 }).greaterThan(Dinero({ amount: 500 })) 7711 * @example 7712 * // returns true 7713 * Dinero({ amount: 800 }).greaterThan(Dinero({ amount: 5000, precision: 3 })) 7714 * @example 7715 * // returns false 7716 * Dinero({ amount: 5000, precision: 3 }).greaterThan(Dinero({ amount: 800 })) 7717 * 7718 * @throws {TypeError} If `comparator` has a different currency. 7719 * 7720 * @return {Boolean} 7721 */ 7722 greaterThan: function greaterThan(comparator) { 7723 assertSameCurrency.call(this, comparator); 7724 var comparators = Dinero.normalizePrecision([this, comparator]); 7725 return comparators[0].getAmount() > comparators[1].getAmount(); 7726 }, 7727 7728 /** 7729 * Checks whether the value represented by this object is greater than or equal to the other. 7730 * 7731 * @param {Dinero} comparator - The Dinero object to compare to. 7732 * 7733 * @example 7734 * // returns true 7735 * Dinero({ amount: 500 }).greaterThanOrEqual(Dinero({ amount: 300 })) 7736 * @example 7737 * // returns true 7738 * Dinero({ amount: 500 }).greaterThanOrEqual(Dinero({ amount: 500 })) 7739 * @example 7740 * // returns false 7741 * Dinero({ amount: 500 }).greaterThanOrEqual(Dinero({ amount: 800 })) 7742 * @example 7743 * // returns true 7744 * Dinero({ amount: 800 }).greaterThanOrEqual(Dinero({ amount: 5000, precision: 3 })) 7745 * @example 7746 * // returns true 7747 * Dinero({ amount: 500 }).greaterThanOrEqual(Dinero({ amount: 5000, precision: 3 })) 7748 * @example 7749 * // returns false 7750 * Dinero({ amount: 5000, precision: 3 }).greaterThanOrEqual(Dinero({ amount: 800 })) 7751 * 7752 * @throws {TypeError} If `comparator` has a different currency. 7753 * 7754 * @return {Boolean} 7755 */ 7756 greaterThanOrEqual: function greaterThanOrEqual(comparator) { 7757 assertSameCurrency.call(this, comparator); 7758 var comparators = Dinero.normalizePrecision([this, comparator]); 7759 return comparators[0].getAmount() >= comparators[1].getAmount(); 7760 }, 7761 7762 /** 7763 * Checks if the value represented by this object is zero. 7764 * 7765 * @example 7766 * // returns true 7767 * Dinero({ amount: 0 }).isZero() 7768 * @example 7769 * // returns false 7770 * Dinero({ amount: 100 }).isZero() 7771 * 7772 * @return {Boolean} 7773 */ 7774 isZero: function isZero() { 7775 return this.getAmount() === 0; 7776 }, 7777 7778 /** 7779 * Checks if the value represented by this object is positive. 7780 * 7781 * @example 7782 * // returns false 7783 * Dinero({ amount: -10 }).isPositive() 7784 * @example 7785 * // returns true 7786 * Dinero({ amount: 10 }).isPositive() 7787 * @example 7788 * // returns true 7789 * Dinero({ amount: 0 }).isPositive() 7790 * 7791 * @return {Boolean} 7792 */ 7793 isPositive: function isPositive() { 7794 return this.getAmount() >= 0; 7795 }, 7796 7797 /** 7798 * Checks if the value represented by this object is negative. 7799 * 7800 * @example 7801 * // returns true 7802 * Dinero({ amount: -10 }).isNegative() 7803 * @example 7804 * // returns false 7805 * Dinero({ amount: 10 }).isNegative() 7806 * @example 7807 * // returns false 7808 * Dinero({ amount: 0 }).isNegative() 7809 * 7810 * @return {Boolean} 7811 */ 7812 isNegative: function isNegative() { 7813 return this.getAmount() < 0; 7814 }, 7815 7816 /** 7817 * Checks if this has minor currency units. 7818 * Deprecates {@link module:Dinero~hasCents hasCents}. 7819 * 7820 * @example 7821 * // returns false 7822 * Dinero({ amount: 1100 }).hasSubUnits() 7823 * @example 7824 * // returns true 7825 * Dinero({ amount: 1150 }).hasSubUnits() 7826 * 7827 * @return {Boolean} 7828 */ 7829 hasSubUnits: function hasSubUnits() { 7830 return calculator$1.modulo(this.getAmount(), Math.pow(10, precision)) !== 0; 7831 }, 7832 7833 /** 7834 * Checks if this has minor currency units. 7835 * 7836 * @deprecated since version 1.4.0, will be removed in 2.0.0 7837 * Use {@link module:Dinero~hasSubUnits hasSubUnits} instead. 7838 * 7839 * @example 7840 * // returns false 7841 * Dinero({ amount: 1100 }).hasCents() 7842 * @example 7843 * // returns true 7844 * Dinero({ amount: 1150 }).hasCents() 7845 * 7846 * @return {Boolean} 7847 */ 7848 hasCents: function hasCents() { 7849 return calculator$1.modulo(this.getAmount(), Math.pow(10, precision)) !== 0; 7850 }, 7851 7852 /** 7853 * Checks whether the currency represented by this object equals to the other. 7854 * 7855 * @param {Dinero} comparator - The Dinero object to compare to. 7856 * 7857 * @example 7858 * // returns true 7859 * Dinero({ amount: 2000, currency: 'EUR' }).hasSameCurrency(Dinero({ amount: 1000, currency: 'EUR' })) 7860 * @example 7861 * // returns false 7862 * Dinero({ amount: 1000, currency: 'EUR' }).hasSameCurrency(Dinero({ amount: 1000, currency: 'USD' })) 7863 * 7864 * @return {Boolean} 7865 */ 7866 hasSameCurrency: function hasSameCurrency(comparator) { 7867 return this.getCurrency() === comparator.getCurrency(); 7868 }, 7869 7870 /** 7871 * Checks whether the amount represented by this object equals to the other. 7872 * 7873 * @param {Dinero} comparator - The Dinero object to compare to. 7874 * 7875 * @example 7876 * // returns true 7877 * Dinero({ amount: 1000, currency: 'EUR' }).hasSameAmount(Dinero({ amount: 1000 })) 7878 * @example 7879 * // returns false 7880 * Dinero({ amount: 2000, currency: 'EUR' }).hasSameAmount(Dinero({ amount: 1000, currency: 'EUR' })) 7881 * @example 7882 * // returns true 7883 * Dinero({ amount: 1000, currency: 'EUR', precision: 2 }).hasSameAmount(Dinero({ amount: 10000, precision: 3 })) 7884 * @example 7885 * // returns false 7886 * Dinero({ amount: 10000, currency: 'EUR', precision: 2 }).hasSameAmount(Dinero({ amount: 10000, precision: 3 })) 7887 * 7888 * @return {Boolean} 7889 */ 7890 hasSameAmount: function hasSameAmount(comparator) { 7891 var comparators = Dinero.normalizePrecision([this, comparator]); 7892 return comparators[0].getAmount() === comparators[1].getAmount(); 7893 }, 7894 7895 /** 7896 * Returns this object formatted as a string. 7897 * 7898 * The format is a mask which defines how the output string will be formatted. 7899 * It defines whether to display a currency, in what format, how many fraction digits to display and whether to use grouping separators. 7900 * The output is formatted according to the applying locale. 7901 * 7902 * Object | Format | String 7903 * :--------------------------- | :---------------- | :--- 7904 * `Dinero({ amount: 500050 })` | `'$0,0.00'` | $5,000.50 7905 * `Dinero({ amount: 500050 })` | `'$0,0'` | $5,001 7906 * `Dinero({ amount: 500050 })` | `'$0'` | $5001 7907 * `Dinero({ amount: 500050 })` | `'$0.0'` | $5000.5 7908 * `Dinero({ amount: 500050 })` | `'USD0,0.0'` | USD5,000.5 7909 * `Dinero({ amount: 500050 })` | `'0,0.0 dollar'` | 5,000.5 dollars 7910 * 7911 * Don't try to substitute the `$` sign or the `USD` code with your target currency, nor adapt the format string to the exact format you want. 7912 * The format is a mask which defines a pattern and returns a valid, localized currency string. 7913 * If you want to display the object in a custom way, either use {@link module:Dinero~getAmount getAmount}, {@link module:Dinero~toUnit toUnit} or {@link module:Dinero~toRoundedUnit toRoundedUnit} and manipulate the output string as you wish. 7914 * 7915 * {@link module:Dinero~toFormat toFormat} wraps around `Number.prototype.toLocaleString`. For that reason, **format will vary depending on how it's implemented in the end user's environment**. 7916 * 7917 * You can also use `toLocaleString` directly: 7918 * `Dinero().toRoundedUnit(digits, roundingMode).toLocaleString(locale, options)`. 7919 * 7920 * By default, amounts are rounded using the **half away from zero** rule ([commercial rounding](https://en.wikipedia.org/wiki/Rounding#Round_half_away_from_zero)). 7921 * You can also specify a different `roundingMode` to better fit your needs. 7922 * 7923 * @param {String} [format='$0,0.00'] - The format mask to format to. 7924 * @param {String} [roundingMode='HALF_AWAY_FROM_ZERO'] - The rounding mode to use: `'HALF_ODD'`, `'HALF_EVEN'`, `'HALF_UP'`, `'HALF_DOWN'`, `'HALF_TOWARDS_ZERO'`, `'HALF_AWAY_FROM_ZERO'` or `'DOWN'`. 7925 * 7926 * @example 7927 * // returns $2,000 7928 * Dinero({ amount: 200000 }).toFormat('$0,0') 7929 * @example 7930 * // returns â¬50.5 7931 * Dinero({ amount: 5050, currency: 'EUR' }).toFormat('$0,0.0') 7932 * @example 7933 * // returns 100 euros 7934 * Dinero({ amount: 10000, currency: 'EUR' }).setLocale('fr-FR').toFormat('0,0 dollar') 7935 * @example 7936 * // returns 2000 7937 * Dinero({ amount: 200000, currency: 'EUR' }).toFormat() 7938 * @example 7939 * // returns $10 7940 * Dinero({ amount: 1050 }).toFormat('$0', 'HALF_EVEN') 7941 * 7942 * @return {String} 7943 */ 7944 toFormat: function toFormat() { 7945 var format = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : globalFormat; 7946 var roundingMode = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : globalFormatRoundingMode; 7947 var formatter = Format(format); 7948 return this.toRoundedUnit(formatter.getMinimumFractionDigits(), roundingMode).toLocaleString(this.getLocale(), { 7949 currencyDisplay: formatter.getCurrencyDisplay(), 7950 useGrouping: formatter.getUseGrouping(), 7951 minimumFractionDigits: formatter.getMinimumFractionDigits(), 7952 style: formatter.getStyle(), 7953 currency: this.getCurrency() 7954 }); 7955 }, 7956 7957 /** 7958 * Returns the amount represented by this object in units. 7959 * 7960 * @example 7961 * // returns 10.5 7962 * Dinero({ amount: 1050 }).toUnit() 7963 * @example 7964 * // returns 10.545 7965 * Dinero({ amount: 10545, precision: 3 }).toUnit() 7966 * 7967 * @return {Number} 7968 */ 7969 toUnit: function toUnit() { 7970 return calculator$1.divide(this.getAmount(), Math.pow(10, precision)); 7971 }, 7972 7973 /** 7974 * Returns the amount represented by this object in rounded units. 7975 * 7976 * By default, the method uses the **half away from zero** rule ([commercial rounding](https://en.wikipedia.org/wiki/Rounding#Round_half_away_from_zero)). 7977 * You can also specify a different `roundingMode` to better fit your needs. 7978 * 7979 * @example 7980 * // returns 10.6 7981 * Dinero({ amount: 1055 }).toRoundedUnit(1) 7982 * @example 7983 * // returns 10 7984 * Dinero({ amount: 1050 }).toRoundedUnit(0, 'HALF_EVEN') 7985 * 7986 * @param {Number} digits - The number of fraction digits to round to. 7987 * @param {String} [roundingMode='HALF_AWAY_FROM_ZERO'] - The rounding mode to use: `'HALF_ODD'`, `'HALF_EVEN'`, `'HALF_UP'`, `'HALF_DOWN'`, `'HALF_TOWARDS_ZERO'`, `'HALF_AWAY_FROM_ZERO'` or `'DOWN'`. 7988 * 7989 * @return {Number} 7990 */ 7991 toRoundedUnit: function toRoundedUnit(digits) { 7992 var roundingMode = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : globalFormatRoundingMode; 7993 var factor = Math.pow(10, digits); 7994 return calculator$1.divide(calculator$1.round(calculator$1.multiply(this.toUnit(), factor), roundingMode), factor); 7995 }, 7996 7997 /** 7998 * Returns the object's data as an object literal. 7999 * 8000 * @example 8001 * // returns { amount: 500, currency: 'EUR', precision: 2 } 8002 * Dinero({ amount: 500, currency: 'EUR', precision: 2 }).toObject() 8003 * 8004 * @return {Object} 8005 */ 8006 toObject: function toObject() { 8007 return { 8008 amount: amount, 8009 currency: currency, 8010 precision: precision 8011 }; 8012 }, 8013 8014 /** 8015 * Returns the object's data as an object literal. 8016 * 8017 * Alias of {@link module:Dinero~toObject toObject}. 8018 * It is defined so that calling `JSON.stringify` on a Dinero object will automatically extract the relevant data. 8019 * 8020 * @example 8021 * // returns '{"amount":500,"currency":"EUR","precision":2}' 8022 * JSON.stringify(Dinero({ amount: 500, currency: 'EUR', precision: 2 })) 8023 * 8024 * @return {Object} 8025 */ 8026 toJSON: function toJSON() { 8027 return this.toObject(); 8028 } 8029 }; 8030}; 8031 8032var dinero = Object.assign(Dinero, Defaults, Globals, Static); 8033 8034/* harmony default export */ __webpack_exports__["default"] = (dinero); 8035 8036 8037/***/ }), 8038
vendor: 564 bytes, lines 8039-8060
8039/***/ "./node_modules/is-buffer/index.js": 8040/*!*****************************************!*\ 8041 !*** ./node_modules/is-buffer/index.js ***! 8042 \*****************************************/ 8043/*! no static exports found */ 8044/***/ (function(module, exports) { 8045 8046/*! 8047 * Determine if an object is a Buffer 8048 * 8049 * @author Feross Aboukhadijeh <https://feross.org> 8050 * @license MIT 8051 */ 8052 8053module.exports = function isBuffer (obj) { 8054 return obj != null && obj.constructor != null && 8055 typeof obj.constructor.isBuffer === 'function' && obj.constructor.isBuffer(obj) 8056} 8057 8058 8059/***/ }), 8060
vendor: 285,809 bytes, lines 8061-18788
8061/***/ "./node_modules/jquery/dist/jquery.js": 8062/*!********************************************!*\ 8063 !*** ./node_modules/jquery/dist/jquery.js ***! 8064 \********************************************/ 8065/*! no static exports found */ 8066/***/ (function(module, exports, __webpack_require__) { 8067 8068var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*! 8069 * jQuery JavaScript Library v3.7.1 8070 * https://jquery.com/ 8071 * 8072 * Copyright OpenJS Foundation and other contributors 8073 * Released under the MIT license 8074 * https://jquery.org/license 8075 * 8076 * Date: 2023-08-28T13:37Z 8077 */ 8078( function( global, factory ) { 8079 8080 "use strict"; 8081 8082 if ( true && typeof module.exports === "object" ) { 8083 8084 // For CommonJS and CommonJS-like environments where a proper `window` 8085 // is present, execute the factory and get jQuery. 8086 // For environments that do not have a `window` with a `document` 8087 // (such as Node.js), expose a factory as module.exports. 8088 // This accentuates the need for the creation of a real `window`. 8089 // e.g. var jQuery = require("jquery")(window); 8090 // See ticket trac-14549 for more info. 8091 module.exports = global.document ? 8092 factory( global, true ) : 8093 function( w ) { 8094 if ( !w.document ) { 8095 throw new Error( "jQuery requires a window with a document" ); 8096 } 8097 return factory( w ); 8098 }; 8099 } else { 8100 factory( global ); 8101 } 8102 8103// Pass this if window is not defined yet 8104} )( typeof window !== "undefined" ? window : this, function( window, noGlobal ) { 8105 8106// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1 8107// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode 8108// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common 8109// enough that all such attempts are guarded in a try block. 8110"use strict"; 8111 8112var arr = []; 8113 8114var getProto = Object.getPrototypeOf; 8115 8116var slice = arr.slice; 8117 8118var flat = arr.flat ? function( array ) { 8119 return arr.flat.call( array ); 8120} : function( array ) { 8121 return arr.concat.apply( [], array ); 8122}; 8123 8124 8125var push = arr.push; 8126 8127var indexOf = arr.indexOf; 8128 8129var class2type = {}; 8130 8131var toString = class2type.toString; 8132 8133var hasOwn = class2type.hasOwnProperty; 8134 8135var fnToString = hasOwn.toString; 8136 8137var ObjectFunctionString = fnToString.call( Object ); 8138 8139var support = {}; 8140 8141var isFunction = function isFunction( obj ) { 8142 8143 // Support: Chrome <=57, Firefox <=52 8144 // In some browsers, typeof returns "function" for HTML <object> elements 8145 // (i.e., `typeof document.createElement( "object" ) === "function"`). 8146 // We don't want to classify *any* DOM node as a function. 8147 // Support: QtWeb <=3.8.5, WebKit <=534.34, wkhtmltopdf tool <=0.12.5 8148 // Plus for old WebKit, typeof returns "function" for HTML collections 8149 // (e.g., `typeof document.getElementsByTagName("div") === "function"`). (gh-4756) 8150 return typeof obj === "function" && typeof obj.nodeType !== "number" && 8151 typeof obj.item !== "function"; 8152 }; 8153 8154 8155var isWindow = function isWindow( obj ) { 8156 return obj != null && obj === obj.window; 8157 }; 8158 8159 8160var document = window.document; 8161 8162 8163 8164 var preservedScriptAttributes = { 8165 type: true, 8166 src: true, 8167 nonce: true, 8168 noModule: true 8169 }; 8170 8171 function DOMEval( code, node, doc ) { 8172 doc = doc || document; 8173 8174 var i, val, 8175 script = doc.createElement( "script" ); 8176 8177 script.text = code; 8178 if ( node ) { 8179 for ( i in preservedScriptAttributes ) { 8180 8181 // Support: Firefox 64+, Edge 18+ 8182 // Some browsers don't support the "nonce" property on scripts. 8183 // On the other hand, just using `getAttribute` is not enough as 8184 // the `nonce` attribute is reset to an empty string whenever it 8185 // becomes browsing-context connected. 8186 // See https://github.com/whatwg/html/issues/2369 8187 // See https://html.spec.whatwg.org/#nonce-attributes 8188 // The `node.getAttribute` check was added for the sake of 8189 // `jQuery.globalEval` so that it can fake a nonce-containing node 8190 // via an object. 8191 val = node[ i ] || node.getAttribute && node.getAttribute( i ); 8192 if ( val ) { 8193 script.setAttribute( i, val ); 8194 } 8195 } 8196 } 8197 doc.head.appendChild( script ).parentNode.removeChild( script ); 8198 } 8199 8200 8201function toType( obj ) { 8202 if ( obj == null ) { 8203 return obj + ""; 8204 } 8205 8206 // Support: Android <=2.3 only (functionish RegExp) 8207 return typeof obj === "object" || typeof obj === "function" ? 8208 class2type[ toString.call( obj ) ] || "object" : 8209 typeof obj; 8210} 8211/* global Symbol */ 8212// Defining this global in .eslintrc.json would create a danger of using the global 8213// unguarded in another place, it seems safer to define global only for this module 8214 8215 8216 8217var version = "3.7.1", 8218 8219 rhtmlSuffix = /HTML$/i, 8220 8221 // Define a local copy of jQuery 8222 jQuery = function( selector, context ) { 8223 8224 // The jQuery object is actually just the init constructor 'enhanced' 8225 // Need init if jQuery is called (just allow error to be thrown if not included) 8226 return new jQuery.fn.init( selector, context ); 8227 }; 8228 8229jQuery.fn = jQuery.prototype = { 8230 8231 // The current version of jQuery being used 8232 jquery: version, 8233 8234 constructor: jQuery, 8235 8236 // The default length of a jQuery object is 0 8237 length: 0, 8238 8239 toArray: function() { 8240 return slice.call( this ); 8241 }, 8242 8243 // Get the Nth element in the matched element set OR 8244 // Get the whole matched element set as a clean array 8245 get: function( num ) { 8246 8247 // Return all the elements in a clean array 8248 if ( num == null ) { 8249 return slice.call( this ); 8250 } 8251 8252 // Return just the one element from the set 8253 return num < 0 ? this[ num + this.length ] : this[ num ]; 8254 }, 8255 8256 // Take an array of elements and push it onto the stack 8257 // (returning the new matched element set) 8258 pushStack: function( elems ) { 8259 8260 // Build a new jQuery matched element set 8261 var ret = jQuery.merge( this.constructor(), elems ); 8262 8263 // Add the old object onto the stack (as a reference) 8264 ret.prevObject = this; 8265 8266 // Return the newly-formed element set 8267 return ret; 8268 }, 8269 8270 // Execute a callback for every element in the matched set. 8271 each: function( callback ) { 8272 return jQuery.each( this, callback ); 8273 }, 8274 8275 map: function( callback ) { 8276 return this.pushStack( jQuery.map( this, function( elem, i ) { 8277 return callback.call( elem, i, elem ); 8278 } ) ); 8279 }, 8280 8281 slice: function() { 8282 return this.pushStack( slice.apply( this, arguments ) ); 8283 }, 8284 8285 first: function() { 8286 return this.eq( 0 ); 8287 }, 8288 8289 last: function() { 8290 return this.eq( -1 ); 8291 }, 8292 8293 even: function() { 8294 return this.pushStack( jQuery.grep( this, function( _elem, i ) { 8295 return ( i + 1 ) % 2; 8296 } ) ); 8297 }, 8298 8299 odd: function() { 8300 return this.pushStack( jQuery.grep( this, function( _elem, i ) { 8301 return i % 2; 8302 } ) ); 8303 }, 8304 8305 eq: function( i ) { 8306 var len = this.length, 8307 j = +i + ( i < 0 ? len : 0 ); 8308 return this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] ); 8309 }, 8310 8311 end: function() { 8312 return this.prevObject || this.constructor(); 8313 }, 8314 8315 // For internal use only. 8316 // Behaves like an Array's method, not like a jQuery method. 8317 push: push, 8318 sort: arr.sort, 8319 splice: arr.splice 8320}; 8321 8322jQuery.extend = jQuery.fn.extend = function() { 8323 var options, name, src, copy, copyIsArray, clone, 8324 target = arguments[ 0 ] || {}, 8325 i = 1, 8326 length = arguments.length, 8327 deep = false; 8328 8329 // Handle a deep copy situation 8330 if ( typeof target === "boolean" ) { 8331 deep = target; 8332 8333 // Skip the boolean and the target 8334 target = arguments[ i ] || {}; 8335 i++; 8336 } 8337 8338 // Handle case when target is a string or something (possible in deep copy) 8339 if ( typeof target !== "object" && !isFunction( target ) ) { 8340 target = {}; 8341 } 8342 8343 // Extend jQuery itself if only one argument is passed 8344 if ( i === length ) { 8345 target = this; 8346 i--; 8347 } 8348 8349 for ( ; i < length; i++ ) { 8350 8351 // Only deal with non-null/undefined values 8352 if ( ( options = arguments[ i ] ) != null ) { 8353 8354 // Extend the base object 8355 for ( name in options ) { 8356 copy = options[ name ]; 8357 8358 // Prevent Object.prototype pollution 8359 // Prevent never-ending loop 8360 if ( name === "__proto__" || target === copy ) { 8361 continue; 8362 } 8363 8364 // Recurse if we're merging plain objects or arrays 8365 if ( deep && copy && ( jQuery.isPlainObject( copy ) || 8366 ( copyIsArray = Array.isArray( copy ) ) ) ) { 8367 src = target[ name ]; 8368 8369 // Ensure proper type for the source value 8370 if ( copyIsArray && !Array.isArray( src ) ) { 8371 clone = []; 8372 } else if ( !copyIsArray && !jQuery.isPlainObject( src ) ) { 8373 clone = {}; 8374 } else { 8375 clone = src; 8376 } 8377 copyIsArray = false; 8378 8379 // Never move original objects, clone them 8380 target[ name ] = jQuery.extend( deep, clone, copy ); 8381 8382 // Don't bring in undefined values 8383 } else if ( copy !== undefined ) { 8384 target[ name ] = copy; 8385 } 8386 } 8387 } 8388 } 8389 8390 // Return the modified object 8391 return target; 8392}; 8393 8394jQuery.extend( { 8395 8396 // Unique for each copy of jQuery on the page 8397 expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ), 8398 8399 // Assume jQuery is ready without the ready module 8400 isReady: true, 8401 8402 error: function( msg ) { 8403 throw new Error( msg ); 8404 }, 8405 8406 noop: function() {}, 8407 8408 isPlainObject: function( obj ) { 8409 var proto, Ctor; 8410 8411 // Detect obvious negatives 8412 // Use toString instead of jQuery.type to catch host objects 8413 if ( !obj || toString.call( obj ) !== "[object Object]" ) { 8414 return false; 8415 } 8416 8417 proto = getProto( obj ); 8418 8419 // Objects with no prototype (e.g., `Object.create( null )`) are plain 8420 if ( !proto ) { 8421 return true; 8422 } 8423 8424 // Objects with prototype are plain iff they were constructed by a global Object function 8425 Ctor = hasOwn.call( proto, "constructor" ) && proto.constructor; 8426 return typeof Ctor === "function" && fnToString.call( Ctor ) === ObjectFunctionString; 8427 }, 8428 8429 isEmptyObject: function( obj ) { 8430 var name; 8431 8432 for ( name in obj ) { 8433 return false; 8434 } 8435 return true; 8436 }, 8437 8438 // Evaluates a script in a provided context; falls back to the global one 8439 // if not specified. 8440 globalEval: function( code, options, doc ) { 8441 DOMEval( code, { nonce: options && options.nonce }, doc ); 8442 }, 8443 8444 each: function( obj, callback ) { 8445 var length, i = 0; 8446 8447 if ( isArrayLike( obj ) ) { 8448 length = obj.length; 8449 for ( ; i < length; i++ ) { 8450 if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { 8451 break; 8452 } 8453 } 8454 } else { 8455 for ( i in obj ) { 8456 if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { 8457 break; 8458 } 8459 } 8460 } 8461 8462 return obj; 8463 }, 8464 8465 8466 // Retrieve the text value of an array of DOM nodes 8467 text: function( elem ) { 8468 var node, 8469 ret = "", 8470 i = 0, 8471 nodeType = elem.nodeType; 8472 8473 if ( !nodeType ) { 8474 8475 // If no nodeType, this is expected to be an array 8476 while ( ( node = elem[ i++ ] ) ) { 8477 8478 // Do not traverse comment nodes 8479 ret += jQuery.text( node ); 8480 } 8481 } 8482 if ( nodeType === 1 || nodeType === 11 ) { 8483 return elem.textContent; 8484 } 8485 if ( nodeType === 9 ) { 8486 return elem.documentElement.textContent; 8487 } 8488 if ( nodeType === 3 || nodeType === 4 ) { 8489 return elem.nodeValue; 8490 } 8491 8492 // Do not include comment or processing instruction nodes 8493 8494 return ret; 8495 }, 8496 8497 // results is for internal usage only 8498 makeArray: function( arr, results ) { 8499 var ret = results || []; 8500 8501 if ( arr != null ) { 8502 if ( isArrayLike( Object( arr ) ) ) { 8503 jQuery.merge( ret, 8504 typeof arr === "string" ? 8505 [ arr ] : arr 8506 ); 8507 } else { 8508 push.call( ret, arr ); 8509 } 8510 } 8511 8512 return ret; 8513 }, 8514 8515 inArray: function( elem, arr, i ) { 8516 return arr == null ? -1 : indexOf.call( arr, elem, i ); 8517 }, 8518 8519 isXMLDoc: function( elem ) { 8520 var namespace = elem && elem.namespaceURI, 8521 docElem = elem && ( elem.ownerDocument || elem ).documentElement; 8522 8523 // Assume HTML when documentElement doesn't yet exist, such as inside 8524 // document fragments. 8525 return !rhtmlSuffix.test( namespace || docElem && docElem.nodeName || "HTML" ); 8526 }, 8527 8528 // Support: Android <=4.0 only, PhantomJS 1 only 8529 // push.apply(_, arraylike) throws on ancient WebKit 8530 merge: function( first, second ) { 8531 var len = +second.length, 8532 j = 0, 8533 i = first.length; 8534 8535 for ( ; j < len; j++ ) { 8536 first[ i++ ] = second[ j ]; 8537 } 8538 8539 first.length = i; 8540 8541 return first; 8542 }, 8543 8544 grep: function( elems, callback, invert ) { 8545 var callbackInverse, 8546 matches = [], 8547 i = 0, 8548 length = elems.length, 8549 callbackExpect = !invert; 8550 8551 // Go through the array, only saving the items 8552 // that pass the validator function 8553 for ( ; i < length; i++ ) { 8554 callbackInverse = !callback( elems[ i ], i ); 8555 if ( callbackInverse !== callbackExpect ) { 8556 matches.push( elems[ i ] ); 8557 } 8558 } 8559 8560 return matches; 8561 }, 8562 8563 // arg is for internal usage only 8564 map: function( elems, callback, arg ) { 8565 var length, value, 8566 i = 0, 8567 ret = []; 8568 8569 // Go through the array, translating each of the items to their new values 8570 if ( isArrayLike( elems ) ) { 8571 length = elems.length; 8572 for ( ; i < length; i++ ) { 8573 value = callback( elems[ i ], i, arg ); 8574 8575 if ( value != null ) { 8576 ret.push( value ); 8577 } 8578 } 8579 8580 // Go through every key on the object, 8581 } else { 8582 for ( i in elems ) { 8583 value = callback( elems[ i ], i, arg ); 8584 8585 if ( value != null ) { 8586 ret.push( value ); 8587 } 8588 } 8589 } 8590 8591 // Flatten any nested arrays 8592 return flat( ret ); 8593 }, 8594 8595 // A global GUID counter for objects 8596 guid: 1, 8597 8598 // jQuery.support is not used in Core but other projects attach their 8599 // properties to it so it needs to exist. 8600 support: support 8601} ); 8602 8603if ( typeof Symbol === "function" ) { 8604 jQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ]; 8605} 8606 8607// Populate the class2type map 8608jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ), 8609 function( _i, name ) { 8610 class2type[ "[object " + name + "]" ] = name.toLowerCase(); 8611 } ); 8612 8613function isArrayLike( obj ) { 8614 8615 // Support: real iOS 8.2 only (not reproducible in simulator) 8616 // `in` check used to prevent JIT error (gh-2145) 8617 // hasOwn isn't used here due to false negatives 8618 // regarding Nodelist length in IE 8619 var length = !!obj && "length" in obj && obj.length, 8620 type = toType( obj ); 8621 8622 if ( isFunction( obj ) || isWindow( obj ) ) { 8623 return false; 8624 } 8625 8626 return type === "array" || length === 0 || 8627 typeof length === "number" && length > 0 && ( length - 1 ) in obj; 8628} 8629 8630 8631function nodeName( elem, name ) { 8632 8633 return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); 8634 8635} 8636var pop = arr.pop; 8637 8638 8639var sort = arr.sort; 8640 8641 8642var splice = arr.splice; 8643 8644 8645var whitespace = "[\\x20\\t\\r\\n\\f]"; 8646 8647 8648var rtrimCSS = new RegExp( 8649 "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", 8650 "g" 8651); 8652 8653 8654 8655 8656// Note: an element does not contain itself 8657jQuery.contains = function( a, b ) { 8658 var bup = b && b.parentNode; 8659 8660 return a === bup || !!( bup && bup.nodeType === 1 && ( 8661 8662 // Support: IE 9 - 11+ 8663 // IE doesn't have `contains` on SVG. 8664 a.contains ? 8665 a.contains( bup ) : 8666 a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16 8667 ) ); 8668}; 8669 8670 8671 8672 8673// CSS string/identifier serialization 8674// https://drafts.csswg.org/cssom/#common-serializing-idioms 8675var rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\x80-\uFFFF\w-]/g; 8676 8677function fcssescape( ch, asCodePoint ) { 8678 if ( asCodePoint ) { 8679 8680 // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER 8681 if ( ch === "\0" ) { 8682 return "\uFFFD"; 8683 } 8684 8685 // Control characters and (dependent upon position) numbers get escaped as code points 8686 return ch.slice( 0, -1 ) + "\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " "; 8687 } 8688 8689 // Other potentially-special ASCII characters get backslash-escaped 8690 return "\\" + ch; 8691} 8692 8693jQuery.escapeSelector = function( sel ) { 8694 return ( sel + "" ).replace( rcssescape, fcssescape ); 8695}; 8696 8697 8698 8699 8700var preferredDoc = document, 8701 pushNative = push; 8702 8703( function() { 8704 8705var i, 8706 Expr, 8707 outermostContext, 8708 sortInput, 8709 hasDuplicate, 8710 push = pushNative, 8711 8712 // Local document vars 8713 document, 8714 documentElement, 8715 documentIsHTML, 8716 rbuggyQSA, 8717 matches, 8718 8719 // Instance-specific data 8720 expando = jQuery.expando, 8721 dirruns = 0, 8722 done = 0, 8723 classCache = createCache(), 8724 tokenCache = createCache(), 8725 compilerCache = createCache(), 8726 nonnativeSelectorCache = createCache(), 8727 sortOrder = function( a, b ) { 8728 if ( a === b ) { 8729 hasDuplicate = true; 8730 } 8731 return 0; 8732 }, 8733 8734 booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|" + 8735 "loop|multiple|open|readonly|required|scoped", 8736 8737 // Regular expressions 8738 8739 // https://www.w3.org/TR/css-syntax-3/#ident-token-diagram 8740 identifier = "(?:\\\\[\\da-fA-F]{1,6}" + whitespace + 8741 "?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+", 8742 8743 // Attribute selectors: https://www.w3.org/TR/selectors/#attribute-selectors 8744 attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace + 8745 8746 // Operator (capture 2) 8747 "*([*^$|!~]?=)" + whitespace + 8748 8749 // "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]" 8750 "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + 8751 whitespace + "*\\]", 8752 8753 pseudos = ":(" + identifier + ")(?:\\((" + 8754 8755 // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments: 8756 // 1. quoted (capture 3; capture 4 or capture 5) 8757 "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" + 8758 8759 // 2. simple (capture 6) 8760 "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" + 8761 8762 // 3. anything else (capture 2) 8763 ".*" + 8764 ")\\)|)", 8765 8766 // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter 8767 rwhitespace = new RegExp( whitespace + "+", "g" ), 8768 8769 rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ), 8770 rleadingCombinator = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + 8771 whitespace + "*" ), 8772 rdescend = new RegExp( whitespace + "|>" ), 8773 8774 rpseudo = new RegExp( pseudos ), 8775 ridentifier = new RegExp( "^" + identifier + "$" ), 8776 8777 matchExpr = { 8778 ID: new RegExp( "^#(" + identifier + ")" ), 8779 CLASS: new RegExp( "^\\.(" + identifier + ")" ), 8780 TAG: new RegExp( "^(" + identifier + "|[*])" ), 8781 ATTR: new RegExp( "^" + attributes ), 8782 PSEUDO: new RegExp( "^" + pseudos ), 8783 CHILD: new RegExp( 8784 "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + 8785 whitespace + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + 8786 whitespace + "*(\\d+)|))" + whitespace + "*\\)|)", "i" ), 8787 bool: new RegExp( "^(?:" + booleans + ")$", "i" ), 8788 8789 // For use in libraries implementing .is() 8790 // We use this for POS matching in `select` 8791 needsContext: new RegExp( "^" + whitespace + 8792 "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + whitespace + 8793 "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" ) 8794 }, 8795 8796 rinputs = /^(?:input|select|textarea|button)$/i, 8797 rheader = /^h\d$/i, 8798 8799 // Easily-parseable/retrievable ID or TAG or CLASS selectors 8800 rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, 8801 8802 rsibling = /[+~]/, 8803 8804 // CSS escapes 8805 // https://www.w3.org/TR/CSS21/syndata.html#escaped-characters 8806 runescape = new RegExp( "\\\\[\\da-fA-F]{1,6}" + whitespace + 8807 "?|\\\\([^\\r\\n\\f])", "g" ), 8808 funescape = function( escape, nonHex ) { 8809 var high = "0x" + escape.slice( 1 ) - 0x10000; 8810 8811 if ( nonHex ) { 8812 8813 // Strip the backslash prefix from a non-hex escape sequence 8814 return nonHex; 8815 } 8816 8817 // Replace a hexadecimal escape sequence with the encoded Unicode code point 8818 // Support: IE <=11+ 8819 // For values outside the Basic Multilingual Plane (BMP), manually construct a 8820 // surrogate pair 8821 return high < 0 ? 8822 String.fromCharCode( high + 0x10000 ) : 8823 String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 ); 8824 }, 8825 8826 // Used for iframes; see `setDocument`. 8827 // Support: IE 9 - 11+, Edge 12 - 18+ 8828 // Removing the function wrapper causes a "Permission Denied" 8829 // error in IE/Edge. 8830 unloadHandler = function() { 8831 setDocument(); 8832 }, 8833 8834 inDisabledFieldset = addCombinator( 8835 function( elem ) { 8836 return elem.disabled === true && nodeName( elem, "fieldset" ); 8837 }, 8838 { dir: "parentNode", next: "legend" } 8839 ); 8840 8841// Support: IE <=9 only 8842// Accessing document.activeElement can throw unexpectedly 8843// https://bugs.jquery.com/ticket/13393 8844function safeActiveElement() { 8845 try { 8846 return document.activeElement; 8847 } catch ( err ) { } 8848} 8849 8850// Optimize for push.apply( _, NodeList ) 8851try { 8852 push.apply( 8853 ( arr = slice.call( preferredDoc.childNodes ) ), 8854 preferredDoc.childNodes 8855 ); 8856 8857 // Support: Android <=4.0 8858 // Detect silently failing push.apply 8859 // eslint-disable-next-line no-unused-expressions 8860 arr[ preferredDoc.childNodes.length ].nodeType; 8861} catch ( e ) { 8862 push = { 8863 apply: function( target, els ) { 8864 pushNative.apply( target, slice.call( els ) ); 8865 }, 8866 call: function( target ) { 8867 pushNative.apply( target, slice.call( arguments, 1 ) ); 8868 } 8869 }; 8870} 8871 8872function find( selector, context, results, seed ) { 8873 var m, i, elem, nid, match, groups, newSelector, 8874 newContext = context && context.ownerDocument, 8875 8876 // nodeType defaults to 9, since context defaults to document 8877 nodeType = context ? context.nodeType : 9; 8878 8879 results = results || []; 8880 8881 // Return early from calls with invalid selector or context 8882 if ( typeof selector !== "string" || !selector || 8883 nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) { 8884 8885 return results; 8886 } 8887 8888 // Try to shortcut find operations (as opposed to filters) in HTML documents 8889 if ( !seed ) { 8890 setDocument( context ); 8891 context = context || document; 8892 8893 if ( documentIsHTML ) { 8894 8895 // If the selector is sufficiently simple, try using a "get*By*" DOM method 8896 // (excepting DocumentFragment context, where the methods don't exist) 8897 if ( nodeType !== 11 && ( match = rquickExpr.exec( selector ) ) ) { 8898 8899 // ID selector 8900 if ( ( m = match[ 1 ] ) ) { 8901 8902 // Document context 8903 if ( nodeType === 9 ) { 8904 if ( ( elem = context.getElementById( m ) ) ) { 8905 8906 // Support: IE 9 only 8907 // getElementById can match elements by name instead of ID 8908 if ( elem.id === m ) { 8909 push.call( results, elem ); 8910 return results; 8911 } 8912 } else { 8913 return results; 8914 } 8915 8916 // Element context 8917 } else { 8918 8919 // Support: IE 9 only 8920 // getElementById can match elements by name instead of ID 8921 if ( newContext && ( elem = newContext.getElementById( m ) ) && 8922 find.contains( context, elem ) && 8923 elem.id === m ) { 8924 8925 push.call( results, elem ); 8926 return results; 8927 } 8928 } 8929 8930 // Type selector 8931 } else if ( match[ 2 ] ) { 8932 push.apply( results, context.getElementsByTagName( selector ) ); 8933 return results; 8934 8935 // Class selector 8936 } else if ( ( m = match[ 3 ] ) && context.getElementsByClassName ) { 8937 push.apply( results, context.getElementsByClassName( m ) ); 8938 return results; 8939 } 8940 } 8941 8942 // Take advantage of querySelectorAll 8943 if ( !nonnativeSelectorCache[ selector + " " ] && 8944 ( !rbuggyQSA || !rbuggyQSA.test( selector ) ) ) { 8945 8946 newSelector = selector; 8947 newContext = context; 8948 8949 // qSA considers elements outside a scoping root when evaluating child or 8950 // descendant combinators, which is not what we want. 8951 // In such cases, we work around the behavior by prefixing every selector in the 8952 // list with an ID selector referencing the scope context. 8953 // The technique has to be used as well when a leading combinator is used 8954 // as such selectors are not recognized by querySelectorAll. 8955 // Thanks to Andrew Dupont for this technique. 8956 if ( nodeType === 1 && 8957 ( rdescend.test( selector ) || rleadingCombinator.test( selector ) ) ) { 8958 8959 // Expand context for sibling selectors 8960 newContext = rsibling.test( selector ) && testContext( context.parentNode ) || 8961 context; 8962 8963 // We can use :scope instead of the ID hack if the browser 8964 // supports it & if we're not changing the context. 8965 // Support: IE 11+, Edge 17 - 18+ 8966 // IE/Edge sometimes throw a "Permission denied" error when 8967 // strict-comparing two documents; shallow comparisons work. 8968 // eslint-disable-next-line eqeqeq 8969 if ( newContext != context || !support.scope ) { 8970 8971 // Capture the context ID, setting it first if necessary 8972 if ( ( nid = context.getAttribute( "id" ) ) ) { 8973 nid = jQuery.escapeSelector( nid ); 8974 } else { 8975 context.setAttribute( "id", ( nid = expando ) ); 8976 } 8977 } 8978 8979 // Prefix every selector in the list 8980 groups = tokenize( selector ); 8981 i = groups.length; 8982 while ( i-- ) { 8983 groups[ i ] = ( nid ? "#" + nid : ":scope" ) + " " + 8984 toSelector( groups[ i ] ); 8985 } 8986 newSelector = groups.join( "," ); 8987 } 8988 8989 try { 8990 push.apply( results, 8991 newContext.querySelectorAll( newSelector ) 8992 ); 8993 return results; 8994 } catch ( qsaError ) { 8995 nonnativeSelectorCache( selector, true ); 8996 } finally { 8997 if ( nid === expando ) { 8998 context.removeAttribute( "id" ); 8999 } 9000 } 9001 } 9002 } 9003 } 9004 9005 // All others 9006 return select( selector.replace( rtrimCSS, "$1" ), context, results, seed ); 9007} 9008 9009/** 9010 * Create key-value caches of limited size 9011 * @returns {function(string, object)} Returns the Object data after storing it on itself with 9012 * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength) 9013 * deleting the oldest entry 9014 */ 9015function createCache() { 9016 var keys = []; 9017 9018 function cache( key, value ) { 9019 9020 // Use (key + " ") to avoid collision with native prototype properties 9021 // (see https://github.com/jquery/sizzle/issues/157) 9022 if ( keys.push( key + " " ) > Expr.cacheLength ) { 9023 9024 // Only keep the most recent entries 9025 delete cache[ keys.shift() ]; 9026 } 9027 return ( cache[ key + " " ] = value ); 9028 } 9029 return cache; 9030} 9031 9032/** 9033 * Mark a function for special use by jQuery selector module 9034 * @param {Function} fn The function to mark 9035 */ 9036function markFunction( fn ) { 9037 fn[ expando ] = true; 9038 return fn; 9039} 9040 9041/** 9042 * Support testing using an element 9043 * @param {Function} fn Passed the created element and returns a boolean result 9044 */ 9045function assert( fn ) { 9046 var el = document.createElement( "fieldset" ); 9047 9048 try { 9049 return !!fn( el ); 9050 } catch ( e ) { 9051 return false; 9052 } finally { 9053 9054 // Remove from its parent by default 9055 if ( el.parentNode ) { 9056 el.parentNode.removeChild( el ); 9057 } 9058 9059 // release memory in IE 9060 el = null; 9061 } 9062} 9063 9064/** 9065 * Returns a function to use in pseudos for input types 9066 * @param {String} type 9067 */ 9068function createInputPseudo( type ) { 9069 return function( elem ) { 9070 return nodeName( elem, "input" ) && elem.type === type; 9071 }; 9072} 9073 9074/** 9075 * Returns a function to use in pseudos for buttons 9076 * @param {String} type 9077 */ 9078function createButtonPseudo( type ) { 9079 return function( elem ) { 9080 return ( nodeName( elem, "input" ) || nodeName( elem, "button" ) ) && 9081 elem.type === type; 9082 }; 9083} 9084 9085/** 9086 * Returns a function to use in pseudos for :enabled/:disabled 9087 * @param {Boolean} disabled true for :disabled; false for :enabled 9088 */ 9089function createDisabledPseudo( disabled ) { 9090 9091 // Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable 9092 return function( elem ) { 9093 9094 // Only certain elements can match :enabled or :disabled 9095 // https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled 9096 // https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled 9097 if ( "form" in elem ) { 9098 9099 // Check for inherited disabledness on relevant non-disabled elements: 9100 // * listed form-associated elements in a disabled fieldset 9101 // https://html.spec.whatwg.org/multipage/forms.html#category-listed 9102 // https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled 9103 // * option elements in a disabled optgroup 9104 // https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled 9105 // All such elements have a "form" property. 9106 if ( elem.parentNode && elem.disabled === false ) { 9107 9108 // Option elements defer to a parent optgroup if present 9109 if ( "label" in elem ) { 9110 if ( "label" in elem.parentNode ) { 9111 return elem.parentNode.disabled === disabled; 9112 } else { 9113 return elem.disabled === disabled; 9114 } 9115 } 9116 9117 // Support: IE 6 - 11+ 9118 // Use the isDisabled shortcut property to check for disabled fieldset ancestors 9119 return elem.isDisabled === disabled || 9120 9121 // Where there is no isDisabled, check manually 9122 elem.isDisabled !== !disabled && 9123 inDisabledFieldset( elem ) === disabled; 9124 } 9125 9126 return elem.disabled === disabled; 9127 9128 // Try to winnow out elements that can't be disabled before trusting the disabled property. 9129 // Some victims get caught in our net (label, legend, menu, track), but it shouldn't 9130 // even exist on them, let alone have a boolean value. 9131 } else if ( "label" in elem ) { 9132 return elem.disabled === disabled; 9133 } 9134 9135 // Remaining elements are neither :enabled nor :disabled 9136 return false; 9137 }; 9138} 9139 9140/** 9141 * Returns a function to use in pseudos for positionals 9142 * @param {Function} fn 9143 */ 9144function createPositionalPseudo( fn ) { 9145 return markFunction( function( argument ) { 9146 argument = +argument; 9147 return markFunction( function( seed, matches ) { 9148 var j, 9149 matchIndexes = fn( [], seed.length, argument ), 9150 i = matchIndexes.length; 9151 9152 // Match elements found at the specified indexes 9153 while ( i-- ) { 9154 if ( seed[ ( j = matchIndexes[ i ] ) ] ) { 9155 seed[ j ] = !( matches[ j ] = seed[ j ] ); 9156 } 9157 } 9158 } ); 9159 } ); 9160} 9161 9162/** 9163 * Checks a node for validity as a jQuery selector context 9164 * @param {Element|Object=} context 9165 * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value 9166 */ 9167function testContext( context ) { 9168 return context && typeof context.getElementsByTagName !== "undefined" && context; 9169} 9170 9171/** 9172 * Sets document-related variables once based on the current document 9173 * @param {Element|Object} [node] An element or document object to use to set the document 9174 * @returns {Object} Returns the current document 9175 */ 9176function setDocument( node ) { 9177 var subWindow, 9178 doc = node ? node.ownerDocument || node : preferredDoc; 9179 9180 // Return early if doc is invalid or already selected 9181 // Support: IE 11+, Edge 17 - 18+ 9182 // IE/Edge sometimes throw a "Permission denied" error when strict-comparing 9183 // two documents; shallow comparisons work. 9184 // eslint-disable-next-line eqeqeq 9185 if ( doc == document || doc.nodeType !== 9 || !doc.documentElement ) { 9186 return document; 9187 } 9188 9189 // Update global variables 9190 document = doc; 9191 documentElement = document.documentElement; 9192 documentIsHTML = !jQuery.isXMLDoc( document ); 9193 9194 // Support: iOS 7 only, IE 9 - 11+ 9195 // Older browsers didn't support unprefixed `matches`. 9196 matches = documentElement.matches || 9197 documentElement.webkitMatchesSelector || 9198 documentElement.msMatchesSelector; 9199 9200 // Support: IE 9 - 11+, Edge 12 - 18+ 9201 // Accessing iframe documents after unload throws "permission denied" errors 9202 // (see trac-13936). 9203 // Limit the fix to IE & Edge Legacy; despite Edge 15+ implementing `matches`, 9204 // all IE 9+ and Edge Legacy versions implement `msMatchesSelector` as well. 9205 if ( documentElement.msMatchesSelector && 9206 9207 // Support: IE 11+, Edge 17 - 18+ 9208 // IE/Edge sometimes throw a "Permission denied" error when strict-comparing 9209 // two documents; shallow comparisons work. 9210 // eslint-disable-next-line eqeqeq 9211 preferredDoc != document && 9212 ( subWindow = document.defaultView ) && subWindow.top !== subWindow ) { 9213 9214 // Support: IE 9 - 11+, Edge 12 - 18+ 9215 subWindow.addEventListener( "unload", unloadHandler ); 9216 } 9217 9218 // Support: IE <10 9219 // Check if getElementById returns elements by name 9220 // The broken getElementById methods don't pick up programmatically-set names, 9221 // so use a roundabout getElementsByName test 9222 support.getById = assert( function( el ) { 9223 documentElement.appendChild( el ).id = jQuery.expando; 9224 return !document.getElementsByName || 9225 !document.getElementsByName( jQuery.expando ).length; 9226 } ); 9227 9228 // Support: IE 9 only 9229 // Check to see if it's possible to do matchesSelector 9230 // on a disconnected node. 9231 support.disconnectedMatch = assert( function( el ) { 9232 return matches.call( el, "*" ); 9233 } ); 9234 9235 // Support: IE 9 - 11+, Edge 12 - 18+ 9236 // IE/Edge don't support the :scope pseudo-class. 9237 support.scope = assert( function() { 9238 return document.querySelectorAll( ":scope" ); 9239 } ); 9240 9241 // Support: Chrome 105 - 111 only, Safari 15.4 - 16.3 only 9242 // Make sure the `:has()` argument is parsed unforgivingly. 9243 // We include `*` in the test to detect buggy implementations that are 9244 // _selectively_ forgiving (specifically when the list includes at least 9245 // one valid selector). 9246 // Note that we treat complete lack of support for `:has()` as if it were 9247 // spec-compliant support, which is fine because use of `:has()` in such 9248 // environments will fail in the qSA path and fall back to jQuery traversal 9249 // anyway. 9250 support.cssHas = assert( function() { 9251 try { 9252 document.querySelector( ":has(*,:jqfake)" ); 9253 return false; 9254 } catch ( e ) { 9255 return true; 9256 } 9257 } ); 9258 9259 // ID filter and find 9260 if ( support.getById ) { 9261 Expr.filter.ID = function( id ) { 9262 var attrId = id.replace( runescape, funescape ); 9263 return function( elem ) { 9264 return elem.getAttribute( "id" ) === attrId; 9265 }; 9266 }; 9267 Expr.find.ID = function( id, context ) { 9268 if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { 9269 var elem = context.getElementById( id ); 9270 return elem ? [ elem ] : []; 9271 } 9272 }; 9273 } else { 9274 Expr.filter.ID = function( id ) { 9275 var attrId = id.replace( runescape, funescape ); 9276 return function( elem ) { 9277 var node = typeof elem.getAttributeNode !== "undefined" && 9278 elem.getAttributeNode( "id" ); 9279 return node && node.value === attrId; 9280 }; 9281 }; 9282 9283 // Support: IE 6 - 7 only 9284 // getElementById is not reliable as a find shortcut 9285 Expr.find.ID = function( id, context ) { 9286 if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { 9287 var node, i, elems, 9288 elem = context.getElementById( id ); 9289 9290 if ( elem ) { 9291 9292 // Verify the id attribute 9293 node = elem.getAttributeNode( "id" ); 9294 if ( node && node.value === id ) { 9295 return [ elem ]; 9296 } 9297 9298 // Fall back on getElementsByName 9299 elems = context.getElementsByName( id ); 9300 i = 0; 9301 while ( ( elem = elems[ i++ ] ) ) { 9302 node = elem.getAttributeNode( "id" ); 9303 if ( node && node.value === id ) { 9304 return [ elem ]; 9305 } 9306 } 9307 } 9308 9309 return []; 9310 } 9311 }; 9312 } 9313 9314 // Tag 9315 Expr.find.TAG = function( tag, context ) { 9316 if ( typeof context.getElementsByTagName !== "undefined" ) { 9317 return context.getElementsByTagName( tag ); 9318 9319 // DocumentFragment nodes don't have gEBTN 9320 } else { 9321 return context.querySelectorAll( tag ); 9322 } 9323 }; 9324 9325 // Class 9326 Expr.find.CLASS = function( className, context ) { 9327 if ( typeof context.getElementsByClassName !== "undefined" && documentIsHTML ) { 9328 return context.getElementsByClassName( className ); 9329 } 9330 }; 9331 9332 /* QSA/matchesSelector 9333 ---------------------------------------------------------------------- */ 9334 9335 // QSA and matchesSelector support 9336 9337 rbuggyQSA = []; 9338 9339 // Build QSA regex 9340 // Regex strategy adopted from Diego Perini 9341 assert( function( el ) { 9342 9343 var input; 9344 9345 documentElement.appendChild( el ).innerHTML = 9346 "<a id='" + expando + "' href='' disabled='disabled'></a>" + 9347 "<select id='" + expando + "-\r\\' disabled='disabled'>" + 9348 "<option selected=''></option></select>"; 9349 9350 // Support: iOS <=7 - 8 only 9351 // Boolean attributes and "value" are not treated correctly in some XML documents 9352 if ( !el.querySelectorAll( "[selected]" ).length ) { 9353 rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" ); 9354 } 9355 9356 // Support: iOS <=7 - 8 only 9357 if ( !el.querySelectorAll( "[id~=" + expando + "-]" ).length ) { 9358 rbuggyQSA.push( "~=" ); 9359 } 9360 9361 // Support: iOS 8 only 9362 // https://bugs.webkit.org/show_bug.cgi?id=136851 9363 // In-page `selector#id sibling-combinator selector` fails 9364 if ( !el.querySelectorAll( "a#" + expando + "+*" ).length ) { 9365 rbuggyQSA.push( ".#.+[+~]" ); 9366 } 9367 9368 // Support: Chrome <=105+, Firefox <=104+, Safari <=15.4+ 9369 // In some of the document kinds, these selectors wouldn't work natively. 9370 // This is probably OK but for backwards compatibility we want to maintain 9371 // handling them through jQuery traversal in jQuery 3.x. 9372 if ( !el.querySelectorAll( ":checked" ).length ) { 9373 rbuggyQSA.push( ":checked" ); 9374 } 9375 9376 // Support: Windows 8 Native Apps 9377 // The type and name attributes are restricted during .innerHTML assignment 9378 input = document.createElement( "input" ); 9379 input.setAttribute( "type", "hidden" ); 9380 el.appendChild( input ).setAttribute( "name", "D" ); 9381 9382 // Support: IE 9 - 11+ 9383 // IE's :disabled selector does not pick up the children of disabled fieldsets 9384 // Support: Chrome <=105+, Firefox <=104+, Safari <=15.4+ 9385 // In some of the document kinds, these selectors wouldn't work natively. 9386 // This is probably OK but for backwards compatibility we want to maintain 9387 // handling them through jQuery traversal in jQuery 3.x. 9388 documentElement.appendChild( el ).disabled = true; 9389 if ( el.querySelectorAll( ":disabled" ).length !== 2 ) { 9390 rbuggyQSA.push( ":enabled", ":disabled" ); 9391 } 9392 9393 // Support: IE 11+, Edge 15 - 18+ 9394 // IE 11/Edge don't find elements on a `[name='']` query in some cases. 9395 // Adding a temporary attribute to the document before the selection works 9396 // around the issue. 9397 // Interestingly, IE 10 & older don't seem to have the issue. 9398 input = document.createElement( "input" ); 9399 input.setAttribute( "name", "" ); 9400 el.appendChild( input ); 9401 if ( !el.querySelectorAll( "[name='']" ).length ) { 9402 rbuggyQSA.push( "\\[" + whitespace + "*name" + whitespace + "*=" + 9403 whitespace + "*(?:''|\"\")" ); 9404 } 9405 } ); 9406 9407 if ( !support.cssHas ) { 9408 9409 // Support: Chrome 105 - 110+, Safari 15.4 - 16.3+ 9410 // Our regular `try-catch` mechanism fails to detect natively-unsupported 9411 // pseudo-classes inside `:has()` (such as `:has(:contains("Foo"))`) 9412 // in browsers that parse the `:has()` argument as a forgiving selector list. 9413 // https://drafts.csswg.org/selectors/#relational now requires the argument 9414 // to be parsed unforgivingly, but browsers have not yet fully adjusted. 9415 rbuggyQSA.push( ":has" ); 9416 } 9417 9418 rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join( "|" ) ); 9419 9420 /* Sorting 9421 ---------------------------------------------------------------------- */ 9422 9423 // Document order sorting 9424 sortOrder = function( a, b ) { 9425 9426 // Flag for duplicate removal 9427 if ( a === b ) { 9428 hasDuplicate = true; 9429 return 0; 9430 } 9431 9432 // Sort on method existence if only one input has compareDocumentPosition 9433 var compare = !a.compareDocumentPosition - !b.compareDocumentPosition; 9434 if ( compare ) { 9435 return compare; 9436 } 9437 9438 // Calculate position if both inputs belong to the same document 9439 // Support: IE 11+, Edge 17 - 18+ 9440 // IE/Edge sometimes throw a "Permission denied" error when strict-comparing 9441 // two documents; shallow comparisons work. 9442 // eslint-disable-next-line eqeqeq 9443 compare = ( a.ownerDocument || a ) == ( b.ownerDocument || b ) ? 9444 a.compareDocumentPosition( b ) : 9445 9446 // Otherwise we know they are disconnected 9447 1; 9448 9449 // Disconnected nodes 9450 if ( compare & 1 || 9451 ( !support.sortDetached && b.compareDocumentPosition( a ) === compare ) ) { 9452 9453 // Choose the first element that is related to our preferred document 9454 // Support: IE 11+, Edge 17 - 18+ 9455 // IE/Edge sometimes throw a "Permission denied" error when strict-comparing 9456 // two documents; shallow comparisons work. 9457 // eslint-disable-next-line eqeqeq 9458 if ( a === document || a.ownerDocument == preferredDoc && 9459 find.contains( preferredDoc, a ) ) { 9460 return -1; 9461 } 9462 9463 // Support: IE 11+, Edge 17 - 18+ 9464 // IE/Edge sometimes throw a "Permission denied" error when strict-comparing 9465 // two documents; shallow comparisons work. 9466 // eslint-disable-next-line eqeqeq 9467 if ( b === document || b.ownerDocument == preferredDoc && 9468 find.contains( preferredDoc, b ) ) { 9469 return 1; 9470 } 9471 9472 // Maintain original order 9473 return sortInput ? 9474 ( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) : 9475 0; 9476 } 9477 9478 return compare & 4 ? -1 : 1; 9479 }; 9480 9481 return document; 9482} 9483 9484find.matches = function( expr, elements ) { 9485 return find( expr, null, null, elements ); 9486}; 9487 9488find.matchesSelector = function( elem, expr ) { 9489 setDocument( elem ); 9490 9491 if ( documentIsHTML && 9492 !nonnativeSelectorCache[ expr + " " ] && 9493 ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) { 9494 9495 try { 9496 var ret = matches.call( elem, expr ); 9497 9498 // IE 9's matchesSelector returns false on disconnected nodes 9499 if ( ret || support.disconnectedMatch || 9500 9501 // As well, disconnected nodes are said to be in a document 9502 // fragment in IE 9 9503 elem.document && elem.document.nodeType !== 11 ) { 9504 return ret; 9505 } 9506 } catch ( e ) { 9507 nonnativeSelectorCache( expr, true ); 9508 } 9509 } 9510 9511 return find( expr, document, null, [ elem ] ).length > 0; 9512}; 9513 9514find.contains = function( context, elem ) { 9515 9516 // Set document vars if needed 9517 // Support: IE 11+, Edge 17 - 18+ 9518 // IE/Edge sometimes throw a "Permission denied" error when strict-comparing 9519 // two documents; shallow comparisons work. 9520 // eslint-disable-next-line eqeqeq 9521 if ( ( context.ownerDocument || context ) != document ) { 9522 setDocument( context ); 9523 } 9524 return jQuery.contains( context, elem ); 9525}; 9526 9527 9528find.attr = function( elem, name ) { 9529 9530 // Set document vars if needed 9531 // Support: IE 11+, Edge 17 - 18+ 9532 // IE/Edge sometimes throw a "Permission denied" error when strict-comparing 9533 // two documents; shallow comparisons work. 9534 // eslint-disable-next-line eqeqeq 9535 if ( ( elem.ownerDocument || elem ) != document ) { 9536 setDocument( elem ); 9537 } 9538 9539 var fn = Expr.attrHandle[ name.toLowerCase() ], 9540 9541 // Don't get fooled by Object.prototype properties (see trac-13807) 9542 val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ? 9543 fn( elem, name, !documentIsHTML ) : 9544 undefined; 9545 9546 if ( val !== undefined ) { 9547 return val; 9548 } 9549 9550 return elem.getAttribute( name ); 9551}; 9552 9553find.error = function( msg ) { 9554 throw new Error( "Syntax error, unrecognized expression: " + msg ); 9555}; 9556 9557/** 9558 * Document sorting and removing duplicates 9559 * @param {ArrayLike} results 9560 */ 9561jQuery.uniqueSort = function( results ) { 9562 var elem, 9563 duplicates = [], 9564 j = 0, 9565 i = 0; 9566 9567 // Unless we *know* we can detect duplicates, assume their presence 9568 // 9569 // Support: Android <=4.0+ 9570 // Testing for detecting duplicates is unpredictable so instead assume we can't 9571 // depend on duplicate detection in all browsers without a stable sort. 9572 hasDuplicate = !support.sortStable; 9573 sortInput = !support.sortStable && slice.call( results, 0 ); 9574 sort.call( results, sortOrder ); 9575 9576 if ( hasDuplicate ) { 9577 while ( ( elem = results[ i++ ] ) ) { 9578 if ( elem === results[ i ] ) { 9579 j = duplicates.push( i ); 9580 } 9581 } 9582 while ( j-- ) { 9583 splice.call( results, duplicates[ j ], 1 ); 9584 } 9585 } 9586 9587 // Clear input after sorting to release objects 9588 // See https://github.com/jquery/sizzle/pull/225 9589 sortInput = null; 9590 9591 return results; 9592}; 9593 9594jQuery.fn.uniqueSort = function() { 9595 return this.pushStack( jQuery.uniqueSort( slice.apply( this ) ) ); 9596}; 9597 9598Expr = jQuery.expr = { 9599 9600 // Can be adjusted by the user 9601 cacheLength: 50, 9602 9603 createPseudo: markFunction, 9604 9605 match: matchExpr, 9606 9607 attrHandle: {}, 9608 9609 find: {}, 9610 9611 relative: { 9612 ">": { dir: "parentNode", first: true }, 9613 " ": { dir: "parentNode" }, 9614 "+": { dir: "previousSibling", first: true }, 9615 "~": { dir: "previousSibling" } 9616 }, 9617 9618 preFilter: { 9619 ATTR: function( match ) { 9620 match[ 1 ] = match[ 1 ].replace( runescape, funescape ); 9621 9622 // Move the given value to match[3] whether quoted or unquoted 9623 match[ 3 ] = ( match[ 3 ] || match[ 4 ] || match[ 5 ] || "" ) 9624 .replace( runescape, funescape ); 9625 9626 if ( match[ 2 ] === "~=" ) { 9627 match[ 3 ] = " " + match[ 3 ] + " "; 9628 } 9629 9630 return match.slice( 0, 4 ); 9631 }, 9632 9633 CHILD: function( match ) { 9634 9635 /* matches from matchExpr["CHILD"] 9636 1 type (only|nth|...) 9637 2 what (child|of-type) 9638 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...) 9639 4 xn-component of xn+y argument ([+-]?\d*n|) 9640 5 sign of xn-component 9641 6 x of xn-component 9642 7 sign of y-component 9643 8 y of y-component 9644 */ 9645 match[ 1 ] = match[ 1 ].toLowerCase(); 9646 9647 if ( match[ 1 ].slice( 0, 3 ) === "nth" ) { 9648 9649 // nth-* requires argument 9650 if ( !match[ 3 ] ) { 9651 find.error( match[ 0 ] ); 9652 } 9653 9654 // numeric x and y parameters for Expr.filter.CHILD 9655 // remember that false/true cast respectively to 0/1 9656 match[ 4 ] = +( match[ 4 ] ? 9657 match[ 5 ] + ( match[ 6 ] || 1 ) : 9658 2 * ( match[ 3 ] === "even" || match[ 3 ] === "odd" ) 9659 ); 9660 match[ 5 ] = +( ( match[ 7 ] + match[ 8 ] ) || match[ 3 ] === "odd" ); 9661 9662 // other types prohibit arguments 9663 } else if ( match[ 3 ] ) { 9664 find.error( match[ 0 ] ); 9665 } 9666 9667 return match; 9668 }, 9669 9670 PSEUDO: function( match ) { 9671 var excess, 9672 unquoted = !match[ 6 ] && match[ 2 ]; 9673 9674 if ( matchExpr.CHILD.test( match[ 0 ] ) ) { 9675 return null; 9676 } 9677 9678 // Accept quoted arguments as-is 9679 if ( match[ 3 ] ) { 9680 match[ 2 ] = match[ 4 ] || match[ 5 ] || ""; 9681 9682 // Strip excess characters from unquoted arguments 9683 } else if ( unquoted && rpseudo.test( unquoted ) && 9684 9685 // Get excess from tokenize (recursively) 9686 ( excess = tokenize( unquoted, true ) ) && 9687 9688 // advance to the next closing parenthesis 9689 ( excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length ) ) { 9690 9691 // excess is a negative index 9692 match[ 0 ] = match[ 0 ].slice( 0, excess ); 9693 match[ 2 ] = unquoted.slice( 0, excess ); 9694 } 9695 9696 // Return only captures needed by the pseudo filter method (type and argument) 9697 return match.slice( 0, 3 ); 9698 } 9699 }, 9700 9701 filter: { 9702 9703 TAG: function( nodeNameSelector ) { 9704 var expectedNodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase(); 9705 return nodeNameSelector === "*" ? 9706 function() { 9707 return true; 9708 } : 9709 function( elem ) { 9710 return nodeName( elem, expectedNodeName ); 9711 }; 9712 }, 9713 9714 CLASS: function( className ) { 9715 var pattern = classCache[ className + " " ]; 9716 9717 return pattern || 9718 ( pattern = new RegExp( "(^|" + whitespace + ")" + className + 9719 "(" + whitespace + "|$)" ) ) && 9720 classCache( className, function( elem ) { 9721 return pattern.test( 9722 typeof elem.className === "string" && elem.className || 9723 typeof elem.getAttribute !== "undefined" && 9724 elem.getAttribute( "class" ) || 9725 "" 9726 ); 9727 } ); 9728 }, 9729 9730 ATTR: function( name, operator, check ) { 9731 return function( elem ) { 9732 var result = find.attr( elem, name ); 9733 9734 if ( result == null ) { 9735 return operator === "!="; 9736 } 9737 if ( !operator ) { 9738 return true; 9739 } 9740 9741 result += ""; 9742 9743 if ( operator === "=" ) { 9744 return result === check; 9745 } 9746 if ( operator === "!=" ) { 9747 return result !== check; 9748 } 9749 if ( operator === "^=" ) { 9750 return check && result.indexOf( check ) === 0; 9751 } 9752 if ( operator === "*=" ) { 9753 return check && result.indexOf( check ) > -1; 9754 } 9755 if ( operator === "$=" ) { 9756 return check && result.slice( -check.length ) === check; 9757 } 9758 if ( operator === "~=" ) { 9759 return ( " " + result.replace( rwhitespace, " " ) + " " ) 9760 .indexOf( check ) > -1; 9761 } 9762 if ( operator === "|=" ) { 9763 return result === check || result.slice( 0, check.length + 1 ) === check + "-"; 9764 } 9765 9766 return false; 9767 }; 9768 }, 9769 9770 CHILD: function( type, what, _argument, first, last ) { 9771 var simple = type.slice( 0, 3 ) !== "nth", 9772 forward = type.slice( -4 ) !== "last", 9773 ofType = what === "of-type"; 9774 9775 return first === 1 && last === 0 ? 9776 9777 // Shortcut for :nth-*(n) 9778 function( elem ) { 9779 return !!elem.parentNode; 9780 } : 9781 9782 function( elem, _context, xml ) { 9783 var cache, outerCache, node, nodeIndex, start, 9784 dir = simple !== forward ? "nextSibling" : "previousSibling", 9785 parent = elem.parentNode, 9786 name = ofType && elem.nodeName.toLowerCase(), 9787 useCache = !xml && !ofType, 9788 diff = false; 9789 9790 if ( parent ) { 9791 9792 // :(first|last|only)-(child|of-type) 9793 if ( simple ) { 9794 while ( dir ) { 9795 node = elem; 9796 while ( ( node = node[ dir ] ) ) { 9797 if ( ofType ? 9798 nodeName( node, name ) : 9799 node.nodeType === 1 ) { 9800 9801 return false; 9802 } 9803 } 9804 9805 // Reverse direction for :only-* (if we haven't yet done so) 9806 start = dir = type === "only" && !start && "nextSibling"; 9807 } 9808 return true; 9809 } 9810 9811 start = [ forward ? parent.firstChild : parent.lastChild ]; 9812 9813 // non-xml :nth-child(...) stores cache data on `parent` 9814 if ( forward && useCache ) { 9815 9816 // Seek `elem` from a previously-cached index 9817 outerCache = parent[ expando ] || ( parent[ expando ] = {} ); 9818 cache = outerCache[ type ] || []; 9819 nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; 9820 diff = nodeIndex && cache[ 2 ]; 9821 node = nodeIndex && parent.childNodes[ nodeIndex ]; 9822 9823 while ( ( node = ++nodeIndex && node && node[ dir ] || 9824 9825 // Fallback to seeking `elem` from the start 9826 ( diff = nodeIndex = 0 ) || start.pop() ) ) { 9827 9828 // When found, cache indexes on `parent` and break 9829 if ( node.nodeType === 1 && ++diff && node === elem ) { 9830 outerCache[ type ] = [ dirruns, nodeIndex, diff ]; 9831 break; 9832 } 9833 } 9834 9835 } else { 9836 9837 // Use previously-cached element index if available 9838 if ( useCache ) { 9839 outerCache = elem[ expando ] || ( elem[ expando ] = {} ); 9840 cache = outerCache[ type ] || []; 9841 nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; 9842 diff = nodeIndex; 9843 } 9844 9845 // xml :nth-child(...) 9846 // or :nth-last-child(...) or :nth(-last)?-of-type(...) 9847 if ( diff === false ) { 9848 9849 // Use the same loop as above to seek `elem` from the start 9850 while ( ( node = ++nodeIndex && node && node[ dir ] || 9851 ( diff = nodeIndex = 0 ) || start.pop() ) ) { 9852 9853 if ( ( ofType ? 9854 nodeName( node, name ) : 9855 node.nodeType === 1 ) && 9856 ++diff ) { 9857 9858 // Cache the index of each encountered element 9859 if ( useCache ) { 9860 outerCache = node[ expando ] || 9861 ( node[ expando ] = {} ); 9862 outerCache[ type ] = [ dirruns, diff ]; 9863 } 9864 9865 if ( node === elem ) { 9866 break; 9867 } 9868 } 9869 } 9870 } 9871 } 9872 9873 // Incorporate the offset, then check against cycle size 9874 diff -= last; 9875 return diff === first || ( diff % first === 0 && diff / first >= 0 ); 9876 } 9877 }; 9878 }, 9879 9880 PSEUDO: function( pseudo, argument ) { 9881 9882 // pseudo-class names are case-insensitive 9883 // https://www.w3.org/TR/selectors/#pseudo-classes 9884 // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters 9885 // Remember that setFilters inherits from pseudos 9886 var args, 9887 fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] || 9888 find.error( "unsupported pseudo: " + pseudo ); 9889 9890 // The user may use createPseudo to indicate that 9891 // arguments are needed to create the filter function 9892 // just as jQuery does 9893 if ( fn[ expando ] ) { 9894 return fn( argument ); 9895 } 9896 9897 // But maintain support for old signatures 9898 if ( fn.length > 1 ) { 9899 args = [ pseudo, pseudo, "", argument ]; 9900 return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ? 9901 markFunction( function( seed, matches ) { 9902 var idx, 9903 matched = fn( seed, argument ), 9904 i = matched.length; 9905 while ( i-- ) { 9906 idx = indexOf.call( seed, matched[ i ] ); 9907 seed[ idx ] = !( matches[ idx ] = matched[ i ] ); 9908 } 9909 } ) : 9910 function( elem ) { 9911 return fn( elem, 0, args ); 9912 }; 9913 } 9914 9915 return fn; 9916 } 9917 }, 9918 9919 pseudos: { 9920 9921 // Potentially complex pseudos 9922 not: markFunction( function( selector ) { 9923 9924 // Trim the selector passed to compile 9925 // to avoid treating leading and trailing 9926 // spaces as combinators 9927 var input = [], 9928 results = [], 9929 matcher = compile( selector.replace( rtrimCSS, "$1" ) ); 9930 9931 return matcher[ expando ] ? 9932 markFunction( function( seed, matches, _context, xml ) { 9933 var elem, 9934 unmatched = matcher( seed, null, xml, [] ), 9935 i = seed.length; 9936 9937 // Match elements unmatched by `matcher` 9938 while ( i-- ) { 9939 if ( ( elem = unmatched[ i ] ) ) { 9940 seed[ i ] = !( matches[ i ] = elem ); 9941 } 9942 } 9943 } ) : 9944 function( elem, _context, xml ) { 9945 input[ 0 ] = elem; 9946 matcher( input, null, xml, results ); 9947 9948 // Don't keep the element 9949 // (see https://github.com/jquery/sizzle/issues/299) 9950 input[ 0 ] = null; 9951 return !results.pop(); 9952 }; 9953 } ), 9954 9955 has: markFunction( function( selector ) { 9956 return function( elem ) { 9957 return find( selector, elem ).length > 0; 9958 }; 9959 } ), 9960 9961 contains: markFunction( function( text ) { 9962 text = text.replace( runescape, funescape ); 9963 return function( elem ) { 9964 return ( elem.textContent || jQuery.text( elem ) ).indexOf( text ) > -1; 9965 }; 9966 } ), 9967 9968 // "Whether an element is represented by a :lang() selector 9969 // is based solely on the element's language value 9970 // being equal to the identifier C, 9971 // or beginning with the identifier C immediately followed by "-". 9972 // The matching of C against the element's language value is performed case-insensitively. 9973 // The identifier C does not have to be a valid language name." 9974 // https://www.w3.org/TR/selectors/#lang-pseudo 9975 lang: markFunction( function( lang ) { 9976 9977 // lang value must be a valid identifier 9978 if ( !ridentifier.test( lang || "" ) ) { 9979 find.error( "unsupported lang: " + lang ); 9980 } 9981 lang = lang.replace( runescape, funescape ).toLowerCase(); 9982 return function( elem ) { 9983 var elemLang; 9984 do { 9985 if ( ( elemLang = documentIsHTML ? 9986 elem.lang : 9987 elem.getAttribute( "xml:lang" ) || elem.getAttribute( "lang" ) ) ) { 9988 9989 elemLang = elemLang.toLowerCase(); 9990 return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0; 9991 } 9992 } while ( ( elem = elem.parentNode ) && elem.nodeType === 1 ); 9993 return false; 9994 }; 9995 } ), 9996 9997 // Miscellaneous 9998 target: function( elem ) { 9999 var hash = window.location && window.location.hash; 10000 return hash && hash.slice( 1 ) === elem.id; 10001 }, 10002 10003 root: function( elem ) { 10004 return elem === documentElement; 10005 }, 10006 10007 focus: function( elem ) { 10008 return elem === safeActiveElement() && 10009 document.hasFocus() && 10010 !!( elem.type || elem.href || ~elem.tabIndex ); 10011 }, 10012 10013 // Boolean properties 10014 enabled: createDisabledPseudo( false ), 10015 disabled: createDisabledPseudo( true ), 10016 10017 checked: function( elem ) { 10018 10019 // In CSS3, :checked should return both checked and selected elements 10020 // https://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked 10021 return ( nodeName( elem, "input" ) && !!elem.checked ) || 10022 ( nodeName( elem, "option" ) && !!elem.selected ); 10023 }, 10024 10025 selected: function( elem ) { 10026 10027 // Support: IE <=11+ 10028 // Accessing the selectedIndex property 10029 // forces the browser to treat the default option as 10030 // selected when in an optgroup. 10031 if ( elem.parentNode ) { 10032 // eslint-disable-next-line no-unused-expressions 10033 elem.parentNode.selectedIndex; 10034 } 10035 10036 return elem.selected === true; 10037 }, 10038 10039 // Contents 10040 empty: function( elem ) { 10041 10042 // https://www.w3.org/TR/selectors/#empty-pseudo 10043 // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5), 10044 // but not by others (comment: 8; processing instruction: 7; etc.) 10045 // nodeType < 6 works because attributes (2) do not appear as children 10046 for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { 10047 if ( elem.nodeType < 6 ) { 10048 return false; 10049 } 10050 } 10051 return true; 10052 }, 10053 10054 parent: function( elem ) { 10055 return !Expr.pseudos.empty( elem ); 10056 }, 10057 10058 // Element/input types 10059 header: function( elem ) { 10060 return rheader.test( elem.nodeName ); 10061 }, 10062 10063 input: function( elem ) { 10064 return rinputs.test( elem.nodeName ); 10065 }, 10066 10067 button: function( elem ) { 10068 return nodeName( elem, "input" ) && elem.type === "button" || 10069 nodeName( elem, "button" ); 10070 }, 10071 10072 text: function( elem ) { 10073 var attr; 10074 return nodeName( elem, "input" ) && elem.type === "text" && 10075 10076 // Support: IE <10 only 10077 // New HTML5 attribute values (e.g., "search") appear 10078 // with elem.type === "text" 10079 ( ( attr = elem.getAttribute( "type" ) ) == null || 10080 attr.toLowerCase() === "text" ); 10081 }, 10082 10083 // Position-in-collection 10084 first: createPositionalPseudo( function() { 10085 return [ 0 ]; 10086 } ), 10087 10088 last: createPositionalPseudo( function( _matchIndexes, length ) { 10089 return [ length - 1 ]; 10090 } ), 10091 10092 eq: createPositionalPseudo( function( _matchIndexes, length, argument ) { 10093 return [ argument < 0 ? argument + length : argument ]; 10094 } ), 10095 10096 even: createPositionalPseudo( function( matchIndexes, length ) { 10097 var i = 0; 10098 for ( ; i < length; i += 2 ) { 10099 matchIndexes.push( i ); 10100 } 10101 return matchIndexes; 10102 } ), 10103 10104 odd: createPositionalPseudo( function( matchIndexes, length ) { 10105 var i = 1; 10106 for ( ; i < length; i += 2 ) { 10107 matchIndexes.push( i ); 10108 } 10109 return matchIndexes; 10110 } ), 10111 10112 lt: createPositionalPseudo( function( matchIndexes, length, argument ) { 10113 var i; 10114 10115 if ( argument < 0 ) { 10116 i = argument + length; 10117 } else if ( argument > length ) { 10118 i = length; 10119 } else { 10120 i = argument; 10121 } 10122 10123 for ( ; --i >= 0; ) { 10124 matchIndexes.push( i ); 10125 } 10126 return matchIndexes; 10127 } ), 10128 10129 gt: createPositionalPseudo( function( matchIndexes, length, argument ) { 10130 var i = argument < 0 ? argument + length : argument; 10131 for ( ; ++i < length; ) { 10132 matchIndexes.push( i ); 10133 } 10134 return matchIndexes; 10135 } ) 10136 } 10137}; 10138 10139Expr.pseudos.nth = Expr.pseudos.eq; 10140 10141// Add button/input type pseudos 10142for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) { 10143 Expr.pseudos[ i ] = createInputPseudo( i ); 10144} 10145for ( i in { submit: true, reset: true } ) { 10146 Expr.pseudos[ i ] = createButtonPseudo( i ); 10147} 10148 10149// Easy API for creating new setFilters 10150function setFilters() {} 10151setFilters.prototype = Expr.filters = Expr.pseudos; 10152Expr.setFilters = new setFilters(); 10153 10154function tokenize( selector, parseOnly ) { 10155 var matched, match, tokens, type, 10156 soFar, groups, preFilters, 10157 cached = tokenCache[ selector + " " ]; 10158 10159 if ( cached ) { 10160 return parseOnly ? 0 : cached.slice( 0 ); 10161 } 10162 10163 soFar = selector; 10164 groups = []; 10165 preFilters = Expr.preFilter; 10166 10167 while ( soFar ) { 10168 10169 // Comma and first run 10170 if ( !matched || ( match = rcomma.exec( soFar ) ) ) { 10171 if ( match ) { 10172 10173 // Don't consume trailing commas as valid 10174 soFar = soFar.slice( match[ 0 ].length ) || soFar; 10175 } 10176 groups.push( ( tokens = [] ) ); 10177 } 10178 10179 matched = false; 10180 10181 // Combinators 10182 if ( ( match = rleadingCombinator.exec( soFar ) ) ) { 10183 matched = match.shift(); 10184 tokens.push( { 10185 value: matched, 10186 10187 // Cast descendant combinators to space 10188 type: match[ 0 ].replace( rtrimCSS, " " ) 10189 } ); 10190 soFar = soFar.slice( matched.length ); 10191 } 10192 10193 // Filters 10194 for ( type in Expr.filter ) { 10195 if ( ( match = matchExpr[ type ].exec( soFar ) ) && ( !preFilters[ type ] || 10196 ( match = preFilters[ type ]( match ) ) ) ) { 10197 matched = match.shift(); 10198 tokens.push( { 10199 value: matched, 10200 type: type, 10201 matches: match 10202 } ); 10203 soFar = soFar.slice( matched.length ); 10204 } 10205 } 10206 10207 if ( !matched ) { 10208 break; 10209 } 10210 } 10211 10212 // Return the length of the invalid excess 10213 // if we're just parsing 10214 // Otherwise, throw an error or return tokens 10215 if ( parseOnly ) { 10216 return soFar.length; 10217 } 10218 10219 return soFar ? 10220 find.error( selector ) : 10221 10222 // Cache the tokens 10223 tokenCache( selector, groups ).slice( 0 ); 10224} 10225 10226function toSelector( tokens ) { 10227 var i = 0, 10228 len = tokens.length, 10229 selector = ""; 10230 for ( ; i < len; i++ ) { 10231 selector += tokens[ i ].value; 10232 } 10233 return selector; 10234} 10235 10236function addCombinator( matcher, combinator, base ) { 10237 var dir = combinator.dir, 10238 skip = combinator.next, 10239 key = skip || dir, 10240 checkNonElements = base && key === "parentNode", 10241 doneName = done++; 10242 10243 return combinator.first ? 10244 10245 // Check against closest ancestor/preceding element 10246 function( elem, context, xml ) { 10247 while ( ( elem = elem[ dir ] ) ) { 10248 if ( elem.nodeType === 1 || checkNonElements ) { 10249 return matcher( elem, context, xml ); 10250 } 10251 } 10252 return false; 10253 } : 10254 10255 // Check against all ancestor/preceding elements 10256 function( elem, context, xml ) { 10257 var oldCache, outerCache, 10258 newCache = [ dirruns, doneName ]; 10259 10260 // We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching 10261 if ( xml ) { 10262 while ( ( elem = elem[ dir ] ) ) { 10263 if ( elem.nodeType === 1 || checkNonElements ) { 10264 if ( matcher( elem, context, xml ) ) { 10265 return true; 10266 } 10267 } 10268 } 10269 } else { 10270 while ( ( elem = elem[ dir ] ) ) { 10271 if ( elem.nodeType === 1 || checkNonElements ) { 10272 outerCache = elem[ expando ] || ( elem[ expando ] = {} ); 10273 10274 if ( skip && nodeName( elem, skip ) ) { 10275 elem = elem[ dir ] || elem; 10276 } else if ( ( oldCache = outerCache[ key ] ) && 10277 oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) { 10278 10279 // Assign to newCache so results back-propagate to previous elements 10280 return ( newCache[ 2 ] = oldCache[ 2 ] ); 10281 } else { 10282 10283 // Reuse newcache so results back-propagate to previous elements 10284 outerCache[ key ] = newCache; 10285 10286 // A match means we're done; a fail means we have to keep checking 10287 if ( ( newCache[ 2 ] = matcher( elem, context, xml ) ) ) { 10288 return true; 10289 } 10290 } 10291 } 10292 } 10293 } 10294 return false; 10295 }; 10296} 10297 10298function elementMatcher( matchers ) { 10299 return matchers.length > 1 ? 10300 function( elem, context, xml ) { 10301 var i = matchers.length; 10302 while ( i-- ) { 10303 if ( !matchers[ i ]( elem, context, xml ) ) { 10304 return false; 10305 } 10306 } 10307 return true; 10308 } : 10309 matchers[ 0 ]; 10310} 10311 10312function multipleContexts( selector, contexts, results ) { 10313 var i = 0, 10314 len = contexts.length; 10315 for ( ; i < len; i++ ) { 10316 find( selector, contexts[ i ], results ); 10317 } 10318 return results; 10319} 10320 10321function condense( unmatched, map, filter, context, xml ) { 10322 var elem, 10323 newUnmatched = [], 10324 i = 0, 10325 len = unmatched.length, 10326 mapped = map != null; 10327 10328 for ( ; i < len; i++ ) { 10329 if ( ( elem = unmatched[ i ] ) ) { 10330 if ( !filter || filter( elem, context, xml ) ) { 10331 newUnmatched.push( elem ); 10332 if ( mapped ) { 10333 map.push( i ); 10334 } 10335 } 10336 } 10337 } 10338 10339 return newUnmatched; 10340} 10341 10342function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) { 10343 if ( postFilter && !postFilter[ expando ] ) { 10344 postFilter = setMatcher( postFilter ); 10345 } 10346 if ( postFinder && !postFinder[ expando ] ) { 10347 postFinder = setMatcher( postFinder, postSelector ); 10348 } 10349 return markFunction( function( seed, results, context, xml ) { 10350 var temp, i, elem, matcherOut, 10351 preMap = [], 10352 postMap = [], 10353 preexisting = results.length, 10354 10355 // Get initial elements from seed or context 10356 elems = seed || 10357 multipleContexts( selector || "*", 10358 context.nodeType ? [ context ] : context, [] ), 10359 10360 // Prefilter to get matcher input, preserving a map for seed-results synchronization 10361 matcherIn = preFilter && ( seed || !selector ) ? 10362 condense( elems, preMap, preFilter, context, xml ) : 10363 elems; 10364 10365 if ( matcher ) { 10366 10367 // If we have a postFinder, or filtered seed, or non-seed postFilter 10368 // or preexisting results, 10369 matcherOut = postFinder || ( seed ? preFilter : preexisting || postFilter ) ? 10370 10371 // ...intermediate processing is necessary 10372 [] : 10373 10374 // ...otherwise use results directly 10375 results; 10376 10377 // Find primary matches 10378 matcher( matcherIn, matcherOut, context, xml ); 10379 } else { 10380 matcherOut = matcherIn; 10381 } 10382 10383 // Apply postFilter 10384 if ( postFilter ) { 10385 temp = condense( matcherOut, postMap ); 10386 postFilter( temp, [], context, xml ); 10387 10388 // Un-match failing elements by moving them back to matcherIn 10389 i = temp.length; 10390 while ( i-- ) { 10391 if ( ( elem = temp[ i ] ) ) { 10392 matcherOut[ postMap[ i ] ] = !( matcherIn[ postMap[ i ] ] = elem ); 10393 } 10394 } 10395 } 10396 10397 if ( seed ) { 10398 if ( postFinder || preFilter ) { 10399 if ( postFinder ) { 10400 10401 // Get the final matcherOut by condensing this intermediate into postFinder contexts 10402 temp = []; 10403 i = matcherOut.length; 10404 while ( i-- ) { 10405 if ( ( elem = matcherOut[ i ] ) ) { 10406 10407 // Restore matcherIn since elem is not yet a final match 10408 temp.push( ( matcherIn[ i ] = elem ) ); 10409 } 10410 } 10411 postFinder( null, ( matcherOut = [] ), temp, xml ); 10412 } 10413 10414 // Move matched elements from seed to results to keep them synchronized 10415 i = matcherOut.length; 10416 while ( i-- ) { 10417 if ( ( elem = matcherOut[ i ] ) && 10418 ( temp = postFinder ? indexOf.call( seed, elem ) : preMap[ i ] ) > -1 ) { 10419 10420 seed[ temp ] = !( results[ temp ] = elem ); 10421 } 10422 } 10423 } 10424 10425 // Add elements to results, through postFinder if defined 10426 } else { 10427 matcherOut = condense( 10428 matcherOut === results ? 10429 matcherOut.splice( preexisting, matcherOut.length ) : 10430 matcherOut 10431 ); 10432 if ( postFinder ) { 10433 postFinder( null, results, matcherOut, xml ); 10434 } else { 10435 push.apply( results, matcherOut ); 10436 } 10437 } 10438 } ); 10439} 10440 10441function matcherFromTokens( tokens ) { 10442 var checkContext, matcher, j, 10443 len = tokens.length, 10444 leadingRelative = Expr.relative[ tokens[ 0 ].type ], 10445 implicitRelative = leadingRelative || Expr.relative[ " " ], 10446 i = leadingRelative ? 1 : 0, 10447 10448 // The foundational matcher ensures that elements are reachable from top-level context(s) 10449 matchContext = addCombinator( function( elem ) { 10450 return elem === checkContext; 10451 }, implicitRelative, true ), 10452 matchAnyContext = addCombinator( function( elem ) { 10453 return indexOf.call( checkContext, elem ) > -1; 10454 }, implicitRelative, true ), 10455 matchers = [ function( elem, context, xml ) { 10456 10457 // Support: IE 11+, Edge 17 - 18+ 10458 // IE/Edge sometimes throw a "Permission denied" error when strict-comparing 10459 // two documents; shallow comparisons work. 10460 // eslint-disable-next-line eqeqeq 10461 var ret = ( !leadingRelative && ( xml || context != outermostContext ) ) || ( 10462 ( checkContext = context ).nodeType ? 10463 matchContext( elem, context, xml ) : 10464 matchAnyContext( elem, context, xml ) ); 10465 10466 // Avoid hanging onto element 10467 // (see https://github.com/jquery/sizzle/issues/299) 10468 checkContext = null; 10469 return ret; 10470 } ]; 10471 10472 for ( ; i < len; i++ ) { 10473 if ( ( matcher = Expr.relative[ tokens[ i ].type ] ) ) { 10474 matchers = [ addCombinator( elementMatcher( matchers ), matcher ) ]; 10475 } else { 10476 matcher = Expr.filter[ tokens[ i ].type ].apply( null, tokens[ i ].matches ); 10477 10478 // Return special upon seeing a positional matcher 10479 if ( matcher[ expando ] ) { 10480 10481 // Find the next relative operator (if any) for proper handling 10482 j = ++i; 10483 for ( ; j < len; j++ ) { 10484 if ( Expr.relative[ tokens[ j ].type ] ) { 10485 break; 10486 } 10487 } 10488 return setMatcher( 10489 i > 1 && elementMatcher( matchers ), 10490 i > 1 && toSelector( 10491 10492 // If the preceding token was a descendant combinator, insert an implicit any-element `*` 10493 tokens.slice( 0, i - 1 ) 10494 .concat( { value: tokens[ i - 2 ].type === " " ? "*" : "" } ) 10495 ).replace( rtrimCSS, "$1" ), 10496 matcher, 10497 i < j && matcherFromTokens( tokens.slice( i, j ) ), 10498 j < len && matcherFromTokens( ( tokens = tokens.slice( j ) ) ), 10499 j < len && toSelector( tokens ) 10500 ); 10501 } 10502 matchers.push( matcher ); 10503 } 10504 } 10505 10506 return elementMatcher( matchers ); 10507} 10508 10509function matcherFromGroupMatchers( elementMatchers, setMatchers ) { 10510 var bySet = setMatchers.length > 0, 10511 byElement = elementMatchers.length > 0, 10512 superMatcher = function( seed, context, xml, results, outermost ) { 10513 var elem, j, matcher, 10514 matchedCount = 0, 10515 i = "0", 10516 unmatched = seed && [], 10517 setMatched = [], 10518 contextBackup = outermostContext, 10519 10520 // We must always have either seed elements or outermost context 10521 elems = seed || byElement && Expr.find.TAG( "*", outermost ), 10522 10523 // Use integer dirruns iff this is the outermost matcher 10524 dirrunsUnique = ( dirruns += contextBackup == null ? 1 : Math.random() || 0.1 ), 10525 len = elems.length; 10526 10527 if ( outermost ) { 10528 10529 // Support: IE 11+, Edge 17 - 18+ 10530 // IE/Edge sometimes throw a "Permission denied" error when strict-comparing 10531 // two documents; shallow comparisons work. 10532 // eslint-disable-next-line eqeqeq 10533 outermostContext = context == document || context || outermost; 10534 } 10535 10536 // Add elements passing elementMatchers directly to results 10537 // Support: iOS <=7 - 9 only 10538 // Tolerate NodeList properties (IE: "length"; Safari: <number>) matching 10539 // elements by id. (see trac-14142) 10540 for ( ; i !== len && ( elem = elems[ i ] ) != null; i++ ) { 10541 if ( byElement && elem ) { 10542 j = 0; 10543 10544 // Support: IE 11+, Edge 17 - 18+ 10545 // IE/Edge sometimes throw a "Permission denied" error when strict-comparing 10546 // two documents; shallow comparisons work. 10547 // eslint-disable-next-line eqeqeq 10548 if ( !context && elem.ownerDocument != document ) { 10549 setDocument( elem ); 10550 xml = !documentIsHTML; 10551 } 10552 while ( ( matcher = elementMatchers[ j++ ] ) ) { 10553 if ( matcher( elem, context || document, xml ) ) { 10554 push.call( results, elem ); 10555 break; 10556 } 10557 } 10558 if ( outermost ) { 10559 dirruns = dirrunsUnique; 10560 } 10561 } 10562 10563 // Track unmatched elements for set filters 10564 if ( bySet ) { 10565 10566 // They will have gone through all possible matchers 10567 if ( ( elem = !matcher && elem ) ) { 10568 matchedCount--; 10569 } 10570 10571 // Lengthen the array for every element, matched or not 10572 if ( seed ) { 10573 unmatched.push( elem ); 10574 } 10575 } 10576 } 10577 10578 // `i` is now the count of elements visited above, and adding it to `matchedCount` 10579 // makes the latter nonnegative. 10580 matchedCount += i; 10581 10582 // Apply set filters to unmatched elements 10583 // NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount` 10584 // equals `i`), unless we didn't visit _any_ elements in the above loop because we have 10585 // no element matchers and no seed. 10586 // Incrementing an initially-string "0" `i` allows `i` to remain a string only in that 10587 // case, which will result in a "00" `matchedCount` that differs from `i` but is also 10588 // numerically zero. 10589 if ( bySet && i !== matchedCount ) { 10590 j = 0; 10591 while ( ( matcher = setMatchers[ j++ ] ) ) { 10592 matcher( unmatched, setMatched, context, xml ); 10593 } 10594 10595 if ( seed ) { 10596 10597 // Reintegrate element matches to eliminate the need for sorting 10598 if ( matchedCount > 0 ) { 10599 while ( i-- ) { 10600 if ( !( unmatched[ i ] || setMatched[ i ] ) ) { 10601 setMatched[ i ] = pop.call( results ); 10602 } 10603 } 10604 } 10605 10606 // Discard index placeholder values to get only actual matches 10607 setMatched = condense( setMatched ); 10608 } 10609 10610 // Add matches to results 10611 push.apply( results, setMatched ); 10612 10613 // Seedless set matches succeeding multiple successful matchers stipulate sorting 10614 if ( outermost && !seed && setMatched.length > 0 && 10615 ( matchedCount + setMatchers.length ) > 1 ) { 10616 10617 jQuery.uniqueSort( results ); 10618 } 10619 } 10620 10621 // Override manipulation of globals by nested matchers 10622 if ( outermost ) { 10623 dirruns = dirrunsUnique; 10624 outermostContext = contextBackup; 10625 } 10626 10627 return unmatched; 10628 }; 10629 10630 return bySet ? 10631 markFunction( superMatcher ) : 10632 superMatcher; 10633} 10634 10635function compile( selector, match /* Internal Use Only */ ) { 10636 var i, 10637 setMatchers = [], 10638 elementMatchers = [], 10639 cached = compilerCache[ selector + " " ]; 10640 10641 if ( !cached ) { 10642 10643 // Generate a function of recursive functions that can be used to check each element 10644 if ( !match ) { 10645 match = tokenize( selector ); 10646 } 10647 i = match.length; 10648 while ( i-- ) { 10649 cached = matcherFromTokens( match[ i ] ); 10650 if ( cached[ expando ] ) { 10651 setMatchers.push( cached ); 10652 } else { 10653 elementMatchers.push( cached ); 10654 } 10655 } 10656 10657 // Cache the compiled function 10658 cached = compilerCache( selector, 10659 matcherFromGroupMatchers( elementMatchers, setMatchers ) ); 10660 10661 // Save selector and tokenization 10662 cached.selector = selector; 10663 } 10664 return cached; 10665} 10666 10667/** 10668 * A low-level selection function that works with jQuery's compiled 10669 * selector functions 10670 * @param {String|Function} selector A selector or a pre-compiled 10671 * selector function built with jQuery selector compile 10672 * @param {Element} context 10673 * @param {Array} [results] 10674 * @param {Array} [seed] A set of elements to match against 10675 */ 10676function select( selector, context, results, seed ) { 10677 var i, tokens, token, type, find, 10678 compiled = typeof selector === "function" && selector, 10679 match = !seed && tokenize( ( selector = compiled.selector || selector ) ); 10680 10681 results = results || []; 10682 10683 // Try to minimize operations if there is only one selector in the list and no seed 10684 // (the latter of which guarantees us context) 10685 if ( match.length === 1 ) { 10686 10687 // Reduce context if the leading compound selector is an ID 10688 tokens = match[ 0 ] = match[ 0 ].slice( 0 ); 10689 if ( tokens.length > 2 && ( token = tokens[ 0 ] ).type === "ID" && 10690 context.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[ 1 ].type ] ) { 10691 10692 context = ( Expr.find.ID( 10693 token.matches[ 0 ].replace( runescape, funescape ), 10694 context 10695 ) || [] )[ 0 ]; 10696 if ( !context ) { 10697 return results; 10698 10699 // Precompiled matchers will still verify ancestry, so step up a level 10700 } else if ( compiled ) { 10701 context = context.parentNode; 10702 } 10703 10704 selector = selector.slice( tokens.shift().value.length ); 10705 } 10706 10707 // Fetch a seed set for right-to-left matching 10708 i = matchExpr.needsContext.test( selector ) ? 0 : tokens.length; 10709 while ( i-- ) { 10710 token = tokens[ i ]; 10711 10712 // Abort if we hit a combinator 10713 if ( Expr.relative[ ( type = token.type ) ] ) { 10714 break; 10715 } 10716 if ( ( find = Expr.find[ type ] ) ) { 10717 10718 // Search, expanding context for leading sibling combinators 10719 if ( ( seed = find( 10720 token.matches[ 0 ].replace( runescape, funescape ), 10721 rsibling.test( tokens[ 0 ].type ) && 10722 testContext( context.parentNode ) || context 10723 ) ) ) { 10724 10725 // If seed is empty or no tokens remain, we can return early 10726 tokens.splice( i, 1 ); 10727 selector = seed.length && toSelector( tokens ); 10728 if ( !selector ) { 10729 push.apply( results, seed ); 10730 return results; 10731 } 10732 10733 break; 10734 } 10735 } 10736 } 10737 } 10738 10739 // Compile and execute a filtering function if one is not provided 10740 // Provide `match` to avoid retokenization if we modified the selector above 10741 ( compiled || compile( selector, match ) )( 10742 seed, 10743 context, 10744 !documentIsHTML, 10745 results, 10746 !context || rsibling.test( selector ) && testContext( context.parentNode ) || context 10747 ); 10748 return results; 10749} 10750 10751// One-time assignments 10752 10753// Support: Android <=4.0 - 4.1+ 10754// Sort stability 10755support.sortStable = expando.split( "" ).sort( sortOrder ).join( "" ) === expando; 10756 10757// Initialize against the default document 10758setDocument(); 10759 10760// Support: Android <=4.0 - 4.1+ 10761// Detached nodes confoundingly follow *each other* 10762support.sortDetached = assert( function( el ) { 10763 10764 // Should return 1, but returns 4 (following) 10765 return el.compareDocumentPosition( document.createElement( "fieldset" ) ) & 1; 10766} ); 10767 10768jQuery.find = find; 10769 10770// Deprecated 10771jQuery.expr[ ":" ] = jQuery.expr.pseudos; 10772jQuery.unique = jQuery.uniqueSort; 10773 10774// These have always been private, but they used to be documented as part of 10775// Sizzle so let's maintain them for now for backwards compatibility purposes. 10776find.compile = compile; 10777find.select = select; 10778find.setDocument = setDocument; 10779find.tokenize = tokenize; 10780 10781find.escape = jQuery.escapeSelector; 10782find.getText = jQuery.text; 10783find.isXML = jQuery.isXMLDoc; 10784find.selectors = jQuery.expr; 10785find.support = jQuery.support; 10786find.uniqueSort = jQuery.uniqueSort; 10787 10788 /* eslint-enable */ 10789 10790} )(); 10791 10792 10793var dir = function( elem, dir, until ) { 10794 var matched = [], 10795 truncate = until !== undefined; 10796 10797 while ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) { 10798 if ( elem.nodeType === 1 ) { 10799 if ( truncate && jQuery( elem ).is( until ) ) { 10800 break; 10801 } 10802 matched.push( elem ); 10803 } 10804 } 10805 return matched; 10806}; 10807 10808 10809var siblings = function( n, elem ) { 10810 var matched = []; 10811 10812 for ( ; n; n = n.nextSibling ) { 10813 if ( n.nodeType === 1 && n !== elem ) { 10814 matched.push( n ); 10815 } 10816 } 10817 10818 return matched; 10819}; 10820 10821 10822var rneedsContext = jQuery.expr.match.needsContext; 10823 10824var rsingleTag = ( /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i ); 10825 10826 10827 10828// Implement the identical functionality for filter and not 10829function winnow( elements, qualifier, not ) { 10830 if ( isFunction( qualifier ) ) { 10831 return jQuery.grep( elements, function( elem, i ) { 10832 return !!qualifier.call( elem, i, elem ) !== not; 10833 } ); 10834 } 10835 10836 // Single element 10837 if ( qualifier.nodeType ) { 10838 return jQuery.grep( elements, function( elem ) { 10839 return ( elem === qualifier ) !== not; 10840 } ); 10841 } 10842 10843 // Arraylike of elements (jQuery, arguments, Array) 10844 if ( typeof qualifier !== "string" ) { 10845 return jQuery.grep( elements, function( elem ) { 10846 return ( indexOf.call( qualifier, elem ) > -1 ) !== not; 10847 } ); 10848 } 10849 10850 // Filtered directly for both simple and complex selectors 10851 return jQuery.filter( qualifier, elements, not ); 10852} 10853 10854jQuery.filter = function( expr, elems, not ) { 10855 var elem = elems[ 0 ]; 10856 10857 if ( not ) { 10858 expr = ":not(" + expr + ")"; 10859 } 10860 10861 if ( elems.length === 1 && elem.nodeType === 1 ) { 10862 return jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : []; 10863 } 10864 10865 return jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) { 10866 return elem.nodeType === 1; 10867 } ) ); 10868}; 10869 10870jQuery.fn.extend( { 10871 find: function( selector ) { 10872 var i, ret, 10873 len = this.length, 10874 self = this; 10875 10876 if ( typeof selector !== "string" ) { 10877 return this.pushStack( jQuery( selector ).filter( function() { 10878 for ( i = 0; i < len; i++ ) { 10879 if ( jQuery.contains( self[ i ], this ) ) { 10880 return true; 10881 } 10882 } 10883 } ) ); 10884 } 10885 10886 ret = this.pushStack( [] ); 10887 10888 for ( i = 0; i < len; i++ ) { 10889 jQuery.find( selector, self[ i ], ret ); 10890 } 10891 10892 return len > 1 ? jQuery.uniqueSort( ret ) : ret; 10893 }, 10894 filter: function( selector ) { 10895 return this.pushStack( winnow( this, selector || [], false ) ); 10896 }, 10897 not: function( selector ) { 10898 return this.pushStack( winnow( this, selector || [], true ) ); 10899 }, 10900 is: function( selector ) { 10901 return !!winnow( 10902 this, 10903 10904 // If this is a positional/relative selector, check membership in the returned set 10905 // so $("p:first").is("p:last") won't return true for a doc with two "p". 10906 typeof selector === "string" && rneedsContext.test( selector ) ? 10907 jQuery( selector ) : 10908 selector || [], 10909 false 10910 ).length; 10911 } 10912} ); 10913 10914 10915// Initialize a jQuery object 10916 10917 10918// A central reference to the root jQuery(document) 10919var rootjQuery, 10920 10921 // A simple way to check for HTML strings 10922 // Prioritize #id over <tag> to avoid XSS via location.hash (trac-9521) 10923 // Strict HTML recognition (trac-11290: must start with <) 10924 // Shortcut simple #id case for speed 10925 rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/, 10926 10927 init = jQuery.fn.init = function( selector, context, root ) { 10928 var match, elem; 10929 10930 // HANDLE: $(""), $(null), $(undefined), $(false) 10931 if ( !selector ) { 10932 return this; 10933 } 10934 10935 // Method init() accepts an alternate rootjQuery 10936 // so migrate can support jQuery.sub (gh-2101) 10937 root = root || rootjQuery; 10938 10939 // Handle HTML strings 10940 if ( typeof selector === "string" ) { 10941 if ( selector[ 0 ] === "<" && 10942 selector[ selector.length - 1 ] === ">" && 10943 selector.length >= 3 ) { 10944 10945 // Assume that strings that start and end with <> are HTML and skip the regex check 10946 match = [ null, selector, null ]; 10947 10948 } else { 10949 match = rquickExpr.exec( selector ); 10950 } 10951 10952 // Match html or make sure no context is specified for #id 10953 if ( match && ( match[ 1 ] || !context ) ) { 10954 10955 // HANDLE: $(html) -> $(array) 10956 if ( match[ 1 ] ) { 10957 context = context instanceof jQuery ? context[ 0 ] : context; 10958 10959 // Option to run scripts is true for back-compat 10960 // Intentionally let the error be thrown if parseHTML is not present 10961 jQuery.merge( this, jQuery.parseHTML( 10962 match[ 1 ], 10963 context && context.nodeType ? context.ownerDocument || context : document, 10964 true 10965 ) ); 10966 10967 // HANDLE: $(html, props) 10968 if ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) { 10969 for ( match in context ) { 10970 10971 // Properties of context are called as methods if possible 10972 if ( isFunction( this[ match ] ) ) { 10973 this[ match ]( context[ match ] ); 10974 10975 // ...and otherwise set as attributes 10976 } else { 10977 this.attr( match, context[ match ] ); 10978 } 10979 } 10980 } 10981 10982 return this; 10983 10984 // HANDLE: $(#id) 10985 } else { 10986 elem = document.getElementById( match[ 2 ] ); 10987 10988 if ( elem ) { 10989 10990 // Inject the element directly into the jQuery object 10991 this[ 0 ] = elem; 10992 this.length = 1; 10993 } 10994 return this; 10995 } 10996 10997 // HANDLE: $(expr, $(...)) 10998 } else if ( !context || context.jquery ) { 10999 return ( context || root ).find( selector ); 11000 11001 // HANDLE: $(expr, context) 11002 // (which is just equivalent to: $(context).find(expr) 11003 } else { 11004 return this.constructor( context ).find( selector ); 11005 } 11006 11007 // HANDLE: $(DOMElement) 11008 } else if ( selector.nodeType ) { 11009 this[ 0 ] = selector; 11010 this.length = 1; 11011 return this; 11012 11013 // HANDLE: $(function) 11014 // Shortcut for document ready 11015 } else if ( isFunction( selector ) ) { 11016 return root.ready !== undefined ? 11017 root.ready( selector ) : 11018 11019 // Execute immediately if ready is not present 11020 selector( jQuery ); 11021 } 11022 11023 return jQuery.makeArray( selector, this ); 11024 }; 11025 11026// Give the init function the jQuery prototype for later instantiation 11027init.prototype = jQuery.fn; 11028 11029// Initialize central reference 11030rootjQuery = jQuery( document ); 11031 11032 11033var rparentsprev = /^(?:parents|prev(?:Until|All))/, 11034 11035 // Methods guaranteed to produce a unique set when starting from a unique set 11036 guaranteedUnique = { 11037 children: true, 11038 contents: true, 11039 next: true, 11040 prev: true 11041 }; 11042 11043jQuery.fn.extend( { 11044 has: function( target ) { 11045 var targets = jQuery( target, this ), 11046 l = targets.length; 11047 11048 return this.filter( function() { 11049 var i = 0; 11050 for ( ; i < l; i++ ) { 11051 if ( jQuery.contains( this, targets[ i ] ) ) { 11052 return true; 11053 } 11054 } 11055 } ); 11056 }, 11057 11058 closest: function( selectors, context ) { 11059 var cur, 11060 i = 0, 11061 l = this.length, 11062 matched = [], 11063 targets = typeof selectors !== "string" && jQuery( selectors ); 11064 11065 // Positional selectors never match, since there's no _selection_ context 11066 if ( !rneedsContext.test( selectors ) ) { 11067 for ( ; i < l; i++ ) { 11068 for ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) { 11069 11070 // Always skip document fragments 11071 if ( cur.nodeType < 11 && ( targets ? 11072 targets.index( cur ) > -1 : 11073 11074 // Don't pass non-elements to jQuery#find 11075 cur.nodeType === 1 && 11076 jQuery.find.matchesSelector( cur, selectors ) ) ) { 11077 11078 matched.push( cur ); 11079 break; 11080 } 11081 } 11082 } 11083 } 11084 11085 return this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched ); 11086 }, 11087 11088 // Determine the position of an element within the set 11089 index: function( elem ) { 11090 11091 // No argument, return index in parent 11092 if ( !elem ) { 11093 return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1; 11094 } 11095 11096 // Index in selector 11097 if ( typeof elem === "string" ) { 11098 return indexOf.call( jQuery( elem ), this[ 0 ] ); 11099 } 11100 11101 // Locate the position of the desired element 11102 return indexOf.call( this, 11103 11104 // If it receives a jQuery object, the first element is used 11105 elem.jquery ? elem[ 0 ] : elem 11106 ); 11107 }, 11108 11109 add: function( selector, context ) { 11110 return this.pushStack( 11111 jQuery.uniqueSort( 11112 jQuery.merge( this.get(), jQuery( selector, context ) ) 11113 ) 11114 ); 11115 }, 11116 11117 addBack: function( selector ) { 11118 return this.add( selector == null ? 11119 this.prevObject : this.prevObject.filter( selector ) 11120 ); 11121 } 11122} ); 11123 11124function sibling( cur, dir ) { 11125 while ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {} 11126 return cur; 11127} 11128 11129jQuery.each( { 11130 parent: function( elem ) { 11131 var parent = elem.parentNode; 11132 return parent && parent.nodeType !== 11 ? parent : null; 11133 }, 11134 parents: function( elem ) { 11135 return dir( elem, "parentNode" ); 11136 }, 11137 parentsUntil: function( elem, _i, until ) { 11138 return dir( elem, "parentNode", until ); 11139 }, 11140 next: function( elem ) { 11141 return sibling( elem, "nextSibling" ); 11142 }, 11143 prev: function( elem ) { 11144 return sibling( elem, "previousSibling" ); 11145 }, 11146 nextAll: function( elem ) { 11147 return dir( elem, "nextSibling" ); 11148 }, 11149 prevAll: function( elem ) { 11150 return dir( elem, "previousSibling" ); 11151 }, 11152 nextUntil: function( elem, _i, until ) { 11153 return dir( elem, "nextSibling", until ); 11154 }, 11155 prevUntil: function( elem, _i, until ) { 11156 return dir( elem, "previousSibling", until ); 11157 }, 11158 siblings: function( elem ) { 11159 return siblings( ( elem.parentNode || {} ).firstChild, elem ); 11160 }, 11161 children: function( elem ) { 11162 return siblings( elem.firstChild ); 11163 }, 11164 contents: function( elem ) { 11165 if ( elem.contentDocument != null && 11166 11167 // Support: IE 11+ 11168 // <object> elements with no `data` attribute has an object 11169 // `contentDocument` with a `null` prototype. 11170 getProto( elem.contentDocument ) ) { 11171 11172 return elem.contentDocument; 11173 } 11174 11175 // Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only 11176 // Treat the template element as a regular one in browsers that 11177 // don't support it. 11178 if ( nodeName( elem, "template" ) ) { 11179 elem = elem.content || elem; 11180 } 11181 11182 return jQuery.merge( [], elem.childNodes ); 11183 } 11184}, function( name, fn ) { 11185 jQuery.fn[ name ] = function( until, selector ) { 11186 var matched = jQuery.map( this, fn, until ); 11187 11188 if ( name.slice( -5 ) !== "Until" ) { 11189 selector = until; 11190 } 11191 11192 if ( selector && typeof selector === "string" ) { 11193 matched = jQuery.filter( selector, matched ); 11194 } 11195 11196 if ( this.length > 1 ) { 11197 11198 // Remove duplicates 11199 if ( !guaranteedUnique[ name ] ) { 11200 jQuery.uniqueSort( matched ); 11201 } 11202 11203 // Reverse order for parents* and prev-derivatives 11204 if ( rparentsprev.test( name ) ) { 11205 matched.reverse(); 11206 } 11207 } 11208 11209 return this.pushStack( matched ); 11210 }; 11211} ); 11212var rnothtmlwhite = ( /[^\x20\t\r\n\f]+/g ); 11213 11214 11215 11216// Convert String-formatted options into Object-formatted ones 11217function createOptions( options ) { 11218 var object = {}; 11219 jQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) { 11220 object[ flag ] = true; 11221 } ); 11222 return object; 11223} 11224 11225/* 11226 * Create a callback list using the following parameters: 11227 * 11228 * options: an optional list of space-separated options that will change how 11229 * the callback list behaves or a more traditional option object 11230 * 11231 * By default a callback list will act like an event callback list and can be 11232 * "fired" multiple times. 11233 * 11234 * Possible options: 11235 * 11236 * once: will ensure the callback list can only be fired once (like a Deferred) 11237 * 11238 * memory: will keep track of previous values and will call any callback added 11239 * after the list has been fired right away with the latest "memorized" 11240 * values (like a Deferred) 11241 * 11242 * unique: will ensure a callback can only be added once (no duplicate in the list) 11243 * 11244 * stopOnFalse: interrupt callings when a callback returns false 11245 * 11246 */ 11247jQuery.Callbacks = function( options ) { 11248 11249 // Convert options from String-formatted to Object-formatted if needed 11250 // (we check in cache first) 11251 options = typeof options === "string" ? 11252 createOptions( options ) : 11253 jQuery.extend( {}, options ); 11254 11255 var // Flag to know if list is currently firing 11256 firing, 11257 11258 // Last fire value for non-forgettable lists 11259 memory, 11260 11261 // Flag to know if list was already fired 11262 fired, 11263 11264 // Flag to prevent firing 11265 locked, 11266 11267 // Actual callback list 11268 list = [], 11269 11270 // Queue of execution data for repeatable lists 11271 queue = [], 11272 11273 // Index of currently firing callback (modified by add/remove as needed) 11274 firingIndex = -1, 11275 11276 // Fire callbacks 11277 fire = function() { 11278 11279 // Enforce single-firing 11280 locked = locked || options.once; 11281 11282 // Execute callbacks for all pending executions, 11283 // respecting firingIndex overrides and runtime changes 11284 fired = firing = true; 11285 for ( ; queue.length; firingIndex = -1 ) { 11286 memory = queue.shift(); 11287 while ( ++firingIndex < list.length ) { 11288 11289 // Run callback and check for early termination 11290 if ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false && 11291 options.stopOnFalse ) { 11292 11293 // Jump to end and forget the data so .add doesn't re-fire 11294 firingIndex = list.length; 11295 memory = false; 11296 } 11297 } 11298 } 11299 11300 // Forget the data if we're done with it 11301 if ( !options.memory ) { 11302 memory = false; 11303 } 11304 11305 firing = false; 11306 11307 // Clean up if we're done firing for good 11308 if ( locked ) { 11309 11310 // Keep an empty list if we have data for future add calls 11311 if ( memory ) { 11312 list = []; 11313 11314 // Otherwise, this object is spent 11315 } else { 11316 list = ""; 11317 } 11318 } 11319 }, 11320 11321 // Actual Callbacks object 11322 self = { 11323 11324 // Add a callback or a collection of callbacks to the list 11325 add: function() { 11326 if ( list ) { 11327 11328 // If we have memory from a past run, we should fire after adding 11329 if ( memory && !firing ) { 11330 firingIndex = list.length - 1; 11331 queue.push( memory ); 11332 } 11333 11334 ( function add( args ) { 11335 jQuery.each( args, function( _, arg ) { 11336 if ( isFunction( arg ) ) { 11337 if ( !options.unique || !self.has( arg ) ) { 11338 list.push( arg ); 11339 } 11340 } else if ( arg && arg.length && toType( arg ) !== "string" ) { 11341 11342 // Inspect recursively 11343 add( arg ); 11344 } 11345 } ); 11346 } )( arguments ); 11347 11348 if ( memory && !firing ) { 11349 fire(); 11350 } 11351 } 11352 return this; 11353 }, 11354 11355 // Remove a callback from the list 11356 remove: function() { 11357 jQuery.each( arguments, function( _, arg ) { 11358 var index; 11359 while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) { 11360 list.splice( index, 1 ); 11361 11362 // Handle firing indexes 11363 if ( index <= firingIndex ) { 11364 firingIndex--; 11365 } 11366 } 11367 } ); 11368 return this; 11369 }, 11370 11371 // Check if a given callback is in the list. 11372 // If no argument is given, return whether or not list has callbacks attached. 11373 has: function( fn ) { 11374 return fn ? 11375 jQuery.inArray( fn, list ) > -1 : 11376 list.length > 0; 11377 }, 11378 11379 // Remove all callbacks from the list 11380 empty: function() { 11381 if ( list ) { 11382 list = []; 11383 } 11384 return this; 11385 }, 11386 11387 // Disable .fire and .add 11388 // Abort any current/pending executions 11389 // Clear all callbacks and values 11390 disable: function() { 11391 locked = queue = []; 11392 list = memory = ""; 11393 return this; 11394 }, 11395 disabled: function() { 11396 return !list; 11397 }, 11398 11399 // Disable .fire 11400 // Also disable .add unless we have memory (since it would have no effect) 11401 // Abort any pending executions 11402 lock: function() { 11403 locked = queue = []; 11404 if ( !memory && !firing ) { 11405 list = memory = ""; 11406 } 11407 return this; 11408 }, 11409 locked: function() { 11410 return !!locked; 11411 }, 11412 11413 // Call all callbacks with the given context and arguments 11414 fireWith: function( context, args ) { 11415 if ( !locked ) { 11416 args = args || []; 11417 args = [ context, args.slice ? args.slice() : args ]; 11418 queue.push( args ); 11419 if ( !firing ) { 11420 fire(); 11421 } 11422 } 11423 return this; 11424 }, 11425 11426 // Call all the callbacks with the given arguments 11427 fire: function() { 11428 self.fireWith( this, arguments ); 11429 return this; 11430 }, 11431 11432 // To know if the callbacks have already been called at least once 11433 fired: function() { 11434 return !!fired; 11435 } 11436 }; 11437 11438 return self; 11439}; 11440 11441 11442function Identity( v ) { 11443 return v; 11444} 11445function Thrower( ex ) { 11446 throw ex; 11447} 11448 11449function adoptValue( value, resolve, reject, noValue ) { 11450 var method; 11451 11452 try { 11453 11454 // Check for promise aspect first to privilege synchronous behavior 11455 if ( value && isFunction( ( method = value.promise ) ) ) { 11456 method.call( value ).done( resolve ).fail( reject ); 11457 11458 // Other thenables 11459 } else if ( value && isFunction( ( method = value.then ) ) ) { 11460 method.call( value, resolve, reject ); 11461 11462 // Other non-thenables 11463 } else { 11464 11465 // Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer: 11466 // * false: [ value ].slice( 0 ) => resolve( value ) 11467 // * true: [ value ].slice( 1 ) => resolve() 11468 resolve.apply( undefined, [ value ].slice( noValue ) ); 11469 } 11470 11471 // For Promises/A+, convert exceptions into rejections 11472 // Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in 11473 // Deferred#then to conditionally suppress rejection. 11474 } catch ( value ) { 11475 11476 // Support: Android 4.0 only 11477 // Strict mode functions invoked without .call/.apply get global-object context 11478 reject.apply( undefined, [ value ] ); 11479 } 11480} 11481 11482jQuery.extend( { 11483 11484 Deferred: function( func ) { 11485 var tuples = [ 11486 11487 // action, add listener, callbacks, 11488 // ... .then handlers, argument index, [final state] 11489 [ "notify", "progress", jQuery.Callbacks( "memory" ), 11490 jQuery.Callbacks( "memory" ), 2 ], 11491 [ "resolve", "done", jQuery.Callbacks( "once memory" ), 11492 jQuery.Callbacks( "once memory" ), 0, "resolved" ], 11493 [ "reject", "fail", jQuery.Callbacks( "once memory" ), 11494 jQuery.Callbacks( "once memory" ), 1, "rejected" ] 11495 ], 11496 state = "pending", 11497 promise = { 11498 state: function() { 11499 return state; 11500 }, 11501 always: function() { 11502 deferred.done( arguments ).fail( arguments ); 11503 return this; 11504 }, 11505 "catch": function( fn ) { 11506 return promise.then( null, fn ); 11507 }, 11508 11509 // Keep pipe for back-compat 11510 pipe: function( /* fnDone, fnFail, fnProgress */ ) { 11511 var fns = arguments; 11512 11513 return jQuery.Deferred( function( newDefer ) { 11514 jQuery.each( tuples, function( _i, tuple ) { 11515 11516 // Map tuples (progress, done, fail) to arguments (done, fail, progress) 11517 var fn = isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ]; 11518 11519 // deferred.progress(function() { bind to newDefer or newDefer.notify }) 11520 // deferred.done(function() { bind to newDefer or newDefer.resolve }) 11521 // deferred.fail(function() { bind to newDefer or newDefer.reject }) 11522 deferred[ tuple[ 1 ] ]( function() { 11523 var returned = fn && fn.apply( this, arguments ); 11524 if ( returned && isFunction( returned.promise ) ) { 11525 returned.promise() 11526 .progress( newDefer.notify ) 11527 .done( newDefer.resolve ) 11528 .fail( newDefer.reject ); 11529 } else { 11530 newDefer[ tuple[ 0 ] + "With" ]( 11531 this, 11532 fn ? [ returned ] : arguments 11533 ); 11534 } 11535 } ); 11536 } ); 11537 fns = null; 11538 } ).promise(); 11539 }, 11540 then: function( onFulfilled, onRejected, onProgress ) { 11541 var maxDepth = 0; 11542 function resolve( depth, deferred, handler, special ) { 11543 return function() { 11544 var that = this, 11545 args = arguments, 11546 mightThrow = function() { 11547 var returned, then; 11548 11549 // Support: Promises/A+ section 2.3.3.3.3 11550 // https://promisesaplus.com/#point-59 11551 // Ignore double-resolution attempts 11552 if ( depth < maxDepth ) { 11553 return; 11554 } 11555 11556 returned = handler.apply( that, args ); 11557 11558 // Support: Promises/A+ section 2.3.1 11559 // https://promisesaplus.com/#point-48 11560 if ( returned === deferred.promise() ) { 11561 throw new TypeError( "Thenable self-resolution" ); 11562 } 11563 11564 // Support: Promises/A+ sections 2.3.3.1, 3.5 11565 // https://promisesaplus.com/#point-54 11566 // https://promisesaplus.com/#point-75 11567 // Retrieve `then` only once 11568 then = returned && 11569 11570 // Support: Promises/A+ section 2.3.4 11571 // https://promisesaplus.com/#point-64 11572 // Only check objects and functions for thenability 11573 ( typeof returned === "object" || 11574 typeof returned === "function" ) && 11575 returned.then; 11576 11577 // Handle a returned thenable 11578 if ( isFunction( then ) ) { 11579 11580 // Special processors (notify) just wait for resolution 11581 if ( special ) { 11582 then.call( 11583 returned, 11584 resolve( maxDepth, deferred, Identity, special ), 11585 resolve( maxDepth, deferred, Thrower, special ) 11586 ); 11587 11588 // Normal processors (resolve) also hook into progress 11589 } else { 11590 11591 // ...and disregard older resolution values 11592 maxDepth++; 11593 11594 then.call( 11595 returned, 11596 resolve( maxDepth, deferred, Identity, special ), 11597 resolve( maxDepth, deferred, Thrower, special ), 11598 resolve( maxDepth, deferred, Identity, 11599 deferred.notifyWith ) 11600 ); 11601 } 11602 11603 // Handle all other returned values 11604 } else { 11605 11606 // Only substitute handlers pass on context 11607 // and multiple values (non-spec behavior) 11608 if ( handler !== Identity ) { 11609 that = undefined; 11610 args = [ returned ]; 11611 } 11612 11613 // Process the value(s) 11614 // Default process is resolve 11615 ( special || deferred.resolveWith )( that, args ); 11616 } 11617 }, 11618 11619 // Only normal processors (resolve) catch and reject exceptions 11620 process = special ? 11621 mightThrow : 11622 function() { 11623 try { 11624 mightThrow(); 11625 } catch ( e ) { 11626 11627 if ( jQuery.Deferred.exceptionHook ) { 11628 jQuery.Deferred.exceptionHook( e, 11629 process.error ); 11630 } 11631 11632 // Support: Promises/A+ section 2.3.3.3.4.1 11633 // https://promisesaplus.com/#point-61 11634 // Ignore post-resolution exceptions 11635 if ( depth + 1 >= maxDepth ) { 11636 11637 // Only substitute handlers pass on context 11638 // and multiple values (non-spec behavior) 11639 if ( handler !== Thrower ) { 11640 that = undefined; 11641 args = [ e ]; 11642 } 11643 11644 deferred.rejectWith( that, args ); 11645 } 11646 } 11647 }; 11648 11649 // Support: Promises/A+ section 2.3.3.3.1 11650 // https://promisesaplus.com/#point-57 11651 // Re-resolve promises immediately to dodge false rejection from 11652 // subsequent errors 11653 if ( depth ) { 11654 process(); 11655 } else { 11656 11657 // Call an optional hook to record the error, in case of exception 11658 // since it's otherwise lost when execution goes async 11659 if ( jQuery.Deferred.getErrorHook ) { 11660 process.error = jQuery.Deferred.getErrorHook(); 11661 11662 // The deprecated alias of the above. While the name suggests 11663 // returning the stack, not an error instance, jQuery just passes 11664 // it directly to `console.warn` so both will work; an instance 11665 // just better cooperates with source maps. 11666 } else if ( jQuery.Deferred.getStackHook ) { 11667 process.error = jQuery.Deferred.getStackHook(); 11668 } 11669 window.setTimeout( process ); 11670 } 11671 }; 11672 } 11673 11674 return jQuery.Deferred( function( newDefer ) { 11675 11676 // progress_handlers.add( ... ) 11677 tuples[ 0 ][ 3 ].add( 11678 resolve( 11679 0, 11680 newDefer, 11681 isFunction( onProgress ) ? 11682 onProgress : 11683 Identity, 11684 newDefer.notifyWith 11685 ) 11686 ); 11687 11688 // fulfilled_handlers.add( ... ) 11689 tuples[ 1 ][ 3 ].add( 11690 resolve( 11691 0, 11692 newDefer, 11693 isFunction( onFulfilled ) ? 11694 onFulfilled : 11695 Identity 11696 ) 11697 ); 11698 11699 // rejected_handlers.add( ... ) 11700 tuples[ 2 ][ 3 ].add( 11701 resolve( 11702 0, 11703 newDefer, 11704 isFunction( onRejected ) ? 11705 onRejected : 11706 Thrower 11707 ) 11708 ); 11709 } ).promise(); 11710 }, 11711 11712 // Get a promise for this deferred 11713 // If obj is provided, the promise aspect is added to the object 11714 promise: function( obj ) { 11715 return obj != null ? jQuery.extend( obj, promise ) : promise; 11716 } 11717 }, 11718 deferred = {}; 11719 11720 // Add list-specific methods 11721 jQuery.each( tuples, function( i, tuple ) { 11722 var list = tuple[ 2 ], 11723 stateString = tuple[ 5 ]; 11724 11725 // promise.progress = list.add 11726 // promise.done = list.add 11727 // promise.fail = list.add 11728 promise[ tuple[ 1 ] ] = list.add; 11729 11730 // Handle state 11731 if ( stateString ) { 11732 list.add( 11733 function() { 11734 11735 // state = "resolved" (i.e., fulfilled) 11736 // state = "rejected" 11737 state = stateString; 11738 }, 11739 11740 // rejected_callbacks.disable 11741 // fulfilled_callbacks.disable 11742 tuples[ 3 - i ][ 2 ].disable, 11743 11744 // rejected_handlers.disable 11745 // fulfilled_handlers.disable 11746 tuples[ 3 - i ][ 3 ].disable, 11747 11748 // progress_callbacks.lock 11749 tuples[ 0 ][ 2 ].lock, 11750 11751 // progress_handlers.lock 11752 tuples[ 0 ][ 3 ].lock 11753 ); 11754 } 11755 11756 // progress_handlers.fire 11757 // fulfilled_handlers.fire 11758 // rejected_handlers.fire 11759 list.add( tuple[ 3 ].fire ); 11760 11761 // deferred.notify = function() { deferred.notifyWith(...) } 11762 // deferred.resolve = function() { deferred.resolveWith(...) } 11763 // deferred.reject = function() { deferred.rejectWith(...) } 11764 deferred[ tuple[ 0 ] ] = function() { 11765 deferred[ tuple[ 0 ] + "With" ]( this === deferred ? undefined : this, arguments ); 11766 return this; 11767 }; 11768 11769 // deferred.notifyWith = list.fireWith 11770 // deferred.resolveWith = list.fireWith 11771 // deferred.rejectWith = list.fireWith 11772 deferred[ tuple[ 0 ] + "With" ] = list.fireWith; 11773 } ); 11774 11775 // Make the deferred a promise 11776 promise.promise( deferred ); 11777 11778 // Call given func if any 11779 if ( func ) { 11780 func.call( deferred, deferred ); 11781 } 11782 11783 // All done! 11784 return deferred; 11785 }, 11786 11787 // Deferred helper 11788 when: function( singleValue ) { 11789 var 11790 11791 // count of uncompleted subordinates 11792 remaining = arguments.length, 11793 11794 // count of unprocessed arguments 11795 i = remaining, 11796 11797 // subordinate fulfillment data 11798 resolveContexts = Array( i ), 11799 resolveValues = slice.call( arguments ), 11800 11801 // the primary Deferred 11802 primary = jQuery.Deferred(), 11803 11804 // subordinate callback factory 11805 updateFunc = function( i ) { 11806 return function( value ) { 11807 resolveContexts[ i ] = this; 11808 resolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value; 11809 if ( !( --remaining ) ) { 11810 primary.resolveWith( resolveContexts, resolveValues ); 11811 } 11812 }; 11813 }; 11814 11815 // Single- and empty arguments are adopted like Promise.resolve 11816 if ( remaining <= 1 ) { 11817 adoptValue( singleValue, primary.done( updateFunc( i ) ).resolve, primary.reject, 11818 !remaining ); 11819 11820 // Use .then() to unwrap secondary thenables (cf. gh-3000) 11821 if ( primary.state() === "pending" || 11822 isFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) { 11823 11824 return primary.then(); 11825 } 11826 } 11827 11828 // Multiple arguments are aggregated like Promise.all array elements 11829 while ( i-- ) { 11830 adoptValue( resolveValues[ i ], updateFunc( i ), primary.reject ); 11831 } 11832 11833 return primary.promise(); 11834 } 11835} ); 11836 11837 11838// These usually indicate a programmer mistake during development, 11839// warn about them ASAP rather than swallowing them by default. 11840var rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/; 11841 11842// If `jQuery.Deferred.getErrorHook` is defined, `asyncError` is an error 11843// captured before the async barrier to get the original error cause 11844// which may otherwise be hidden. 11845jQuery.Deferred.exceptionHook = function( error, asyncError ) { 11846 11847 // Support: IE 8 - 9 only 11848 // Console exists when dev tools are open, which can happen at any time 11849 if ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) { 11850 window.console.warn( "jQuery.Deferred exception: " + error.message, 11851 error.stack, asyncError ); 11852 } 11853}; 11854 11855 11856 11857 11858jQuery.readyException = function( error ) { 11859 window.setTimeout( function() { 11860 throw error; 11861 } ); 11862}; 11863 11864 11865 11866 11867// The deferred used on DOM ready 11868var readyList = jQuery.Deferred(); 11869 11870jQuery.fn.ready = function( fn ) { 11871 11872 readyList 11873 .then( fn ) 11874 11875 // Wrap jQuery.readyException in a function so that the lookup 11876 // happens at the time of error handling instead of callback 11877 // registration. 11878 .catch( function( error ) { 11879 jQuery.readyException( error ); 11880 } ); 11881 11882 return this; 11883}; 11884 11885jQuery.extend( { 11886 11887 // Is the DOM ready to be used? Set to true once it occurs. 11888 isReady: false, 11889 11890 // A counter to track how many items to wait for before 11891 // the ready event fires. See trac-6781 11892 readyWait: 1, 11893 11894 // Handle when the DOM is ready 11895 ready: function( wait ) { 11896 11897 // Abort if there are pending holds or we're already ready 11898 if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) { 11899 return; 11900 } 11901 11902 // Remember that the DOM is ready 11903 jQuery.isReady = true; 11904 11905 // If a normal DOM Ready event fired, decrement, and wait if need be 11906 if ( wait !== true && --jQuery.readyWait > 0 ) { 11907 return; 11908 } 11909 11910 // If there are functions bound, to execute 11911 readyList.resolveWith( document, [ jQuery ] ); 11912 } 11913} ); 11914 11915jQuery.ready.then = readyList.then; 11916 11917// The ready event handler and self cleanup method 11918function completed() { 11919 document.removeEventListener( "DOMContentLoaded", completed ); 11920 window.removeEventListener( "load", completed ); 11921 jQuery.ready(); 11922} 11923 11924// Catch cases where $(document).ready() is called 11925// after the browser event has already occurred. 11926// Support: IE <=9 - 10 only 11927// Older IE sometimes signals "interactive" too soon 11928if ( document.readyState === "complete" || 11929 ( document.readyState !== "loading" && !document.documentElement.doScroll ) ) { 11930 11931 // Handle it asynchronously to allow scripts the opportunity to delay ready 11932 window.setTimeout( jQuery.ready ); 11933 11934} else { 11935 11936 // Use the handy event callback 11937 document.addEventListener( "DOMContentLoaded", completed ); 11938 11939 // A fallback to window.onload, that will always work 11940 window.addEventListener( "load", completed ); 11941} 11942 11943 11944 11945 11946// Multifunctional method to get and set values of a collection 11947// The value/s can optionally be executed if it's a function 11948var access = function( elems, fn, key, value, chainable, emptyGet, raw ) { 11949 var i = 0, 11950 len = elems.length, 11951 bulk = key == null; 11952 11953 // Sets many values 11954 if ( toType( key ) === "object" ) { 11955 chainable = true; 11956 for ( i in key ) { 11957 access( elems, fn, i, key[ i ], true, emptyGet, raw ); 11958 } 11959 11960 // Sets one value 11961 } else if ( value !== undefined ) { 11962 chainable = true; 11963 11964 if ( !isFunction( value ) ) { 11965 raw = true; 11966 } 11967 11968 if ( bulk ) { 11969 11970 // Bulk operations run against the entire set 11971 if ( raw ) { 11972 fn.call( elems, value ); 11973 fn = null; 11974 11975 // ...except when executing function values 11976 } else { 11977 bulk = fn; 11978 fn = function( elem, _key, value ) { 11979 return bulk.call( jQuery( elem ), value ); 11980 }; 11981 } 11982 } 11983 11984 if ( fn ) { 11985 for ( ; i < len; i++ ) { 11986 fn( 11987 elems[ i ], key, raw ? 11988 value : 11989 value.call( elems[ i ], i, fn( elems[ i ], key ) ) 11990 ); 11991 } 11992 } 11993 } 11994 11995 if ( chainable ) { 11996 return elems; 11997 } 11998 11999 // Gets 12000 if ( bulk ) { 12001 return fn.call( elems ); 12002 } 12003 12004 return len ? fn( elems[ 0 ], key ) : emptyGet; 12005}; 12006 12007 12008// Matches dashed string for camelizing 12009var rmsPrefix = /^-ms-/, 12010 rdashAlpha = /-([a-z])/g; 12011 12012// Used by camelCase as callback to replace() 12013function fcamelCase( _all, letter ) { 12014 return letter.toUpperCase(); 12015} 12016 12017// Convert dashed to camelCase; used by the css and data modules 12018// Support: IE <=9 - 11, Edge 12 - 15 12019// Microsoft forgot to hump their vendor prefix (trac-9572) 12020function camelCase( string ) { 12021 return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); 12022} 12023var acceptData = function( owner ) { 12024 12025 // Accepts only: 12026 // - Node 12027 // - Node.ELEMENT_NODE 12028 // - Node.DOCUMENT_NODE 12029 // - Object 12030 // - Any 12031 return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType ); 12032}; 12033 12034 12035 12036 12037function Data() { 12038 this.expando = jQuery.expando + Data.uid++; 12039} 12040 12041Data.uid = 1; 12042 12043Data.prototype = { 12044 12045 cache: function( owner ) { 12046 12047 // Check if the owner object already has a cache 12048 var value = owner[ this.expando ]; 12049 12050 // If not, create one 12051 if ( !value ) { 12052 value = {}; 12053 12054 // We can accept data for non-element nodes in modern browsers, 12055 // but we should not, see trac-8335. 12056 // Always return an empty object. 12057 if ( acceptData( owner ) ) { 12058 12059 // If it is a node unlikely to be stringify-ed or looped over 12060 // use plain assignment 12061 if ( owner.nodeType ) { 12062 owner[ this.expando ] = value; 12063 12064 // Otherwise secure it in a non-enumerable property 12065 // configurable must be true to allow the property to be 12066 // deleted when data is removed 12067 } else { 12068 Object.defineProperty( owner, this.expando, { 12069 value: value, 12070 configurable: true 12071 } ); 12072 } 12073 } 12074 } 12075 12076 return value; 12077 }, 12078 set: function( owner, data, value ) { 12079 var prop, 12080 cache = this.cache( owner ); 12081 12082 // Handle: [ owner, key, value ] args 12083 // Always use camelCase key (gh-2257) 12084 if ( typeof data === "string" ) { 12085 cache[ camelCase( data ) ] = value; 12086 12087 // Handle: [ owner, { properties } ] args 12088 } else { 12089 12090 // Copy the properties one-by-one to the cache object 12091 for ( prop in data ) { 12092 cache[ camelCase( prop ) ] = data[ prop ]; 12093 } 12094 } 12095 return cache; 12096 }, 12097 get: function( owner, key ) { 12098 return key === undefined ? 12099 this.cache( owner ) : 12100 12101 // Always use camelCase key (gh-2257) 12102 owner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ]; 12103 }, 12104 access: function( owner, key, value ) { 12105 12106 // In cases where either: 12107 // 12108 // 1. No key was specified 12109 // 2. A string key was specified, but no value provided 12110 // 12111 // Take the "read" path and allow the get method to determine 12112 // which value to return, respectively either: 12113 // 12114 // 1. The entire cache object 12115 // 2. The data stored at the key 12116 // 12117 if ( key === undefined || 12118 ( ( key && typeof key === "string" ) && value === undefined ) ) { 12119 12120 return this.get( owner, key ); 12121 } 12122 12123 // When the key is not a string, or both a key and value 12124 // are specified, set or extend (existing objects) with either: 12125 // 12126 // 1. An object of properties 12127 // 2. A key and value 12128 // 12129 this.set( owner, key, value ); 12130 12131 // Since the "set" path can have two possible entry points 12132 // return the expected data based on which path was taken[*] 12133 return value !== undefined ? value : key; 12134 }, 12135 remove: function( owner, key ) { 12136 var i, 12137 cache = owner[ this.expando ]; 12138 12139 if ( cache === undefined ) { 12140 return; 12141 } 12142 12143 if ( key !== undefined ) { 12144 12145 // Support array or space separated string of keys 12146 if ( Array.isArray( key ) ) { 12147 12148 // If key is an array of keys... 12149 // We always set camelCase keys, so remove that. 12150 key = key.map( camelCase ); 12151 } else { 12152 key = camelCase( key ); 12153 12154 // If a key with the spaces exists, use it. 12155 // Otherwise, create an array by matching non-whitespace 12156 key = key in cache ? 12157 [ key ] : 12158 ( key.match( rnothtmlwhite ) || [] ); 12159 } 12160 12161 i = key.length; 12162 12163 while ( i-- ) { 12164 delete cache[ key[ i ] ]; 12165 } 12166 } 12167 12168 // Remove the expando if there's no more data 12169 if ( key === undefined || jQuery.isEmptyObject( cache ) ) { 12170 12171 // Support: Chrome <=35 - 45 12172 // Webkit & Blink performance suffers when deleting properties 12173 // from DOM nodes, so set to undefined instead 12174 // https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted) 12175 if ( owner.nodeType ) { 12176 owner[ this.expando ] = undefined; 12177 } else { 12178 delete owner[ this.expando ]; 12179 } 12180 } 12181 }, 12182 hasData: function( owner ) { 12183 var cache = owner[ this.expando ]; 12184 return cache !== undefined && !jQuery.isEmptyObject( cache ); 12185 } 12186}; 12187var dataPriv = new Data(); 12188 12189var dataUser = new Data(); 12190 12191 12192 12193// Implementation Summary 12194// 12195// 1. Enforce API surface and semantic compatibility with 1.9.x branch 12196// 2. Improve the module's maintainability by reducing the storage 12197// paths to a single mechanism. 12198// 3. Use the same single mechanism to support "private" and "user" data. 12199// 4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData) 12200// 5. Avoid exposing implementation details on user objects (eg. expando properties) 12201// 6. Provide a clear path for implementation upgrade to WeakMap in 2014 12202 12203var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/, 12204 rmultiDash = /[A-Z]/g; 12205 12206function getData( data ) { 12207 if ( data === "true" ) { 12208 return true; 12209 } 12210 12211 if ( data === "false" ) { 12212 return false; 12213 } 12214 12215 if ( data === "null" ) { 12216 return null; 12217 } 12218 12219 // Only convert to a number if it doesn't change the string 12220 if ( data === +data + "" ) { 12221 return +data; 12222 } 12223 12224 if ( rbrace.test( data ) ) { 12225 return JSON.parse( data ); 12226 } 12227 12228 return data; 12229} 12230 12231function dataAttr( elem, key, data ) { 12232 var name; 12233 12234 // If nothing was found internally, try to fetch any 12235 // data from the HTML5 data-* attribute 12236 if ( data === undefined && elem.nodeType === 1 ) { 12237 name = "data-" + key.replace( rmultiDash, "-$&" ).toLowerCase(); 12238 data = elem.getAttribute( name ); 12239 12240 if ( typeof data === "string" ) { 12241 try { 12242 data = getData( data ); 12243 } catch ( e ) {} 12244 12245 // Make sure we set the data so it isn't changed later 12246 dataUser.set( elem, key, data ); 12247 } else { 12248 data = undefined; 12249 } 12250 } 12251 return data; 12252} 12253 12254jQuery.extend( { 12255 hasData: function( elem ) { 12256 return dataUser.hasData( elem ) || dataPriv.hasData( elem ); 12257 }, 12258 12259 data: function( elem, name, data ) { 12260 return dataUser.access( elem, name, data ); 12261 }, 12262 12263 removeData: function( elem, name ) { 12264 dataUser.remove( elem, name ); 12265 }, 12266 12267 // TODO: Now that all calls to _data and _removeData have been replaced 12268 // with direct calls to dataPriv methods, these can be deprecated. 12269 _data: function( elem, name, data ) { 12270 return dataPriv.access( elem, name, data ); 12271 }, 12272 12273 _removeData: function( elem, name ) { 12274 dataPriv.remove( elem, name ); 12275 } 12276} ); 12277 12278jQuery.fn.extend( { 12279 data: function( key, value ) { 12280 var i, name, data, 12281 elem = this[ 0 ], 12282 attrs = elem && elem.attributes; 12283 12284 // Gets all values 12285 if ( key === undefined ) { 12286 if ( this.length ) { 12287 data = dataUser.get( elem ); 12288 12289 if ( elem.nodeType === 1 && !dataPriv.get( elem, "hasDataAttrs" ) ) { 12290 i = attrs.length; 12291 while ( i-- ) { 12292 12293 // Support: IE 11 only 12294 // The attrs elements can be null (trac-14894) 12295 if ( attrs[ i ] ) { 12296 name = attrs[ i ].name; 12297 if ( name.indexOf( "data-" ) === 0 ) { 12298 name = camelCase( name.slice( 5 ) ); 12299 dataAttr( elem, name, data[ name ] ); 12300 } 12301 } 12302 } 12303 dataPriv.set( elem, "hasDataAttrs", true ); 12304 } 12305 } 12306 12307 return data; 12308 } 12309 12310 // Sets multiple values 12311 if ( typeof key === "object" ) { 12312 return this.each( function() { 12313 dataUser.set( this, key ); 12314 } ); 12315 } 12316 12317 return access( this, function( value ) { 12318 var data; 12319 12320 // The calling jQuery object (element matches) is not empty 12321 // (and therefore has an element appears at this[ 0 ]) and the 12322 // `value` parameter was not undefined. An empty jQuery object 12323 // will result in `undefined` for elem = this[ 0 ] which will 12324 // throw an exception if an attempt to read a data cache is made. 12325 if ( elem && value === undefined ) { 12326 12327 // Attempt to get data from the cache 12328 // The key will always be camelCased in Data 12329 data = dataUser.get( elem, key ); 12330 if ( data !== undefined ) { 12331 return data; 12332 } 12333 12334 // Attempt to "discover" the data in 12335 // HTML5 custom data-* attrs 12336 data = dataAttr( elem, key ); 12337 if ( data !== undefined ) { 12338 return data; 12339 } 12340 12341 // We tried really hard, but the data doesn't exist. 12342 return; 12343 } 12344 12345 // Set the data... 12346 this.each( function() { 12347 12348 // We always store the camelCased key 12349 dataUser.set( this, key, value ); 12350 } ); 12351 }, null, value, arguments.length > 1, null, true ); 12352 }, 12353 12354 removeData: function( key ) { 12355 return this.each( function() { 12356 dataUser.remove( this, key ); 12357 } ); 12358 } 12359} ); 12360 12361 12362jQuery.extend( { 12363 queue: function( elem, type, data ) { 12364 var queue; 12365 12366 if ( elem ) { 12367 type = ( type || "fx" ) + "queue"; 12368 queue = dataPriv.get( elem, type ); 12369 12370 // Speed up dequeue by getting out quickly if this is just a lookup 12371 if ( data ) { 12372 if ( !queue || Array.isArray( data ) ) { 12373 queue = dataPriv.access( elem, type, jQuery.makeArray( data ) ); 12374 } else { 12375 queue.push( data ); 12376 } 12377 } 12378 return queue || []; 12379 } 12380 }, 12381 12382 dequeue: function( elem, type ) { 12383 type = type || "fx"; 12384 12385 var queue = jQuery.queue( elem, type ), 12386 startLength = queue.length, 12387 fn = queue.shift(), 12388 hooks = jQuery._queueHooks( elem, type ), 12389 next = function() { 12390 jQuery.dequeue( elem, type ); 12391 }; 12392 12393 // If the fx queue is dequeued, always remove the progress sentinel 12394 if ( fn === "inprogress" ) { 12395 fn = queue.shift(); 12396 startLength--; 12397 } 12398 12399 if ( fn ) { 12400 12401 // Add a progress sentinel to prevent the fx queue from being 12402 // automatically dequeued 12403 if ( type === "fx" ) { 12404 queue.unshift( "inprogress" ); 12405 } 12406 12407 // Clear up the last queue stop function 12408 delete hooks.stop; 12409 fn.call( elem, next, hooks ); 12410 } 12411 12412 if ( !startLength && hooks ) { 12413 hooks.empty.fire(); 12414 } 12415 }, 12416 12417 // Not public - generate a queueHooks object, or return the current one 12418 _queueHooks: function( elem, type ) { 12419 var key = type + "queueHooks"; 12420 return dataPriv.get( elem, key ) || dataPriv.access( elem, key, { 12421 empty: jQuery.Callbacks( "once memory" ).add( function() { 12422 dataPriv.remove( elem, [ type + "queue", key ] ); 12423 } ) 12424 } ); 12425 } 12426} ); 12427 12428jQuery.fn.extend( { 12429 queue: function( type, data ) { 12430 var setter = 2; 12431 12432 if ( typeof type !== "string" ) { 12433 data = type; 12434 type = "fx"; 12435 setter--; 12436 } 12437 12438 if ( arguments.length < setter ) { 12439 return jQuery.queue( this[ 0 ], type ); 12440 } 12441 12442 return data === undefined ? 12443 this : 12444 this.each( function() { 12445 var queue = jQuery.queue( this, type, data ); 12446 12447 // Ensure a hooks for this queue 12448 jQuery._queueHooks( this, type ); 12449 12450 if ( type === "fx" && queue[ 0 ] !== "inprogress" ) { 12451 jQuery.dequeue( this, type ); 12452 } 12453 } ); 12454 }, 12455 dequeue: function( type ) { 12456 return this.each( function() { 12457 jQuery.dequeue( this, type ); 12458 } ); 12459 }, 12460 clearQueue: function( type ) { 12461 return this.queue( type || "fx", [] ); 12462 }, 12463 12464 // Get a promise resolved when queues of a certain type 12465 // are emptied (fx is the type by default) 12466 promise: function( type, obj ) { 12467 var tmp, 12468 count = 1, 12469 defer = jQuery.Deferred(), 12470 elements = this, 12471 i = this.length, 12472 resolve = function() { 12473 if ( !( --count ) ) { 12474 defer.resolveWith( elements, [ elements ] ); 12475 } 12476 }; 12477 12478 if ( typeof type !== "string" ) { 12479 obj = type; 12480 type = undefined; 12481 } 12482 type = type || "fx"; 12483 12484 while ( i-- ) { 12485 tmp = dataPriv.get( elements[ i ], type + "queueHooks" ); 12486 if ( tmp && tmp.empty ) { 12487 count++; 12488 tmp.empty.add( resolve ); 12489 } 12490 } 12491 resolve(); 12492 return defer.promise( obj ); 12493 } 12494} ); 12495var pnum = ( /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/ ).source; 12496 12497var rcssNum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" ); 12498 12499 12500var cssExpand = [ "Top", "Right", "Bottom", "Left" ]; 12501 12502var documentElement = document.documentElement; 12503 12504 12505 12506 var isAttached = function( elem ) { 12507 return jQuery.contains( elem.ownerDocument, elem ); 12508 }, 12509 composed = { composed: true }; 12510 12511 // Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only 12512 // Check attachment across shadow DOM boundaries when possible (gh-3504) 12513 // Support: iOS 10.0-10.2 only 12514 // Early iOS 10 versions support `attachShadow` but not `getRootNode`, 12515 // leading to errors. We need to check for `getRootNode`. 12516 if ( documentElement.getRootNode ) { 12517 isAttached = function( elem ) { 12518 return jQuery.contains( elem.ownerDocument, elem ) || 12519 elem.getRootNode( composed ) === elem.ownerDocument; 12520 }; 12521 } 12522var isHiddenWithinTree = function( elem, el ) { 12523 12524 // isHiddenWithinTree might be called from jQuery#filter function; 12525 // in that case, element will be second argument 12526 elem = el || elem; 12527 12528 // Inline style trumps all 12529 return elem.style.display === "none" || 12530 elem.style.display === "" && 12531 12532 // Otherwise, check computed style 12533 // Support: Firefox <=43 - 45 12534 // Disconnected elements can have computed display: none, so first confirm that elem is 12535 // in the document. 12536 isAttached( elem ) && 12537 12538 jQuery.css( elem, "display" ) === "none"; 12539 }; 12540 12541 12542 12543function adjustCSS( elem, prop, valueParts, tween ) { 12544 var adjusted, scale, 12545 maxIterations = 20, 12546 currentValue = tween ? 12547 function() { 12548 return tween.cur(); 12549 } : 12550 function() { 12551 return jQuery.css( elem, prop, "" ); 12552 }, 12553 initial = currentValue(), 12554 unit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ), 12555 12556 // Starting value computation is required for potential unit mismatches 12557 initialInUnit = elem.nodeType && 12558 ( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) && 12559 rcssNum.exec( jQuery.css( elem, prop ) ); 12560 12561 if ( initialInUnit && initialInUnit[ 3 ] !== unit ) { 12562 12563 // Support: Firefox <=54 12564 // Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144) 12565 initial = initial / 2; 12566 12567 // Trust units reported by jQuery.css 12568 unit = unit || initialInUnit[ 3 ]; 12569 12570 // Iteratively approximate from a nonzero starting point 12571 initialInUnit = +initial || 1; 12572 12573 while ( maxIterations-- ) { 12574 12575 // Evaluate and update our best guess (doubling guesses that zero out). 12576 // Finish if the scale equals or crosses 1 (making the old*new product non-positive). 12577 jQuery.style( elem, prop, initialInUnit + unit ); 12578 if ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) { 12579 maxIterations = 0; 12580 } 12581 initialInUnit = initialInUnit / scale; 12582 12583 } 12584 12585 initialInUnit = initialInUnit * 2; 12586 jQuery.style( elem, prop, initialInUnit + unit ); 12587 12588 // Make sure we update the tween properties later on 12589 valueParts = valueParts || []; 12590 } 12591 12592 if ( valueParts ) { 12593 initialInUnit = +initialInUnit || +initial || 0; 12594 12595 // Apply relative offset (+=/-=) if specified 12596 adjusted = valueParts[ 1 ] ? 12597 initialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] : 12598 +valueParts[ 2 ]; 12599 if ( tween ) { 12600 tween.unit = unit; 12601 tween.start = initialInUnit; 12602 tween.end = adjusted; 12603 } 12604 } 12605 return adjusted; 12606} 12607 12608 12609var defaultDisplayMap = {}; 12610 12611function getDefaultDisplay( elem ) { 12612 var temp, 12613 doc = elem.ownerDocument, 12614 nodeName = elem.nodeName, 12615 display = defaultDisplayMap[ nodeName ]; 12616 12617 if ( display ) { 12618 return display; 12619 } 12620 12621 temp = doc.body.appendChild( doc.createElement( nodeName ) ); 12622 display = jQuery.css( temp, "display" ); 12623 12624 temp.parentNode.removeChild( temp ); 12625 12626 if ( display === "none" ) { 12627 display = "block"; 12628 } 12629 defaultDisplayMap[ nodeName ] = display; 12630 12631 return display; 12632} 12633 12634function showHide( elements, show ) { 12635 var display, elem, 12636 values = [], 12637 index = 0, 12638 length = elements.length; 12639 12640 // Determine new display value for elements that need to change 12641 for ( ; index < length; index++ ) { 12642 elem = elements[ index ]; 12643 if ( !elem.style ) { 12644 continue; 12645 } 12646 12647 display = elem.style.display; 12648 if ( show ) { 12649 12650 // Since we force visibility upon cascade-hidden elements, an immediate (and slow) 12651 // check is required in this first loop unless we have a nonempty display value (either 12652 // inline or about-to-be-restored) 12653 if ( display === "none" ) { 12654 values[ index ] = dataPriv.get( elem, "display" ) || null; 12655 if ( !values[ index ] ) { 12656 elem.style.display = ""; 12657 } 12658 } 12659 if ( elem.style.display === "" && isHiddenWithinTree( elem ) ) { 12660 values[ index ] = getDefaultDisplay( elem ); 12661 } 12662 } else { 12663 if ( display !== "none" ) { 12664 values[ index ] = "none"; 12665 12666 // Remember what we're overwriting 12667 dataPriv.set( elem, "display", display ); 12668 } 12669 } 12670 } 12671 12672 // Set the display of the elements in a second loop to avoid constant reflow 12673 for ( index = 0; index < length; index++ ) { 12674 if ( values[ index ] != null ) { 12675 elements[ index ].style.display = values[ index ]; 12676 } 12677 } 12678 12679 return elements; 12680} 12681 12682jQuery.fn.extend( { 12683 show: function() { 12684 return showHide( this, true ); 12685 }, 12686 hide: function() { 12687 return showHide( this ); 12688 }, 12689 toggle: function( state ) { 12690 if ( typeof state === "boolean" ) { 12691 return state ? this.show() : this.hide(); 12692 } 12693 12694 return this.each( function() { 12695 if ( isHiddenWithinTree( this ) ) { 12696 jQuery( this ).show(); 12697 } else { 12698 jQuery( this ).hide(); 12699 } 12700 } ); 12701 } 12702} ); 12703var rcheckableType = ( /^(?:checkbox|radio)$/i ); 12704 12705var rtagName = ( /<([a-z][^\/\0>\x20\t\r\n\f]*)/i ); 12706 12707var rscriptType = ( /^$|^module$|\/(?:java|ecma)script/i ); 12708 12709 12710 12711( function() { 12712 var fragment = document.createDocumentFragment(), 12713 div = fragment.appendChild( document.createElement( "div" ) ), 12714 input = document.createElement( "input" ); 12715 12716 // Support: Android 4.0 - 4.3 only 12717 // Check state lost if the name is set (trac-11217) 12718 // Support: Windows Web Apps (WWA) 12719 // `name` and `type` must use .setAttribute for WWA (trac-14901) 12720 input.setAttribute( "type", "radio" ); 12721 input.setAttribute( "checked", "checked" ); 12722 input.setAttribute( "name", "t" ); 12723 12724 div.appendChild( input ); 12725 12726 // Support: Android <=4.1 only 12727 // Older WebKit doesn't clone checked state correctly in fragments 12728 support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked; 12729 12730 // Support: IE <=11 only 12731 // Make sure textarea (and checkbox) defaultValue is properly cloned 12732 div.innerHTML = "<textarea>x</textarea>"; 12733 support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue; 12734 12735 // Support: IE <=9 only 12736 // IE <=9 replaces <option> tags with their contents when inserted outside of 12737 // the select element. 12738 div.innerHTML = "<option></option>"; 12739 support.option = !!div.lastChild; 12740} )(); 12741 12742 12743// We have to close these tags to support XHTML (trac-13200) 12744var wrapMap = { 12745 12746 // XHTML parsers do not magically insert elements in the 12747 // same way that tag soup parsers do. So we cannot shorten 12748 // this by omitting <tbody> or other required elements. 12749 thead: [ 1, "<table>", "</table>" ], 12750 col: [ 2, "<table><colgroup>", "</colgroup></table>" ], 12751 tr: [ 2, "<table><tbody>", "</tbody></table>" ], 12752 td: [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ], 12753 12754 _default: [ 0, "", "" ] 12755}; 12756 12757wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; 12758wrapMap.th = wrapMap.td; 12759 12760// Support: IE <=9 only 12761if ( !support.option ) { 12762 wrapMap.optgroup = wrapMap.option = [ 1, "<select multiple='multiple'>", "</select>" ]; 12763} 12764 12765 12766function getAll( context, tag ) { 12767 12768 // Support: IE <=9 - 11 only 12769 // Use typeof to avoid zero-argument method invocation on host objects (trac-15151) 12770 var ret; 12771 12772 if ( typeof context.getElementsByTagName !== "undefined" ) { 12773 ret = context.getElementsByTagName( tag || "*" ); 12774 12775 } else if ( typeof context.querySelectorAll !== "undefined" ) { 12776 ret = context.querySelectorAll( tag || "*" ); 12777 12778 } else { 12779 ret = []; 12780 } 12781 12782 if ( tag === undefined || tag && nodeName( context, tag ) ) { 12783 return jQuery.merge( [ context ], ret ); 12784 } 12785 12786 return ret; 12787} 12788 12789 12790// Mark scripts as having already been evaluated 12791function setGlobalEval( elems, refElements ) { 12792 var i = 0, 12793 l = elems.length; 12794 12795 for ( ; i < l; i++ ) { 12796 dataPriv.set( 12797 elems[ i ], 12798 "globalEval", 12799 !refElements || dataPriv.get( refElements[ i ], "globalEval" ) 12800 ); 12801 } 12802} 12803 12804 12805var rhtml = /<|&#?\w+;/; 12806 12807function buildFragment( elems, context, scripts, selection, ignored ) { 12808 var elem, tmp, tag, wrap, attached, j, 12809 fragment = context.createDocumentFragment(), 12810 nodes = [], 12811 i = 0, 12812 l = elems.length; 12813 12814 for ( ; i < l; i++ ) { 12815 elem = elems[ i ]; 12816 12817 if ( elem || elem === 0 ) { 12818 12819 // Add nodes directly 12820 if ( toType( elem ) === "object" ) { 12821 12822 // Support: Android <=4.0 only, PhantomJS 1 only 12823 // push.apply(_, arraylike) throws on ancient WebKit 12824 jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem ); 12825 12826 // Convert non-html into a text node 12827 } else if ( !rhtml.test( elem ) ) { 12828 nodes.push( context.createTextNode( elem ) ); 12829 12830 // Convert html into DOM nodes 12831 } else { 12832 tmp = tmp || fragment.appendChild( context.createElement( "div" ) ); 12833 12834 // Deserialize a standard representation 12835 tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase(); 12836 wrap = wrapMap[ tag ] || wrapMap._default; 12837 tmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ]; 12838 12839 // Descend through wrappers to the right content 12840 j = wrap[ 0 ]; 12841 while ( j-- ) { 12842 tmp = tmp.lastChild; 12843 } 12844 12845 // Support: Android <=4.0 only, PhantomJS 1 only 12846 // push.apply(_, arraylike) throws on ancient WebKit 12847 jQuery.merge( nodes, tmp.childNodes ); 12848 12849 // Remember the top-level container 12850 tmp = fragment.firstChild; 12851 12852 // Ensure the created nodes are orphaned (trac-12392) 12853 tmp.textContent = ""; 12854 } 12855 } 12856 } 12857 12858 // Remove wrapper from fragment 12859 fragment.textContent = ""; 12860 12861 i = 0; 12862 while ( ( elem = nodes[ i++ ] ) ) { 12863 12864 // Skip elements already in the context collection (trac-4087) 12865 if ( selection && jQuery.inArray( elem, selection ) > -1 ) { 12866 if ( ignored ) { 12867 ignored.push( elem ); 12868 } 12869 continue; 12870 } 12871 12872 attached = isAttached( elem ); 12873 12874 // Append to fragment 12875 tmp = getAll( fragment.appendChild( elem ), "script" ); 12876 12877 // Preserve script evaluation history 12878 if ( attached ) { 12879 setGlobalEval( tmp ); 12880 } 12881 12882 // Capture executables 12883 if ( scripts ) { 12884 j = 0; 12885 while ( ( elem = tmp[ j++ ] ) ) { 12886 if ( rscriptType.test( elem.type || "" ) ) { 12887 scripts.push( elem ); 12888 } 12889 } 12890 } 12891 } 12892 12893 return fragment; 12894} 12895 12896 12897var rtypenamespace = /^([^.]*)(?:\.(.+)|)/; 12898 12899function returnTrue() { 12900 return true; 12901} 12902 12903function returnFalse() { 12904 return false; 12905} 12906 12907function on( elem, types, selector, data, fn, one ) { 12908 var origFn, type; 12909 12910 // Types can be a map of types/handlers 12911 if ( typeof types === "object" ) { 12912 12913 // ( types-Object, selector, data ) 12914 if ( typeof selector !== "string" ) { 12915 12916 // ( types-Object, data ) 12917 data = data || selector; 12918 selector = undefined; 12919 } 12920 for ( type in types ) { 12921 on( elem, type, selector, data, types[ type ], one ); 12922 } 12923 return elem; 12924 } 12925 12926 if ( data == null && fn == null ) { 12927 12928 // ( types, fn ) 12929 fn = selector; 12930 data = selector = undefined; 12931 } else if ( fn == null ) { 12932 if ( typeof selector === "string" ) { 12933 12934 // ( types, selector, fn ) 12935 fn = data; 12936 data = undefined; 12937 } else { 12938 12939 // ( types, data, fn ) 12940 fn = data; 12941 data = selector; 12942 selector = undefined; 12943 } 12944 } 12945 if ( fn === false ) { 12946 fn = returnFalse; 12947 } else if ( !fn ) { 12948 return elem; 12949 } 12950 12951 if ( one === 1 ) { 12952 origFn = fn; 12953 fn = function( event ) { 12954 12955 // Can use an empty set, since event contains the info 12956 jQuery().off( event ); 12957 return origFn.apply( this, arguments ); 12958 }; 12959 12960 // Use same guid so caller can remove using origFn 12961 fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ ); 12962 } 12963 return elem.each( function() { 12964 jQuery.event.add( this, types, fn, data, selector ); 12965 } ); 12966} 12967 12968/* 12969 * Helper functions for managing events -- not part of the public interface. 12970 * Props to Dean Edwards' addEvent library for many of the ideas. 12971 */ 12972jQuery.event = { 12973 12974 global: {}, 12975 12976 add: function( elem, types, handler, data, selector ) { 12977 12978 var handleObjIn, eventHandle, tmp, 12979 events, t, handleObj, 12980 special, handlers, type, namespaces, origType, 12981 elemData = dataPriv.get( elem ); 12982 12983 // Only attach events to objects that accept data 12984 if ( !acceptData( elem ) ) { 12985 return; 12986 } 12987 12988 // Caller can pass in an object of custom data in lieu of the handler 12989 if ( handler.handler ) { 12990 handleObjIn = handler; 12991 handler = handleObjIn.handler; 12992 selector = handleObjIn.selector; 12993 } 12994 12995 // Ensure that invalid selectors throw exceptions at attach time 12996 // Evaluate against documentElement in case elem is a non-element node (e.g., document) 12997 if ( selector ) { 12998 jQuery.find.matchesSelector( documentElement, selector ); 12999 } 13000 13001 // Make sure that the handler has a unique ID, used to find/remove it later 13002 if ( !handler.guid ) { 13003 handler.guid = jQuery.guid++; 13004 } 13005 13006 // Init the element's event structure and main handler, if this is the first 13007 if ( !( events = elemData.events ) ) { 13008 events = elemData.events = Object.create( null ); 13009 } 13010 if ( !( eventHandle = elemData.handle ) ) { 13011 eventHandle = elemData.handle = function( e ) { 13012 13013 // Discard the second event of a jQuery.event.trigger() and 13014 // when an event is called after a page has unloaded 13015 return typeof jQuery !== "undefined" && jQuery.event.triggered !== e.type ? 13016 jQuery.event.dispatch.apply( elem, arguments ) : undefined; 13017 }; 13018 } 13019 13020 // Handle multiple events separated by a space 13021 types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; 13022 t = types.length; 13023 while ( t-- ) { 13024 tmp = rtypenamespace.exec( types[ t ] ) || []; 13025 type = origType = tmp[ 1 ]; 13026 namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); 13027 13028 // There *must* be a type, no attaching namespace-only handlers 13029 if ( !type ) { 13030 continue; 13031 } 13032 13033 // If event changes its type, use the special event handlers for the changed type 13034 special = jQuery.event.special[ type ] || {}; 13035 13036 // If selector defined, determine special event api type, otherwise given type 13037 type = ( selector ? special.delegateType : special.bindType ) || type; 13038 13039 // Update special based on newly reset type 13040 special = jQuery.event.special[ type ] || {}; 13041 13042 // handleObj is passed to all event handlers 13043 handleObj = jQuery.extend( { 13044 type: type, 13045 origType: origType, 13046 data: data, 13047 handler: handler, 13048 guid: handler.guid, 13049 selector: selector, 13050 needsContext: selector && jQuery.expr.match.needsContext.test( selector ), 13051 namespace: namespaces.join( "." ) 13052 }, handleObjIn ); 13053 13054 // Init the event handler queue if we're the first 13055 if ( !( handlers = events[ type ] ) ) { 13056 handlers = events[ type ] = []; 13057 handlers.delegateCount = 0; 13058 13059 // Only use addEventListener if the special events handler returns false 13060 if ( !special.setup || 13061 special.setup.call( elem, data, namespaces, eventHandle ) === false ) { 13062 13063 if ( elem.addEventListener ) { 13064 elem.addEventListener( type, eventHandle ); 13065 } 13066 } 13067 } 13068 13069 if ( special.add ) { 13070 special.add.call( elem, handleObj ); 13071 13072 if ( !handleObj.handler.guid ) { 13073 handleObj.handler.guid = handler.guid; 13074 } 13075 } 13076 13077 // Add to the element's handler list, delegates in front 13078 if ( selector ) { 13079 handlers.splice( handlers.delegateCount++, 0, handleObj ); 13080 } else { 13081 handlers.push( handleObj ); 13082 } 13083 13084 // Keep track of which events have ever been used, for event optimization 13085 jQuery.event.global[ type ] = true; 13086 } 13087 13088 }, 13089 13090 // Detach an event or set of events from an element 13091 remove: function( elem, types, handler, selector, mappedTypes ) { 13092 13093 var j, origCount, tmp, 13094 events, t, handleObj, 13095 special, handlers, type, namespaces, origType, 13096 elemData = dataPriv.hasData( elem ) && dataPriv.get( elem ); 13097 13098 if ( !elemData || !( events = elemData.events ) ) { 13099 return; 13100 } 13101 13102 // Once for each type.namespace in types; type may be omitted 13103 types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; 13104 t = types.length; 13105 while ( t-- ) { 13106 tmp = rtypenamespace.exec( types[ t ] ) || []; 13107 type = origType = tmp[ 1 ]; 13108 namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); 13109 13110 // Unbind all events (on this namespace, if provided) for the element 13111 if ( !type ) { 13112 for ( type in events ) { 13113 jQuery.event.remove( elem, type + types[ t ], handler, selector, true ); 13114 } 13115 continue; 13116 } 13117 13118 special = jQuery.event.special[ type ] || {}; 13119 type = ( selector ? special.delegateType : special.bindType ) || type; 13120 handlers = events[ type ] || []; 13121 tmp = tmp[ 2 ] && 13122 new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ); 13123 13124 // Remove matching events 13125 origCount = j = handlers.length; 13126 while ( j-- ) { 13127 handleObj = handlers[ j ]; 13128 13129 if ( ( mappedTypes || origType === handleObj.origType ) && 13130 ( !handler || handler.guid === handleObj.guid ) && 13131 ( !tmp || tmp.test( handleObj.namespace ) ) && 13132 ( !selector || selector === handleObj.selector || 13133 selector === "**" && handleObj.selector ) ) { 13134 handlers.splice( j, 1 ); 13135 13136 if ( handleObj.selector ) { 13137 handlers.delegateCount--; 13138 } 13139 if ( special.remove ) { 13140 special.remove.call( elem, handleObj ); 13141 } 13142 } 13143 } 13144 13145 // Remove generic event handler if we removed something and no more handlers exist 13146 // (avoids potential for endless recursion during removal of special event handlers) 13147 if ( origCount && !handlers.length ) { 13148 if ( !special.teardown || 13149 special.teardown.call( elem, namespaces, elemData.handle ) === false ) { 13150 13151 jQuery.removeEvent( elem, type, elemData.handle ); 13152 } 13153 13154 delete events[ type ]; 13155 } 13156 } 13157 13158 // Remove data and the expando if it's no longer used 13159 if ( jQuery.isEmptyObject( events ) ) { 13160 dataPriv.remove( elem, "handle events" ); 13161 } 13162 }, 13163 13164 dispatch: function( nativeEvent ) { 13165 13166 var i, j, ret, matched, handleObj, handlerQueue, 13167 args = new Array( arguments.length ), 13168 13169 // Make a writable jQuery.Event from the native event object 13170 event = jQuery.event.fix( nativeEvent ), 13171 13172 handlers = ( 13173 dataPriv.get( this, "events" ) || Object.create( null ) 13174 )[ event.type ] || [], 13175 special = jQuery.event.special[ event.type ] || {}; 13176 13177 // Use the fix-ed jQuery.Event rather than the (read-only) native event 13178 args[ 0 ] = event; 13179 13180 for ( i = 1; i < arguments.length; i++ ) { 13181 args[ i ] = arguments[ i ]; 13182 } 13183 13184 event.delegateTarget = this; 13185 13186 // Call the preDispatch hook for the mapped type, and let it bail if desired 13187 if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) { 13188 return; 13189 } 13190 13191 // Determine handlers 13192 handlerQueue = jQuery.event.handlers.call( this, event, handlers ); 13193 13194 // Run delegates first; they may want to stop propagation beneath us 13195 i = 0; 13196 while ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) { 13197 event.currentTarget = matched.elem; 13198 13199 j = 0; 13200 while ( ( handleObj = matched.handlers[ j++ ] ) && 13201 !event.isImmediatePropagationStopped() ) { 13202 13203 // If the event is namespaced, then each handler is only invoked if it is 13204 // specially universal or its namespaces are a superset of the event's. 13205 if ( !event.rnamespace || handleObj.namespace === false || 13206 event.rnamespace.test( handleObj.namespace ) ) { 13207 13208 event.handleObj = handleObj; 13209 event.data = handleObj.data; 13210 13211 ret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle || 13212 handleObj.handler ).apply( matched.elem, args ); 13213 13214 if ( ret !== undefined ) { 13215 if ( ( event.result = ret ) === false ) { 13216 event.preventDefault(); 13217 event.stopPropagation(); 13218 } 13219 } 13220 } 13221 } 13222 } 13223 13224 // Call the postDispatch hook for the mapped type 13225 if ( special.postDispatch ) { 13226 special.postDispatch.call( this, event ); 13227 } 13228 13229 return event.result; 13230 }, 13231 13232 handlers: function( event, handlers ) { 13233 var i, handleObj, sel, matchedHandlers, matchedSelectors, 13234 handlerQueue = [], 13235 delegateCount = handlers.delegateCount, 13236 cur = event.target; 13237 13238 // Find delegate handlers 13239 if ( delegateCount && 13240 13241 // Support: IE <=9 13242 // Black-hole SVG <use> instance trees (trac-13180) 13243 cur.nodeType && 13244 13245 // Support: Firefox <=42 13246 // Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861) 13247 // https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click 13248 // Support: IE 11 only 13249 // ...but not arrow key "clicks" of radio inputs, which can have `button` -1 (gh-2343) 13250 !( event.type === "click" && event.button >= 1 ) ) { 13251 13252 for ( ; cur !== this; cur = cur.parentNode || this ) { 13253 13254 // Don't check non-elements (trac-13208) 13255 // Don't process clicks on disabled elements (trac-6911, trac-8165, trac-11382, trac-11764) 13256 if ( cur.nodeType === 1 && !( event.type === "click" && cur.disabled === true ) ) { 13257 matchedHandlers = []; 13258 matchedSelectors = {}; 13259 for ( i = 0; i < delegateCount; i++ ) { 13260 handleObj = handlers[ i ]; 13261 13262 // Don't conflict with Object.prototype properties (trac-13203) 13263 sel = handleObj.selector + " "; 13264 13265 if ( matchedSelectors[ sel ] === undefined ) { 13266 matchedSelectors[ sel ] = handleObj.needsContext ? 13267 jQuery( sel, this ).index( cur ) > -1 : 13268 jQuery.find( sel, this, null, [ cur ] ).length; 13269 } 13270 if ( matchedSelectors[ sel ] ) { 13271 matchedHandlers.push( handleObj ); 13272 } 13273 } 13274 if ( matchedHandlers.length ) { 13275 handlerQueue.push( { elem: cur, handlers: matchedHandlers } ); 13276 } 13277 } 13278 } 13279 } 13280 13281 // Add the remaining (directly-bound) handlers 13282 cur = this; 13283 if ( delegateCount < handlers.length ) { 13284 handlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } ); 13285 } 13286 13287 return handlerQueue; 13288 }, 13289 13290 addProp: function( name, hook ) { 13291 Object.defineProperty( jQuery.Event.prototype, name, { 13292 enumerable: true, 13293 configurable: true, 13294 13295 get: isFunction( hook ) ? 13296 function() { 13297 if ( this.originalEvent ) { 13298 return hook( this.originalEvent ); 13299 } 13300 } : 13301 function() { 13302 if ( this.originalEvent ) { 13303 return this.originalEvent[ name ]; 13304 } 13305 }, 13306 13307 set: function( value ) { 13308 Object.defineProperty( this, name, { 13309 enumerable: true, 13310 configurable: true, 13311 writable: true, 13312 value: value 13313 } ); 13314 } 13315 } ); 13316 }, 13317 13318 fix: function( originalEvent ) { 13319 return originalEvent[ jQuery.expando ] ? 13320 originalEvent : 13321 new jQuery.Event( originalEvent ); 13322 }, 13323 13324 special: { 13325 load: { 13326 13327 // Prevent triggered image.load events from bubbling to window.load 13328 noBubble: true 13329 }, 13330 click: { 13331 13332 // Utilize native event to ensure correct state for checkable inputs 13333 setup: function( data ) { 13334 13335 // For mutual compressibility with _default, replace `this` access with a local var. 13336 // `|| data` is dead code meant only to preserve the variable through minification. 13337 var el = this || data; 13338 13339 // Claim the first handler 13340 if ( rcheckableType.test( el.type ) && 13341 el.click && nodeName( el, "input" ) ) { 13342 13343 // dataPriv.set( el, "click", ... ) 13344 leverageNative( el, "click", true ); 13345 } 13346 13347 // Return false to allow normal processing in the caller 13348 return false; 13349 }, 13350 trigger: function( data ) { 13351 13352 // For mutual compressibility with _default, replace `this` access with a local var. 13353 // `|| data` is dead code meant only to preserve the variable through minification. 13354 var el = this || data; 13355 13356 // Force setup before triggering a click 13357 if ( rcheckableType.test( el.type ) && 13358 el.click && nodeName( el, "input" ) ) { 13359 13360 leverageNative( el, "click" ); 13361 } 13362 13363 // Return non-false to allow normal event-path propagation 13364 return true; 13365 }, 13366 13367 // For cross-browser consistency, suppress native .click() on links 13368 // Also prevent it if we're currently inside a leveraged native-event stack 13369 _default: function( event ) { 13370 var target = event.target; 13371 return rcheckableType.test( target.type ) && 13372 target.click && nodeName( target, "input" ) && 13373 dataPriv.get( target, "click" ) || 13374 nodeName( target, "a" ); 13375 } 13376 }, 13377 13378 beforeunload: { 13379 postDispatch: function( event ) { 13380 13381 // Support: Firefox 20+ 13382 // Firefox doesn't alert if the returnValue field is not set. 13383 if ( event.result !== undefined && event.originalEvent ) { 13384 event.originalEvent.returnValue = event.result; 13385 } 13386 } 13387 } 13388 } 13389}; 13390 13391// Ensure the presence of an event listener that handles manually-triggered 13392// synthetic events by interrupting progress until reinvoked in response to 13393// *native* events that it fires directly, ensuring that state changes have 13394// already occurred before other listeners are invoked. 13395function leverageNative( el, type, isSetup ) { 13396 13397 // Missing `isSetup` indicates a trigger call, which must force setup through jQuery.event.add 13398 if ( !isSetup ) { 13399 if ( dataPriv.get( el, type ) === undefined ) { 13400 jQuery.event.add( el, type, returnTrue ); 13401 } 13402 return; 13403 } 13404 13405 // Register the controller as a special universal handler for all event namespaces 13406 dataPriv.set( el, type, false ); 13407 jQuery.event.add( el, type, { 13408 namespace: false, 13409 handler: function( event ) { 13410 var result, 13411 saved = dataPriv.get( this, type ); 13412 13413 if ( ( event.isTrigger & 1 ) && this[ type ] ) { 13414 13415 // Interrupt processing of the outer synthetic .trigger()ed event 13416 if ( !saved ) { 13417 13418 // Store arguments for use when handling the inner native event 13419 // There will always be at least one argument (an event object), so this array 13420 // will not be confused with a leftover capture object. 13421 saved = slice.call( arguments ); 13422 dataPriv.set( this, type, saved ); 13423 13424 // Trigger the native event and capture its result 13425 this[ type ](); 13426 result = dataPriv.get( this, type ); 13427 dataPriv.set( this, type, false ); 13428 13429 if ( saved !== result ) { 13430 13431 // Cancel the outer synthetic event 13432 event.stopImmediatePropagation(); 13433 event.preventDefault(); 13434 13435 return result; 13436 } 13437 13438 // If this is an inner synthetic event for an event with a bubbling surrogate 13439 // (focus or blur), assume that the surrogate already propagated from triggering 13440 // the native event and prevent that from happening again here. 13441 // This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the 13442 // bubbling surrogate propagates *after* the non-bubbling base), but that seems 13443 // less bad than duplication. 13444 } else if ( ( jQuery.event.special[ type ] || {} ).delegateType ) { 13445 event.stopPropagation(); 13446 } 13447 13448 // If this is a native event triggered above, everything is now in order 13449 // Fire an inner synthetic event with the original arguments 13450 } else if ( saved ) { 13451 13452 // ...and capture the result 13453 dataPriv.set( this, type, jQuery.event.trigger( 13454 saved[ 0 ], 13455 saved.slice( 1 ), 13456 this 13457 ) ); 13458 13459 // Abort handling of the native event by all jQuery handlers while allowing 13460 // native handlers on the same element to run. On target, this is achieved 13461 // by stopping immediate propagation just on the jQuery event. However, 13462 // the native event is re-wrapped by a jQuery one on each level of the 13463 // propagation so the only way to stop it for jQuery is to stop it for 13464 // everyone via native `stopPropagation()`. This is not a problem for 13465 // focus/blur which don't bubble, but it does also stop click on checkboxes 13466 // and radios. We accept this limitation. 13467 event.stopPropagation(); 13468 event.isImmediatePropagationStopped = returnTrue; 13469 } 13470 } 13471 } ); 13472} 13473 13474jQuery.removeEvent = function( elem, type, handle ) { 13475 13476 // This "if" is needed for plain objects 13477 if ( elem.removeEventListener ) { 13478 elem.removeEventListener( type, handle ); 13479 } 13480}; 13481 13482jQuery.Event = function( src, props ) { 13483 13484 // Allow instantiation without the 'new' keyword 13485 if ( !( this instanceof jQuery.Event ) ) { 13486 return new jQuery.Event( src, props ); 13487 } 13488 13489 // Event object 13490 if ( src && src.type ) { 13491 this.originalEvent = src; 13492 this.type = src.type; 13493 13494 // Events bubbling up the document may have been marked as prevented 13495 // by a handler lower down the tree; reflect the correct value. 13496 this.isDefaultPrevented = src.defaultPrevented || 13497 src.defaultPrevented === undefined && 13498 13499 // Support: Android <=2.3 only 13500 src.returnValue === false ? 13501 returnTrue : 13502 returnFalse; 13503 13504 // Create target properties 13505 // Support: Safari <=6 - 7 only 13506 // Target should not be a text node (trac-504, trac-13143) 13507 this.target = ( src.target && src.target.nodeType === 3 ) ? 13508 src.target.parentNode : 13509 src.target; 13510 13511 this.currentTarget = src.currentTarget; 13512 this.relatedTarget = src.relatedTarget; 13513 13514 // Event type 13515 } else { 13516 this.type = src; 13517 } 13518 13519 // Put explicitly provided properties onto the event object 13520 if ( props ) { 13521 jQuery.extend( this, props ); 13522 } 13523 13524 // Create a timestamp if incoming event doesn't have one 13525 this.timeStamp = src && src.timeStamp || Date.now(); 13526 13527 // Mark it as fixed 13528 this[ jQuery.expando ] = true; 13529}; 13530 13531// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding 13532// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html 13533jQuery.Event.prototype = { 13534 constructor: jQuery.Event, 13535 isDefaultPrevented: returnFalse, 13536 isPropagationStopped: returnFalse, 13537 isImmediatePropagationStopped: returnFalse, 13538 isSimulated: false, 13539 13540 preventDefault: function() { 13541 var e = this.originalEvent; 13542 13543 this.isDefaultPrevented = returnTrue; 13544 13545 if ( e && !this.isSimulated ) { 13546 e.preventDefault(); 13547 } 13548 }, 13549 stopPropagation: function() { 13550 var e = this.originalEvent; 13551 13552 this.isPropagationStopped = returnTrue; 13553 13554 if ( e && !this.isSimulated ) { 13555 e.stopPropagation(); 13556 } 13557 }, 13558 stopImmediatePropagation: function() { 13559 var e = this.originalEvent; 13560 13561 this.isImmediatePropagationStopped = returnTrue; 13562 13563 if ( e && !this.isSimulated ) { 13564 e.stopImmediatePropagation(); 13565 } 13566 13567 this.stopPropagation(); 13568 } 13569}; 13570 13571// Includes all common event props including KeyEvent and MouseEvent specific props 13572jQuery.each( { 13573 altKey: true, 13574 bubbles: true, 13575 cancelable: true, 13576 changedTouches: true, 13577 ctrlKey: true, 13578 detail: true, 13579 eventPhase: true, 13580 metaKey: true, 13581 pageX: true, 13582 pageY: true, 13583 shiftKey: true, 13584 view: true, 13585 "char": true, 13586 code: true, 13587 charCode: true, 13588 key: true, 13589 keyCode: true, 13590 button: true, 13591 buttons: true, 13592 clientX: true, 13593 clientY: true, 13594 offsetX: true, 13595 offsetY: true, 13596 pointerId: true, 13597 pointerType: true, 13598 screenX: true, 13599 screenY: true, 13600 targetTouches: true, 13601 toElement: true, 13602 touches: true, 13603 which: true 13604}, jQuery.event.addProp ); 13605 13606jQuery.each( { focus: "focusin", blur: "focusout" }, function( type, delegateType ) { 13607 13608 function focusMappedHandler( nativeEvent ) { 13609 if ( document.documentMode ) { 13610 13611 // Support: IE 11+ 13612 // Attach a single focusin/focusout handler on the document while someone wants 13613 // focus/blur. This is because the former are synchronous in IE while the latter 13614 // are async. In other browsers, all those handlers are invoked synchronously. 13615 13616 // `handle` from private data would already wrap the event, but we need 13617 // to change the `type` here. 13618 var handle = dataPriv.get( this, "handle" ), 13619 event = jQuery.event.fix( nativeEvent ); 13620 event.type = nativeEvent.type === "focusin" ? "focus" : "blur"; 13621 event.isSimulated = true; 13622 13623 // First, handle focusin/focusout 13624 handle( nativeEvent ); 13625 13626 // ...then, handle focus/blur 13627 // 13628 // focus/blur don't bubble while focusin/focusout do; simulate the former by only 13629 // invoking the handler at the lower level. 13630 if ( event.target === event.currentTarget ) { 13631 13632 // The setup part calls `leverageNative`, which, in turn, calls 13633 // `jQuery.event.add`, so event handle will already have been set 13634 // by this point. 13635 handle( event ); 13636 } 13637 } else { 13638 13639 // For non-IE browsers, attach a single capturing handler on the document 13640 // while someone wants focusin/focusout. 13641 jQuery.event.simulate( delegateType, nativeEvent.target, 13642 jQuery.event.fix( nativeEvent ) ); 13643 } 13644 } 13645 13646 jQuery.event.special[ type ] = { 13647 13648 // Utilize native event if possible so blur/focus sequence is correct 13649 setup: function() { 13650 13651 var attaches; 13652 13653 // Claim the first handler 13654 // dataPriv.set( this, "focus", ... ) 13655 // dataPriv.set( this, "blur", ... ) 13656 leverageNative( this, type, true ); 13657 13658 if ( document.documentMode ) { 13659 13660 // Support: IE 9 - 11+ 13661 // We use the same native handler for focusin & focus (and focusout & blur) 13662 // so we need to coordinate setup & teardown parts between those events. 13663 // Use `delegateType` as the key as `type` is already used by `leverageNative`. 13664 attaches = dataPriv.get( this, delegateType ); 13665 if ( !attaches ) { 13666 this.addEventListener( delegateType, focusMappedHandler ); 13667 } 13668 dataPriv.set( this, delegateType, ( attaches || 0 ) + 1 ); 13669 } else { 13670 13671 // Return false to allow normal processing in the caller 13672 return false; 13673 } 13674 }, 13675 trigger: function() { 13676 13677 // Force setup before trigger 13678 leverageNative( this, type ); 13679 13680 // Return non-false to allow normal event-path propagation 13681 return true; 13682 }, 13683 13684 teardown: function() { 13685 var attaches; 13686 13687 if ( document.documentMode ) { 13688 attaches = dataPriv.get( this, delegateType ) - 1; 13689 if ( !attaches ) { 13690 this.removeEventListener( delegateType, focusMappedHandler ); 13691 dataPriv.remove( this, delegateType ); 13692 } else { 13693 dataPriv.set( this, delegateType, attaches ); 13694 } 13695 } else { 13696 13697 // Return false to indicate standard teardown should be applied 13698 return false; 13699 } 13700 }, 13701 13702 // Suppress native focus or blur if we're currently inside 13703 // a leveraged native-event stack 13704 _default: function( event ) { 13705 return dataPriv.get( event.target, type ); 13706 }, 13707 13708 delegateType: delegateType 13709 }; 13710 13711 // Support: Firefox <=44 13712 // Firefox doesn't have focus(in | out) events 13713 // Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787 13714 // 13715 // Support: Chrome <=48 - 49, Safari <=9.0 - 9.1 13716 // focus(in | out) events fire after focus & blur events, 13717 // which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order 13718 // Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857 13719 // 13720 // Support: IE 9 - 11+ 13721 // To preserve relative focusin/focus & focusout/blur event order guaranteed on the 3.x branch, 13722 // attach a single handler for both events in IE. 13723 jQuery.event.special[ delegateType ] = { 13724 setup: function() { 13725 13726 // Handle: regular nodes (via `this.ownerDocument`), window 13727 // (via `this.document`) & document (via `this`). 13728 var doc = this.ownerDocument || this.document || this, 13729 dataHolder = document.documentMode ? this : doc, 13730 attaches = dataPriv.get( dataHolder, delegateType ); 13731 13732 // Support: IE 9 - 11+ 13733 // We use the same native handler for focusin & focus (and focusout & blur) 13734 // so we need to coordinate setup & teardown parts between those events. 13735 // Use `delegateType` as the key as `type` is already used by `leverageNative`. 13736 if ( !attaches ) { 13737 if ( document.documentMode ) { 13738 this.addEventListener( delegateType, focusMappedHandler ); 13739 } else { 13740 doc.addEventListener( type, focusMappedHandler, true ); 13741 } 13742 } 13743 dataPriv.set( dataHolder, delegateType, ( attaches || 0 ) + 1 ); 13744 }, 13745 teardown: function() { 13746 var doc = this.ownerDocument || this.document || this, 13747 dataHolder = document.documentMode ? this : doc, 13748 attaches = dataPriv.get( dataHolder, delegateType ) - 1; 13749 13750 if ( !attaches ) { 13751 if ( document.documentMode ) { 13752 this.removeEventListener( delegateType, focusMappedHandler ); 13753 } else { 13754 doc.removeEventListener( type, focusMappedHandler, true ); 13755 } 13756 dataPriv.remove( dataHolder, delegateType ); 13757 } else { 13758 dataPriv.set( dataHolder, delegateType, attaches ); 13759 } 13760 } 13761 }; 13762} ); 13763 13764// Create mouseenter/leave events using mouseover/out and event-time checks 13765// so that event delegation works in jQuery. 13766// Do the same for pointerenter/pointerleave and pointerover/pointerout 13767// 13768// Support: Safari 7 only 13769// Safari sends mouseenter too often; see: 13770// https://bugs.chromium.org/p/chromium/issues/detail?id=470258 13771// for the description of the bug (it existed in older Chrome versions as well). 13772jQuery.each( { 13773 mouseenter: "mouseover", 13774 mouseleave: "mouseout", 13775 pointerenter: "pointerover", 13776 pointerleave: "pointerout" 13777}, function( orig, fix ) { 13778 jQuery.event.special[ orig ] = { 13779 delegateType: fix, 13780 bindType: fix, 13781 13782 handle: function( event ) { 13783 var ret, 13784 target = this, 13785 related = event.relatedTarget, 13786 handleObj = event.handleObj; 13787 13788 // For mouseenter/leave call the handler if related is outside the target. 13789 // NB: No relatedTarget if the mouse left/entered the browser window 13790 if ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) { 13791 event.type = handleObj.origType; 13792 ret = handleObj.handler.apply( this, arguments ); 13793 event.type = fix; 13794 } 13795 return ret; 13796 } 13797 }; 13798} ); 13799 13800jQuery.fn.extend( { 13801 13802 on: function( types, selector, data, fn ) { 13803 return on( this, types, selector, data, fn ); 13804 }, 13805 one: function( types, selector, data, fn ) { 13806 return on( this, types, selector, data, fn, 1 ); 13807 }, 13808 off: function( types, selector, fn ) { 13809 var handleObj, type; 13810 if ( types && types.preventDefault && types.handleObj ) { 13811 13812 // ( event ) dispatched jQuery.Event 13813 handleObj = types.handleObj; 13814 jQuery( types.delegateTarget ).off( 13815 handleObj.namespace ? 13816 handleObj.origType + "." + handleObj.namespace : 13817 handleObj.origType, 13818 handleObj.selector, 13819 handleObj.handler 13820 ); 13821 return this; 13822 } 13823 if ( typeof types === "object" ) { 13824 13825 // ( types-object [, selector] ) 13826 for ( type in types ) { 13827 this.off( type, selector, types[ type ] ); 13828 } 13829 return this; 13830 } 13831 if ( selector === false || typeof selector === "function" ) { 13832 13833 // ( types [, fn] ) 13834 fn = selector; 13835 selector = undefined; 13836 } 13837 if ( fn === false ) { 13838 fn = returnFalse; 13839 } 13840 return this.each( function() { 13841 jQuery.event.remove( this, types, fn, selector ); 13842 } ); 13843 } 13844} ); 13845 13846 13847var 13848 13849 // Support: IE <=10 - 11, Edge 12 - 13 only 13850 // In IE/Edge using regex groups here causes severe slowdowns. 13851 // See https://connect.microsoft.com/IE/feedback/details/1736512/ 13852 rnoInnerhtml = /<script|<style|<link/i, 13853 13854 // checked="checked" or checked 13855 rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i, 13856 13857 rcleanScript = /^\s*<!\[CDATA\[|\]\]>\s*$/g; 13858 13859// Prefer a tbody over its parent table for containing new rows 13860function manipulationTarget( elem, content ) { 13861 if ( nodeName( elem, "table" ) && 13862 nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ) { 13863 13864 return jQuery( elem ).children( "tbody" )[ 0 ] || elem; 13865 } 13866 13867 return elem; 13868} 13869 13870// Replace/restore the type attribute of script elements for safe DOM manipulation 13871function disableScript( elem ) { 13872 elem.type = ( elem.getAttribute( "type" ) !== null ) + "/" + elem.type; 13873 return elem; 13874} 13875function restoreScript( elem ) { 13876 if ( ( elem.type || "" ).slice( 0, 5 ) === "true/" ) { 13877 elem.type = elem.type.slice( 5 ); 13878 } else { 13879 elem.removeAttribute( "type" ); 13880 } 13881 13882 return elem; 13883} 13884 13885function cloneCopyEvent( src, dest ) { 13886 var i, l, type, pdataOld, udataOld, udataCur, events; 13887 13888 if ( dest.nodeType !== 1 ) { 13889 return; 13890 } 13891 13892 // 1. Copy private data: events, handlers, etc. 13893 if ( dataPriv.hasData( src ) ) { 13894 pdataOld = dataPriv.get( src ); 13895 events = pdataOld.events; 13896 13897 if ( events ) { 13898 dataPriv.remove( dest, "handle events" ); 13899 13900 for ( type in events ) { 13901 for ( i = 0, l = events[ type ].length; i < l; i++ ) { 13902 jQuery.event.add( dest, type, events[ type ][ i ] ); 13903 } 13904 } 13905 } 13906 } 13907 13908 // 2. Copy user data 13909 if ( dataUser.hasData( src ) ) { 13910 udataOld = dataUser.access( src ); 13911 udataCur = jQuery.extend( {}, udataOld ); 13912 13913 dataUser.set( dest, udataCur ); 13914 } 13915} 13916 13917// Fix IE bugs, see support tests 13918function fixInput( src, dest ) { 13919 var nodeName = dest.nodeName.toLowerCase(); 13920 13921 // Fails to persist the checked state of a cloned checkbox or radio button. 13922 if ( nodeName === "input" && rcheckableType.test( src.type ) ) { 13923 dest.checked = src.checked; 13924 13925 // Fails to return the selected option to the default selected state when cloning options 13926 } else if ( nodeName === "input" || nodeName === "textarea" ) { 13927 dest.defaultValue = src.defaultValue; 13928 } 13929} 13930 13931function domManip( collection, args, callback, ignored ) { 13932 13933 // Flatten any nested arrays 13934 args = flat( args ); 13935 13936 var fragment, first, scripts, hasScripts, node, doc, 13937 i = 0, 13938 l = collection.length, 13939 iNoClone = l - 1, 13940 value = args[ 0 ], 13941 valueIsFunction = isFunction( value ); 13942 13943 // We can't cloneNode fragments that contain checked, in WebKit 13944 if ( valueIsFunction || 13945 ( l > 1 && typeof value === "string" && 13946 !support.checkClone && rchecked.test( value ) ) ) { 13947 return collection.each( function( index ) { 13948 var self = collection.eq( index ); 13949 if ( valueIsFunction ) { 13950 args[ 0 ] = value.call( this, index, self.html() ); 13951 } 13952 domManip( self, args, callback, ignored ); 13953 } ); 13954 } 13955 13956 if ( l ) { 13957 fragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored ); 13958 first = fragment.firstChild; 13959 13960 if ( fragment.childNodes.length === 1 ) { 13961 fragment = first; 13962 } 13963 13964 // Require either new content or an interest in ignored elements to invoke the callback 13965 if ( first || ignored ) { 13966 scripts = jQuery.map( getAll( fragment, "script" ), disableScript ); 13967 hasScripts = scripts.length; 13968 13969 // Use the original fragment for the last item 13970 // instead of the first because it can end up 13971 // being emptied incorrectly in certain situations (trac-8070). 13972 for ( ; i < l; i++ ) { 13973 node = fragment; 13974 13975 if ( i !== iNoClone ) { 13976 node = jQuery.clone( node, true, true ); 13977 13978 // Keep references to cloned scripts for later restoration 13979 if ( hasScripts ) { 13980 13981 // Support: Android <=4.0 only, PhantomJS 1 only 13982 // push.apply(_, arraylike) throws on ancient WebKit 13983 jQuery.merge( scripts, getAll( node, "script" ) ); 13984 } 13985 } 13986 13987 callback.call( collection[ i ], node, i ); 13988 } 13989 13990 if ( hasScripts ) { 13991 doc = scripts[ scripts.length - 1 ].ownerDocument; 13992 13993 // Re-enable scripts 13994 jQuery.map( scripts, restoreScript ); 13995 13996 // Evaluate executable scripts on first document insertion 13997 for ( i = 0; i < hasScripts; i++ ) { 13998 node = scripts[ i ]; 13999 if ( rscriptType.test( node.type || "" ) && 14000 !dataPriv.access( node, "globalEval" ) && 14001 jQuery.contains( doc, node ) ) { 14002 14003 if ( node.src && ( node.type || "" ).toLowerCase() !== "module" ) { 14004 14005 // Optional AJAX dependency, but won't run scripts if not present 14006 if ( jQuery._evalUrl && !node.noModule ) { 14007 jQuery._evalUrl( node.src, { 14008 nonce: node.nonce || node.getAttribute( "nonce" ) 14009 }, doc ); 14010 } 14011 } else { 14012 14013 // Unwrap a CDATA section containing script contents. This shouldn't be 14014 // needed as in XML documents they're already not visible when 14015 // inspecting element contents and in HTML documents they have no 14016 // meaning but we're preserving that logic for backwards compatibility. 14017 // This will be removed completely in 4.0. See gh-4904. 14018 DOMEval( node.textContent.replace( rcleanScript, "" ), node, doc ); 14019 } 14020 } 14021 } 14022 } 14023 } 14024 } 14025 14026 return collection; 14027} 14028 14029function remove( elem, selector, keepData ) { 14030 var node, 14031 nodes = selector ? jQuery.filter( selector, elem ) : elem, 14032 i = 0; 14033 14034 for ( ; ( node = nodes[ i ] ) != null; i++ ) { 14035 if ( !keepData && node.nodeType === 1 ) { 14036 jQuery.cleanData( getAll( node ) ); 14037 } 14038 14039 if ( node.parentNode ) { 14040 if ( keepData && isAttached( node ) ) { 14041 setGlobalEval( getAll( node, "script" ) ); 14042 } 14043 node.parentNode.removeChild( node ); 14044 } 14045 } 14046 14047 return elem; 14048} 14049 14050jQuery.extend( { 14051 htmlPrefilter: function( html ) { 14052 return html; 14053 }, 14054 14055 clone: function( elem, dataAndEvents, deepDataAndEvents ) { 14056 var i, l, srcElements, destElements, 14057 clone = elem.cloneNode( true ), 14058 inPage = isAttached( elem ); 14059 14060 // Fix IE cloning issues 14061 if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) && 14062 !jQuery.isXMLDoc( elem ) ) { 14063 14064 // We eschew jQuery#find here for performance reasons: 14065 // https://jsperf.com/getall-vs-sizzle/2 14066 destElements = getAll( clone ); 14067 srcElements = getAll( elem ); 14068 14069 for ( i = 0, l = srcElements.length; i < l; i++ ) { 14070 fixInput( srcElements[ i ], destElements[ i ] ); 14071 } 14072 } 14073 14074 // Copy the events from the original to the clone 14075 if ( dataAndEvents ) { 14076 if ( deepDataAndEvents ) { 14077 srcElements = srcElements || getAll( elem ); 14078 destElements = destElements || getAll( clone ); 14079 14080 for ( i = 0, l = srcElements.length; i < l; i++ ) { 14081 cloneCopyEvent( srcElements[ i ], destElements[ i ] ); 14082 } 14083 } else { 14084 cloneCopyEvent( elem, clone ); 14085 } 14086 } 14087 14088 // Preserve script evaluation history 14089 destElements = getAll( clone, "script" ); 14090 if ( destElements.length > 0 ) { 14091 setGlobalEval( destElements, !inPage && getAll( elem, "script" ) ); 14092 } 14093 14094 // Return the cloned set 14095 return clone; 14096 }, 14097 14098 cleanData: function( elems ) { 14099 var data, elem, type, 14100 special = jQuery.event.special, 14101 i = 0; 14102 14103 for ( ; ( elem = elems[ i ] ) !== undefined; i++ ) { 14104 if ( acceptData( elem ) ) { 14105 if ( ( data = elem[ dataPriv.expando ] ) ) { 14106 if ( data.events ) { 14107 for ( type in data.events ) { 14108 if ( special[ type ] ) { 14109 jQuery.event.remove( elem, type ); 14110 14111 // This is a shortcut to avoid jQuery.event.remove's overhead 14112 } else { 14113 jQuery.removeEvent( elem, type, data.handle ); 14114 } 14115 } 14116 } 14117 14118 // Support: Chrome <=35 - 45+ 14119 // Assign undefined instead of using delete, see Data#remove 14120 elem[ dataPriv.expando ] = undefined; 14121 } 14122 if ( elem[ dataUser.expando ] ) { 14123 14124 // Support: Chrome <=35 - 45+ 14125 // Assign undefined instead of using delete, see Data#remove 14126 elem[ dataUser.expando ] = undefined; 14127 } 14128 } 14129 } 14130 } 14131} ); 14132 14133jQuery.fn.extend( { 14134 detach: function( selector ) { 14135 return remove( this, selector, true ); 14136 }, 14137 14138 remove: function( selector ) { 14139 return remove( this, selector ); 14140 }, 14141 14142 text: function( value ) { 14143 return access( this, function( value ) { 14144 return value === undefined ? 14145 jQuery.text( this ) : 14146 this.empty().each( function() { 14147 if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { 14148 this.textContent = value; 14149 } 14150 } ); 14151 }, null, value, arguments.length ); 14152 }, 14153 14154 append: function() { 14155 return domManip( this, arguments, function( elem ) { 14156 if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { 14157 var target = manipulationTarget( this, elem ); 14158 target.appendChild( elem ); 14159 } 14160 } ); 14161 }, 14162 14163 prepend: function() { 14164 return domManip( this, arguments, function( elem ) { 14165 if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { 14166 var target = manipulationTarget( this, elem ); 14167 target.insertBefore( elem, target.firstChild ); 14168 } 14169 } ); 14170 }, 14171 14172 before: function() { 14173 return domManip( this, arguments, function( elem ) { 14174 if ( this.parentNode ) { 14175 this.parentNode.insertBefore( elem, this ); 14176 } 14177 } ); 14178 }, 14179 14180 after: function() { 14181 return domManip( this, arguments, function( elem ) { 14182 if ( this.parentNode ) { 14183 this.parentNode.insertBefore( elem, this.nextSibling ); 14184 } 14185 } ); 14186 }, 14187 14188 empty: function() { 14189 var elem, 14190 i = 0; 14191 14192 for ( ; ( elem = this[ i ] ) != null; i++ ) { 14193 if ( elem.nodeType === 1 ) { 14194 14195 // Prevent memory leaks 14196 jQuery.cleanData( getAll( elem, false ) ); 14197 14198 // Remove any remaining nodes 14199 elem.textContent = ""; 14200 } 14201 } 14202 14203 return this; 14204 }, 14205 14206 clone: function( dataAndEvents, deepDataAndEvents ) { 14207 dataAndEvents = dataAndEvents == null ? false : dataAndEvents; 14208 deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents; 14209 14210 return this.map( function() { 14211 return jQuery.clone( this, dataAndEvents, deepDataAndEvents ); 14212 } ); 14213 }, 14214 14215 html: function( value ) { 14216 return access( this, function( value ) { 14217 var elem = this[ 0 ] || {}, 14218 i = 0, 14219 l = this.length; 14220 14221 if ( value === undefined && elem.nodeType === 1 ) { 14222 return elem.innerHTML; 14223 } 14224 14225 // See if we can take a shortcut and just use innerHTML 14226 if ( typeof value === "string" && !rnoInnerhtml.test( value ) && 14227 !wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) { 14228 14229 value = jQuery.htmlPrefilter( value ); 14230 14231 try { 14232 for ( ; i < l; i++ ) { 14233 elem = this[ i ] || {}; 14234 14235 // Remove element nodes and prevent memory leaks 14236 if ( elem.nodeType === 1 ) { 14237 jQuery.cleanData( getAll( elem, false ) ); 14238 elem.innerHTML = value; 14239 } 14240 } 14241 14242 elem = 0; 14243 14244 // If using innerHTML throws an exception, use the fallback method 14245 } catch ( e ) {} 14246 } 14247 14248 if ( elem ) { 14249 this.empty().append( value ); 14250 } 14251 }, null, value, arguments.length ); 14252 }, 14253 14254 replaceWith: function() { 14255 var ignored = []; 14256 14257 // Make the changes, replacing each non-ignored context element with the new content 14258 return domManip( this, arguments, function( elem ) { 14259 var parent = this.parentNode; 14260 14261 if ( jQuery.inArray( this, ignored ) < 0 ) { 14262 jQuery.cleanData( getAll( this ) ); 14263 if ( parent ) { 14264 parent.replaceChild( elem, this ); 14265 } 14266 } 14267 14268 // Force callback invocation 14269 }, ignored ); 14270 } 14271} ); 14272 14273jQuery.each( { 14274 appendTo: "append", 14275 prependTo: "prepend", 14276 insertBefore: "before", 14277 insertAfter: "after", 14278 replaceAll: "replaceWith" 14279}, function( name, original ) { 14280 jQuery.fn[ name ] = function( selector ) { 14281 var elems, 14282 ret = [], 14283 insert = jQuery( selector ), 14284 last = insert.length - 1, 14285 i = 0; 14286 14287 for ( ; i <= last; i++ ) { 14288 elems = i === last ? this : this.clone( true ); 14289 jQuery( insert[ i ] )[ original ]( elems ); 14290 14291 // Support: Android <=4.0 only, PhantomJS 1 only 14292 // .get() because push.apply(_, arraylike) throws on ancient WebKit 14293 push.apply( ret, elems.get() ); 14294 } 14295 14296 return this.pushStack( ret ); 14297 }; 14298} ); 14299var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" ); 14300 14301var rcustomProp = /^--/; 14302 14303 14304var getStyles = function( elem ) { 14305 14306 // Support: IE <=11 only, Firefox <=30 (trac-15098, trac-14150) 14307 // IE throws on elements created in popups 14308 // FF meanwhile throws on frame elements through "defaultView.getComputedStyle" 14309 var view = elem.ownerDocument.defaultView; 14310 14311 if ( !view || !view.opener ) { 14312 view = window; 14313 } 14314 14315 return view.getComputedStyle( elem ); 14316 }; 14317 14318var swap = function( elem, options, callback ) { 14319 var ret, name, 14320 old = {}; 14321 14322 // Remember the old values, and insert the new ones 14323 for ( name in options ) { 14324 old[ name ] = elem.style[ name ]; 14325 elem.style[ name ] = options[ name ]; 14326 } 14327 14328 ret = callback.call( elem ); 14329 14330 // Revert the old values 14331 for ( name in options ) { 14332 elem.style[ name ] = old[ name ]; 14333 } 14334 14335 return ret; 14336}; 14337 14338 14339var rboxStyle = new RegExp( cssExpand.join( "|" ), "i" ); 14340 14341 14342 14343( function() { 14344 14345 // Executing both pixelPosition & boxSizingReliable tests require only one layout 14346 // so they're executed at the same time to save the second computation. 14347 function computeStyleTests() { 14348 14349 // This is a singleton, we need to execute it only once 14350 if ( !div ) { 14351 return; 14352 } 14353 14354 container.style.cssText = "position:absolute;left:-11111px;width:60px;" + 14355 "margin-top:1px;padding:0;border:0"; 14356 div.style.cssText = 14357 "position:relative;display:block;box-sizing:border-box;overflow:scroll;" + 14358 "margin:auto;border:1px;padding:1px;" + 14359 "width:60%;top:1%"; 14360 documentElement.appendChild( container ).appendChild( div ); 14361 14362 var divStyle = window.getComputedStyle( div ); 14363 pixelPositionVal = divStyle.top !== "1%"; 14364 14365 // Support: Android 4.0 - 4.3 only, Firefox <=3 - 44 14366 reliableMarginLeftVal = roundPixelMeasures( divStyle.marginLeft ) === 12; 14367 14368 // Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3 14369 // Some styles come back with percentage values, even though they shouldn't 14370 div.style.right = "60%"; 14371 pixelBoxStylesVal = roundPixelMeasures( divStyle.right ) === 36; 14372 14373 // Support: IE 9 - 11 only 14374 // Detect misreporting of content dimensions for box-sizing:border-box elements 14375 boxSizingReliableVal = roundPixelMeasures( divStyle.width ) === 36; 14376 14377 // Support: IE 9 only 14378 // Detect overflow:scroll screwiness (gh-3699) 14379 // Support: Chrome <=64 14380 // Don't get tricked when zoom affects offsetWidth (gh-4029) 14381 div.style.position = "absolute"; 14382 scrollboxSizeVal = roundPixelMeasures( div.offsetWidth / 3 ) === 12; 14383 14384 documentElement.removeChild( container ); 14385 14386 // Nullify the div so it wouldn't be stored in the memory and 14387 // it will also be a sign that checks already performed 14388 div = null; 14389 } 14390 14391 function roundPixelMeasures( measure ) { 14392 return Math.round( parseFloat( measure ) ); 14393 } 14394 14395 var pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal, 14396 reliableTrDimensionsVal, reliableMarginLeftVal, 14397 container = document.createElement( "div" ), 14398 div = document.createElement( "div" ); 14399 14400 // Finish early in limited (non-browser) environments 14401 if ( !div.style ) { 14402 return; 14403 } 14404 14405 // Support: IE <=9 - 11 only 14406 // Style of cloned element affects source element cloned (trac-8908) 14407 div.style.backgroundClip = "content-box"; 14408 div.cloneNode( true ).style.backgroundClip = ""; 14409 support.clearCloneStyle = div.style.backgroundClip === "content-box"; 14410 14411 jQuery.extend( support, { 14412 boxSizingReliable: function() { 14413 computeStyleTests(); 14414 return boxSizingReliableVal; 14415 }, 14416 pixelBoxStyles: function() { 14417 computeStyleTests(); 14418 return pixelBoxStylesVal; 14419 }, 14420 pixelPosition: function() { 14421 computeStyleTests(); 14422 return pixelPositionVal; 14423 }, 14424 reliableMarginLeft: function() { 14425 computeStyleTests(); 14426 return reliableMarginLeftVal; 14427 }, 14428 scrollboxSize: function() { 14429 computeStyleTests(); 14430 return scrollboxSizeVal; 14431 }, 14432 14433 // Support: IE 9 - 11+, Edge 15 - 18+ 14434 // IE/Edge misreport `getComputedStyle` of table rows with width/height 14435 // set in CSS while `offset*` properties report correct values. 14436 // Behavior in IE 9 is more subtle than in newer versions & it passes 14437 // some versions of this test; make sure not to make it pass there! 14438 // 14439 // Support: Firefox 70+ 14440 // Only Firefox includes border widths 14441 // in computed dimensions. (gh-4529) 14442 reliableTrDimensions: function() { 14443 var table, tr, trChild, trStyle; 14444 if ( reliableTrDimensionsVal == null ) { 14445 table = document.createElement( "table" ); 14446 tr = document.createElement( "tr" ); 14447 trChild = document.createElement( "div" ); 14448 14449 table.style.cssText = "position:absolute;left:-11111px;border-collapse:separate"; 14450 tr.style.cssText = "box-sizing:content-box;border:1px solid"; 14451 14452 // Support: Chrome 86+ 14453 // Height set through cssText does not get applied. 14454 // Computed height then comes back as 0. 14455 tr.style.height = "1px"; 14456 trChild.style.height = "9px"; 14457 14458 // Support: Android 8 Chrome 86+ 14459 // In our bodyBackground.html iframe, 14460 // display for all div elements is set to "inline", 14461 // which causes a problem only in Android 8 Chrome 86. 14462 // Ensuring the div is `display: block` 14463 // gets around this issue. 14464 trChild.style.display = "block"; 14465 14466 documentElement 14467 .appendChild( table ) 14468 .appendChild( tr ) 14469 .appendChild( trChild ); 14470 14471 trStyle = window.getComputedStyle( tr ); 14472 reliableTrDimensionsVal = ( parseInt( trStyle.height, 10 ) + 14473 parseInt( trStyle.borderTopWidth, 10 ) + 14474 parseInt( trStyle.borderBottomWidth, 10 ) ) === tr.offsetHeight; 14475 14476 documentElement.removeChild( table ); 14477 } 14478 return reliableTrDimensionsVal; 14479 } 14480 } ); 14481} )(); 14482 14483 14484function curCSS( elem, name, computed ) { 14485 var width, minWidth, maxWidth, ret, 14486 isCustomProp = rcustomProp.test( name ), 14487 14488 // Support: Firefox 51+ 14489 // Retrieving style before computed somehow 14490 // fixes an issue with getting wrong values 14491 // on detached elements 14492 style = elem.style; 14493 14494 computed = computed || getStyles( elem ); 14495 14496 // getPropertyValue is needed for: 14497 // .css('filter') (IE 9 only, trac-12537) 14498 // .css('--customProperty) (gh-3144) 14499 if ( computed ) { 14500 14501 // Support: IE <=9 - 11+ 14502 // IE only supports `"float"` in `getPropertyValue`; in computed styles 14503 // it's only available as `"cssFloat"`. We no longer modify properties 14504 // sent to `.css()` apart from camelCasing, so we need to check both. 14505 // Normally, this would create difference in behavior: if 14506 // `getPropertyValue` returns an empty string, the value returned 14507 // by `.css()` would be `undefined`. This is usually the case for 14508 // disconnected elements. However, in IE even disconnected elements 14509 // with no styles return `"none"` for `getPropertyValue( "float" )` 14510 ret = computed.getPropertyValue( name ) || computed[ name ]; 14511 14512 if ( isCustomProp && ret ) { 14513 14514 // Support: Firefox 105+, Chrome <=105+ 14515 // Spec requires trimming whitespace for custom properties (gh-4926). 14516 // Firefox only trims leading whitespace. Chrome just collapses 14517 // both leading & trailing whitespace to a single space. 14518 // 14519 // Fall back to `undefined` if empty string returned. 14520 // This collapses a missing definition with property defined 14521 // and set to an empty string but there's no standard API 14522 // allowing us to differentiate them without a performance penalty 14523 // and returning `undefined` aligns with older jQuery. 14524 // 14525 // rtrimCSS treats U+000D CARRIAGE RETURN and U+000C FORM FEED 14526 // as whitespace while CSS does not, but this is not a problem 14527 // because CSS preprocessing replaces them with U+000A LINE FEED 14528 // (which *is* CSS whitespace) 14529 // https://www.w3.org/TR/css-syntax-3/#input-preprocessing 14530 ret = ret.replace( rtrimCSS, "$1" ) || undefined; 14531 } 14532 14533 if ( ret === "" && !isAttached( elem ) ) { 14534 ret = jQuery.style( elem, name ); 14535 } 14536 14537 // A tribute to the "awesome hack by Dean Edwards" 14538 // Android Browser returns percentage for some values, 14539 // but width seems to be reliably pixels. 14540 // This is against the CSSOM draft spec: 14541 // https://drafts.csswg.org/cssom/#resolved-values 14542 if ( !support.pixelBoxStyles() && rnumnonpx.test( ret ) && rboxStyle.test( name ) ) { 14543 14544 // Remember the original values 14545 width = style.width; 14546 minWidth = style.minWidth; 14547 maxWidth = style.maxWidth; 14548 14549 // Put in the new values to get a computed value out 14550 style.minWidth = style.maxWidth = style.width = ret; 14551 ret = computed.width; 14552 14553 // Revert the changed values 14554 style.width = width; 14555 style.minWidth = minWidth; 14556 style.maxWidth = maxWidth; 14557 } 14558 } 14559 14560 return ret !== undefined ? 14561 14562 // Support: IE <=9 - 11 only 14563 // IE returns zIndex value as an integer. 14564 ret + "" : 14565 ret; 14566} 14567 14568 14569function addGetHookIf( conditionFn, hookFn ) { 14570 14571 // Define the hook, we'll check on the first run if it's really needed. 14572 return { 14573 get: function() { 14574 if ( conditionFn() ) { 14575 14576 // Hook not needed (or it's not possible to use it due 14577 // to missing dependency), remove it. 14578 delete this.get; 14579 return; 14580 } 14581 14582 // Hook needed; redefine it so that the support test is not executed again. 14583 return ( this.get = hookFn ).apply( this, arguments ); 14584 } 14585 }; 14586} 14587 14588 14589var cssPrefixes = [ "Webkit", "Moz", "ms" ], 14590 emptyStyle = document.createElement( "div" ).style, 14591 vendorProps = {}; 14592 14593// Return a vendor-prefixed property or undefined 14594function vendorPropName( name ) { 14595 14596 // Check for vendor prefixed names 14597 var capName = name[ 0 ].toUpperCase() + name.slice( 1 ), 14598 i = cssPrefixes.length; 14599 14600 while ( i-- ) { 14601 name = cssPrefixes[ i ] + capName; 14602 if ( name in emptyStyle ) { 14603 return name; 14604 } 14605 } 14606} 14607 14608// Return a potentially-mapped jQuery.cssProps or vendor prefixed property 14609function finalPropName( name ) { 14610 var final = jQuery.cssProps[ name ] || vendorProps[ name ]; 14611 14612 if ( final ) { 14613 return final; 14614 } 14615 if ( name in emptyStyle ) { 14616 return name; 14617 } 14618 return vendorProps[ name ] = vendorPropName( name ) || name; 14619} 14620 14621 14622var 14623 14624 // Swappable if display is none or starts with table 14625 // except "table", "table-cell", or "table-caption" 14626 // See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display 14627 rdisplayswap = /^(none|table(?!-c[ea]).+)/, 14628 cssShow = { position: "absolute", visibility: "hidden", display: "block" }, 14629 cssNormalTransform = { 14630 letterSpacing: "0", 14631 fontWeight: "400" 14632 }; 14633 14634function setPositiveNumber( _elem, value, subtract ) { 14635 14636 // Any relative (+/-) values have already been 14637 // normalized at this point 14638 var matches = rcssNum.exec( value ); 14639 return matches ? 14640 14641 // Guard against undefined "subtract", e.g., when used as in cssHooks 14642 Math.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || "px" ) : 14643 value; 14644} 14645 14646function boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) { 14647 var i = dimension === "width" ? 1 : 0, 14648 extra = 0, 14649 delta = 0, 14650 marginDelta = 0; 14651 14652 // Adjustment may not be necessary 14653 if ( box === ( isBorderBox ? "border" : "content" ) ) { 14654 return 0; 14655 } 14656 14657 for ( ; i < 4; i += 2 ) { 14658 14659 // Both box models exclude margin 14660 // Count margin delta separately to only add it after scroll gutter adjustment. 14661 // This is needed to make negative margins work with `outerHeight( true )` (gh-3982). 14662 if ( box === "margin" ) { 14663 marginDelta += jQuery.css( elem, box + cssExpand[ i ], true, styles ); 14664 } 14665 14666 // If we get here with a content-box, we're seeking "padding" or "border" or "margin" 14667 if ( !isBorderBox ) { 14668 14669 // Add padding 14670 delta += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); 14671 14672 // For "border" or "margin", add border 14673 if ( box !== "padding" ) { 14674 delta += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); 14675 14676 // But still keep track of it otherwise 14677 } else { 14678 extra += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); 14679 } 14680 14681 // If we get here with a border-box (content + padding + border), we're seeking "content" or 14682 // "padding" or "margin" 14683 } else { 14684 14685 // For "content", subtract padding 14686 if ( box === "content" ) { 14687 delta -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); 14688 } 14689 14690 // For "content" or "padding", subtract border 14691 if ( box !== "margin" ) { 14692 delta -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); 14693 } 14694 } 14695 } 14696 14697 // Account for positive content-box scroll gutter when requested by providing computedVal 14698 if ( !isBorderBox && computedVal >= 0 ) { 14699 14700 // offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border 14701 // Assuming integer scroll gutter, subtract the rest and round down 14702 delta += Math.max( 0, Math.ceil( 14703 elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] - 14704 computedVal - 14705 delta - 14706 extra - 14707 0.5 14708 14709 // If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter 14710 // Use an explicit zero to avoid NaN (gh-3964) 14711 ) ) || 0; 14712 } 14713 14714 return delta + marginDelta; 14715} 14716 14717function getWidthOrHeight( elem, dimension, extra ) { 14718 14719 // Start with computed style 14720 var styles = getStyles( elem ), 14721 14722 // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322). 14723 // Fake content-box until we know it's needed to know the true value. 14724 boxSizingNeeded = !support.boxSizingReliable() || extra, 14725 isBorderBox = boxSizingNeeded && 14726 jQuery.css( elem, "boxSizing", false, styles ) === "border-box", 14727 valueIsBorderBox = isBorderBox, 14728 14729 val = curCSS( elem, dimension, styles ), 14730 offsetProp = "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ); 14731 14732 // Support: Firefox <=54 14733 // Return a confounding non-pixel value or feign ignorance, as appropriate. 14734 if ( rnumnonpx.test( val ) ) { 14735 if ( !extra ) { 14736 return val; 14737 } 14738 val = "auto"; 14739 } 14740 14741 14742 // Support: IE 9 - 11 only 14743 // Use offsetWidth/offsetHeight for when box sizing is unreliable. 14744 // In those cases, the computed value can be trusted to be border-box. 14745 if ( ( !support.boxSizingReliable() && isBorderBox || 14746 14747 // Support: IE 10 - 11+, Edge 15 - 18+ 14748 // IE/Edge misreport `getComputedStyle` of table rows with width/height 14749 // set in CSS while `offset*` properties report correct values. 14750 // Interestingly, in some cases IE 9 doesn't suffer from this issue. 14751 !support.reliableTrDimensions() && nodeName( elem, "tr" ) || 14752 14753 // Fall back to offsetWidth/offsetHeight when value is "auto" 14754 // This happens for inline elements with no explicit setting (gh-3571) 14755 val === "auto" || 14756 14757 // Support: Android <=4.1 - 4.3 only 14758 // Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602) 14759 !parseFloat( val ) && jQuery.css( elem, "display", false, styles ) === "inline" ) && 14760 14761 // Make sure the element is visible & connected 14762 elem.getClientRects().length ) { 14763 14764 isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box"; 14765 14766 // Where available, offsetWidth/offsetHeight approximate border box dimensions. 14767 // Where not available (e.g., SVG), assume unreliable box-sizing and interpret the 14768 // retrieved value as a content box dimension. 14769 valueIsBorderBox = offsetProp in elem; 14770 if ( valueIsBorderBox ) { 14771 val = elem[ offsetProp ]; 14772 } 14773 } 14774 14775 // Normalize "" and auto 14776 val = parseFloat( val ) || 0; 14777 14778 // Adjust for the element's box model 14779 return ( val + 14780 boxModelAdjustment( 14781 elem, 14782 dimension, 14783 extra || ( isBorderBox ? "border" : "content" ), 14784 valueIsBorderBox, 14785 styles, 14786 14787 // Provide the current computed size to request scroll gutter calculation (gh-3589) 14788 val 14789 ) 14790 ) + "px"; 14791} 14792 14793jQuery.extend( { 14794 14795 // Add in style property hooks for overriding the default 14796 // behavior of getting and setting a style property 14797 cssHooks: { 14798 opacity: { 14799 get: function( elem, computed ) { 14800 if ( computed ) { 14801 14802 // We should always get a number back from opacity 14803 var ret = curCSS( elem, "opacity" ); 14804 return ret === "" ? "1" : ret; 14805 } 14806 } 14807 } 14808 }, 14809 14810 // Don't automatically add "px" to these possibly-unitless properties 14811 cssNumber: { 14812 animationIterationCount: true, 14813 aspectRatio: true, 14814 borderImageSlice: true, 14815 columnCount: true, 14816 flexGrow: true, 14817 flexShrink: true, 14818 fontWeight: true, 14819 gridArea: true, 14820 gridColumn: true, 14821 gridColumnEnd: true, 14822 gridColumnStart: true, 14823 gridRow: true, 14824 gridRowEnd: true, 14825 gridRowStart: true, 14826 lineHeight: true, 14827 opacity: true, 14828 order: true, 14829 orphans: true, 14830 scale: true, 14831 widows: true, 14832 zIndex: true, 14833 zoom: true, 14834 14835 // SVG-related 14836 fillOpacity: true, 14837 floodOpacity: true, 14838 stopOpacity: true, 14839 strokeMiterlimit: true, 14840 strokeOpacity: true 14841 }, 14842 14843 // Add in properties whose names you wish to fix before 14844 // setting or getting the value 14845 cssProps: {}, 14846 14847 // Get and set the style property on a DOM Node 14848 style: function( elem, name, value, extra ) { 14849 14850 // Don't set styles on text and comment nodes 14851 if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) { 14852 return; 14853 } 14854 14855 // Make sure that we're working with the right name 14856 var ret, type, hooks, 14857 origName = camelCase( name ), 14858 isCustomProp = rcustomProp.test( name ), 14859 style = elem.style; 14860 14861 // Make sure that we're working with the right name. We don't 14862 // want to query the value if it is a CSS custom property 14863 // since they are user-defined. 14864 if ( !isCustomProp ) { 14865 name = finalPropName( origName ); 14866 } 14867 14868 // Gets hook for the prefixed version, then unprefixed version 14869 hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; 14870 14871 // Check if we're setting a value 14872 if ( value !== undefined ) { 14873 type = typeof value; 14874 14875 // Convert "+=" or "-=" to relative numbers (trac-7345) 14876 if ( type === "string" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) { 14877 value = adjustCSS( elem, name, ret ); 14878 14879 // Fixes bug trac-9237 14880 type = "number"; 14881 } 14882 14883 // Make sure that null and NaN values aren't set (trac-7116) 14884 if ( value == null || value !== value ) { 14885 return; 14886 } 14887 14888 // If a number was passed in, add the unit (except for certain CSS properties) 14889 // The isCustomProp check can be removed in jQuery 4.0 when we only auto-append 14890 // "px" to a few hardcoded values. 14891 if ( type === "number" && !isCustomProp ) { 14892 value += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? "" : "px" ); 14893 } 14894 14895 // background-* props affect original clone's values 14896 if ( !support.clearCloneStyle && value === "" && name.indexOf( "background" ) === 0 ) { 14897 style[ name ] = "inherit"; 14898 } 14899 14900 // If a hook was provided, use that value, otherwise just set the specified value 14901 if ( !hooks || !( "set" in hooks ) || 14902 ( value = hooks.set( elem, value, extra ) ) !== undefined ) { 14903 14904 if ( isCustomProp ) { 14905 style.setProperty( name, value ); 14906 } else { 14907 style[ name ] = value; 14908 } 14909 } 14910 14911 } else { 14912 14913 // If a hook was provided get the non-computed value from there 14914 if ( hooks && "get" in hooks && 14915 ( ret = hooks.get( elem, false, extra ) ) !== undefined ) { 14916 14917 return ret; 14918 } 14919 14920 // Otherwise just get the value from the style object 14921 return style[ name ]; 14922 } 14923 }, 14924 14925 css: function( elem, name, extra, styles ) { 14926 var val, num, hooks, 14927 origName = camelCase( name ), 14928 isCustomProp = rcustomProp.test( name ); 14929 14930 // Make sure that we're working with the right name. We don't 14931 // want to modify the value if it is a CSS custom property 14932 // since they are user-defined. 14933 if ( !isCustomProp ) { 14934 name = finalPropName( origName ); 14935 } 14936 14937 // Try prefixed name followed by the unprefixed name 14938 hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; 14939 14940 // If a hook was provided get the computed value from there 14941 if ( hooks && "get" in hooks ) { 14942 val = hooks.get( elem, true, extra ); 14943 } 14944 14945 // Otherwise, if a way to get the computed value exists, use that 14946 if ( val === undefined ) { 14947 val = curCSS( elem, name, styles ); 14948 } 14949 14950 // Convert "normal" to computed value 14951 if ( val === "normal" && name in cssNormalTransform ) { 14952 val = cssNormalTransform[ name ]; 14953 } 14954 14955 // Make numeric if forced or a qualifier was provided and val looks numeric 14956 if ( extra === "" || extra ) { 14957 num = parseFloat( val ); 14958 return extra === true || isFinite( num ) ? num || 0 : val; 14959 } 14960 14961 return val; 14962 } 14963} ); 14964 14965jQuery.each( [ "height", "width" ], function( _i, dimension ) { 14966 jQuery.cssHooks[ dimension ] = { 14967 get: function( elem, computed, extra ) { 14968 if ( computed ) { 14969 14970 // Certain elements can have dimension info if we invisibly show them 14971 // but it must have a current display style that would benefit 14972 return rdisplayswap.test( jQuery.css( elem, "display" ) ) && 14973 14974 // Support: Safari 8+ 14975 // Table columns in Safari have non-zero offsetWidth & zero 14976 // getBoundingClientRect().width unless display is changed. 14977 // Support: IE <=11 only 14978 // Running getBoundingClientRect on a disconnected node 14979 // in IE throws an error. 14980 ( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ? 14981 swap( elem, cssShow, function() { 14982 return getWidthOrHeight( elem, dimension, extra ); 14983 } ) : 14984 getWidthOrHeight( elem, dimension, extra ); 14985 } 14986 }, 14987 14988 set: function( elem, value, extra ) { 14989 var matches, 14990 styles = getStyles( elem ), 14991 14992 // Only read styles.position if the test has a chance to fail 14993 // to avoid forcing a reflow. 14994 scrollboxSizeBuggy = !support.scrollboxSize() && 14995 styles.position === "absolute", 14996 14997 // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991) 14998 boxSizingNeeded = scrollboxSizeBuggy || extra, 14999 isBorderBox = boxSizingNeeded && 15000 jQuery.css( elem, "boxSizing", false, styles ) === "border-box", 15001 subtract = extra ? 15002 boxModelAdjustment( 15003 elem, 15004 dimension, 15005 extra, 15006 isBorderBox, 15007 styles 15008 ) : 15009 0; 15010 15011 // Account for unreliable border-box dimensions by comparing offset* to computed and 15012 // faking a content-box to get border and padding (gh-3699) 15013 if ( isBorderBox && scrollboxSizeBuggy ) { 15014 subtract -= Math.ceil( 15015 elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] - 15016 parseFloat( styles[ dimension ] ) - 15017 boxModelAdjustment( elem, dimension, "border", false, styles ) - 15018 0.5 15019 ); 15020 } 15021 15022 // Convert to pixels if value adjustment is needed 15023 if ( subtract && ( matches = rcssNum.exec( value ) ) && 15024 ( matches[ 3 ] || "px" ) !== "px" ) { 15025 15026 elem.style[ dimension ] = value; 15027 value = jQuery.css( elem, dimension ); 15028 } 15029 15030 return setPositiveNumber( elem, value, subtract ); 15031 } 15032 }; 15033} ); 15034 15035jQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft, 15036 function( elem, computed ) { 15037 if ( computed ) { 15038 return ( parseFloat( curCSS( elem, "marginLeft" ) ) || 15039 elem.getBoundingClientRect().left - 15040 swap( elem, { marginLeft: 0 }, function() { 15041 return elem.getBoundingClientRect().left; 15042 } ) 15043 ) + "px"; 15044 } 15045 } 15046); 15047 15048// These hooks are used by animate to expand properties 15049jQuery.each( { 15050 margin: "", 15051 padding: "", 15052 border: "Width" 15053}, function( prefix, suffix ) { 15054 jQuery.cssHooks[ prefix + suffix ] = { 15055 expand: function( value ) { 15056 var i = 0, 15057 expanded = {}, 15058 15059 // Assumes a single number if not a string 15060 parts = typeof value === "string" ? value.split( " " ) : [ value ]; 15061 15062 for ( ; i < 4; i++ ) { 15063 expanded[ prefix + cssExpand[ i ] + suffix ] = 15064 parts[ i ] || parts[ i - 2 ] || parts[ 0 ]; 15065 } 15066 15067 return expanded; 15068 } 15069 }; 15070 15071 if ( prefix !== "margin" ) { 15072 jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber; 15073 } 15074} ); 15075 15076jQuery.fn.extend( { 15077 css: function( name, value ) { 15078 return access( this, function( elem, name, value ) { 15079 var styles, len, 15080 map = {}, 15081 i = 0; 15082 15083 if ( Array.isArray( name ) ) { 15084 styles = getStyles( elem ); 15085 len = name.length; 15086 15087 for ( ; i < len; i++ ) { 15088 map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles ); 15089 } 15090 15091 return map; 15092 } 15093 15094 return value !== undefined ? 15095 jQuery.style( elem, name, value ) : 15096 jQuery.css( elem, name ); 15097 }, name, value, arguments.length > 1 ); 15098 } 15099} ); 15100 15101 15102function Tween( elem, options, prop, end, easing ) { 15103 return new Tween.prototype.init( elem, options, prop, end, easing ); 15104} 15105jQuery.Tween = Tween; 15106 15107Tween.prototype = { 15108 constructor: Tween, 15109 init: function( elem, options, prop, end, easing, unit ) { 15110 this.elem = elem; 15111 this.prop = prop; 15112 this.easing = easing || jQuery.easing._default; 15113 this.options = options; 15114 this.start = this.now = this.cur(); 15115 this.end = end; 15116 this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" ); 15117 }, 15118 cur: function() { 15119 var hooks = Tween.propHooks[ this.prop ]; 15120 15121 return hooks && hooks.get ? 15122 hooks.get( this ) : 15123 Tween.propHooks._default.get( this ); 15124 }, 15125 run: function( percent ) { 15126 var eased, 15127 hooks = Tween.propHooks[ this.prop ]; 15128 15129 if ( this.options.duration ) { 15130 this.pos = eased = jQuery.easing[ this.easing ]( 15131 percent, this.options.duration * percent, 0, 1, this.options.duration 15132 ); 15133 } else { 15134 this.pos = eased = percent; 15135 } 15136 this.now = ( this.end - this.start ) * eased + this.start; 15137 15138 if ( this.options.step ) { 15139 this.options.step.call( this.elem, this.now, this ); 15140 } 15141 15142 if ( hooks && hooks.set ) { 15143 hooks.set( this ); 15144 } else { 15145 Tween.propHooks._default.set( this ); 15146 } 15147 return this; 15148 } 15149}; 15150 15151Tween.prototype.init.prototype = Tween.prototype; 15152 15153Tween.propHooks = { 15154 _default: { 15155 get: function( tween ) { 15156 var result; 15157 15158 // Use a property on the element directly when it is not a DOM element, 15159 // or when there is no matching style property that exists. 15160 if ( tween.elem.nodeType !== 1 || 15161 tween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) { 15162 return tween.elem[ tween.prop ]; 15163 } 15164 15165 // Passing an empty string as a 3rd parameter to .css will automatically 15166 // attempt a parseFloat and fallback to a string if the parse fails. 15167 // Simple values such as "10px" are parsed to Float; 15168 // complex values such as "rotate(1rad)" are returned as-is. 15169 result = jQuery.css( tween.elem, tween.prop, "" ); 15170 15171 // Empty strings, null, undefined and "auto" are converted to 0. 15172 return !result || result === "auto" ? 0 : result; 15173 }, 15174 set: function( tween ) { 15175 15176 // Use step hook for back compat. 15177 // Use cssHook if its there. 15178 // Use .style if available and use plain properties where available. 15179 if ( jQuery.fx.step[ tween.prop ] ) { 15180 jQuery.fx.step[ tween.prop ]( tween ); 15181 } else if ( tween.elem.nodeType === 1 && ( 15182 jQuery.cssHooks[ tween.prop ] || 15183 tween.elem.style[ finalPropName( tween.prop ) ] != null ) ) { 15184 jQuery.style( tween.elem, tween.prop, tween.now + tween.unit ); 15185 } else { 15186 tween.elem[ tween.prop ] = tween.now; 15187 } 15188 } 15189 } 15190}; 15191 15192// Support: IE <=9 only 15193// Panic based approach to setting things on disconnected nodes 15194Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = { 15195 set: function( tween ) { 15196 if ( tween.elem.nodeType && tween.elem.parentNode ) { 15197 tween.elem[ tween.prop ] = tween.now; 15198 } 15199 } 15200}; 15201 15202jQuery.easing = { 15203 linear: function( p ) { 15204 return p; 15205 }, 15206 swing: function( p ) { 15207 return 0.5 - Math.cos( p * Math.PI ) / 2; 15208 }, 15209 _default: "swing" 15210}; 15211 15212jQuery.fx = Tween.prototype.init; 15213 15214// Back compat <1.8 extension point 15215jQuery.fx.step = {}; 15216 15217 15218 15219 15220var 15221 fxNow, inProgress, 15222 rfxtypes = /^(?:toggle|show|hide)$/, 15223 rrun = /queueHooks$/; 15224 15225function schedule() { 15226 if ( inProgress ) { 15227 if ( document.hidden === false && window.requestAnimationFrame ) { 15228 window.requestAnimationFrame( schedule ); 15229 } else { 15230 window.setTimeout( schedule, jQuery.fx.interval ); 15231 } 15232 15233 jQuery.fx.tick(); 15234 } 15235} 15236 15237// Animations created synchronously will run synchronously 15238function createFxNow() { 15239 window.setTimeout( function() { 15240 fxNow = undefined; 15241 } ); 15242 return ( fxNow = Date.now() ); 15243} 15244 15245// Generate parameters to create a standard animation 15246function genFx( type, includeWidth ) { 15247 var which, 15248 i = 0, 15249 attrs = { height: type }; 15250 15251 // If we include width, step value is 1 to do all cssExpand values, 15252 // otherwise step value is 2 to skip over Left and Right 15253 includeWidth = includeWidth ? 1 : 0; 15254 for ( ; i < 4; i += 2 - includeWidth ) { 15255 which = cssExpand[ i ]; 15256 attrs[ "margin" + which ] = attrs[ "padding" + which ] = type; 15257 } 15258 15259 if ( includeWidth ) { 15260 attrs.opacity = attrs.width = type; 15261 } 15262 15263 return attrs; 15264} 15265 15266function createTween( value, prop, animation ) { 15267 var tween, 15268 collection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ "*" ] ), 15269 index = 0, 15270 length = collection.length; 15271 for ( ; index < length; index++ ) { 15272 if ( ( tween = collection[ index ].call( animation, prop, value ) ) ) { 15273 15274 // We're done with this property 15275 return tween; 15276 } 15277 } 15278} 15279 15280function defaultPrefilter( elem, props, opts ) { 15281 var prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display, 15282 isBox = "width" in props || "height" in props, 15283 anim = this, 15284 orig = {}, 15285 style = elem.style, 15286 hidden = elem.nodeType && isHiddenWithinTree( elem ), 15287 dataShow = dataPriv.get( elem, "fxshow" ); 15288 15289 // Queue-skipping animations hijack the fx hooks 15290 if ( !opts.queue ) { 15291 hooks = jQuery._queueHooks( elem, "fx" ); 15292 if ( hooks.unqueued == null ) { 15293 hooks.unqueued = 0; 15294 oldfire = hooks.empty.fire; 15295 hooks.empty.fire = function() { 15296 if ( !hooks.unqueued ) { 15297 oldfire(); 15298 } 15299 }; 15300 } 15301 hooks.unqueued++; 15302 15303 anim.always( function() { 15304 15305 // Ensure the complete handler is called before this completes 15306 anim.always( function() { 15307 hooks.unqueued--; 15308 if ( !jQuery.queue( elem, "fx" ).length ) { 15309 hooks.empty.fire(); 15310 } 15311 } ); 15312 } ); 15313 } 15314 15315 // Detect show/hide animations 15316 for ( prop in props ) { 15317 value = props[ prop ]; 15318 if ( rfxtypes.test( value ) ) { 15319 delete props[ prop ]; 15320 toggle = toggle || value === "toggle"; 15321 if ( value === ( hidden ? "hide" : "show" ) ) { 15322 15323 // Pretend to be hidden if this is a "show" and 15324 // there is still data from a stopped show/hide 15325 if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) { 15326 hidden = true; 15327 15328 // Ignore all other no-op show/hide data 15329 } else { 15330 continue; 15331 } 15332 } 15333 orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop ); 15334 } 15335 } 15336 15337 // Bail out if this is a no-op like .hide().hide() 15338 propTween = !jQuery.isEmptyObject( props ); 15339 if ( !propTween && jQuery.isEmptyObject( orig ) ) { 15340 return; 15341 } 15342 15343 // Restrict "overflow" and "display" styles during box animations 15344 if ( isBox && elem.nodeType === 1 ) { 15345 15346 // Support: IE <=9 - 11, Edge 12 - 15 15347 // Record all 3 overflow attributes because IE does not infer the shorthand 15348 // from identically-valued overflowX and overflowY and Edge just mirrors 15349 // the overflowX value there. 15350 opts.overflow = [ style.overflow, style.overflowX, style.overflowY ]; 15351 15352 // Identify a display type, preferring old show/hide data over the CSS cascade 15353 restoreDisplay = dataShow && dataShow.display; 15354 if ( restoreDisplay == null ) { 15355 restoreDisplay = dataPriv.get( elem, "display" ); 15356 } 15357 display = jQuery.css( elem, "display" ); 15358 if ( display === "none" ) { 15359 if ( restoreDisplay ) { 15360 display = restoreDisplay; 15361 } else { 15362 15363 // Get nonempty value(s) by temporarily forcing visibility 15364 showHide( [ elem ], true ); 15365 restoreDisplay = elem.style.display || restoreDisplay; 15366 display = jQuery.css( elem, "display" ); 15367 showHide( [ elem ] ); 15368 } 15369 } 15370 15371 // Animate inline elements as inline-block 15372 if ( display === "inline" || display === "inline-block" && restoreDisplay != null ) { 15373 if ( jQuery.css( elem, "float" ) === "none" ) { 15374 15375 // Restore the original display value at the end of pure show/hide animations 15376 if ( !propTween ) { 15377 anim.done( function() { 15378 style.display = restoreDisplay; 15379 } ); 15380 if ( restoreDisplay == null ) { 15381 display = style.display; 15382 restoreDisplay = display === "none" ? "" : display; 15383 } 15384 } 15385 style.display = "inline-block"; 15386 } 15387 } 15388 } 15389 15390 if ( opts.overflow ) { 15391 style.overflow = "hidden"; 15392 anim.always( function() { 15393 style.overflow = opts.overflow[ 0 ]; 15394 style.overflowX = opts.overflow[ 1 ]; 15395 style.overflowY = opts.overflow[ 2 ]; 15396 } ); 15397 } 15398 15399 // Implement show/hide animations 15400 propTween = false; 15401 for ( prop in orig ) { 15402 15403 // General show/hide setup for this element animation 15404 if ( !propTween ) { 15405 if ( dataShow ) { 15406 if ( "hidden" in dataShow ) { 15407 hidden = dataShow.hidden; 15408 } 15409 } else { 15410 dataShow = dataPriv.access( elem, "fxshow", { display: restoreDisplay } ); 15411 } 15412 15413 // Store hidden/visible for toggle so `.stop().toggle()` "reverses" 15414 if ( toggle ) { 15415 dataShow.hidden = !hidden; 15416 } 15417 15418 // Show elements before animating them 15419 if ( hidden ) { 15420 showHide( [ elem ], true ); 15421 } 15422 15423 /* eslint-disable no-loop-func */ 15424 15425 anim.done( function() { 15426 15427 /* eslint-enable no-loop-func */ 15428 15429 // The final step of a "hide" animation is actually hiding the element 15430 if ( !hidden ) { 15431 showHide( [ elem ] ); 15432 } 15433 dataPriv.remove( elem, "fxshow" ); 15434 for ( prop in orig ) { 15435 jQuery.style( elem, prop, orig[ prop ] ); 15436 } 15437 } ); 15438 } 15439 15440 // Per-property setup 15441 propTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim ); 15442 if ( !( prop in dataShow ) ) { 15443 dataShow[ prop ] = propTween.start; 15444 if ( hidden ) { 15445 propTween.end = propTween.start; 15446 propTween.start = 0; 15447 } 15448 } 15449 } 15450} 15451 15452function propFilter( props, specialEasing ) { 15453 var index, name, easing, value, hooks; 15454 15455 // camelCase, specialEasing and expand cssHook pass 15456 for ( index in props ) { 15457 name = camelCase( index ); 15458 easing = specialEasing[ name ]; 15459 value = props[ index ]; 15460 if ( Array.isArray( value ) ) { 15461 easing = value[ 1 ]; 15462 value = props[ index ] = value[ 0 ]; 15463 } 15464 15465 if ( index !== name ) { 15466 props[ name ] = value; 15467 delete props[ index ]; 15468 } 15469 15470 hooks = jQuery.cssHooks[ name ]; 15471 if ( hooks && "expand" in hooks ) { 15472 value = hooks.expand( value ); 15473 delete props[ name ]; 15474 15475 // Not quite $.extend, this won't overwrite existing keys. 15476 // Reusing 'index' because we have the correct "name" 15477 for ( index in value ) { 15478 if ( !( index in props ) ) { 15479 props[ index ] = value[ index ]; 15480 specialEasing[ index ] = easing; 15481 } 15482 } 15483 } else { 15484 specialEasing[ name ] = easing; 15485 } 15486 } 15487} 15488 15489function Animation( elem, properties, options ) { 15490 var result, 15491 stopped, 15492 index = 0, 15493 length = Animation.prefilters.length, 15494 deferred = jQuery.Deferred().always( function() { 15495 15496 // Don't match elem in the :animated selector 15497 delete tick.elem; 15498 } ), 15499 tick = function() { 15500 if ( stopped ) { 15501 return false; 15502 } 15503 var currentTime = fxNow || createFxNow(), 15504 remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ), 15505 15506 // Support: Android 2.3 only 15507 // Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (trac-12497) 15508 temp = remaining / animation.duration || 0, 15509 percent = 1 - temp, 15510 index = 0, 15511 length = animation.tweens.length; 15512 15513 for ( ; index < length; index++ ) { 15514 animation.tweens[ index ].run( percent ); 15515 } 15516 15517 deferred.notifyWith( elem, [ animation, percent, remaining ] ); 15518 15519 // If there's more to do, yield 15520 if ( percent < 1 && length ) { 15521 return remaining; 15522 } 15523 15524 // If this was an empty animation, synthesize a final progress notification 15525 if ( !length ) { 15526 deferred.notifyWith( elem, [ animation, 1, 0 ] ); 15527 } 15528 15529 // Resolve the animation and report its conclusion 15530 deferred.resolveWith( elem, [ animation ] ); 15531 return false; 15532 }, 15533 animation = deferred.promise( { 15534 elem: elem, 15535 props: jQuery.extend( {}, properties ), 15536 opts: jQuery.extend( true, { 15537 specialEasing: {}, 15538 easing: jQuery.easing._default 15539 }, options ), 15540 originalProperties: properties, 15541 originalOptions: options, 15542 startTime: fxNow || createFxNow(), 15543 duration: options.duration, 15544 tweens: [], 15545 createTween: function( prop, end ) { 15546 var tween = jQuery.Tween( elem, animation.opts, prop, end, 15547 animation.opts.specialEasing[ prop ] || animation.opts.easing ); 15548 animation.tweens.push( tween ); 15549 return tween; 15550 }, 15551 stop: function( gotoEnd ) { 15552 var index = 0, 15553 15554 // If we are going to the end, we want to run all the tweens 15555 // otherwise we skip this part 15556 length = gotoEnd ? animation.tweens.length : 0; 15557 if ( stopped ) { 15558 return this; 15559 } 15560 stopped = true; 15561 for ( ; index < length; index++ ) { 15562 animation.tweens[ index ].run( 1 ); 15563 } 15564 15565 // Resolve when we played the last frame; otherwise, reject 15566 if ( gotoEnd ) { 15567 deferred.notifyWith( elem, [ animation, 1, 0 ] ); 15568 deferred.resolveWith( elem, [ animation, gotoEnd ] ); 15569 } else { 15570 deferred.rejectWith( elem, [ animation, gotoEnd ] ); 15571 } 15572 return this; 15573 } 15574 } ), 15575 props = animation.props; 15576 15577 propFilter( props, animation.opts.specialEasing ); 15578 15579 for ( ; index < length; index++ ) { 15580 result = Animation.prefilters[ index ].call( animation, elem, props, animation.opts ); 15581 if ( result ) { 15582 if ( isFunction( result.stop ) ) { 15583 jQuery._queueHooks( animation.elem, animation.opts.queue ).stop = 15584 result.stop.bind( result ); 15585 } 15586 return result; 15587 } 15588 } 15589 15590 jQuery.map( props, createTween, animation ); 15591 15592 if ( isFunction( animation.opts.start ) ) { 15593 animation.opts.start.call( elem, animation ); 15594 } 15595 15596 // Attach callbacks from options 15597 animation 15598 .progress( animation.opts.progress ) 15599 .done( animation.opts.done, animation.opts.complete ) 15600 .fail( animation.opts.fail ) 15601 .always( animation.opts.always ); 15602 15603 jQuery.fx.timer( 15604 jQuery.extend( tick, { 15605 elem: elem, 15606 anim: animation, 15607 queue: animation.opts.queue 15608 } ) 15609 ); 15610 15611 return animation; 15612} 15613 15614jQuery.Animation = jQuery.extend( Animation, { 15615 15616 tweeners: { 15617 "*": [ function( prop, value ) { 15618 var tween = this.createTween( prop, value ); 15619 adjustCSS( tween.elem, prop, rcssNum.exec( value ), tween ); 15620 return tween; 15621 } ] 15622 }, 15623 15624 tweener: function( props, callback ) { 15625 if ( isFunction( props ) ) { 15626 callback = props; 15627 props = [ "*" ]; 15628 } else { 15629 props = props.match( rnothtmlwhite ); 15630 } 15631 15632 var prop, 15633 index = 0, 15634 length = props.length; 15635 15636 for ( ; index < length; index++ ) { 15637 prop = props[ index ]; 15638 Animation.tweeners[ prop ] = Animation.tweeners[ prop ] || []; 15639 Animation.tweeners[ prop ].unshift( callback ); 15640 } 15641 }, 15642 15643 prefilters: [ defaultPrefilter ], 15644 15645 prefilter: function( callback, prepend ) { 15646 if ( prepend ) { 15647 Animation.prefilters.unshift( callback ); 15648 } else { 15649 Animation.prefilters.push( callback ); 15650 } 15651 } 15652} ); 15653 15654jQuery.speed = function( speed, easing, fn ) { 15655 var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : { 15656 complete: fn || !fn && easing || 15657 isFunction( speed ) && speed, 15658 duration: speed, 15659 easing: fn && easing || easing && !isFunction( easing ) && easing 15660 }; 15661 15662 // Go to the end state if fx are off 15663 if ( jQuery.fx.off ) { 15664 opt.duration = 0; 15665 15666 } else { 15667 if ( typeof opt.duration !== "number" ) { 15668 if ( opt.duration in jQuery.fx.speeds ) { 15669 opt.duration = jQuery.fx.speeds[ opt.duration ]; 15670 15671 } else { 15672 opt.duration = jQuery.fx.speeds._default; 15673 } 15674 } 15675 } 15676 15677 // Normalize opt.queue - true/undefined/null -> "fx" 15678 if ( opt.queue == null || opt.queue === true ) { 15679 opt.queue = "fx"; 15680 } 15681 15682 // Queueing 15683 opt.old = opt.complete; 15684 15685 opt.complete = function() { 15686 if ( isFunction( opt.old ) ) { 15687 opt.old.call( this ); 15688 } 15689 15690 if ( opt.queue ) { 15691 jQuery.dequeue( this, opt.queue ); 15692 } 15693 }; 15694 15695 return opt; 15696}; 15697 15698jQuery.fn.extend( { 15699 fadeTo: function( speed, to, easing, callback ) { 15700 15701 // Show any hidden elements after setting opacity to 0 15702 return this.filter( isHiddenWithinTree ).css( "opacity", 0 ).show() 15703 15704 // Animate to the value specified 15705 .end().animate( { opacity: to }, speed, easing, callback ); 15706 }, 15707 animate: function( prop, speed, easing, callback ) { 15708 var empty = jQuery.isEmptyObject( prop ), 15709 optall = jQuery.speed( speed, easing, callback ), 15710 doAnimation = function() { 15711 15712 // Operate on a copy of prop so per-property easing won't be lost 15713 var anim = Animation( this, jQuery.extend( {}, prop ), optall ); 15714 15715 // Empty animations, or finishing resolves immediately 15716 if ( empty || dataPriv.get( this, "finish" ) ) { 15717 anim.stop( true ); 15718 } 15719 }; 15720 15721 doAnimation.finish = doAnimation; 15722 15723 return empty || optall.queue === false ? 15724 this.each( doAnimation ) : 15725 this.queue( optall.queue, doAnimation ); 15726 }, 15727 stop: function( type, clearQueue, gotoEnd ) { 15728 var stopQueue = function( hooks ) { 15729 var stop = hooks.stop; 15730 delete hooks.stop; 15731 stop( gotoEnd ); 15732 }; 15733 15734 if ( typeof type !== "string" ) { 15735 gotoEnd = clearQueue; 15736 clearQueue = type; 15737 type = undefined; 15738 } 15739 if ( clearQueue ) { 15740 this.queue( type || "fx", [] ); 15741 } 15742 15743 return this.each( function() { 15744 var dequeue = true, 15745 index = type != null && type + "queueHooks", 15746 timers = jQuery.timers, 15747 data = dataPriv.get( this ); 15748 15749 if ( index ) { 15750 if ( data[ index ] && data[ index ].stop ) { 15751 stopQueue( data[ index ] ); 15752 } 15753 } else { 15754 for ( index in data ) { 15755 if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) { 15756 stopQueue( data[ index ] ); 15757 } 15758 } 15759 } 15760 15761 for ( index = timers.length; index--; ) { 15762 if ( timers[ index ].elem === this && 15763 ( type == null || timers[ index ].queue === type ) ) { 15764 15765 timers[ index ].anim.stop( gotoEnd ); 15766 dequeue = false; 15767 timers.splice( index, 1 ); 15768 } 15769 } 15770 15771 // Start the next in the queue if the last step wasn't forced. 15772 // Timers currently will call their complete callbacks, which 15773 // will dequeue but only if they were gotoEnd. 15774 if ( dequeue || !gotoEnd ) { 15775 jQuery.dequeue( this, type ); 15776 } 15777 } ); 15778 }, 15779 finish: function( type ) { 15780 if ( type !== false ) { 15781 type = type || "fx"; 15782 } 15783 return this.each( function() { 15784 var index, 15785 data = dataPriv.get( this ), 15786 queue = data[ type + "queue" ], 15787 hooks = data[ type + "queueHooks" ], 15788 timers = jQuery.timers, 15789 length = queue ? queue.length : 0; 15790 15791 // Enable finishing flag on private data 15792 data.finish = true; 15793 15794 // Empty the queue first 15795 jQuery.queue( this, type, [] ); 15796 15797 if ( hooks && hooks.stop ) { 15798 hooks.stop.call( this, true ); 15799 } 15800 15801 // Look for any active animations, and finish them 15802 for ( index = timers.length; index--; ) { 15803 if ( timers[ index ].elem === this && timers[ index ].queue === type ) { 15804 timers[ index ].anim.stop( true ); 15805 timers.splice( index, 1 ); 15806 } 15807 } 15808 15809 // Look for any animations in the old queue and finish them 15810 for ( index = 0; index < length; index++ ) { 15811 if ( queue[ index ] && queue[ index ].finish ) { 15812 queue[ index ].finish.call( this ); 15813 } 15814 } 15815 15816 // Turn off finishing flag 15817 delete data.finish; 15818 } ); 15819 } 15820} ); 15821 15822jQuery.each( [ "toggle", "show", "hide" ], function( _i, name ) { 15823 var cssFn = jQuery.fn[ name ]; 15824 jQuery.fn[ name ] = function( speed, easing, callback ) { 15825 return speed == null || typeof speed === "boolean" ? 15826 cssFn.apply( this, arguments ) : 15827 this.animate( genFx( name, true ), speed, easing, callback ); 15828 }; 15829} ); 15830 15831// Generate shortcuts for custom animations 15832jQuery.each( { 15833 slideDown: genFx( "show" ), 15834 slideUp: genFx( "hide" ), 15835 slideToggle: genFx( "toggle" ), 15836 fadeIn: { opacity: "show" }, 15837 fadeOut: { opacity: "hide" }, 15838 fadeToggle: { opacity: "toggle" } 15839}, function( name, props ) { 15840 jQuery.fn[ name ] = function( speed, easing, callback ) { 15841 return this.animate( props, speed, easing, callback ); 15842 }; 15843} ); 15844 15845jQuery.timers = []; 15846jQuery.fx.tick = function() { 15847 var timer, 15848 i = 0, 15849 timers = jQuery.timers; 15850 15851 fxNow = Date.now(); 15852 15853 for ( ; i < timers.length; i++ ) { 15854 timer = timers[ i ]; 15855 15856 // Run the timer and safely remove it when done (allowing for external removal) 15857 if ( !timer() && timers[ i ] === timer ) { 15858 timers.splice( i--, 1 ); 15859 } 15860 } 15861 15862 if ( !timers.length ) { 15863 jQuery.fx.stop(); 15864 } 15865 fxNow = undefined; 15866}; 15867 15868jQuery.fx.timer = function( timer ) { 15869 jQuery.timers.push( timer ); 15870 jQuery.fx.start(); 15871}; 15872 15873jQuery.fx.interval = 13; 15874jQuery.fx.start = function() { 15875 if ( inProgress ) { 15876 return; 15877 } 15878 15879 inProgress = true; 15880 schedule(); 15881}; 15882 15883jQuery.fx.stop = function() { 15884 inProgress = null; 15885}; 15886 15887jQuery.fx.speeds = { 15888 slow: 600, 15889 fast: 200, 15890 15891 // Default speed 15892 _default: 400 15893}; 15894 15895 15896// Based off of the plugin by Clint Helfers, with permission. 15897jQuery.fn.delay = function( time, type ) { 15898 time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time; 15899 type = type || "fx"; 15900 15901 return this.queue( type, function( next, hooks ) { 15902 var timeout = window.setTimeout( next, time ); 15903 hooks.stop = function() { 15904 window.clearTimeout( timeout ); 15905 }; 15906 } ); 15907}; 15908 15909 15910( function() { 15911 var input = document.createElement( "input" ), 15912 select = document.createElement( "select" ), 15913 opt = select.appendChild( document.createElement( "option" ) ); 15914 15915 input.type = "checkbox"; 15916 15917 // Support: Android <=4.3 only 15918 // Default value for a checkbox should be "on" 15919 support.checkOn = input.value !== ""; 15920 15921 // Support: IE <=11 only 15922 // Must access selectedIndex to make default options select 15923 support.optSelected = opt.selected; 15924 15925 // Support: IE <=11 only 15926 // An input loses its value after becoming a radio 15927 input = document.createElement( "input" ); 15928 input.value = "t"; 15929 input.type = "radio"; 15930 support.radioValue = input.value === "t"; 15931} )(); 15932 15933 15934var boolHook, 15935 attrHandle = jQuery.expr.attrHandle; 15936 15937jQuery.fn.extend( { 15938 attr: function( name, value ) { 15939 return access( this, jQuery.attr, name, value, arguments.length > 1 ); 15940 }, 15941 15942 removeAttr: function( name ) { 15943 return this.each( function() { 15944 jQuery.removeAttr( this, name ); 15945 } ); 15946 } 15947} ); 15948 15949jQuery.extend( { 15950 attr: function( elem, name, value ) { 15951 var ret, hooks, 15952 nType = elem.nodeType; 15953 15954 // Don't get/set attributes on text, comment and attribute nodes 15955 if ( nType === 3 || nType === 8 || nType === 2 ) { 15956 return; 15957 } 15958 15959 // Fallback to prop when attributes are not supported 15960 if ( typeof elem.getAttribute === "undefined" ) { 15961 return jQuery.prop( elem, name, value ); 15962 } 15963 15964 // Attribute hooks are determined by the lowercase version 15965 // Grab necessary hook if one is defined 15966 if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { 15967 hooks = jQuery.attrHooks[ name.toLowerCase() ] || 15968 ( jQuery.expr.match.bool.test( name ) ? boolHook : undefined ); 15969 } 15970 15971 if ( value !== undefined ) { 15972 if ( value === null ) { 15973 jQuery.removeAttr( elem, name ); 15974 return; 15975 } 15976 15977 if ( hooks && "set" in hooks && 15978 ( ret = hooks.set( elem, value, name ) ) !== undefined ) { 15979 return ret; 15980 } 15981 15982 elem.setAttribute( name, value + "" ); 15983 return value; 15984 } 15985 15986 if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { 15987 return ret; 15988 } 15989 15990 ret = jQuery.find.attr( elem, name ); 15991 15992 // Non-existent attributes return null, we normalize to undefined 15993 return ret == null ? undefined : ret; 15994 }, 15995 15996 attrHooks: { 15997 type: { 15998 set: function( elem, value ) { 15999 if ( !support.radioValue && value === "radio" && 16000 nodeName( elem, "input" ) ) { 16001 var val = elem.value; 16002 elem.setAttribute( "type", value ); 16003 if ( val ) { 16004 elem.value = val; 16005 } 16006 return value; 16007 } 16008 } 16009 } 16010 }, 16011 16012 removeAttr: function( elem, value ) { 16013 var name, 16014 i = 0, 16015 16016 // Attribute names can contain non-HTML whitespace characters 16017 // https://html.spec.whatwg.org/multipage/syntax.html#attributes-2 16018 attrNames = value && value.match( rnothtmlwhite ); 16019 16020 if ( attrNames && elem.nodeType === 1 ) { 16021 while ( ( name = attrNames[ i++ ] ) ) { 16022 elem.removeAttribute( name ); 16023 } 16024 } 16025 } 16026} ); 16027 16028// Hooks for boolean attributes 16029boolHook = { 16030 set: function( elem, value, name ) { 16031 if ( value === false ) { 16032 16033 // Remove boolean attributes when set to false 16034 jQuery.removeAttr( elem, name ); 16035 } else { 16036 elem.setAttribute( name, name ); 16037 } 16038 return name; 16039 } 16040}; 16041 16042jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( _i, name ) { 16043 var getter = attrHandle[ name ] || jQuery.find.attr; 16044 16045 attrHandle[ name ] = function( elem, name, isXML ) { 16046 var ret, handle, 16047 lowercaseName = name.toLowerCase(); 16048 16049 if ( !isXML ) { 16050 16051 // Avoid an infinite loop by temporarily removing this function from the getter 16052 handle = attrHandle[ lowercaseName ]; 16053 attrHandle[ lowercaseName ] = ret; 16054 ret = getter( elem, name, isXML ) != null ? 16055 lowercaseName : 16056 null; 16057 attrHandle[ lowercaseName ] = handle; 16058 } 16059 return ret; 16060 }; 16061} ); 16062 16063 16064 16065 16066var rfocusable = /^(?:input|select|textarea|button)$/i, 16067 rclickable = /^(?:a|area)$/i; 16068 16069jQuery.fn.extend( { 16070 prop: function( name, value ) { 16071 return access( this, jQuery.prop, name, value, arguments.length > 1 ); 16072 }, 16073 16074 removeProp: function( name ) { 16075 return this.each( function() { 16076 delete this[ jQuery.propFix[ name ] || name ]; 16077 } ); 16078 } 16079} ); 16080 16081jQuery.extend( { 16082 prop: function( elem, name, value ) { 16083 var ret, hooks, 16084 nType = elem.nodeType; 16085 16086 // Don't get/set properties on text, comment and attribute nodes 16087 if ( nType === 3 || nType === 8 || nType === 2 ) { 16088 return; 16089 } 16090 16091 if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { 16092 16093 // Fix name and attach hooks 16094 name = jQuery.propFix[ name ] || name; 16095 hooks = jQuery.propHooks[ name ]; 16096 } 16097 16098 if ( value !== undefined ) { 16099 if ( hooks && "set" in hooks && 16100 ( ret = hooks.set( elem, value, name ) ) !== undefined ) { 16101 return ret; 16102 } 16103 16104 return ( elem[ name ] = value ); 16105 } 16106 16107 if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { 16108 return ret; 16109 } 16110 16111 return elem[ name ]; 16112 }, 16113 16114 propHooks: { 16115 tabIndex: { 16116 get: function( elem ) { 16117 16118 // Support: IE <=9 - 11 only 16119 // elem.tabIndex doesn't always return the 16120 // correct value when it hasn't been explicitly set 16121 // Use proper attribute retrieval (trac-12072) 16122 var tabindex = jQuery.find.attr( elem, "tabindex" ); 16123 16124 if ( tabindex ) { 16125 return parseInt( tabindex, 10 ); 16126 } 16127 16128 if ( 16129 rfocusable.test( elem.nodeName ) || 16130 rclickable.test( elem.nodeName ) && 16131 elem.href 16132 ) { 16133 return 0; 16134 } 16135 16136 return -1; 16137 } 16138 } 16139 }, 16140 16141 propFix: { 16142 "for": "htmlFor", 16143 "class": "className" 16144 } 16145} ); 16146 16147// Support: IE <=11 only 16148// Accessing the selectedIndex property 16149// forces the browser to respect setting selected 16150// on the option 16151// The getter ensures a default option is selected 16152// when in an optgroup 16153// eslint rule "no-unused-expressions" is disabled for this code 16154// since it considers such accessions noop 16155if ( !support.optSelected ) { 16156 jQuery.propHooks.selected = { 16157 get: function( elem ) { 16158 16159 /* eslint no-unused-expressions: "off" */ 16160 16161 var parent = elem.parentNode; 16162 if ( parent && parent.parentNode ) { 16163 parent.parentNode.selectedIndex; 16164 } 16165 return null; 16166 }, 16167 set: function( elem ) { 16168 16169 /* eslint no-unused-expressions: "off" */ 16170 16171 var parent = elem.parentNode; 16172 if ( parent ) { 16173 parent.selectedIndex; 16174 16175 if ( parent.parentNode ) { 16176 parent.parentNode.selectedIndex; 16177 } 16178 } 16179 } 16180 }; 16181} 16182 16183jQuery.each( [ 16184 "tabIndex", 16185 "readOnly", 16186 "maxLength", 16187 "cellSpacing", 16188 "cellPadding", 16189 "rowSpan", 16190 "colSpan", 16191 "useMap", 16192 "frameBorder", 16193 "contentEditable" 16194], function() { 16195 jQuery.propFix[ this.toLowerCase() ] = this; 16196} ); 16197 16198 16199 16200 16201 // Strip and collapse whitespace according to HTML spec 16202 // https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace 16203 function stripAndCollapse( value ) { 16204 var tokens = value.match( rnothtmlwhite ) || []; 16205 return tokens.join( " " ); 16206 } 16207 16208 16209function getClass( elem ) { 16210 return elem.getAttribute && elem.getAttribute( "class" ) || ""; 16211} 16212 16213function classesToArray( value ) { 16214 if ( Array.isArray( value ) ) { 16215 return value; 16216 } 16217 if ( typeof value === "string" ) { 16218 return value.match( rnothtmlwhite ) || []; 16219 } 16220 return []; 16221} 16222 16223jQuery.fn.extend( { 16224 addClass: function( value ) { 16225 var classNames, cur, curValue, className, i, finalValue; 16226 16227 if ( isFunction( value ) ) { 16228 return this.each( function( j ) { 16229 jQuery( this ).addClass( value.call( this, j, getClass( this ) ) ); 16230 } ); 16231 } 16232 16233 classNames = classesToArray( value ); 16234 16235 if ( classNames.length ) { 16236 return this.each( function() { 16237 curValue = getClass( this ); 16238 cur = this.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); 16239 16240 if ( cur ) { 16241 for ( i = 0; i < classNames.length; i++ ) { 16242 className = classNames[ i ]; 16243 if ( cur.indexOf( " " + className + " " ) < 0 ) { 16244 cur += className + " "; 16245 } 16246 } 16247 16248 // Only assign if different to avoid unneeded rendering. 16249 finalValue = stripAndCollapse( cur ); 16250 if ( curValue !== finalValue ) { 16251 this.setAttribute( "class", finalValue ); 16252 } 16253 } 16254 } ); 16255 } 16256 16257 return this; 16258 }, 16259 16260 removeClass: function( value ) { 16261 var classNames, cur, curValue, className, i, finalValue; 16262 16263 if ( isFunction( value ) ) { 16264 return this.each( function( j ) { 16265 jQuery( this ).removeClass( value.call( this, j, getClass( this ) ) ); 16266 } ); 16267 } 16268 16269 if ( !arguments.length ) { 16270 return this.attr( "class", "" ); 16271 } 16272 16273 classNames = classesToArray( value ); 16274 16275 if ( classNames.length ) { 16276 return this.each( function() { 16277 curValue = getClass( this ); 16278 16279 // This expression is here for better compressibility (see addClass) 16280 cur = this.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); 16281 16282 if ( cur ) { 16283 for ( i = 0; i < classNames.length; i++ ) { 16284 className = classNames[ i ]; 16285 16286 // Remove *all* instances 16287 while ( cur.indexOf( " " + className + " " ) > -1 ) { 16288 cur = cur.replace( " " + className + " ", " " ); 16289 } 16290 } 16291 16292 // Only assign if different to avoid unneeded rendering. 16293 finalValue = stripAndCollapse( cur ); 16294 if ( curValue !== finalValue ) { 16295 this.setAttribute( "class", finalValue ); 16296 } 16297 } 16298 } ); 16299 } 16300 16301 return this; 16302 }, 16303 16304 toggleClass: function( value, stateVal ) { 16305 var classNames, className, i, self, 16306 type = typeof value, 16307 isValidValue = type === "string" || Array.isArray( value ); 16308 16309 if ( isFunction( value ) ) { 16310 return this.each( function( i ) { 16311 jQuery( this ).toggleClass( 16312 value.call( this, i, getClass( this ), stateVal ), 16313 stateVal 16314 ); 16315 } ); 16316 } 16317 16318 if ( typeof stateVal === "boolean" && isValidValue ) { 16319 return stateVal ? this.addClass( value ) : this.removeClass( value ); 16320 } 16321 16322 classNames = classesToArray( value ); 16323 16324 return this.each( function() { 16325 if ( isValidValue ) { 16326 16327 // Toggle individual class names 16328 self = jQuery( this ); 16329 16330 for ( i = 0; i < classNames.length; i++ ) { 16331 className = classNames[ i ]; 16332 16333 // Check each className given, space separated list 16334 if ( self.hasClass( className ) ) { 16335 self.removeClass( className ); 16336 } else { 16337 self.addClass( className ); 16338 } 16339 } 16340 16341 // Toggle whole class name 16342 } else if ( value === undefined || type === "boolean" ) { 16343 className = getClass( this ); 16344 if ( className ) { 16345 16346 // Store className if set 16347 dataPriv.set( this, "__className__", className ); 16348 } 16349 16350 // If the element has a class name or if we're passed `false`, 16351 // then remove the whole classname (if there was one, the above saved it). 16352 // Otherwise bring back whatever was previously saved (if anything), 16353 // falling back to the empty string if nothing was stored. 16354 if ( this.setAttribute ) { 16355 this.setAttribute( "class", 16356 className || value === false ? 16357 "" : 16358 dataPriv.get( this, "__className__" ) || "" 16359 ); 16360 } 16361 } 16362 } ); 16363 }, 16364 16365 hasClass: function( selector ) { 16366 var className, elem, 16367 i = 0; 16368 16369 className = " " + selector + " "; 16370 while ( ( elem = this[ i++ ] ) ) { 16371 if ( elem.nodeType === 1 && 16372 ( " " + stripAndCollapse( getClass( elem ) ) + " " ).indexOf( className ) > -1 ) { 16373 return true; 16374 } 16375 } 16376 16377 return false; 16378 } 16379} ); 16380 16381 16382 16383 16384var rreturn = /\r/g; 16385 16386jQuery.fn.extend( { 16387 val: function( value ) { 16388 var hooks, ret, valueIsFunction, 16389 elem = this[ 0 ]; 16390 16391 if ( !arguments.length ) { 16392 if ( elem ) { 16393 hooks = jQuery.valHooks[ elem.type ] || 16394 jQuery.valHooks[ elem.nodeName.toLowerCase() ]; 16395 16396 if ( hooks && 16397 "get" in hooks && 16398 ( ret = hooks.get( elem, "value" ) ) !== undefined 16399 ) { 16400 return ret; 16401 } 16402 16403 ret = elem.value; 16404 16405 // Handle most common string cases 16406 if ( typeof ret === "string" ) { 16407 return ret.replace( rreturn, "" ); 16408 } 16409 16410 // Handle cases where value is null/undef or number 16411 return ret == null ? "" : ret; 16412 } 16413 16414 return; 16415 } 16416 16417 valueIsFunction = isFunction( value ); 16418 16419 return this.each( function( i ) { 16420 var val; 16421 16422 if ( this.nodeType !== 1 ) { 16423 return; 16424 } 16425 16426 if ( valueIsFunction ) { 16427 val = value.call( this, i, jQuery( this ).val() ); 16428 } else { 16429 val = value; 16430 } 16431 16432 // Treat null/undefined as ""; convert numbers to string 16433 if ( val == null ) { 16434 val = ""; 16435 16436 } else if ( typeof val === "number" ) { 16437 val += ""; 16438 16439 } else if ( Array.isArray( val ) ) { 16440 val = jQuery.map( val, function( value ) { 16441 return value == null ? "" : value + ""; 16442 } ); 16443 } 16444 16445 hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ]; 16446 16447 // If set returns undefined, fall back to normal setting 16448 if ( !hooks || !( "set" in hooks ) || hooks.set( this, val, "value" ) === undefined ) { 16449 this.value = val; 16450 } 16451 } ); 16452 } 16453} ); 16454 16455jQuery.extend( { 16456 valHooks: { 16457 option: { 16458 get: function( elem ) { 16459 16460 var val = jQuery.find.attr( elem, "value" ); 16461 return val != null ? 16462 val : 16463 16464 // Support: IE <=10 - 11 only 16465 // option.text throws exceptions (trac-14686, trac-14858) 16466 // Strip and collapse whitespace 16467 // https://html.spec.whatwg.org/#strip-and-collapse-whitespace 16468 stripAndCollapse( jQuery.text( elem ) ); 16469 } 16470 }, 16471 select: { 16472 get: function( elem ) { 16473 var value, option, i, 16474 options = elem.options, 16475 index = elem.selectedIndex, 16476 one = elem.type === "select-one", 16477 values = one ? null : [], 16478 max = one ? index + 1 : options.length; 16479 16480 if ( index < 0 ) { 16481 i = max; 16482 16483 } else { 16484 i = one ? index : 0; 16485 } 16486 16487 // Loop through all the selected options 16488 for ( ; i < max; i++ ) { 16489 option = options[ i ]; 16490 16491 // Support: IE <=9 only 16492 // IE8-9 doesn't update selected after form reset (trac-2551) 16493 if ( ( option.selected || i === index ) && 16494 16495 // Don't return options that are disabled or in a disabled optgroup 16496 !option.disabled && 16497 ( !option.parentNode.disabled || 16498 !nodeName( option.parentNode, "optgroup" ) ) ) { 16499 16500 // Get the specific value for the option 16501 value = jQuery( option ).val(); 16502 16503 // We don't need an array for one selects 16504 if ( one ) { 16505 return value; 16506 } 16507 16508 // Multi-Selects return an array 16509 values.push( value ); 16510 } 16511 } 16512 16513 return values; 16514 }, 16515 16516 set: function( elem, value ) { 16517 var optionSet, option, 16518 options = elem.options, 16519 values = jQuery.makeArray( value ), 16520 i = options.length; 16521 16522 while ( i-- ) { 16523 option = options[ i ]; 16524 16525 /* eslint-disable no-cond-assign */ 16526 16527 if ( option.selected = 16528 jQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1 16529 ) { 16530 optionSet = true; 16531 } 16532 16533 /* eslint-enable no-cond-assign */ 16534 } 16535 16536 // Force browsers to behave consistently when non-matching value is set 16537 if ( !optionSet ) { 16538 elem.selectedIndex = -1; 16539 } 16540 return values; 16541 } 16542 } 16543 } 16544} ); 16545 16546// Radios and checkboxes getter/setter 16547jQuery.each( [ "radio", "checkbox" ], function() { 16548 jQuery.valHooks[ this ] = { 16549 set: function( elem, value ) { 16550 if ( Array.isArray( value ) ) { 16551 return ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 ); 16552 } 16553 } 16554 }; 16555 if ( !support.checkOn ) { 16556 jQuery.valHooks[ this ].get = function( elem ) { 16557 return elem.getAttribute( "value" ) === null ? "on" : elem.value; 16558 }; 16559 } 16560} ); 16561 16562 16563 16564 16565// Return jQuery for attributes-only inclusion 16566var location = window.location; 16567 16568var nonce = { guid: Date.now() }; 16569 16570var rquery = ( /\?/ ); 16571 16572 16573 16574// Cross-browser xml parsing 16575jQuery.parseXML = function( data ) { 16576 var xml, parserErrorElem; 16577 if ( !data || typeof data !== "string" ) { 16578 return null; 16579 } 16580 16581 // Support: IE 9 - 11 only 16582 // IE throws on parseFromString with invalid input. 16583 try { 16584 xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" ); 16585 } catch ( e ) {} 16586 16587 parserErrorElem = xml && xml.getElementsByTagName( "parsererror" )[ 0 ]; 16588 if ( !xml || parserErrorElem ) { 16589 jQuery.error( "Invalid XML: " + ( 16590 parserErrorElem ? 16591 jQuery.map( parserErrorElem.childNodes, function( el ) { 16592 return el.textContent; 16593 } ).join( "\n" ) : 16594 data 16595 ) ); 16596 } 16597 return xml; 16598}; 16599 16600 16601var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/, 16602 stopPropagationCallback = function( e ) { 16603 e.stopPropagation(); 16604 }; 16605 16606jQuery.extend( jQuery.event, { 16607 16608 trigger: function( event, data, elem, onlyHandlers ) { 16609 16610 var i, cur, tmp, bubbleType, ontype, handle, special, lastElement, 16611 eventPath = [ elem || document ], 16612 type = hasOwn.call( event, "type" ) ? event.type : event, 16613 namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split( "." ) : []; 16614 16615 cur = lastElement = tmp = elem = elem || document; 16616 16617 // Don't do events on text and comment nodes 16618 if ( elem.nodeType === 3 || elem.nodeType === 8 ) { 16619 return; 16620 } 16621 16622 // focus/blur morphs to focusin/out; ensure we're not firing them right now 16623 if ( rfocusMorph.test( type + jQuery.event.triggered ) ) { 16624 return; 16625 } 16626 16627 if ( type.indexOf( "." ) > -1 ) { 16628 16629 // Namespaced trigger; create a regexp to match event type in handle() 16630 namespaces = type.split( "." ); 16631 type = namespaces.shift(); 16632 namespaces.sort(); 16633 } 16634 ontype = type.indexOf( ":" ) < 0 && "on" + type; 16635 16636 // Caller can pass in a jQuery.Event object, Object, or just an event type string 16637 event = event[ jQuery.expando ] ? 16638 event : 16639 new jQuery.Event( type, typeof event === "object" && event ); 16640 16641 // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true) 16642 event.isTrigger = onlyHandlers ? 2 : 3; 16643 event.namespace = namespaces.join( "." ); 16644 event.rnamespace = event.namespace ? 16645 new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) : 16646 null; 16647 16648 // Clean up the event in case it is being reused 16649 event.result = undefined; 16650 if ( !event.target ) { 16651 event.target = elem; 16652 } 16653 16654 // Clone any incoming data and prepend the event, creating the handler arg list 16655 data = data == null ? 16656 [ event ] : 16657 jQuery.makeArray( data, [ event ] ); 16658 16659 // Allow special events to draw outside the lines 16660 special = jQuery.event.special[ type ] || {}; 16661 if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) { 16662 return; 16663 } 16664 16665 // Determine event propagation path in advance, per W3C events spec (trac-9951) 16666 // Bubble up to document, then to window; watch for a global ownerDocument var (trac-9724) 16667 if ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) { 16668 16669 bubbleType = special.delegateType || type; 16670 if ( !rfocusMorph.test( bubbleType + type ) ) { 16671 cur = cur.parentNode; 16672 } 16673 for ( ; cur; cur = cur.parentNode ) { 16674 eventPath.push( cur ); 16675 tmp = cur; 16676 } 16677 16678 // Only add window if we got to document (e.g., not plain obj or detached DOM) 16679 if ( tmp === ( elem.ownerDocument || document ) ) { 16680 eventPath.push( tmp.defaultView || tmp.parentWindow || window ); 16681 } 16682 } 16683 16684 // Fire handlers on the event path 16685 i = 0; 16686 while ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) { 16687 lastElement = cur; 16688 event.type = i > 1 ? 16689 bubbleType : 16690 special.bindType || type; 16691 16692 // jQuery handler 16693 handle = ( dataPriv.get( cur, "events" ) || Object.create( null ) )[ event.type ] && 16694 dataPriv.get( cur, "handle" ); 16695 if ( handle ) { 16696 handle.apply( cur, data ); 16697 } 16698 16699 // Native handler 16700 handle = ontype && cur[ ontype ]; 16701 if ( handle && handle.apply && acceptData( cur ) ) { 16702 event.result = handle.apply( cur, data ); 16703 if ( event.result === false ) { 16704 event.preventDefault(); 16705 } 16706 } 16707 } 16708 event.type = type; 16709 16710 // If nobody prevented the default action, do it now 16711 if ( !onlyHandlers && !event.isDefaultPrevented() ) { 16712 16713 if ( ( !special._default || 16714 special._default.apply( eventPath.pop(), data ) === false ) && 16715 acceptData( elem ) ) { 16716 16717 // Call a native DOM method on the target with the same name as the event. 16718 // Don't do default actions on window, that's where global variables be (trac-6170) 16719 if ( ontype && isFunction( elem[ type ] ) && !isWindow( elem ) ) { 16720 16721 // Don't re-trigger an onFOO event when we call its FOO() method 16722 tmp = elem[ ontype ]; 16723 16724 if ( tmp ) { 16725 elem[ ontype ] = null; 16726 } 16727 16728 // Prevent re-triggering of the same event, since we already bubbled it above 16729 jQuery.event.triggered = type; 16730 16731 if ( event.isPropagationStopped() ) { 16732 lastElement.addEventListener( type, stopPropagationCallback ); 16733 } 16734 16735 elem[ type ](); 16736 16737 if ( event.isPropagationStopped() ) { 16738 lastElement.removeEventListener( type, stopPropagationCallback ); 16739 } 16740 16741 jQuery.event.triggered = undefined; 16742 16743 if ( tmp ) { 16744 elem[ ontype ] = tmp; 16745 } 16746 } 16747 } 16748 } 16749 16750 return event.result; 16751 }, 16752 16753 // Piggyback on a donor event to simulate a different one 16754 // Used only for `focus(in | out)` events 16755 simulate: function( type, elem, event ) { 16756 var e = jQuery.extend( 16757 new jQuery.Event(), 16758 event, 16759 { 16760 type: type, 16761 isSimulated: true 16762 } 16763 ); 16764 16765 jQuery.event.trigger( e, null, elem ); 16766 } 16767 16768} ); 16769 16770jQuery.fn.extend( { 16771 16772 trigger: function( type, data ) { 16773 return this.each( function() { 16774 jQuery.event.trigger( type, data, this ); 16775 } ); 16776 }, 16777 triggerHandler: function( type, data ) { 16778 var elem = this[ 0 ]; 16779 if ( elem ) { 16780 return jQuery.event.trigger( type, data, elem, true ); 16781 } 16782 } 16783} ); 16784 16785 16786var 16787 rbracket = /\[\]$/, 16788 rCRLF = /\r?\n/g, 16789 rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i, 16790 rsubmittable = /^(?:input|select|textarea|keygen)/i; 16791 16792function buildParams( prefix, obj, traditional, add ) { 16793 var name; 16794 16795 if ( Array.isArray( obj ) ) { 16796 16797 // Serialize array item. 16798 jQuery.each( obj, function( i, v ) { 16799 if ( traditional || rbracket.test( prefix ) ) { 16800 16801 // Treat each array item as a scalar. 16802 add( prefix, v ); 16803 16804 } else { 16805 16806 // Item is non-scalar (array or object), encode its numeric index. 16807 buildParams( 16808 prefix + "[" + ( typeof v === "object" && v != null ? i : "" ) + "]", 16809 v, 16810 traditional, 16811 add 16812 ); 16813 } 16814 } ); 16815 16816 } else if ( !traditional && toType( obj ) === "object" ) { 16817 16818 // Serialize object item. 16819 for ( name in obj ) { 16820 buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add ); 16821 } 16822 16823 } else { 16824 16825 // Serialize scalar item. 16826 add( prefix, obj ); 16827 } 16828} 16829 16830// Serialize an array of form elements or a set of 16831// key/values into a query string 16832jQuery.param = function( a, traditional ) { 16833 var prefix, 16834 s = [], 16835 add = function( key, valueOrFunction ) { 16836 16837 // If value is a function, invoke it and use its return value 16838 var value = isFunction( valueOrFunction ) ? 16839 valueOrFunction() : 16840 valueOrFunction; 16841 16842 s[ s.length ] = encodeURIComponent( key ) + "=" + 16843 encodeURIComponent( value == null ? "" : value ); 16844 }; 16845 16846 if ( a == null ) { 16847 return ""; 16848 } 16849 16850 // If an array was passed in, assume that it is an array of form elements. 16851 if ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) { 16852 16853 // Serialize the form elements 16854 jQuery.each( a, function() { 16855 add( this.name, this.value ); 16856 } ); 16857 16858 } else { 16859 16860 // If traditional, encode the "old" way (the way 1.3.2 or older 16861 // did it), otherwise encode params recursively. 16862 for ( prefix in a ) { 16863 buildParams( prefix, a[ prefix ], traditional, add ); 16864 } 16865 } 16866 16867 // Return the resulting serialization 16868 return s.join( "&" ); 16869}; 16870 16871jQuery.fn.extend( { 16872 serialize: function() { 16873 return jQuery.param( this.serializeArray() ); 16874 }, 16875 serializeArray: function() { 16876 return this.map( function() { 16877 16878 // Can add propHook for "elements" to filter or add form elements 16879 var elements = jQuery.prop( this, "elements" ); 16880 return elements ? jQuery.makeArray( elements ) : this; 16881 } ).filter( function() { 16882 var type = this.type; 16883 16884 // Use .is( ":disabled" ) so that fieldset[disabled] works 16885 return this.name && !jQuery( this ).is( ":disabled" ) && 16886 rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) && 16887 ( this.checked || !rcheckableType.test( type ) ); 16888 } ).map( function( _i, elem ) { 16889 var val = jQuery( this ).val(); 16890 16891 if ( val == null ) { 16892 return null; 16893 } 16894 16895 if ( Array.isArray( val ) ) { 16896 return jQuery.map( val, function( val ) { 16897 return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; 16898 } ); 16899 } 16900 16901 return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; 16902 } ).get(); 16903 } 16904} ); 16905 16906 16907var 16908 r20 = /%20/g, 16909 rhash = /#.*$/, 16910 rantiCache = /([?&])_=[^&]*/, 16911 rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg, 16912 16913 // trac-7653, trac-8125, trac-8152: local protocol detection 16914 rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/, 16915 rnoContent = /^(?:GET|HEAD)$/, 16916 rprotocol = /^\/\//, 16917 16918 /* Prefilters 16919 * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example) 16920 * 2) These are called: 16921 * - BEFORE asking for a transport 16922 * - AFTER param serialization (s.data is a string if s.processData is true) 16923 * 3) key is the dataType 16924 * 4) the catchall symbol "*" can be used 16925 * 5) execution will start with transport dataType and THEN continue down to "*" if needed 16926 */ 16927 prefilters = {}, 16928 16929 /* Transports bindings 16930 * 1) key is the dataType 16931 * 2) the catchall symbol "*" can be used 16932 * 3) selection will start with transport dataType and THEN go to "*" if needed 16933 */ 16934 transports = {}, 16935 16936 // Avoid comment-prolog char sequence (trac-10098); must appease lint and evade compression 16937 allTypes = "*/".concat( "*" ), 16938 16939 // Anchor tag for parsing the document origin 16940 originAnchor = document.createElement( "a" ); 16941 16942originAnchor.href = location.href; 16943 16944// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport 16945function addToPrefiltersOrTransports( structure ) { 16946 16947 // dataTypeExpression is optional and defaults to "*" 16948 return function( dataTypeExpression, func ) { 16949 16950 if ( typeof dataTypeExpression !== "string" ) { 16951 func = dataTypeExpression; 16952 dataTypeExpression = "*"; 16953 } 16954 16955 var dataType, 16956 i = 0, 16957 dataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || []; 16958 16959 if ( isFunction( func ) ) { 16960 16961 // For each dataType in the dataTypeExpression 16962 while ( ( dataType = dataTypes[ i++ ] ) ) { 16963 16964 // Prepend if requested 16965 if ( dataType[ 0 ] === "+" ) { 16966 dataType = dataType.slice( 1 ) || "*"; 16967 ( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func ); 16968 16969 // Otherwise append 16970 } else { 16971 ( structure[ dataType ] = structure[ dataType ] || [] ).push( func ); 16972 } 16973 } 16974 } 16975 }; 16976} 16977 16978// Base inspection function for prefilters and transports 16979function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) { 16980 16981 var inspected = {}, 16982 seekingTransport = ( structure === transports ); 16983 16984 function inspect( dataType ) { 16985 var selected; 16986 inspected[ dataType ] = true; 16987 jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) { 16988 var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR ); 16989 if ( typeof dataTypeOrTransport === "string" && 16990 !seekingTransport && !inspected[ dataTypeOrTransport ] ) { 16991 16992 options.dataTypes.unshift( dataTypeOrTransport ); 16993 inspect( dataTypeOrTransport ); 16994 return false; 16995 } else if ( seekingTransport ) { 16996 return !( selected = dataTypeOrTransport ); 16997 } 16998 } ); 16999 return selected; 17000 } 17001 17002 return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" ); 17003} 17004 17005// A special extend for ajax options 17006// that takes "flat" options (not to be deep extended) 17007// Fixes trac-9887 17008function ajaxExtend( target, src ) { 17009 var key, deep, 17010 flatOptions = jQuery.ajaxSettings.flatOptions || {}; 17011 17012 for ( key in src ) { 17013 if ( src[ key ] !== undefined ) { 17014 ( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ]; 17015 } 17016 } 17017 if ( deep ) { 17018 jQuery.extend( true, target, deep ); 17019 } 17020 17021 return target; 17022} 17023 17024/* Handles responses to an ajax request: 17025 * - finds the right dataType (mediates between content-type and expected dataType) 17026 * - returns the corresponding response 17027 */ 17028function ajaxHandleResponses( s, jqXHR, responses ) { 17029 17030 var ct, type, finalDataType, firstDataType, 17031 contents = s.contents, 17032 dataTypes = s.dataTypes; 17033 17034 // Remove auto dataType and get content-type in the process 17035 while ( dataTypes[ 0 ] === "*" ) { 17036 dataTypes.shift(); 17037 if ( ct === undefined ) { 17038 ct = s.mimeType || jqXHR.getResponseHeader( "Content-Type" ); 17039 } 17040 } 17041 17042 // Check if we're dealing with a known content-type 17043 if ( ct ) { 17044 for ( type in contents ) { 17045 if ( contents[ type ] && contents[ type ].test( ct ) ) { 17046 dataTypes.unshift( type ); 17047 break; 17048 } 17049 } 17050 } 17051 17052 // Check to see if we have a response for the expected dataType 17053 if ( dataTypes[ 0 ] in responses ) { 17054 finalDataType = dataTypes[ 0 ]; 17055 } else { 17056 17057 // Try convertible dataTypes 17058 for ( type in responses ) { 17059 if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[ 0 ] ] ) { 17060 finalDataType = type; 17061 break; 17062 } 17063 if ( !firstDataType ) { 17064 firstDataType = type; 17065 } 17066 } 17067 17068 // Or just use first one 17069 finalDataType = finalDataType || firstDataType; 17070 } 17071 17072 // If we found a dataType 17073 // We add the dataType to the list if needed 17074 // and return the corresponding response 17075 if ( finalDataType ) { 17076 if ( finalDataType !== dataTypes[ 0 ] ) { 17077 dataTypes.unshift( finalDataType ); 17078 } 17079 return responses[ finalDataType ]; 17080 } 17081} 17082 17083/* Chain conversions given the request and the original response 17084 * Also sets the responseXXX fields on the jqXHR instance 17085 */ 17086function ajaxConvert( s, response, jqXHR, isSuccess ) { 17087 var conv2, current, conv, tmp, prev, 17088 converters = {}, 17089 17090 // Work with a copy of dataTypes in case we need to modify it for conversion 17091 dataTypes = s.dataTypes.slice(); 17092 17093 // Create converters map with lowercased keys 17094 if ( dataTypes[ 1 ] ) { 17095 for ( conv in s.converters ) { 17096 converters[ conv.toLowerCase() ] = s.converters[ conv ]; 17097 } 17098 } 17099 17100 current = dataTypes.shift(); 17101 17102 // Convert to each sequential dataType 17103 while ( current ) { 17104 17105 if ( s.responseFields[ current ] ) { 17106 jqXHR[ s.responseFields[ current ] ] = response; 17107 } 17108 17109 // Apply the dataFilter if provided 17110 if ( !prev && isSuccess && s.dataFilter ) { 17111 response = s.dataFilter( response, s.dataType ); 17112 } 17113 17114 prev = current; 17115 current = dataTypes.shift(); 17116 17117 if ( current ) { 17118 17119 // There's only work to do if current dataType is non-auto 17120 if ( current === "*" ) { 17121 17122 current = prev; 17123 17124 // Convert response if prev dataType is non-auto and differs from current 17125 } else if ( prev !== "*" && prev !== current ) { 17126 17127 // Seek a direct converter 17128 conv = converters[ prev + " " + current ] || converters[ "* " + current ]; 17129 17130 // If none found, seek a pair 17131 if ( !conv ) { 17132 for ( conv2 in converters ) { 17133 17134 // If conv2 outputs current 17135 tmp = conv2.split( " " ); 17136 if ( tmp[ 1 ] === current ) { 17137 17138 // If prev can be converted to accepted input 17139 conv = converters[ prev + " " + tmp[ 0 ] ] || 17140 converters[ "* " + tmp[ 0 ] ]; 17141 if ( conv ) { 17142 17143 // Condense equivalence converters 17144 if ( conv === true ) { 17145 conv = converters[ conv2 ]; 17146 17147 // Otherwise, insert the intermediate dataType 17148 } else if ( converters[ conv2 ] !== true ) { 17149 current = tmp[ 0 ]; 17150 dataTypes.unshift( tmp[ 1 ] ); 17151 } 17152 break; 17153 } 17154 } 17155 } 17156 } 17157 17158 // Apply converter (if not an equivalence) 17159 if ( conv !== true ) { 17160 17161 // Unless errors are allowed to bubble, catch and return them 17162 if ( conv && s.throws ) { 17163 response = conv( response ); 17164 } else { 17165 try { 17166 response = conv( response ); 17167 } catch ( e ) { 17168 return { 17169 state: "parsererror", 17170 error: conv ? e : "No conversion from " + prev + " to " + current 17171 }; 17172 } 17173 } 17174 } 17175 } 17176 } 17177 } 17178 17179 return { state: "success", data: response }; 17180} 17181 17182jQuery.extend( { 17183 17184 // Counter for holding the number of active queries 17185 active: 0, 17186 17187 // Last-Modified header cache for next request 17188 lastModified: {}, 17189 etag: {}, 17190 17191 ajaxSettings: { 17192 url: location.href, 17193 type: "GET", 17194 isLocal: rlocalProtocol.test( location.protocol ), 17195 global: true, 17196 processData: true, 17197 async: true, 17198 contentType: "application/x-www-form-urlencoded; charset=UTF-8", 17199 17200 /* 17201 timeout: 0, 17202 data: null, 17203 dataType: null, 17204 username: null, 17205 password: null, 17206 cache: null, 17207 throws: false, 17208 traditional: false, 17209 headers: {}, 17210 */ 17211 17212 accepts: { 17213 "*": allTypes, 17214 text: "text/plain", 17215 html: "text/html", 17216 xml: "application/xml, text/xml", 17217 json: "application/json, text/javascript" 17218 }, 17219 17220 contents: { 17221 xml: /\bxml\b/, 17222 html: /\bhtml/, 17223 json: /\bjson\b/ 17224 }, 17225 17226 responseFields: { 17227 xml: "responseXML", 17228 text: "responseText", 17229 json: "responseJSON" 17230 }, 17231 17232 // Data converters 17233 // Keys separate source (or catchall "*") and destination types with a single space 17234 converters: { 17235 17236 // Convert anything to text 17237 "* text": String, 17238 17239 // Text to html (true = no transformation) 17240 "text html": true, 17241 17242 // Evaluate text as a json expression 17243 "text json": JSON.parse, 17244 17245 // Parse text as xml 17246 "text xml": jQuery.parseXML 17247 }, 17248 17249 // For options that shouldn't be deep extended: 17250 // you can add your own custom options here if 17251 // and when you create one that shouldn't be 17252 // deep extended (see ajaxExtend) 17253 flatOptions: { 17254 url: true, 17255 context: true 17256 } 17257 }, 17258 17259 // Creates a full fledged settings object into target 17260 // with both ajaxSettings and settings fields. 17261 // If target is omitted, writes into ajaxSettings. 17262 ajaxSetup: function( target, settings ) { 17263 return settings ? 17264 17265 // Building a settings object 17266 ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) : 17267 17268 // Extending ajaxSettings 17269 ajaxExtend( jQuery.ajaxSettings, target ); 17270 }, 17271 17272 ajaxPrefilter: addToPrefiltersOrTransports( prefilters ), 17273 ajaxTransport: addToPrefiltersOrTransports( transports ), 17274 17275 // Main method 17276 ajax: function( url, options ) { 17277 17278 // If url is an object, simulate pre-1.5 signature 17279 if ( typeof url === "object" ) { 17280 options = url; 17281 url = undefined; 17282 } 17283 17284 // Force options to be an object 17285 options = options || {}; 17286 17287 var transport, 17288 17289 // URL without anti-cache param 17290 cacheURL, 17291 17292 // Response headers 17293 responseHeadersString, 17294 responseHeaders, 17295 17296 // timeout handle 17297 timeoutTimer, 17298 17299 // Url cleanup var 17300 urlAnchor, 17301 17302 // Request state (becomes false upon send and true upon completion) 17303 completed, 17304 17305 // To know if global events are to be dispatched 17306 fireGlobals, 17307 17308 // Loop variable 17309 i, 17310 17311 // uncached part of the url 17312 uncached, 17313 17314 // Create the final options object 17315 s = jQuery.ajaxSetup( {}, options ), 17316 17317 // Callbacks context 17318 callbackContext = s.context || s, 17319 17320 // Context for global events is callbackContext if it is a DOM node or jQuery collection 17321 globalEventContext = s.context && 17322 ( callbackContext.nodeType || callbackContext.jquery ) ? 17323 jQuery( callbackContext ) : 17324 jQuery.event, 17325 17326 // Deferreds 17327 deferred = jQuery.Deferred(), 17328 completeDeferred = jQuery.Callbacks( "once memory" ), 17329 17330 // Status-dependent callbacks 17331 statusCode = s.statusCode || {}, 17332 17333 // Headers (they are sent all at once) 17334 requestHeaders = {}, 17335 requestHeadersNames = {}, 17336 17337 // Default abort message 17338 strAbort = "canceled", 17339 17340 // Fake xhr 17341 jqXHR = { 17342 readyState: 0, 17343 17344 // Builds headers hashtable if needed 17345 getResponseHeader: function( key ) { 17346 var match; 17347 if ( completed ) { 17348 if ( !responseHeaders ) { 17349 responseHeaders = {}; 17350 while ( ( match = rheaders.exec( responseHeadersString ) ) ) { 17351 responseHeaders[ match[ 1 ].toLowerCase() + " " ] = 17352 ( responseHeaders[ match[ 1 ].toLowerCase() + " " ] || [] ) 17353 .concat( match[ 2 ] ); 17354 } 17355 } 17356 match = responseHeaders[ key.toLowerCase() + " " ]; 17357 } 17358 return match == null ? null : match.join( ", " ); 17359 }, 17360 17361 // Raw string 17362 getAllResponseHeaders: function() { 17363 return completed ? responseHeadersString : null; 17364 }, 17365 17366 // Caches the header 17367 setRequestHeader: function( name, value ) { 17368 if ( completed == null ) { 17369 name = requestHeadersNames[ name.toLowerCase() ] = 17370 requestHeadersNames[ name.toLowerCase() ] || name; 17371 requestHeaders[ name ] = value; 17372 } 17373 return this; 17374 }, 17375 17376 // Overrides response content-type header 17377 overrideMimeType: function( type ) { 17378 if ( completed == null ) { 17379 s.mimeType = type; 17380 } 17381 return this; 17382 }, 17383 17384 // Status-dependent callbacks 17385 statusCode: function( map ) { 17386 var code; 17387 if ( map ) { 17388 if ( completed ) { 17389 17390 // Execute the appropriate callbacks 17391 jqXHR.always( map[ jqXHR.status ] ); 17392 } else { 17393 17394 // Lazy-add the new callbacks in a way that preserves old ones 17395 for ( code in map ) { 17396 statusCode[ code ] = [ statusCode[ code ], map[ code ] ]; 17397 } 17398 } 17399 } 17400 return this; 17401 }, 17402 17403 // Cancel the request 17404 abort: function( statusText ) { 17405 var finalText = statusText || strAbort; 17406 if ( transport ) { 17407 transport.abort( finalText ); 17408 } 17409 done( 0, finalText ); 17410 return this; 17411 } 17412 }; 17413 17414 // Attach deferreds 17415 deferred.promise( jqXHR ); 17416 17417 // Add protocol if not provided (prefilters might expect it) 17418 // Handle falsy url in the settings object (trac-10093: consistency with old signature) 17419 // We also use the url parameter if available 17420 s.url = ( ( url || s.url || location.href ) + "" ) 17421 .replace( rprotocol, location.protocol + "//" ); 17422 17423 // Alias method option to type as per ticket trac-12004 17424 s.type = options.method || options.type || s.method || s.type; 17425 17426 // Extract dataTypes list 17427 s.dataTypes = ( s.dataType || "*" ).toLowerCase().match( rnothtmlwhite ) || [ "" ]; 17428 17429 // A cross-domain request is in order when the origin doesn't match the current origin. 17430 if ( s.crossDomain == null ) { 17431 urlAnchor = document.createElement( "a" ); 17432 17433 // Support: IE <=8 - 11, Edge 12 - 15 17434 // IE throws exception on accessing the href property if url is malformed, 17435 // e.g. http://example.com:80x/ 17436 try { 17437 urlAnchor.href = s.url; 17438 17439 // Support: IE <=8 - 11 only 17440 // Anchor's host property isn't correctly set when s.url is relative 17441 urlAnchor.href = urlAnchor.href; 17442 s.crossDomain = originAnchor.protocol + "//" + originAnchor.host !== 17443 urlAnchor.protocol + "//" + urlAnchor.host; 17444 } catch ( e ) { 17445 17446 // If there is an error parsing the URL, assume it is crossDomain, 17447 // it can be rejected by the transport if it is invalid 17448 s.crossDomain = true; 17449 } 17450 } 17451 17452 // Convert data if not already a string 17453 if ( s.data && s.processData && typeof s.data !== "string" ) { 17454 s.data = jQuery.param( s.data, s.traditional ); 17455 } 17456 17457 // Apply prefilters 17458 inspectPrefiltersOrTransports( prefilters, s, options, jqXHR ); 17459 17460 // If request was aborted inside a prefilter, stop there 17461 if ( completed ) { 17462 return jqXHR; 17463 } 17464 17465 // We can fire global events as of now if asked to 17466 // Don't fire events if jQuery.event is undefined in an AMD-usage scenario (trac-15118) 17467 fireGlobals = jQuery.event && s.global; 17468 17469 // Watch for a new set of requests 17470 if ( fireGlobals && jQuery.active++ === 0 ) { 17471 jQuery.event.trigger( "ajaxStart" ); 17472 } 17473 17474 // Uppercase the type 17475 s.type = s.type.toUpperCase(); 17476 17477 // Determine if request has content 17478 s.hasContent = !rnoContent.test( s.type ); 17479 17480 // Save the URL in case we're toying with the If-Modified-Since 17481 // and/or If-None-Match header later on 17482 // Remove hash to simplify url manipulation 17483 cacheURL = s.url.replace( rhash, "" ); 17484 17485 // More options handling for requests with no content 17486 if ( !s.hasContent ) { 17487 17488 // Remember the hash so we can put it back 17489 uncached = s.url.slice( cacheURL.length ); 17490 17491 // If data is available and should be processed, append data to url 17492 if ( s.data && ( s.processData || typeof s.data === "string" ) ) { 17493 cacheURL += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data; 17494 17495 // trac-9682: remove data so that it's not used in an eventual retry 17496 delete s.data; 17497 } 17498 17499 // Add or update anti-cache param if needed 17500 if ( s.cache === false ) { 17501 cacheURL = cacheURL.replace( rantiCache, "$1" ); 17502 uncached = ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ( nonce.guid++ ) + 17503 uncached; 17504 } 17505 17506 // Put hash and anti-cache on the URL that will be requested (gh-1732) 17507 s.url = cacheURL + uncached; 17508 17509 // Change '%20' to '+' if this is encoded form body content (gh-2658) 17510 } else if ( s.data && s.processData && 17511 ( s.contentType || "" ).indexOf( "application/x-www-form-urlencoded" ) === 0 ) { 17512 s.data = s.data.replace( r20, "+" ); 17513 } 17514 17515 // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. 17516 if ( s.ifModified ) { 17517 if ( jQuery.lastModified[ cacheURL ] ) { 17518 jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] ); 17519 } 17520 if ( jQuery.etag[ cacheURL ] ) { 17521 jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] ); 17522 } 17523 } 17524 17525 // Set the correct header, if data is being sent 17526 if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) { 17527 jqXHR.setRequestHeader( "Content-Type", s.contentType ); 17528 } 17529 17530 // Set the Accepts header for the server, depending on the dataType 17531 jqXHR.setRequestHeader( 17532 "Accept", 17533 s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ? 17534 s.accepts[ s.dataTypes[ 0 ] ] + 17535 ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) : 17536 s.accepts[ "*" ] 17537 ); 17538 17539 // Check for headers option 17540 for ( i in s.headers ) { 17541 jqXHR.setRequestHeader( i, s.headers[ i ] ); 17542 } 17543 17544 // Allow custom headers/mimetypes and early abort 17545 if ( s.beforeSend && 17546 ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) { 17547 17548 // Abort if not done already and return 17549 return jqXHR.abort(); 17550 } 17551 17552 // Aborting is no longer a cancellation 17553 strAbort = "abort"; 17554 17555 // Install callbacks on deferreds 17556 completeDeferred.add( s.complete ); 17557 jqXHR.done( s.success ); 17558 jqXHR.fail( s.error ); 17559 17560 // Get transport 17561 transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR ); 17562 17563 // If no transport, we auto-abort 17564 if ( !transport ) { 17565 done( -1, "No Transport" ); 17566 } else { 17567 jqXHR.readyState = 1; 17568 17569 // Send global event 17570 if ( fireGlobals ) { 17571 globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] ); 17572 } 17573 17574 // If request was aborted inside ajaxSend, stop there 17575 if ( completed ) { 17576 return jqXHR; 17577 } 17578 17579 // Timeout 17580 if ( s.async && s.timeout > 0 ) { 17581 timeoutTimer = window.setTimeout( function() { 17582 jqXHR.abort( "timeout" ); 17583 }, s.timeout ); 17584 } 17585 17586 try { 17587 completed = false; 17588 transport.send( requestHeaders, done ); 17589 } catch ( e ) { 17590 17591 // Rethrow post-completion exceptions 17592 if ( completed ) { 17593 throw e; 17594 } 17595 17596 // Propagate others as results 17597 done( -1, e ); 17598 } 17599 } 17600 17601 // Callback for when everything is done 17602 function done( status, nativeStatusText, responses, headers ) { 17603 var isSuccess, success, error, response, modified, 17604 statusText = nativeStatusText; 17605 17606 // Ignore repeat invocations 17607 if ( completed ) { 17608 return; 17609 } 17610 17611 completed = true; 17612 17613 // Clear timeout if it exists 17614 if ( timeoutTimer ) { 17615 window.clearTimeout( timeoutTimer ); 17616 } 17617 17618 // Dereference transport for early garbage collection 17619 // (no matter how long the jqXHR object will be used) 17620 transport = undefined; 17621 17622 // Cache response headers 17623 responseHeadersString = headers || ""; 17624 17625 // Set readyState 17626 jqXHR.readyState = status > 0 ? 4 : 0; 17627 17628 // Determine if successful 17629 isSuccess = status >= 200 && status < 300 || status === 304; 17630 17631 // Get response data 17632 if ( responses ) { 17633 response = ajaxHandleResponses( s, jqXHR, responses ); 17634 } 17635 17636 // Use a noop converter for missing script but not if jsonp 17637 if ( !isSuccess && 17638 jQuery.inArray( "script", s.dataTypes ) > -1 && 17639 jQuery.inArray( "json", s.dataTypes ) < 0 ) { 17640 s.converters[ "text script" ] = function() {}; 17641 } 17642 17643 // Convert no matter what (that way responseXXX fields are always set) 17644 response = ajaxConvert( s, response, jqXHR, isSuccess ); 17645 17646 // If successful, handle type chaining 17647 if ( isSuccess ) { 17648 17649 // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. 17650 if ( s.ifModified ) { 17651 modified = jqXHR.getResponseHeader( "Last-Modified" ); 17652 if ( modified ) { 17653 jQuery.lastModified[ cacheURL ] = modified; 17654 } 17655 modified = jqXHR.getResponseHeader( "etag" ); 17656 if ( modified ) { 17657 jQuery.etag[ cacheURL ] = modified; 17658 } 17659 } 17660 17661 // if no content 17662 if ( status === 204 || s.type === "HEAD" ) { 17663 statusText = "nocontent"; 17664 17665 // if not modified 17666 } else if ( status === 304 ) { 17667 statusText = "notmodified"; 17668 17669 // If we have data, let's convert it 17670 } else { 17671 statusText = response.state; 17672 success = response.data; 17673 error = response.error; 17674 isSuccess = !error; 17675 } 17676 } else { 17677 17678 // Extract error from statusText and normalize for non-aborts 17679 error = statusText; 17680 if ( status || !statusText ) { 17681 statusText = "error"; 17682 if ( status < 0 ) { 17683 status = 0; 17684 } 17685 } 17686 } 17687 17688 // Set data for the fake xhr object 17689 jqXHR.status = status; 17690 jqXHR.statusText = ( nativeStatusText || statusText ) + ""; 17691 17692 // Success/Error 17693 if ( isSuccess ) { 17694 deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] ); 17695 } else { 17696 deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] ); 17697 } 17698 17699 // Status-dependent callbacks 17700 jqXHR.statusCode( statusCode ); 17701 statusCode = undefined; 17702 17703 if ( fireGlobals ) { 17704 globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError", 17705 [ jqXHR, s, isSuccess ? success : error ] ); 17706 } 17707 17708 // Complete 17709 completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] ); 17710 17711 if ( fireGlobals ) { 17712 globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] ); 17713 17714 // Handle the global AJAX counter 17715 if ( !( --jQuery.active ) ) { 17716 jQuery.event.trigger( "ajaxStop" ); 17717 } 17718 } 17719 } 17720 17721 return jqXHR; 17722 }, 17723 17724 getJSON: function( url, data, callback ) { 17725 return jQuery.get( url, data, callback, "json" ); 17726 }, 17727 17728 getScript: function( url, callback ) { 17729 return jQuery.get( url, undefined, callback, "script" ); 17730 } 17731} ); 17732 17733jQuery.each( [ "get", "post" ], function( _i, method ) { 17734 jQuery[ method ] = function( url, data, callback, type ) { 17735 17736 // Shift arguments if data argument was omitted 17737 if ( isFunction( data ) ) { 17738 type = type || callback; 17739 callback = data; 17740 data = undefined; 17741 } 17742 17743 // The url can be an options object (which then must have .url) 17744 return jQuery.ajax( jQuery.extend( { 17745 url: url, 17746 type: method, 17747 dataType: type, 17748 data: data, 17749 success: callback 17750 }, jQuery.isPlainObject( url ) && url ) ); 17751 }; 17752} ); 17753 17754jQuery.ajaxPrefilter( function( s ) { 17755 var i; 17756 for ( i in s.headers ) { 17757 if ( i.toLowerCase() === "content-type" ) { 17758 s.contentType = s.headers[ i ] || ""; 17759 } 17760 } 17761} ); 17762 17763 17764jQuery._evalUrl = function( url, options, doc ) { 17765 return jQuery.ajax( { 17766 url: url, 17767 17768 // Make this explicit, since user can override this through ajaxSetup (trac-11264) 17769 type: "GET", 17770 dataType: "script", 17771 cache: true, 17772 async: false, 17773 global: false, 17774 17775 // Only evaluate the response if it is successful (gh-4126) 17776 // dataFilter is not invoked for failure responses, so using it instead 17777 // of the default converter is kludgy but it works. 17778 converters: { 17779 "text script": function() {} 17780 }, 17781 dataFilter: function( response ) { 17782 jQuery.globalEval( response, options, doc ); 17783 } 17784 } ); 17785}; 17786 17787 17788jQuery.fn.extend( { 17789 wrapAll: function( html ) { 17790 var wrap; 17791 17792 if ( this[ 0 ] ) { 17793 if ( isFunction( html ) ) { 17794 html = html.call( this[ 0 ] ); 17795 } 17796 17797 // The elements to wrap the target around 17798 wrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true ); 17799 17800 if ( this[ 0 ].parentNode ) { 17801 wrap.insertBefore( this[ 0 ] ); 17802 } 17803 17804 wrap.map( function() { 17805 var elem = this; 17806 17807 while ( elem.firstElementChild ) { 17808 elem = elem.firstElementChild; 17809 } 17810 17811 return elem; 17812 } ).append( this ); 17813 } 17814 17815 return this; 17816 }, 17817 17818 wrapInner: function( html ) { 17819 if ( isFunction( html ) ) { 17820 return this.each( function( i ) { 17821 jQuery( this ).wrapInner( html.call( this, i ) ); 17822 } ); 17823 } 17824 17825 return this.each( function() { 17826 var self = jQuery( this ), 17827 contents = self.contents(); 17828 17829 if ( contents.length ) { 17830 contents.wrapAll( html ); 17831 17832 } else { 17833 self.append( html ); 17834 } 17835 } ); 17836 }, 17837 17838 wrap: function( html ) { 17839 var htmlIsFunction = isFunction( html ); 17840 17841 return this.each( function( i ) { 17842 jQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html ); 17843 } ); 17844 }, 17845 17846 unwrap: function( selector ) { 17847 this.parent( selector ).not( "body" ).each( function() { 17848 jQuery( this ).replaceWith( this.childNodes ); 17849 } ); 17850 return this; 17851 } 17852} ); 17853 17854 17855jQuery.expr.pseudos.hidden = function( elem ) { 17856 return !jQuery.expr.pseudos.visible( elem ); 17857}; 17858jQuery.expr.pseudos.visible = function( elem ) { 17859 return !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length ); 17860}; 17861 17862 17863 17864 17865jQuery.ajaxSettings.xhr = function() { 17866 try { 17867 return new window.XMLHttpRequest(); 17868 } catch ( e ) {} 17869}; 17870 17871var xhrSuccessStatus = { 17872 17873 // File protocol always yields status code 0, assume 200 17874 0: 200, 17875 17876 // Support: IE <=9 only 17877 // trac-1450: sometimes IE returns 1223 when it should be 204 17878 1223: 204 17879 }, 17880 xhrSupported = jQuery.ajaxSettings.xhr(); 17881 17882support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported ); 17883support.ajax = xhrSupported = !!xhrSupported; 17884 17885jQuery.ajaxTransport( function( options ) { 17886 var callback, errorCallback; 17887 17888 // Cross domain only allowed if supported through XMLHttpRequest 17889 if ( support.cors || xhrSupported && !options.crossDomain ) { 17890 return { 17891 send: function( headers, complete ) { 17892 var i, 17893 xhr = options.xhr(); 17894 17895 xhr.open( 17896 options.type, 17897 options.url, 17898 options.async, 17899 options.username, 17900 options.password 17901 ); 17902 17903 // Apply custom fields if provided 17904 if ( options.xhrFields ) { 17905 for ( i in options.xhrFields ) { 17906 xhr[ i ] = options.xhrFields[ i ]; 17907 } 17908 } 17909 17910 // Override mime type if needed 17911 if ( options.mimeType && xhr.overrideMimeType ) { 17912 xhr.overrideMimeType( options.mimeType ); 17913 } 17914 17915 // X-Requested-With header 17916 // For cross-domain requests, seeing as conditions for a preflight are 17917 // akin to a jigsaw puzzle, we simply never set it to be sure. 17918 // (it can always be set on a per-request basis or even using ajaxSetup) 17919 // For same-domain requests, won't change header if already provided. 17920 if ( !options.crossDomain && !headers[ "X-Requested-With" ] ) { 17921 headers[ "X-Requested-With" ] = "XMLHttpRequest"; 17922 } 17923 17924 // Set headers 17925 for ( i in headers ) { 17926 xhr.setRequestHeader( i, headers[ i ] ); 17927 } 17928 17929 // Callback 17930 callback = function( type ) { 17931 return function() { 17932 if ( callback ) { 17933 callback = errorCallback = xhr.onload = 17934 xhr.onerror = xhr.onabort = xhr.ontimeout = 17935 xhr.onreadystatechange = null; 17936 17937 if ( type === "abort" ) { 17938 xhr.abort(); 17939 } else if ( type === "error" ) { 17940 17941 // Support: IE <=9 only 17942 // On a manual native abort, IE9 throws 17943 // errors on any property access that is not readyState 17944 if ( typeof xhr.status !== "number" ) { 17945 complete( 0, "error" ); 17946 } else { 17947 complete( 17948 17949 // File: protocol always yields status 0; see trac-8605, trac-14207 17950 xhr.status, 17951 xhr.statusText 17952 ); 17953 } 17954 } else { 17955 complete( 17956 xhrSuccessStatus[ xhr.status ] || xhr.status, 17957 xhr.statusText, 17958 17959 // Support: IE <=9 only 17960 // IE9 has no XHR2 but throws on binary (trac-11426) 17961 // For XHR2 non-text, let the caller handle it (gh-2498) 17962 ( xhr.responseType || "text" ) !== "text" || 17963 typeof xhr.responseText !== "string" ? 17964 { binary: xhr.response } : 17965 { text: xhr.responseText }, 17966 xhr.getAllResponseHeaders() 17967 ); 17968 } 17969 } 17970 }; 17971 }; 17972 17973 // Listen to events 17974 xhr.onload = callback(); 17975 errorCallback = xhr.onerror = xhr.ontimeout = callback( "error" ); 17976 17977 // Support: IE 9 only 17978 // Use onreadystatechange to replace onabort 17979 // to handle uncaught aborts 17980 if ( xhr.onabort !== undefined ) { 17981 xhr.onabort = errorCallback; 17982 } else { 17983 xhr.onreadystatechange = function() { 17984 17985 // Check readyState before timeout as it changes 17986 if ( xhr.readyState === 4 ) { 17987 17988 // Allow onerror to be called first, 17989 // but that will not handle a native abort 17990 // Also, save errorCallback to a variable 17991 // as xhr.onerror cannot be accessed 17992 window.setTimeout( function() { 17993 if ( callback ) { 17994 errorCallback(); 17995 } 17996 } ); 17997 } 17998 }; 17999 } 18000 18001 // Create the abort callback 18002 callback = callback( "abort" ); 18003 18004 try { 18005 18006 // Do send the request (this may raise an exception) 18007 xhr.send( options.hasContent && options.data || null ); 18008 } catch ( e ) { 18009 18010 // trac-14683: Only rethrow if this hasn't been notified as an error yet 18011 if ( callback ) { 18012 throw e; 18013 } 18014 } 18015 }, 18016 18017 abort: function() { 18018 if ( callback ) { 18019 callback(); 18020 } 18021 } 18022 }; 18023 } 18024} ); 18025 18026 18027 18028 18029// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432) 18030jQuery.ajaxPrefilter( function( s ) { 18031 if ( s.crossDomain ) { 18032 s.contents.script = false; 18033 } 18034} ); 18035 18036// Install script dataType 18037jQuery.ajaxSetup( { 18038 accepts: { 18039 script: "text/javascript, application/javascript, " + 18040 "application/ecmascript, application/x-ecmascript" 18041 }, 18042 contents: { 18043 script: /\b(?:java|ecma)script\b/ 18044 }, 18045 converters: { 18046 "text script": function( text ) { 18047 jQuery.globalEval( text ); 18048 return text; 18049 } 18050 } 18051} ); 18052 18053// Handle cache's special case and crossDomain 18054jQuery.ajaxPrefilter( "script", function( s ) { 18055 if ( s.cache === undefined ) { 18056 s.cache = false; 18057 } 18058 if ( s.crossDomain ) { 18059 s.type = "GET"; 18060 } 18061} ); 18062 18063// Bind script tag hack transport 18064jQuery.ajaxTransport( "script", function( s ) { 18065 18066 // This transport only deals with cross domain or forced-by-attrs requests 18067 if ( s.crossDomain || s.scriptAttrs ) { 18068 var script, callback; 18069 return { 18070 send: function( _, complete ) { 18071 script = jQuery( "<script>" ) 18072 .attr( s.scriptAttrs || {} ) 18073 .prop( { charset: s.scriptCharset, src: s.url } ) 18074 .on( "load error", callback = function( evt ) { 18075 script.remove(); 18076 callback = null; 18077 if ( evt ) { 18078 complete( evt.type === "error" ? 404 : 200, evt.type ); 18079 } 18080 } ); 18081 18082 // Use native DOM manipulation to avoid our domManip AJAX trickery 18083 document.head.appendChild( script[ 0 ] ); 18084 }, 18085 abort: function() { 18086 if ( callback ) { 18087 callback(); 18088 } 18089 } 18090 }; 18091 } 18092} ); 18093 18094 18095 18096 18097var oldCallbacks = [], 18098 rjsonp = /(=)\?(?=&|$)|\?\?/; 18099 18100// Default jsonp settings 18101jQuery.ajaxSetup( { 18102 jsonp: "callback", 18103 jsonpCallback: function() { 18104 var callback = oldCallbacks.pop() || ( jQuery.expando + "_" + ( nonce.guid++ ) ); 18105 this[ callback ] = true; 18106 return callback; 18107 } 18108} ); 18109 18110// Detect, normalize options and install callbacks for jsonp requests 18111jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) { 18112 18113 var callbackName, overwritten, responseContainer, 18114 jsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ? 18115 "url" : 18116 typeof s.data === "string" && 18117 ( s.contentType || "" ) 18118 .indexOf( "application/x-www-form-urlencoded" ) === 0 && 18119 rjsonp.test( s.data ) && "data" 18120 ); 18121 18122 // Handle iff the expected data type is "jsonp" or we have a parameter to set 18123 if ( jsonProp || s.dataTypes[ 0 ] === "jsonp" ) { 18124 18125 // Get callback name, remembering preexisting value associated with it 18126 callbackName = s.jsonpCallback = isFunction( s.jsonpCallback ) ? 18127 s.jsonpCallback() : 18128 s.jsonpCallback; 18129 18130 // Insert callback into url or form data 18131 if ( jsonProp ) { 18132 s[ jsonProp ] = s[ jsonProp ].replace( rjsonp, "$1" + callbackName ); 18133 } else if ( s.jsonp !== false ) { 18134 s.url += ( rquery.test( s.url ) ? "&" : "?" ) + s.jsonp + "=" + callbackName; 18135 } 18136 18137 // Use data converter to retrieve json after script execution 18138 s.converters[ "script json" ] = function() { 18139 if ( !responseContainer ) { 18140 jQuery.error( callbackName + " was not called" ); 18141 } 18142 return responseContainer[ 0 ]; 18143 }; 18144 18145 // Force json dataType 18146 s.dataTypes[ 0 ] = "json"; 18147 18148 // Install callback 18149 overwritten = window[ callbackName ]; 18150 window[ callbackName ] = function() { 18151 responseContainer = arguments; 18152 }; 18153 18154 // Clean-up function (fires after converters) 18155 jqXHR.always( function() { 18156 18157 // If previous value didn't exist - remove it 18158 if ( overwritten === undefined ) { 18159 jQuery( window ).removeProp( callbackName ); 18160 18161 // Otherwise restore preexisting value 18162 } else { 18163 window[ callbackName ] = overwritten; 18164 } 18165 18166 // Save back as free 18167 if ( s[ callbackName ] ) { 18168 18169 // Make sure that re-using the options doesn't screw things around 18170 s.jsonpCallback = originalSettings.jsonpCallback; 18171 18172 // Save the callback name for future use 18173 oldCallbacks.push( callbackName ); 18174 } 18175 18176 // Call if it was a function and we have a response 18177 if ( responseContainer && isFunction( overwritten ) ) { 18178 overwritten( responseContainer[ 0 ] ); 18179 } 18180 18181 responseContainer = overwritten = undefined; 18182 } ); 18183 18184 // Delegate to script 18185 return "script"; 18186 } 18187} ); 18188 18189 18190 18191 18192// Support: Safari 8 only 18193// In Safari 8 documents created via document.implementation.createHTMLDocument 18194// collapse sibling forms: the second one becomes a child of the first one. 18195// Because of that, this security measure has to be disabled in Safari 8. 18196// https://bugs.webkit.org/show_bug.cgi?id=137337 18197support.createHTMLDocument = ( function() { 18198 var body = document.implementation.createHTMLDocument( "" ).body; 18199 body.innerHTML = "<form></form><form></form>"; 18200 return body.childNodes.length === 2; 18201} )(); 18202 18203 18204// Argument "data" should be string of html 18205// context (optional): If specified, the fragment will be created in this context, 18206// defaults to document 18207// keepScripts (optional): If true, will include scripts passed in the html string 18208jQuery.parseHTML = function( data, context, keepScripts ) { 18209 if ( typeof data !== "string" ) { 18210 return []; 18211 } 18212 if ( typeof context === "boolean" ) { 18213 keepScripts = context; 18214 context = false; 18215 } 18216 18217 var base, parsed, scripts; 18218 18219 if ( !context ) { 18220 18221 // Stop scripts or inline event handlers from being executed immediately 18222 // by using document.implementation 18223 if ( support.createHTMLDocument ) { 18224 context = document.implementation.createHTMLDocument( "" ); 18225 18226 // Set the base href for the created document 18227 // so any parsed elements with URLs 18228 // are based on the document's URL (gh-2965) 18229 base = context.createElement( "base" ); 18230 base.href = document.location.href; 18231 context.head.appendChild( base ); 18232 } else { 18233 context = document; 18234 } 18235 } 18236 18237 parsed = rsingleTag.exec( data ); 18238 scripts = !keepScripts && []; 18239 18240 // Single tag 18241 if ( parsed ) { 18242 return [ context.createElement( parsed[ 1 ] ) ]; 18243 } 18244 18245 parsed = buildFragment( [ data ], context, scripts ); 18246 18247 if ( scripts && scripts.length ) { 18248 jQuery( scripts ).remove(); 18249 } 18250 18251 return jQuery.merge( [], parsed.childNodes ); 18252}; 18253 18254 18255/** 18256 * Load a url into a page 18257 */ 18258jQuery.fn.load = function( url, params, callback ) { 18259 var selector, type, response, 18260 self = this, 18261 off = url.indexOf( " " ); 18262 18263 if ( off > -1 ) { 18264 selector = stripAndCollapse( url.slice( off ) ); 18265 url = url.slice( 0, off ); 18266 } 18267 18268 // If it's a function 18269 if ( isFunction( params ) ) { 18270 18271 // We assume that it's the callback 18272 callback = params; 18273 params = undefined; 18274 18275 // Otherwise, build a param string 18276 } else if ( params && typeof params === "object" ) { 18277 type = "POST"; 18278 } 18279 18280 // If we have elements to modify, make the request 18281 if ( self.length > 0 ) { 18282 jQuery.ajax( { 18283 url: url, 18284 18285 // If "type" variable is undefined, then "GET" method will be used. 18286 // Make value of this field explicit since 18287 // user can override it through ajaxSetup method 18288 type: type || "GET", 18289 dataType: "html", 18290 data: params 18291 } ).done( function( responseText ) { 18292 18293 // Save response for use in complete callback 18294 response = arguments; 18295 18296 self.html( selector ? 18297 18298 // If a selector was specified, locate the right elements in a dummy div 18299 // Exclude scripts to avoid IE 'Permission Denied' errors 18300 jQuery( "<div>" ).append( jQuery.parseHTML( responseText ) ).find( selector ) : 18301 18302 // Otherwise use the full result 18303 responseText ); 18304 18305 // If the request succeeds, this function gets "data", "status", "jqXHR" 18306 // but they are ignored because response was set above. 18307 // If it fails, this function gets "jqXHR", "status", "error" 18308 } ).always( callback && function( jqXHR, status ) { 18309 self.each( function() { 18310 callback.apply( this, response || [ jqXHR.responseText, status, jqXHR ] ); 18311 } ); 18312 } ); 18313 } 18314 18315 return this; 18316}; 18317 18318 18319 18320 18321jQuery.expr.pseudos.animated = function( elem ) { 18322 return jQuery.grep( jQuery.timers, function( fn ) { 18323 return elem === fn.elem; 18324 } ).length; 18325}; 18326 18327 18328 18329 18330jQuery.offset = { 18331 setOffset: function( elem, options, i ) { 18332 var curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition, 18333 position = jQuery.css( elem, "position" ), 18334 curElem = jQuery( elem ), 18335 props = {}; 18336 18337 // Set position first, in-case top/left are set even on static elem 18338 if ( position === "static" ) { 18339 elem.style.position = "relative"; 18340 } 18341 18342 curOffset = curElem.offset(); 18343 curCSSTop = jQuery.css( elem, "top" ); 18344 curCSSLeft = jQuery.css( elem, "left" ); 18345 calculatePosition = ( position === "absolute" || position === "fixed" ) && 18346 ( curCSSTop + curCSSLeft ).indexOf( "auto" ) > -1; 18347 18348 // Need to be able to calculate position if either 18349 // top or left is auto and position is either absolute or fixed 18350 if ( calculatePosition ) { 18351 curPosition = curElem.position(); 18352 curTop = curPosition.top; 18353 curLeft = curPosition.left; 18354 18355 } else { 18356 curTop = parseFloat( curCSSTop ) || 0; 18357 curLeft = parseFloat( curCSSLeft ) || 0; 18358 } 18359 18360 if ( isFunction( options ) ) { 18361 18362 // Use jQuery.extend here to allow modification of coordinates argument (gh-1848) 18363 options = options.call( elem, i, jQuery.extend( {}, curOffset ) ); 18364 } 18365 18366 if ( options.top != null ) { 18367 props.top = ( options.top - curOffset.top ) + curTop; 18368 } 18369 if ( options.left != null ) { 18370 props.left = ( options.left - curOffset.left ) + curLeft; 18371 } 18372 18373 if ( "using" in options ) { 18374 options.using.call( elem, props ); 18375 18376 } else { 18377 curElem.css( props ); 18378 } 18379 } 18380}; 18381 18382jQuery.fn.extend( { 18383 18384 // offset() relates an element's border box to the document origin 18385 offset: function( options ) { 18386 18387 // Preserve chaining for setter 18388 if ( arguments.length ) { 18389 return options === undefined ? 18390 this : 18391 this.each( function( i ) { 18392 jQuery.offset.setOffset( this, options, i ); 18393 } ); 18394 } 18395 18396 var rect, win, 18397 elem = this[ 0 ]; 18398 18399 if ( !elem ) { 18400 return; 18401 } 18402 18403 // Return zeros for disconnected and hidden (display: none) elements (gh-2310) 18404 // Support: IE <=11 only 18405 // Running getBoundingClientRect on a 18406 // disconnected node in IE throws an error 18407 if ( !elem.getClientRects().length ) { 18408 return { top: 0, left: 0 }; 18409 } 18410 18411 // Get document-relative position by adding viewport scroll to viewport-relative gBCR 18412 rect = elem.getBoundingClientRect(); 18413 win = elem.ownerDocument.defaultView; 18414 return { 18415 top: rect.top + win.pageYOffset, 18416 left: rect.left + win.pageXOffset 18417 }; 18418 }, 18419 18420 // position() relates an element's margin box to its offset parent's padding box 18421 // This corresponds to the behavior of CSS absolute positioning 18422 position: function() { 18423 if ( !this[ 0 ] ) { 18424 return; 18425 } 18426 18427 var offsetParent, offset, doc, 18428 elem = this[ 0 ], 18429 parentOffset = { top: 0, left: 0 }; 18430 18431 // position:fixed elements are offset from the viewport, which itself always has zero offset 18432 if ( jQuery.css( elem, "position" ) === "fixed" ) { 18433 18434 // Assume position:fixed implies availability of getBoundingClientRect 18435 offset = elem.getBoundingClientRect(); 18436 18437 } else { 18438 offset = this.offset(); 18439 18440 // Account for the *real* offset parent, which can be the document or its root element 18441 // when a statically positioned element is identified 18442 doc = elem.ownerDocument; 18443 offsetParent = elem.offsetParent || doc.documentElement; 18444 while ( offsetParent && 18445 ( offsetParent === doc.body || offsetParent === doc.documentElement ) && 18446 jQuery.css( offsetParent, "position" ) === "static" ) { 18447 18448 offsetParent = offsetParent.parentNode; 18449 } 18450 if ( offsetParent && offsetParent !== elem && offsetParent.nodeType === 1 ) { 18451 18452 // Incorporate borders into its offset, since they are outside its content origin 18453 parentOffset = jQuery( offsetParent ).offset(); 18454 parentOffset.top += jQuery.css( offsetParent, "borderTopWidth", true ); 18455 parentOffset.left += jQuery.css( offsetParent, "borderLeftWidth", true ); 18456 } 18457 } 18458 18459 // Subtract parent offsets and element margins 18460 return { 18461 top: offset.top - parentOffset.top - jQuery.css( elem, "marginTop", true ), 18462 left: offset.left - parentOffset.left - jQuery.css( elem, "marginLeft", true ) 18463 }; 18464 }, 18465 18466 // This method will return documentElement in the following cases: 18467 // 1) For the element inside the iframe without offsetParent, this method will return 18468 // documentElement of the parent window 18469 // 2) For the hidden or detached element 18470 // 3) For body or html element, i.e. in case of the html node - it will return itself 18471 // 18472 // but those exceptions were never presented as a real life use-cases 18473 // and might be considered as more preferable results. 18474 // 18475 // This logic, however, is not guaranteed and can change at any point in the future 18476 offsetParent: function() { 18477 return this.map( function() { 18478 var offsetParent = this.offsetParent; 18479 18480 while ( offsetParent && jQuery.css( offsetParent, "position" ) === "static" ) { 18481 offsetParent = offsetParent.offsetParent; 18482 } 18483 18484 return offsetParent || documentElement; 18485 } ); 18486 } 18487} ); 18488 18489// Create scrollLeft and scrollTop methods 18490jQuery.each( { scrollLeft: "pageXOffset", scrollTop: "pageYOffset" }, function( method, prop ) { 18491 var top = "pageYOffset" === prop; 18492 18493 jQuery.fn[ method ] = function( val ) { 18494 return access( this, function( elem, method, val ) { 18495 18496 // Coalesce documents and windows 18497 var win; 18498 if ( isWindow( elem ) ) { 18499 win = elem; 18500 } else if ( elem.nodeType === 9 ) { 18501 win = elem.defaultView; 18502 } 18503 18504 if ( val === undefined ) { 18505 return win ? win[ prop ] : elem[ method ]; 18506 } 18507 18508 if ( win ) { 18509 win.scrollTo( 18510 !top ? val : win.pageXOffset, 18511 top ? val : win.pageYOffset 18512 ); 18513 18514 } else { 18515 elem[ method ] = val; 18516 } 18517 }, method, val, arguments.length ); 18518 }; 18519} ); 18520 18521// Support: Safari <=7 - 9.1, Chrome <=37 - 49 18522// Add the top/left cssHooks using jQuery.fn.position 18523// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084 18524// Blink bug: https://bugs.chromium.org/p/chromium/issues/detail?id=589347 18525// getComputedStyle returns percent when specified for top/left/bottom/right; 18526// rather than make the css module depend on the offset module, just check for it here 18527jQuery.each( [ "top", "left" ], function( _i, prop ) { 18528 jQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition, 18529 function( elem, computed ) { 18530 if ( computed ) { 18531 computed = curCSS( elem, prop ); 18532 18533 // If curCSS returns percentage, fallback to offset 18534 return rnumnonpx.test( computed ) ? 18535 jQuery( elem ).position()[ prop ] + "px" : 18536 computed; 18537 } 18538 } 18539 ); 18540} ); 18541 18542 18543// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods 18544jQuery.each( { Height: "height", Width: "width" }, function( name, type ) { 18545 jQuery.each( { 18546 padding: "inner" + name, 18547 content: type, 18548 "": "outer" + name 18549 }, function( defaultExtra, funcName ) { 18550 18551 // Margin is only for outerHeight, outerWidth 18552 jQuery.fn[ funcName ] = function( margin, value ) { 18553 var chainable = arguments.length && ( defaultExtra || typeof margin !== "boolean" ), 18554 extra = defaultExtra || ( margin === true || value === true ? "margin" : "border" ); 18555 18556 return access( this, function( elem, type, value ) { 18557 var doc; 18558 18559 if ( isWindow( elem ) ) { 18560 18561 // $( window ).outerWidth/Height return w/h including scrollbars (gh-1729) 18562 return funcName.indexOf( "outer" ) === 0 ? 18563 elem[ "inner" + name ] : 18564 elem.document.documentElement[ "client" + name ]; 18565 } 18566 18567 // Get document width or height 18568 if ( elem.nodeType === 9 ) { 18569 doc = elem.documentElement; 18570 18571 // Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height], 18572 // whichever is greatest 18573 return Math.max( 18574 elem.body[ "scroll" + name ], doc[ "scroll" + name ], 18575 elem.body[ "offset" + name ], doc[ "offset" + name ], 18576 doc[ "client" + name ] 18577 ); 18578 } 18579 18580 return value === undefined ? 18581 18582 // Get width or height on the element, requesting but not forcing parseFloat 18583 jQuery.css( elem, type, extra ) : 18584 18585 // Set width or height on the element 18586 jQuery.style( elem, type, value, extra ); 18587 }, type, chainable ? margin : undefined, chainable ); 18588 }; 18589 } ); 18590} ); 18591 18592 18593jQuery.each( [ 18594 "ajaxStart", 18595 "ajaxStop", 18596 "ajaxComplete", 18597 "ajaxError", 18598 "ajaxSuccess", 18599 "ajaxSend" 18600], function( _i, type ) { 18601 jQuery.fn[ type ] = function( fn ) { 18602 return this.on( type, fn ); 18603 }; 18604} ); 18605 18606 18607 18608 18609jQuery.fn.extend( { 18610 18611 bind: function( types, data, fn ) { 18612 return this.on( types, null, data, fn ); 18613 }, 18614 unbind: function( types, fn ) { 18615 return this.off( types, null, fn ); 18616 }, 18617 18618 delegate: function( selector, types, data, fn ) { 18619 return this.on( types, selector, data, fn ); 18620 }, 18621 undelegate: function( selector, types, fn ) { 18622 18623 // ( namespace ) or ( selector, types [, fn] ) 18624 return arguments.length === 1 ? 18625 this.off( selector, "**" ) : 18626 this.off( types, selector || "**", fn ); 18627 }, 18628 18629 hover: function( fnOver, fnOut ) { 18630 return this 18631 .on( "mouseenter", fnOver ) 18632 .on( "mouseleave", fnOut || fnOver ); 18633 } 18634} ); 18635 18636jQuery.each( 18637 ( "blur focus focusin focusout resize scroll click dblclick " + 18638 "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " + 18639 "change select submit keydown keypress keyup contextmenu" ).split( " " ), 18640 function( _i, name ) { 18641 18642 // Handle event binding 18643 jQuery.fn[ name ] = function( data, fn ) { 18644 return arguments.length > 0 ? 18645 this.on( name, null, data, fn ) : 18646 this.trigger( name ); 18647 }; 18648 } 18649); 18650 18651 18652 18653 18654// Support: Android <=4.0 only 18655// Make sure we trim BOM and NBSP 18656// Require that the "whitespace run" starts from a non-whitespace 18657// to avoid O(N^2) behavior when the engine would try matching "\s+$" at each space position. 18658var rtrim = /^[\s\uFEFF\xA0]+|([^\s\uFEFF\xA0])[\s\uFEFF\xA0]+$/g; 18659 18660// Bind a function to a context, optionally partially applying any 18661// arguments. 18662// jQuery.proxy is deprecated to promote standards (specifically Function#bind) 18663// However, it is not slated for removal any time soon 18664jQuery.proxy = function( fn, context ) { 18665 var tmp, args, proxy; 18666 18667 if ( typeof context === "string" ) { 18668 tmp = fn[ context ]; 18669 context = fn; 18670 fn = tmp; 18671 } 18672 18673 // Quick check to determine if target is callable, in the spec 18674 // this throws a TypeError, but we will just return undefined. 18675 if ( !isFunction( fn ) ) { 18676 return undefined; 18677 } 18678 18679 // Simulated bind 18680 args = slice.call( arguments, 2 ); 18681 proxy = function() { 18682 return fn.apply( context || this, args.concat( slice.call( arguments ) ) ); 18683 }; 18684 18685 // Set the guid of unique handler to the same of original handler, so it can be removed 18686 proxy.guid = fn.guid = fn.guid || jQuery.guid++; 18687 18688 return proxy; 18689}; 18690 18691jQuery.holdReady = function( hold ) { 18692 if ( hold ) { 18693 jQuery.readyWait++; 18694 } else { 18695 jQuery.ready( true ); 18696 } 18697}; 18698jQuery.isArray = Array.isArray; 18699jQuery.parseJSON = JSON.parse; 18700jQuery.nodeName = nodeName; 18701jQuery.isFunction = isFunction; 18702jQuery.isWindow = isWindow; 18703jQuery.camelCase = camelCase; 18704jQuery.type = toType; 18705 18706jQuery.now = Date.now; 18707 18708jQuery.isNumeric = function( obj ) { 18709 18710 // As of jQuery 3.0, isNumeric is limited to 18711 // strings and numbers (primitives or objects) 18712 // that can be coerced to finite numbers (gh-2662) 18713 var type = jQuery.type( obj ); 18714 return ( type === "number" || type === "string" ) && 18715 18716 // parseFloat NaNs numeric-cast false positives ("") 18717 // ...but misinterprets leading-number strings, particularly hex literals ("0x...") 18718 // subtraction forces infinities to NaN 18719 !isNaN( obj - parseFloat( obj ) ); 18720}; 18721 18722jQuery.trim = function( text ) { 18723 return text == null ? 18724 "" : 18725 ( text + "" ).replace( rtrim, "$1" ); 18726}; 18727 18728 18729 18730// Register as a named AMD module, since jQuery can be concatenated with other 18731// files that may use define, but not via a proper concatenation script that 18732// understands anonymous AMD modules. A named AMD is safest and most robust 18733// way to register. Lowercase jquery is used because AMD module names are 18734// derived from file names, and jQuery is normally delivered in a lowercase 18735// file name. Do this after creating the global so that if an AMD module wants 18736// to call noConflict to hide this version of jQuery, it will work. 18737 18738// Note that for maximum portability, libraries that are not jQuery should 18739// declare themselves as anonymous modules, and avoid setting a global if an 18740// AMD loader is present. jQuery is a special case. For more information, see 18741// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon 18742 18743if ( true ) { 18744 !(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_RESULT__ = (function() { 18745 return jQuery; 18746 }).apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), 18747 __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); 18748} 18749 18750 18751 18752 18753var 18754 18755 // Map over jQuery in case of overwrite 18756 _jQuery = window.jQuery, 18757 18758 // Map over the $ in case of overwrite 18759 _$ = window.$; 18760 18761jQuery.noConflict = function( deep ) { 18762 if ( window.$ === jQuery ) { 18763 window.$ = _$; 18764 } 18765 18766 if ( deep && window.jQuery === jQuery ) { 18767 window.jQuery = _jQuery; 18768 } 18769 18770 return jQuery; 18771}; 18772 18773// Expose jQuery and $ identifiers, even in AMD 18774// (trac-7102#comment:10, https://github.com/jquery/jquery/pull/557) 18775// and CommonJS for browser emulators (trac-13566) 18776if ( typeof noGlobal === "undefined" ) { 18777 window.jQuery = window.$ = jQuery; 18778} 18779 18780 18781 18782 18783return jQuery; 18784} ); 18785 18786 18787/***/ }), 18788
vendor: 559,392 bytes, lines 18789-36307
18789/***/ "./node_modules/lodash/lodash.js": 18790/*!***************************************!*\ 18791 !*** ./node_modules/lodash/lodash.js ***! 18792 \***************************************/ 18793/*! no static exports found */ 18794/***/ (function(module, exports, __webpack_require__) { 18795 18796/* WEBPACK VAR INJECTION */(function(global, module) {var __WEBPACK_AMD_DEFINE_RESULT__;/** 18797 * @license 18798 * Lodash <https://lodash.com/> 18799 * Copyright OpenJS Foundation and other contributors <https://openjsf.org/> 18800 * Released under MIT license <https://lodash.com/license> 18801 * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE> 18802 * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors 18803 */ 18804;(function() { 18805 18806 /** Used as a safe reference for `undefined` in pre-ES5 environments. */ 18807 var undefined; 18808 18809 /** Used as the semantic version number. */ 18810 var VERSION = '4.17.21'; 18811 18812 /** Used as the size to enable large array optimizations. */ 18813 var LARGE_ARRAY_SIZE = 200; 18814 18815 /** Error message constants. */ 18816 var CORE_ERROR_TEXT = 'Unsupported core-js use. Try https://npms.io/search?q=ponyfill.', 18817 FUNC_ERROR_TEXT = 'Expected a function', 18818 INVALID_TEMPL_VAR_ERROR_TEXT = 'Invalid `variable` option passed into `_.template`'; 18819 18820 /** Used to stand-in for `undefined` hash values. */ 18821 var HASH_UNDEFINED = '__lodash_hash_undefined__'; 18822 18823 /** Used as the maximum memoize cache size. */ 18824 var MAX_MEMOIZE_SIZE = 500; 18825 18826 /** Used as the internal argument placeholder. */ 18827 var PLACEHOLDER = '__lodash_placeholder__'; 18828 18829 /** Used to compose bitmasks for cloning. */ 18830 var CLONE_DEEP_FLAG = 1, 18831 CLONE_FLAT_FLAG = 2, 18832 CLONE_SYMBOLS_FLAG = 4; 18833 18834 /** Used to compose bitmasks for value comparisons. */ 18835 var COMPARE_PARTIAL_FLAG = 1, 18836 COMPARE_UNORDERED_FLAG = 2; 18837 18838 /** Used to compose bitmasks for function metadata. */ 18839 var WRAP_BIND_FLAG = 1, 18840 WRAP_BIND_KEY_FLAG = 2, 18841 WRAP_CURRY_BOUND_FLAG = 4, 18842 WRAP_CURRY_FLAG = 8, 18843 WRAP_CURRY_RIGHT_FLAG = 16, 18844 WRAP_PARTIAL_FLAG = 32, 18845 WRAP_PARTIAL_RIGHT_FLAG = 64, 18846 WRAP_ARY_FLAG = 128, 18847 WRAP_REARG_FLAG = 256, 18848 WRAP_FLIP_FLAG = 512; 18849 18850 /** Used as default options for `_.truncate`. */ 18851 var DEFAULT_TRUNC_LENGTH = 30, 18852 DEFAULT_TRUNC_OMISSION = '...'; 18853 18854 /** Used to detect hot functions by number of calls within a span of milliseconds. */ 18855 var HOT_COUNT = 800, 18856 HOT_SPAN = 16; 18857 18858 /** Used to indicate the type of lazy iteratees. */ 18859 var LAZY_FILTER_FLAG = 1, 18860 LAZY_MAP_FLAG = 2, 18861 LAZY_WHILE_FLAG = 3; 18862 18863 /** Used as references for various `Number` constants. */ 18864 var INFINITY = 1 / 0, 18865 MAX_SAFE_INTEGER = 9007199254740991, 18866 MAX_INTEGER = 1.7976931348623157e+308, 18867 NAN = 0 / 0; 18868 18869 /** Used as references for the maximum length and index of an array. */ 18870 var MAX_ARRAY_LENGTH = 4294967295, 18871 MAX_ARRAY_INDEX = MAX_ARRAY_LENGTH - 1, 18872 HALF_MAX_ARRAY_LENGTH = MAX_ARRAY_LENGTH >>> 1; 18873 18874 /** Used to associate wrap methods with their bit flags. */ 18875 var wrapFlags = [ 18876 ['ary', WRAP_ARY_FLAG], 18877 ['bind', WRAP_BIND_FLAG], 18878 ['bindKey', WRAP_BIND_KEY_FLAG], 18879 ['curry', WRAP_CURRY_FLAG], 18880 ['curryRight', WRAP_CURRY_RIGHT_FLAG], 18881 ['flip', WRAP_FLIP_FLAG], 18882 ['partial', WRAP_PARTIAL_FLAG], 18883 ['partialRight', WRAP_PARTIAL_RIGHT_FLAG], 18884 ['rearg', WRAP_REARG_FLAG] 18885 ]; 18886 18887 /** `Object#toString` result references. */ 18888 var argsTag = '[object Arguments]', 18889 arrayTag = '[object Array]', 18890 asyncTag = '[object AsyncFunction]', 18891 boolTag = '[object Boolean]', 18892 dateTag = '[object Date]', 18893 domExcTag = '[object DOMException]', 18894 errorTag = '[object Error]', 18895 funcTag = '[object Function]', 18896 genTag = '[object GeneratorFunction]', 18897 mapTag = '[object Map]', 18898 numberTag = '[object Number]', 18899 nullTag = '[object Null]', 18900 objectTag = '[object Object]', 18901 promiseTag = '[object Promise]', 18902 proxyTag = '[object Proxy]', 18903 regexpTag = '[object RegExp]', 18904 setTag = '[object Set]', 18905 stringTag = '[object String]', 18906 symbolTag = '[object Symbol]', 18907 undefinedTag = '[object Undefined]', 18908 weakMapTag = '[object WeakMap]', 18909 weakSetTag = '[object WeakSet]'; 18910 18911 var arrayBufferTag = '[object ArrayBuffer]', 18912 dataViewTag = '[object DataView]', 18913 float32Tag = '[object Float32Array]', 18914 float64Tag = '[object Float64Array]', 18915 int8Tag = '[object Int8Array]', 18916 int16Tag = '[object Int16Array]', 18917 int32Tag = '[object Int32Array]', 18918 uint8Tag = '[object Uint8Array]', 18919 uint8ClampedTag = '[object Uint8ClampedArray]', 18920 uint16Tag = '[object Uint16Array]', 18921 uint32Tag = '[object Uint32Array]'; 18922 18923 /** Used to match empty string literals in compiled template source. */ 18924 var reEmptyStringLeading = /\b__p \+= '';/g, 18925 reEmptyStringMiddle = /\b(__p \+=) '' \+/g, 18926 reEmptyStringTrailing = /(__e\(.*?\)|\b__t\)) \+\n'';/g; 18927 18928 /** Used to match HTML entities and HTML characters. */ 18929 var reEscapedHtml = /&(?:amp|lt|gt|quot|#39);/g, 18930 reUnescapedHtml = /[&<>"']/g, 18931 reHasEscapedHtml = RegExp(reEscapedHtml.source), 18932 reHasUnescapedHtml = RegExp(reUnescapedHtml.source); 18933 18934 /** Used to match template delimiters. */ 18935 var reEscape = /<%-([\s\S]+?)%>/g, 18936 reEvaluate = /<%([\s\S]+?)%>/g, 18937 reInterpolate = /<%=([\s\S]+?)%>/g; 18938 18939 /** Used to match property names within property paths. */ 18940 var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/, 18941 reIsPlainProp = /^\w*$/, 18942 rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g; 18943 18944 /** 18945 * Used to match `RegExp` 18946 * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns). 18947 */ 18948 var reRegExpChar = /[\\^$.*+?()[\]{}|]/g, 18949 reHasRegExpChar = RegExp(reRegExpChar.source); 18950 18951 /** Used to match leading whitespace. */ 18952 var reTrimStart = /^\s+/; 18953 18954 /** Used to match a single whitespace character. */ 18955 var reWhitespace = /\s/; 18956 18957 /** Used to match wrap detail comments. */ 18958 var reWrapComment = /\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/, 18959 reWrapDetails = /\{\n\/\* \[wrapped with (.+)\] \*/, 18960 reSplitDetails = /,? & /; 18961 18962 /** Used to match words composed of alphanumeric characters. */ 18963 var reAsciiWord = /[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g; 18964 18965 /** 18966 * Used to validate the `validate` option in `_.template` variable. 18967 * 18968 * Forbids characters which could potentially change the meaning of the function argument definition: 18969 * - "()," (modification of function parameters) 18970 * - "=" (default value) 18971 * - "[]{}" (destructuring of function parameters) 18972 * - "/" (beginning of a comment) 18973 * - whitespace 18974 */ 18975 var reForbiddenIdentifierChars = /[()=,{}\[\]\/\s]/; 18976 18977 /** Used to match backslashes in property paths. */ 18978 var reEscapeChar = /\\(\\)?/g; 18979 18980 /** 18981 * Used to match 18982 * [ES template delimiters](http://ecma-international.org/ecma-262/7.0/#sec-template-literal-lexical-components). 18983 */ 18984 var reEsTemplate = /\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g; 18985 18986 /** Used to match `RegExp` flags from their coerced string values. */ 18987 var reFlags = /\w*$/; 18988 18989 /** Used to detect bad signed hexadecimal string values. */ 18990 var reIsBadHex = /^[-+]0x[0-9a-f]+$/i; 18991 18992 /** Used to detect binary string values. */ 18993 var reIsBinary = /^0b[01]+$/i; 18994 18995 /** Used to detect host constructors (Safari). */ 18996 var reIsHostCtor = /^\[object .+?Constructor\]$/; 18997 18998 /** Used to detect octal string values. */ 18999 var reIsOctal = /^0o[0-7]+$/i; 19000 19001 /** Used to detect unsigned integer values. */ 19002 var reIsUint = /^(?:0|[1-9]\d*)$/; 19003 19004 /** Used to match Latin Unicode letters (excluding mathematical operators). */ 19005 var reLatin = /[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g; 19006 19007 /** Used to ensure capturing order of template delimiters. */ 19008 var reNoMatch = /($^)/; 19009 19010 /** Used to match unescaped characters in compiled string literals. */ 19011 var reUnescapedString = /['\n\r\u2028\u2029\\]/g; 19012 19013 /** Used to compose unicode character classes. */ 19014 var rsAstralRange = '\\ud800-\\udfff', 19015 rsComboMarksRange = '\\u0300-\\u036f', 19016 reComboHalfMarksRange = '\\ufe20-\\ufe2f', 19017 rsComboSymbolsRange = '\\u20d0-\\u20ff', 19018 rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange, 19019 rsDingbatRange = '\\u2700-\\u27bf', 19020 rsLowerRange = 'a-z\\xdf-\\xf6\\xf8-\\xff', 19021 rsMathOpRange = '\\xac\\xb1\\xd7\\xf7', 19022 rsNonCharRange = '\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf', 19023 rsPunctuationRange = '\\u2000-\\u206f', 19024 rsSpaceRange = ' \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000', 19025 rsUpperRange = 'A-Z\\xc0-\\xd6\\xd8-\\xde', 19026 rsVarRange = '\\ufe0e\\ufe0f', 19027 rsBreakRange = rsMathOpRange + rsNonCharRange + rsPunctuationRange + rsSpaceRange; 19028 19029 /** Used to compose unicode capture groups. */ 19030 var rsApos = "['\u2019]", 19031 rsAstral = '[' + rsAstralRange + ']', 19032 rsBreak = '[' + rsBreakRange + ']', 19033 rsCombo = '[' + rsComboRange + ']', 19034 rsDigits = '\\d+', 19035 rsDingbat = '[' + rsDingbatRange + ']', 19036 rsLower = '[' + rsLowerRange + ']', 19037 rsMisc = '[^' + rsAstralRange + rsBreakRange + rsDigits + rsDingbatRange + rsLowerRange + rsUpperRange + ']', 19038 rsFitz = '\\ud83c[\\udffb-\\udfff]', 19039 rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')', 19040 rsNonAstral = '[^' + rsAstralRange + ']', 19041 rsRegional = '(?:\\ud83c[\\udde6-\\uddff]){2}', 19042 rsSurrPair = '[\\ud800-\\udbff][\\udc00-\\udfff]', 19043 rsUpper = '[' + rsUpperRange + ']', 19044 rsZWJ = '\\u200d'; 19045 19046 /** Used to compose unicode regexes. */ 19047 var rsMiscLower = '(?:' + rsLower + '|' + rsMisc + ')', 19048 rsMiscUpper = '(?:' + rsUpper + '|' + rsMisc + ')', 19049 rsOptContrLower = '(?:' + rsApos + '(?:d|ll|m|re|s|t|ve))?', 19050 rsOptContrUpper = '(?:' + rsApos + '(?:D|LL|M|RE|S|T|VE))?', 19051 reOptMod = rsModifier + '?', 19052 rsOptVar = '[' + rsVarRange + ']?', 19053 rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*', 19054 rsOrdLower = '\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])', 19055 rsOrdUpper = '\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])', 19056 rsSeq = rsOptVar + reOptMod + rsOptJoin, 19057 rsEmoji = '(?:' + [rsDingbat, rsRegional, rsSurrPair].join('|') + ')' + rsSeq, 19058 rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')'; 19059 19060 /** Used to match apostrophes. */ 19061 var reApos = RegExp(rsApos, 'g'); 19062 19063 /** 19064 * Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks) and 19065 * [combining diacritical marks for symbols](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks_for_Symbols). 19066 */ 19067 var reComboMark = RegExp(rsCombo, 'g'); 19068 19069 /** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */ 19070 var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g'); 19071 19072 /** Used to match complex or compound words. */ 19073 var reUnicodeWord = RegExp([ 19074 rsUpper + '?' + rsLower + '+' + rsOptContrLower + '(?=' + [rsBreak, rsUpper, '$'].join('|') + ')', 19075 rsMiscUpper + '+' + rsOptContrUpper + '(?=' + [rsBreak, rsUpper + rsMiscLower, '$'].join('|') + ')', 19076 rsUpper + '?' + rsMiscLower + '+' + rsOptContrLower, 19077 rsUpper + '+' + rsOptContrUpper, 19078 rsOrdUpper, 19079 rsOrdLower, 19080 rsDigits, 19081 rsEmoji 19082 ].join('|'), 'g'); 19083 19084 /** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */ 19085 var reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange + rsComboRange + rsVarRange + ']'); 19086 19087 /** Used to detect strings that need a more robust regexp to match words. */ 19088 var reHasUnicodeWord = /[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/; 19089 19090 /** Used to assign default `context` object properties. */ 19091 var contextProps = [ 19092 'Array', 'Buffer', 'DataView', 'Date', 'Error', 'Float32Array', 'Float64Array', 19093 'Function', 'Int8Array', 'Int16Array', 'Int32Array', 'Map', 'Math', 'Object', 19094 'Promise', 'RegExp', 'Set', 'String', 'Symbol', 'TypeError', 'Uint8Array', 19095 'Uint8ClampedArray', 'Uint16Array', 'Uint32Array', 'WeakMap', 19096 '_', 'clearTimeout', 'isFinite', 'parseInt', 'setTimeout' 19097 ]; 19098 19099 /** Used to make template sourceURLs easier to identify. */ 19100 var templateCounter = -1; 19101 19102 /** Used to identify `toStringTag` values of typed arrays. */ 19103 var typedArrayTags = {}; 19104 typedArrayTags[float32Tag] = typedArrayTags[float64Tag] = 19105 typedArrayTags[int8Tag] = typedArrayTags[int16Tag] = 19106 typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] = 19107 typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] = 19108 typedArrayTags[uint32Tag] = true; 19109 typedArrayTags[argsTag] = typedArrayTags[arrayTag] = 19110 typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] = 19111 typedArrayTags[dataViewTag] = typedArrayTags[dateTag] = 19112 typedArrayTags[errorTag] = typedArrayTags[funcTag] = 19113 typedArrayTags[mapTag] = typedArrayTags[numberTag] = 19114 typedArrayTags[objectTag] = typedArrayTags[regexpTag] = 19115 typedArrayTags[setTag] = typedArrayTags[stringTag] = 19116 typedArrayTags[weakMapTag] = false; 19117 19118 /** Used to identify `toStringTag` values supported by `_.clone`. */ 19119 var cloneableTags = {}; 19120 cloneableTags[argsTag] = cloneableTags[arrayTag] = 19121 cloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] = 19122 cloneableTags[boolTag] = cloneableTags[dateTag] = 19123 cloneableTags[float32Tag] = cloneableTags[float64Tag] = 19124 cloneableTags[int8Tag] = cloneableTags[int16Tag] = 19125 cloneableTags[int32Tag] = cloneableTags[mapTag] = 19126 cloneableTags[numberTag] = cloneableTags[objectTag] = 19127 cloneableTags[regexpTag] = cloneableTags[setTag] = 19128 cloneableTags[stringTag] = cloneableTags[symbolTag] = 19129 cloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] = 19130 cloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true; 19131 cloneableTags[errorTag] = cloneableTags[funcTag] = 19132 cloneableTags[weakMapTag] = false; 19133 19134 /** Used to map Latin Unicode letters to basic Latin letters. */ 19135 var deburredLetters = { 19136 // Latin-1 Supplement block. 19137 '\xc0': 'A', '\xc1': 'A', '\xc2': 'A', '\xc3': 'A', '\xc4': 'A', '\xc5': 'A', 19138 '\xe0': 'a', '\xe1': 'a', '\xe2': 'a', '\xe3': 'a', '\xe4': 'a', '\xe5': 'a', 19139 '\xc7': 'C', '\xe7': 'c', 19140 '\xd0': 'D', '\xf0': 'd', 19141 '\xc8': 'E', '\xc9': 'E', '\xca': 'E', '\xcb': 'E', 19142 '\xe8': 'e', '\xe9': 'e', '\xea': 'e', '\xeb': 'e', 19143 '\xcc': 'I', '\xcd': 'I', '\xce': 'I', '\xcf': 'I', 19144 '\xec': 'i', '\xed': 'i', '\xee': 'i', '\xef': 'i', 19145 '\xd1': 'N', '\xf1': 'n', 19146 '\xd2': 'O', '\xd3': 'O', '\xd4': 'O', '\xd5': 'O', '\xd6': 'O', '\xd8': 'O', 19147 '\xf2': 'o', '\xf3': 'o', '\xf4': 'o', '\xf5': 'o', '\xf6': 'o', '\xf8': 'o', 19148 '\xd9': 'U', '\xda': 'U', '\xdb': 'U', '\xdc': 'U', 19149 '\xf9': 'u', '\xfa': 'u', '\xfb': 'u', '\xfc': 'u', 19150 '\xdd': 'Y', '\xfd': 'y', '\xff': 'y', 19151 '\xc6': 'Ae', '\xe6': 'ae', 19152 '\xde': 'Th', '\xfe': 'th', 19153 '\xdf': 'ss', 19154 // Latin Extended-A block. 19155 '\u0100': 'A', '\u0102': 'A', '\u0104': 'A', 19156 '\u0101': 'a', '\u0103': 'a', '\u0105': 'a', 19157 '\u0106': 'C', '\u0108': 'C', '\u010a': 'C', '\u010c': 'C', 19158 '\u0107': 'c', '\u0109': 'c', '\u010b': 'c', '\u010d': 'c', 19159 '\u010e': 'D', '\u0110': 'D', '\u010f': 'd', '\u0111': 'd', 19160 '\u0112': 'E', '\u0114': 'E', '\u0116': 'E', '\u0118': 'E', '\u011a': 'E', 19161 '\u0113': 'e', '\u0115': 'e', '\u0117': 'e', '\u0119': 'e', '\u011b': 'e', 19162 '\u011c': 'G', '\u011e': 'G', '\u0120': 'G', '\u0122': 'G', 19163 '\u011d': 'g', '\u011f': 'g', '\u0121': 'g', '\u0123': 'g', 19164 '\u0124': 'H', '\u0126': 'H', '\u0125': 'h', '\u0127': 'h', 19165 '\u0128': 'I', '\u012a': 'I', '\u012c': 'I', '\u012e': 'I', '\u0130': 'I', 19166 '\u0129': 'i', '\u012b': 'i', '\u012d': 'i', '\u012f': 'i', '\u0131': 'i', 19167 '\u0134': 'J', '\u0135': 'j', 19168 '\u0136': 'K', '\u0137': 'k', '\u0138': 'k', 19169 '\u0139': 'L', '\u013b': 'L', '\u013d': 'L', '\u013f': 'L', '\u0141': 'L', 19170 '\u013a': 'l', '\u013c': 'l', '\u013e': 'l', '\u0140': 'l', '\u0142': 'l', 19171 '\u0143': 'N', '\u0145': 'N', '\u0147': 'N', '\u014a': 'N', 19172 '\u0144': 'n', '\u0146': 'n', '\u0148': 'n', '\u014b': 'n', 19173 '\u014c': 'O', '\u014e': 'O', '\u0150': 'O', 19174 '\u014d': 'o', '\u014f': 'o', '\u0151': 'o', 19175 '\u0154': 'R', '\u0156': 'R', '\u0158': 'R', 19176 '\u0155': 'r', '\u0157': 'r', '\u0159': 'r', 19177 '\u015a': 'S', '\u015c': 'S', '\u015e': 'S', '\u0160': 'S', 19178 '\u015b': 's', '\u015d': 's', '\u015f': 's', '\u0161': 's', 19179 '\u0162': 'T', '\u0164': 'T', '\u0166': 'T', 19180 '\u0163': 't', '\u0165': 't', '\u0167': 't', 19181 '\u0168': 'U', '\u016a': 'U', '\u016c': 'U', '\u016e': 'U', '\u0170': 'U', '\u0172': 'U', 19182 '\u0169': 'u', '\u016b': 'u', '\u016d': 'u', '\u016f': 'u', '\u0171': 'u', '\u0173': 'u', 19183 '\u0174': 'W', '\u0175': 'w', 19184 '\u0176': 'Y', '\u0177': 'y', '\u0178': 'Y', 19185 '\u0179': 'Z', '\u017b': 'Z', '\u017d': 'Z', 19186 '\u017a': 'z', '\u017c': 'z', '\u017e': 'z', 19187 '\u0132': 'IJ', '\u0133': 'ij', 19188 '\u0152': 'Oe', '\u0153': 'oe', 19189 '\u0149': "'n", '\u017f': 's' 19190 }; 19191 19192 /** Used to map characters to HTML entities. */ 19193 var htmlEscapes = { 19194 '&': '&', 19195 '<': '<', 19196 '>': '>', 19197 '"': '"', 19198 "'": ''' 19199 }; 19200 19201 /** Used to map HTML entities to characters. */ 19202 var htmlUnescapes = { 19203 '&': '&', 19204 '<': '<', 19205 '>': '>', 19206 '"': '"', 19207 ''': "'" 19208 }; 19209 19210 /** Used to escape characters for inclusion in compiled string literals. */ 19211 var stringEscapes = { 19212 '\\': '\\', 19213 "'": "'", 19214 '\n': 'n', 19215 '\r': 'r', 19216 '\u2028': 'u2028', 19217 '\u2029': 'u2029' 19218 }; 19219 19220 /** Built-in method references without a dependency on `root`. */ 19221 var freeParseFloat = parseFloat, 19222 freeParseInt = parseInt; 19223 19224 /** Detect free variable `global` from Node.js. */ 19225 var freeGlobal = typeof global == 'object' && global && global.Object === Object && global; 19226 19227 /** Detect free variable `self`. */ 19228 var freeSelf = typeof self == 'object' && self && self.Object === Object && self; 19229 19230 /** Used as a reference to the global object. */ 19231 var root = freeGlobal || freeSelf || Function('return this')(); 19232 19233 /** Detect free variable `exports`. */ 19234 var freeExports = true && exports && !exports.nodeType && exports; 19235 19236 /** Detect free variable `module`. */ 19237 var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module; 19238 19239 /** Detect the popular CommonJS extension `module.exports`. */ 19240 var moduleExports = freeModule && freeModule.exports === freeExports; 19241 19242 /** Detect free variable `process` from Node.js. */ 19243 var freeProcess = moduleExports && freeGlobal.process; 19244 19245 /** Used to access faster Node.js helpers. */ 19246 var nodeUtil = (function() { 19247 try { 19248 // Use `util.types` for Node.js 10+. 19249 var types = freeModule && freeModule.require && freeModule.require('util').types; 19250 19251 if (types) { 19252 return types; 19253 } 19254 19255 // Legacy `process.binding('util')` for Node.js < 10. 19256 return freeProcess && freeProcess.binding && freeProcess.binding('util'); 19257 } catch (e) {} 19258 }()); 19259 19260 /* Node.js helper references. */ 19261 var nodeIsArrayBuffer = nodeUtil && nodeUtil.isArrayBuffer, 19262 nodeIsDate = nodeUtil && nodeUtil.isDate, 19263 nodeIsMap = nodeUtil && nodeUtil.isMap, 19264 nodeIsRegExp = nodeUtil && nodeUtil.isRegExp, 19265 nodeIsSet = nodeUtil && nodeUtil.isSet, 19266 nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray; 19267 19268 /*--------------------------------------------------------------------------*/ 19269 19270 /** 19271 * A faster alternative to `Function#apply`, this function invokes `func` 19272 * with the `this` binding of `thisArg` and the arguments of `args`. 19273 * 19274 * @private 19275 * @param {Function} func The function to invoke. 19276 * @param {*} thisArg The `this` binding of `func`. 19277 * @param {Array} args The arguments to invoke `func` with. 19278 * @returns {*} Returns the result of `func`. 19279 */ 19280 function apply(func, thisArg, args) { 19281 switch (args.length) { 19282 case 0: return func.call(thisArg); 19283 case 1: return func.call(thisArg, args[0]); 19284 case 2: return func.call(thisArg, args[0], args[1]); 19285 case 3: return func.call(thisArg, args[0], args[1], args[2]); 19286 } 19287 return func.apply(thisArg, args); 19288 } 19289 19290 /** 19291 * A specialized version of `baseAggregator` for arrays. 19292 * 19293 * @private 19294 * @param {Array} [array] The array to iterate over. 19295 * @param {Function} setter The function to set `accumulator` values. 19296 * @param {Function} iteratee The iteratee to transform keys. 19297 * @param {Object} accumulator The initial aggregated object. 19298 * @returns {Function} Returns `accumulator`. 19299 */ 19300 function arrayAggregator(array, setter, iteratee, accumulator) { 19301 var index = -1, 19302 length = array == null ? 0 : array.length; 19303 19304 while (++index < length) { 19305 var value = array[index]; 19306 setter(accumulator, value, iteratee(value), array); 19307 } 19308 return accumulator; 19309 } 19310 19311 /** 19312 * A specialized version of `_.forEach` for arrays without support for 19313 * iteratee shorthands. 19314 * 19315 * @private 19316 * @param {Array} [array] The array to iterate over. 19317 * @param {Function} iteratee The function invoked per iteration. 19318 * @returns {Array} Returns `array`. 19319 */ 19320 function arrayEach(array, iteratee) { 19321 var index = -1, 19322 length = array == null ? 0 : array.length; 19323 19324 while (++index < length) { 19325 if (iteratee(array[index], index, array) === false) { 19326 break; 19327 } 19328 } 19329 return array; 19330 } 19331 19332 /** 19333 * A specialized version of `_.forEachRight` for arrays without support for 19334 * iteratee shorthands. 19335 * 19336 * @private 19337 * @param {Array} [array] The array to iterate over. 19338 * @param {Function} iteratee The function invoked per iteration. 19339 * @returns {Array} Returns `array`. 19340 */ 19341 function arrayEachRight(array, iteratee) { 19342 var length = array == null ? 0 : array.length; 19343 19344 while (length--) { 19345 if (iteratee(array[length], length, array) === false) { 19346 break; 19347 } 19348 } 19349 return array; 19350 } 19351 19352 /** 19353 * A specialized version of `_.every` for arrays without support for 19354 * iteratee shorthands. 19355 * 19356 * @private 19357 * @param {Array} [array] The array to iterate over. 19358 * @param {Function} predicate The function invoked per iteration. 19359 * @returns {boolean} Returns `true` if all elements pass the predicate check, 19360 * else `false`. 19361 */ 19362 function arrayEvery(array, predicate) { 19363 var index = -1, 19364 length = array == null ? 0 : array.length; 19365 19366 while (++index < length) { 19367 if (!predicate(array[index], index, array)) { 19368 return false; 19369 } 19370 } 19371 return true; 19372 } 19373 19374 /** 19375 * A specialized version of `_.filter` for arrays without support for 19376 * iteratee shorthands. 19377 * 19378 * @private 19379 * @param {Array} [array] The array to iterate over. 19380 * @param {Function} predicate The function invoked per iteration. 19381 * @returns {Array} Returns the new filtered array. 19382 */ 19383 function arrayFilter(array, predicate) { 19384 var index = -1, 19385 length = array == null ? 0 : array.length, 19386 resIndex = 0, 19387 result = []; 19388 19389 while (++index < length) { 19390 var value = array[index]; 19391 if (predicate(value, index, array)) { 19392 result[resIndex++] = value; 19393 } 19394 } 19395 return result; 19396 } 19397 19398 /** 19399 * A specialized version of `_.includes` for arrays without support for 19400 * specifying an index to search from. 19401 * 19402 * @private 19403 * @param {Array} [array] The array to inspect. 19404 * @param {*} target The value to search for. 19405 * @returns {boolean} Returns `true` if `target` is found, else `false`. 19406 */ 19407 function arrayIncludes(array, value) { 19408 var length = array == null ? 0 : array.length; 19409 return !!length && baseIndexOf(array, value, 0) > -1; 19410 } 19411 19412 /** 19413 * This function is like `arrayIncludes` except that it accepts a comparator. 19414 * 19415 * @private 19416 * @param {Array} [array] The array to inspect. 19417 * @param {*} target The value to search for. 19418 * @param {Function} comparator The comparator invoked per element. 19419 * @returns {boolean} Returns `true` if `target` is found, else `false`. 19420 */ 19421 function arrayIncludesWith(array, value, comparator) { 19422 var index = -1, 19423 length = array == null ? 0 : array.length; 19424 19425 while (++index < length) { 19426 if (comparator(value, array[index])) { 19427 return true; 19428 } 19429 } 19430 return false; 19431 } 19432 19433 /** 19434 * A specialized version of `_.map` for arrays without support for iteratee 19435 * shorthands. 19436 * 19437 * @private 19438 * @param {Array} [array] The array to iterate over. 19439 * @param {Function} iteratee The function invoked per iteration. 19440 * @returns {Array} Returns the new mapped array. 19441 */ 19442 function arrayMap(array, iteratee) { 19443 var index = -1, 19444 length = array == null ? 0 : array.length, 19445 result = Array(length); 19446 19447 while (++index < length) { 19448 result[index] = iteratee(array[index], index, array); 19449 } 19450 return result; 19451 } 19452 19453 /** 19454 * Appends the elements of `values` to `array`. 19455 * 19456 * @private 19457 * @param {Array} array The array to modify. 19458 * @param {Array} values The values to append. 19459 * @returns {Array} Returns `array`. 19460 */ 19461 function arrayPush(array, values) { 19462 var index = -1, 19463 length = values.length, 19464 offset = array.length; 19465 19466 while (++index < length) { 19467 array[offset + index] = values[index]; 19468 } 19469 return array; 19470 } 19471 19472 /** 19473 * A specialized version of `_.reduce` for arrays without support for 19474 * iteratee shorthands. 19475 * 19476 * @private 19477 * @param {Array} [array] The array to iterate over. 19478 * @param {Function} iteratee The function invoked per iteration. 19479 * @param {*} [accumulator] The initial value. 19480 * @param {boolean} [initAccum] Specify using the first element of `array` as 19481 * the initial value. 19482 * @returns {*} Returns the accumulated value. 19483 */ 19484 function arrayReduce(array, iteratee, accumulator, initAccum) { 19485 var index = -1, 19486 length = array == null ? 0 : array.length; 19487 19488 if (initAccum && length) { 19489 accumulator = array[++index]; 19490 } 19491 while (++index < length) { 19492 accumulator = iteratee(accumulator, array[index], index, array); 19493 } 19494 return accumulator; 19495 } 19496 19497 /** 19498 * A specialized version of `_.reduceRight` for arrays without support for 19499 * iteratee shorthands. 19500 * 19501 * @private 19502 * @param {Array} [array] The array to iterate over. 19503 * @param {Function} iteratee The function invoked per iteration. 19504 * @param {*} [accumulator] The initial value. 19505 * @param {boolean} [initAccum] Specify using the last element of `array` as 19506 * the initial value. 19507 * @returns {*} Returns the accumulated value. 19508 */ 19509 function arrayReduceRight(array, iteratee, accumulator, initAccum) { 19510 var length = array == null ? 0 : array.length; 19511 if (initAccum && length) { 19512 accumulator = array[--length]; 19513 } 19514 while (length--) { 19515 accumulator = iteratee(accumulator, array[length], length, array); 19516 } 19517 return accumulator; 19518 } 19519 19520 /** 19521 * A specialized version of `_.some` for arrays without support for iteratee 19522 * shorthands. 19523 * 19524 * @private 19525 * @param {Array} [array] The array to iterate over. 19526 * @param {Function} predicate The function invoked per iteration. 19527 * @returns {boolean} Returns `true` if any element passes the predicate check, 19528 * else `false`. 19529 */ 19530 function arraySome(array, predicate) { 19531 var index = -1, 19532 length = array == null ? 0 : array.length; 19533 19534 while (++index < length) { 19535 if (predicate(array[index], index, array)) { 19536 return true; 19537 } 19538 } 19539 return false; 19540 } 19541 19542 /** 19543 * Gets the size of an ASCII `string`. 19544 * 19545 * @private 19546 * @param {string} string The string inspect. 19547 * @returns {number} Returns the string size. 19548 */ 19549 var asciiSize = baseProperty('length'); 19550 19551 /** 19552 * Converts an ASCII `string` to an array. 19553 * 19554 * @private 19555 * @param {string} string The string to convert. 19556 * @returns {Array} Returns the converted array. 19557 */ 19558 function asciiToArray(string) { 19559 return string.split(''); 19560 } 19561 19562 /** 19563 * Splits an ASCII `string` into an array of its words. 19564 * 19565 * @private 19566 * @param {string} The string to inspect. 19567 * @returns {Array} Returns the words of `string`. 19568 */ 19569 function asciiWords(string) { 19570 return string.match(reAsciiWord) || []; 19571 } 19572 19573 /** 19574 * The base implementation of methods like `_.findKey` and `_.findLastKey`, 19575 * without support for iteratee shorthands, which iterates over `collection` 19576 * using `eachFunc`. 19577 * 19578 * @private 19579 * @param {Array|Object} collection The collection to inspect. 19580 * @param {Function} predicate The function invoked per iteration. 19581 * @param {Function} eachFunc The function to iterate over `collection`. 19582 * @returns {*} Returns the found element or its key, else `undefined`. 19583 */ 19584 function baseFindKey(collection, predicate, eachFunc) { 19585 var result; 19586 eachFunc(collection, function(value, key, collection) { 19587 if (predicate(value, key, collection)) { 19588 result = key; 19589 return false; 19590 } 19591 }); 19592 return result; 19593 } 19594 19595 /** 19596 * The base implementation of `_.findIndex` and `_.findLastIndex` without 19597 * support for iteratee shorthands. 19598 * 19599 * @private 19600 * @param {Array} array The array to inspect. 19601 * @param {Function} predicate The function invoked per iteration. 19602 * @param {number} fromIndex The index to search from. 19603 * @param {boolean} [fromRight] Specify iterating from right to left. 19604 * @returns {number} Returns the index of the matched value, else `-1`. 19605 */ 19606 function baseFindIndex(array, predicate, fromIndex, fromRight) { 19607 var length = array.length, 19608 index = fromIndex + (fromRight ? 1 : -1); 19609 19610 while ((fromRight ? index-- : ++index < length)) { 19611 if (predicate(array[index], index, array)) { 19612 return index; 19613 } 19614 } 19615 return -1; 19616 } 19617 19618 /** 19619 * The base implementation of `_.indexOf` without `fromIndex` bounds checks. 19620 * 19621 * @private 19622 * @param {Array} array The array to inspect. 19623 * @param {*} value The value to search for. 19624 * @param {number} fromIndex The index to search from. 19625 * @returns {number} Returns the index of the matched value, else `-1`. 19626 */ 19627 function baseIndexOf(array, value, fromIndex) { 19628 return value === value 19629 ? strictIndexOf(array, value, fromIndex) 19630 : baseFindIndex(array, baseIsNaN, fromIndex); 19631 } 19632 19633 /** 19634 * This function is like `baseIndexOf` except that it accepts a comparator. 19635 * 19636 * @private 19637 * @param {Array} array The array to inspect. 19638 * @param {*} value The value to search for. 19639 * @param {number} fromIndex The index to search from. 19640 * @param {Function} comparator The comparator invoked per element. 19641 * @returns {number} Returns the index of the matched value, else `-1`. 19642 */ 19643 function baseIndexOfWith(array, value, fromIndex, comparator) { 19644 var index = fromIndex - 1, 19645 length = array.length; 19646 19647 while (++index < length) { 19648 if (comparator(array[index], value)) { 19649 return index; 19650 } 19651 } 19652 return -1; 19653 } 19654 19655 /** 19656 * The base implementation of `_.isNaN` without support for number objects. 19657 * 19658 * @private 19659 * @param {*} value The value to check. 19660 * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`. 19661 */ 19662 function baseIsNaN(value) { 19663 return value !== value; 19664 } 19665 19666 /** 19667 * The base implementation of `_.mean` and `_.meanBy` without support for 19668 * iteratee shorthands. 19669 * 19670 * @private 19671 * @param {Array} array The array to iterate over. 19672 * @param {Function} iteratee The function invoked per iteration. 19673 * @returns {number} Returns the mean. 19674 */ 19675 function baseMean(array, iteratee) { 19676 var length = array == null ? 0 : array.length; 19677 return length ? (baseSum(array, iteratee) / length) : NAN; 19678 } 19679 19680 /** 19681 * The base implementation of `_.property` without support for deep paths. 19682 * 19683 * @private 19684 * @param {string} key The key of the property to get. 19685 * @returns {Function} Returns the new accessor function. 19686 */ 19687 function baseProperty(key) { 19688 return function(object) { 19689 return object == null ? undefined : object[key]; 19690 }; 19691 } 19692 19693 /** 19694 * The base implementation of `_.propertyOf` without support for deep paths. 19695 * 19696 * @private 19697 * @param {Object} object The object to query. 19698 * @returns {Function} Returns the new accessor function. 19699 */ 19700 function basePropertyOf(object) { 19701 return function(key) { 19702 return object == null ? undefined : object[key]; 19703 }; 19704 } 19705 19706 /** 19707 * The base implementation of `_.reduce` and `_.reduceRight`, without support 19708 * for iteratee shorthands, which iterates over `collection` using `eachFunc`. 19709 * 19710 * @private 19711 * @param {Array|Object} collection The collection to iterate over. 19712 * @param {Function} iteratee The function invoked per iteration. 19713 * @param {*} accumulator The initial value. 19714 * @param {boolean} initAccum Specify using the first or last element of 19715 * `collection` as the initial value. 19716 * @param {Function} eachFunc The function to iterate over `collection`. 19717 * @returns {*} Returns the accumulated value. 19718 */ 19719 function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) { 19720 eachFunc(collection, function(value, index, collection) { 19721 accumulator = initAccum 19722 ? (initAccum = false, value) 19723 : iteratee(accumulator, value, index, collection); 19724 }); 19725 return accumulator; 19726 } 19727 19728 /** 19729 * The base implementation of `_.sortBy` which uses `comparer` to define the 19730 * sort order of `array` and replaces criteria objects with their corresponding 19731 * values. 19732 * 19733 * @private 19734 * @param {Array} array The array to sort. 19735 * @param {Function} comparer The function to define sort order. 19736 * @returns {Array} Returns `array`. 19737 */ 19738 function baseSortBy(array, comparer) { 19739 var length = array.length; 19740 19741 array.sort(comparer); 19742 while (length--) { 19743 array[length] = array[length].value; 19744 } 19745 return array; 19746 } 19747 19748 /** 19749 * The base implementation of `_.sum` and `_.sumBy` without support for 19750 * iteratee shorthands. 19751 * 19752 * @private 19753 * @param {Array} array The array to iterate over. 19754 * @param {Function} iteratee The function invoked per iteration. 19755 * @returns {number} Returns the sum. 19756 */ 19757 function baseSum(array, iteratee) { 19758 var result, 19759 index = -1, 19760 length = array.length; 19761 19762 while (++index < length) { 19763 var current = iteratee(array[index]); 19764 if (current !== undefined) { 19765 result = result === undefined ? current : (result + current); 19766 } 19767 } 19768 return result; 19769 } 19770 19771 /** 19772 * The base implementation of `_.times` without support for iteratee shorthands 19773 * or max array length checks. 19774 * 19775 * @private 19776 * @param {number} n The number of times to invoke `iteratee`. 19777 * @param {Function} iteratee The function invoked per iteration. 19778 * @returns {Array} Returns the array of results. 19779 */ 19780 function baseTimes(n, iteratee) { 19781 var index = -1, 19782 result = Array(n); 19783 19784 while (++index < n) { 19785 result[index] = iteratee(index); 19786 } 19787 return result; 19788 } 19789 19790 /** 19791 * The base implementation of `_.toPairs` and `_.toPairsIn` which creates an array 19792 * of key-value pairs for `object` corresponding to the property names of `props`. 19793 * 19794 * @private 19795 * @param {Object} object The object to query. 19796 * @param {Array} props The property names to get values for. 19797 * @returns {Object} Returns the key-value pairs. 19798 */ 19799 function baseToPairs(object, props) { 19800 return arrayMap(props, function(key) { 19801 return [key, object[key]]; 19802 }); 19803 } 19804 19805 /** 19806 * The base implementation of `_.trim`. 19807 * 19808 * @private 19809 * @param {string} string The string to trim. 19810 * @returns {string} Returns the trimmed string. 19811 */ 19812 function baseTrim(string) { 19813 return string 19814 ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '') 19815 : string; 19816 } 19817 19818 /** 19819 * The base implementation of `_.unary` without support for storing metadata. 19820 * 19821 * @private 19822 * @param {Function} func The function to cap arguments for. 19823 * @returns {Function} Returns the new capped function. 19824 */ 19825 function baseUnary(func) { 19826 return function(value) { 19827 return func(value); 19828 }; 19829 } 19830 19831 /** 19832 * The base implementation of `_.values` and `_.valuesIn` which creates an 19833 * array of `object` property values corresponding to the property names 19834 * of `props`. 19835 * 19836 * @private 19837 * @param {Object} object The object to query. 19838 * @param {Array} props The property names to get values for. 19839 * @returns {Object} Returns the array of property values. 19840 */ 19841 function baseValues(object, props) { 19842 return arrayMap(props, function(key) { 19843 return object[key]; 19844 }); 19845 } 19846 19847 /** 19848 * Checks if a `cache` value for `key` exists. 19849 * 19850 * @private 19851 * @param {Object} cache The cache to query. 19852 * @param {string} key The key of the entry to check. 19853 * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. 19854 */ 19855 function cacheHas(cache, key) { 19856 return cache.has(key); 19857 } 19858 19859 /** 19860 * Used by `_.trim` and `_.trimStart` to get the index of the first string symbol 19861 * that is not found in the character symbols. 19862 * 19863 * @private 19864 * @param {Array} strSymbols The string symbols to inspect. 19865 * @param {Array} chrSymbols The character symbols to find. 19866 * @returns {number} Returns the index of the first unmatched string symbol. 19867 */ 19868 function charsStartIndex(strSymbols, chrSymbols) { 19869 var index = -1, 19870 length = strSymbols.length; 19871 19872 while (++index < length && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {} 19873 return index; 19874 } 19875 19876 /** 19877 * Used by `_.trim` and `_.trimEnd` to get the index of the last string symbol 19878 * that is not found in the character symbols. 19879 * 19880 * @private 19881 * @param {Array} strSymbols The string symbols to inspect. 19882 * @param {Array} chrSymbols The character symbols to find. 19883 * @returns {number} Returns the index of the last unmatched string symbol. 19884 */ 19885 function charsEndIndex(strSymbols, chrSymbols) { 19886 var index = strSymbols.length; 19887 19888 while (index-- && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {} 19889 return index; 19890 } 19891 19892 /** 19893 * Gets the number of `placeholder` occurrences in `array`. 19894 * 19895 * @private 19896 * @param {Array} array The array to inspect. 19897 * @param {*} placeholder The placeholder to search for. 19898 * @returns {number} Returns the placeholder count. 19899 */ 19900 function countHolders(array, placeholder) { 19901 var length = array.length, 19902 result = 0; 19903 19904 while (length--) { 19905 if (array[length] === placeholder) { 19906 ++result; 19907 } 19908 } 19909 return result; 19910 } 19911 19912 /** 19913 * Used by `_.deburr` to convert Latin-1 Supplement and Latin Extended-A 19914 * letters to basic Latin letters. 19915 * 19916 * @private 19917 * @param {string} letter The matched letter to deburr. 19918 * @returns {string} Returns the deburred letter. 19919 */ 19920 var deburrLetter = basePropertyOf(deburredLetters); 19921 19922 /** 19923 * Used by `_.escape` to convert characters to HTML entities. 19924 * 19925 * @private 19926 * @param {string} chr The matched character to escape. 19927 * @returns {string} Returns the escaped character. 19928 */ 19929 var escapeHtmlChar = basePropertyOf(htmlEscapes); 19930 19931 /** 19932 * Used by `_.template` to escape characters for inclusion in compiled string literals. 19933 * 19934 * @private 19935 * @param {string} chr The matched character to escape. 19936 * @returns {string} Returns the escaped character. 19937 */ 19938 function escapeStringChar(chr) { 19939 return '\\' + stringEscapes[chr]; 19940 } 19941 19942 /** 19943 * Gets the value at `key` of `object`. 19944 * 19945 * @private 19946 * @param {Object} [object] The object to query. 19947 * @param {string} key The key of the property to get. 19948 * @returns {*} Returns the property value. 19949 */ 19950 function getValue(object, key) { 19951 return object == null ? undefined : object[key]; 19952 } 19953 19954 /** 19955 * Checks if `string` contains Unicode symbols. 19956 * 19957 * @private 19958 * @param {string} string The string to inspect. 19959 * @returns {boolean} Returns `true` if a symbol is found, else `false`. 19960 */ 19961 function hasUnicode(string) { 19962 return reHasUnicode.test(string); 19963 } 19964 19965 /** 19966 * Checks if `string` contains a word composed of Unicode symbols. 19967 * 19968 * @private 19969 * @param {string} string The string to inspect. 19970 * @returns {boolean} Returns `true` if a word is found, else `false`. 19971 */ 19972 function hasUnicodeWord(string) { 19973 return reHasUnicodeWord.test(string); 19974 } 19975 19976 /** 19977 * Converts `iterator` to an array. 19978 * 19979 * @private 19980 * @param {Object} iterator The iterator to convert. 19981 * @returns {Array} Returns the converted array. 19982 */ 19983 function iteratorToArray(iterator) { 19984 var data, 19985 result = []; 19986 19987 while (!(data = iterator.next()).done) { 19988 result.push(data.value); 19989 } 19990 return result; 19991 } 19992 19993 /** 19994 * Converts `map` to its key-value pairs. 19995 * 19996 * @private 19997 * @param {Object} map The map to convert. 19998 * @returns {Array} Returns the key-value pairs. 19999 */ 20000 function mapToArray(map) { 20001 var index = -1, 20002 result = Array(map.size); 20003 20004 map.forEach(function(value, key) { 20005 result[++index] = [key, value]; 20006 }); 20007 return result; 20008 } 20009 20010 /** 20011 * Creates a unary function that invokes `func` with its argument transformed. 20012 * 20013 * @private 20014 * @param {Function} func The function to wrap. 20015 * @param {Function} transform The argument transform. 20016 * @returns {Function} Returns the new function. 20017 */ 20018 function overArg(func, transform) { 20019 return function(arg) { 20020 return func(transform(arg)); 20021 }; 20022 } 20023 20024 /** 20025 * Replaces all `placeholder` elements in `array` with an internal placeholder 20026 * and returns an array of their indexes. 20027 * 20028 * @private 20029 * @param {Array} array The array to modify. 20030 * @param {*} placeholder The placeholder to replace. 20031 * @returns {Array} Returns the new array of placeholder indexes. 20032 */ 20033 function replaceHolders(array, placeholder) { 20034 var index = -1, 20035 length = array.length, 20036 resIndex = 0, 20037 result = []; 20038 20039 while (++index < length) { 20040 var value = array[index]; 20041 if (value === placeholder || value === PLACEHOLDER) { 20042 array[index] = PLACEHOLDER; 20043 result[resIndex++] = index; 20044 } 20045 } 20046 return result; 20047 } 20048 20049 /** 20050 * Converts `set` to an array of its values. 20051 * 20052 * @private 20053 * @param {Object} set The set to convert. 20054 * @returns {Array} Returns the values. 20055 */ 20056 function setToArray(set) { 20057 var index = -1, 20058 result = Array(set.size); 20059 20060 set.forEach(function(value) { 20061 result[++index] = value; 20062 }); 20063 return result; 20064 } 20065 20066 /** 20067 * Converts `set` to its value-value pairs. 20068 * 20069 * @private 20070 * @param {Object} set The set to convert. 20071 * @returns {Array} Returns the value-value pairs. 20072 */ 20073 function setToPairs(set) { 20074 var index = -1, 20075 result = Array(set.size); 20076 20077 set.forEach(function(value) { 20078 result[++index] = [value, value]; 20079 }); 20080 return result; 20081 } 20082 20083 /** 20084 * A specialized version of `_.indexOf` which performs strict equality 20085 * comparisons of values, i.e. `===`. 20086 * 20087 * @private 20088 * @param {Array} array The array to inspect. 20089 * @param {*} value The value to search for. 20090 * @param {number} fromIndex The index to search from. 20091 * @returns {number} Returns the index of the matched value, else `-1`. 20092 */ 20093 function strictIndexOf(array, value, fromIndex) { 20094 var index = fromIndex - 1, 20095 length = array.length; 20096 20097 while (++index < length) { 20098 if (array[index] === value) { 20099 return index; 20100 } 20101 } 20102 return -1; 20103 } 20104 20105 /** 20106 * A specialized version of `_.lastIndexOf` which performs strict equality 20107 * comparisons of values, i.e. `===`. 20108 * 20109 * @private 20110 * @param {Array} array The array to inspect. 20111 * @param {*} value The value to search for. 20112 * @param {number} fromIndex The index to search from. 20113 * @returns {number} Returns the index of the matched value, else `-1`. 20114 */ 20115 function strictLastIndexOf(array, value, fromIndex) { 20116 var index = fromIndex + 1; 20117 while (index--) { 20118 if (array[index] === value) { 20119 return index; 20120 } 20121 } 20122 return index; 20123 } 20124 20125 /** 20126 * Gets the number of symbols in `string`. 20127 * 20128 * @private 20129 * @param {string} string The string to inspect. 20130 * @returns {number} Returns the string size. 20131 */ 20132 function stringSize(string) { 20133 return hasUnicode(string) 20134 ? unicodeSize(string) 20135 : asciiSize(string); 20136 } 20137 20138 /** 20139 * Converts `string` to an array. 20140 * 20141 * @private 20142 * @param {string} string The string to convert. 20143 * @returns {Array} Returns the converted array. 20144 */ 20145 function stringToArray(string) { 20146 return hasUnicode(string) 20147 ? unicodeToArray(string) 20148 : asciiToArray(string); 20149 } 20150 20151 /** 20152 * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace 20153 * character of `string`. 20154 * 20155 * @private 20156 * @param {string} string The string to inspect. 20157 * @returns {number} Returns the index of the last non-whitespace character. 20158 */ 20159 function trimmedEndIndex(string) { 20160 var index = string.length; 20161 20162 while (index-- && reWhitespace.test(string.charAt(index))) {} 20163 return index; 20164 } 20165 20166 /** 20167 * Used by `_.unescape` to convert HTML entities to characters. 20168 * 20169 * @private 20170 * @param {string} chr The matched character to unescape. 20171 * @returns {string} Returns the unescaped character. 20172 */ 20173 var unescapeHtmlChar = basePropertyOf(htmlUnescapes); 20174 20175 /** 20176 * Gets the size of a Unicode `string`. 20177 * 20178 * @private 20179 * @param {string} string The string inspect. 20180 * @returns {number} Returns the string size. 20181 */ 20182 function unicodeSize(string) { 20183 var result = reUnicode.lastIndex = 0; 20184 while (reUnicode.test(string)) { 20185 ++result; 20186 } 20187 return result; 20188 } 20189 20190 /** 20191 * Converts a Unicode `string` to an array. 20192 * 20193 * @private 20194 * @param {string} string The string to convert. 20195 * @returns {Array} Returns the converted array. 20196 */ 20197 function unicodeToArray(string) { 20198 return string.match(reUnicode) || []; 20199 } 20200 20201 /** 20202 * Splits a Unicode `string` into an array of its words. 20203 * 20204 * @private 20205 * @param {string} The string to inspect. 20206 * @returns {Array} Returns the words of `string`. 20207 */ 20208 function unicodeWords(string) { 20209 return string.match(reUnicodeWord) || []; 20210 } 20211 20212 /*--------------------------------------------------------------------------*/ 20213 20214 /** 20215 * Create a new pristine `lodash` function using the `context` object. 20216 * 20217 * @static 20218 * @memberOf _ 20219 * @since 1.1.0 20220 * @category Util 20221 * @param {Object} [context=root] The context object. 20222 * @returns {Function} Returns a new `lodash` function. 20223 * @example 20224 * 20225 * _.mixin({ 'foo': _.constant('foo') }); 20226 * 20227 * var lodash = _.runInContext(); 20228 * lodash.mixin({ 'bar': lodash.constant('bar') }); 20229 * 20230 * _.isFunction(_.foo); 20231 * // => true 20232 * _.isFunction(_.bar); 20233 * // => false 20234 * 20235 * lodash.isFunction(lodash.foo); 20236 * // => false 20237 * lodash.isFunction(lodash.bar); 20238 * // => true 20239 * 20240 * // Create a suped-up `defer` in Node.js. 20241 * var defer = _.runInContext({ 'setTimeout': setImmediate }).defer; 20242 */ 20243 var runInContext = (function runInContext(context) { 20244 context = context == null ? root : _.defaults(root.Object(), context, _.pick(root, contextProps)); 20245 20246 /** Built-in constructor references. */ 20247 var Array = context.Array, 20248 Date = context.Date, 20249 Error = context.Error, 20250 Function = context.Function, 20251 Math = context.Math, 20252 Object = context.Object, 20253 RegExp = context.RegExp, 20254 String = context.String, 20255 TypeError = context.TypeError; 20256 20257 /** Used for built-in method references. */ 20258 var arrayProto = Array.prototype, 20259 funcProto = Function.prototype, 20260 objectProto = Object.prototype; 20261 20262 /** Used to detect overreaching core-js shims. */ 20263 var coreJsData = context['__core-js_shared__']; 20264 20265 /** Used to resolve the decompiled source of functions. */ 20266 var funcToString = funcProto.toString; 20267 20268 /** Used to check objects for own properties. */ 20269 var hasOwnProperty = objectProto.hasOwnProperty; 20270 20271 /** Used to generate unique IDs. */ 20272 var idCounter = 0; 20273 20274 /** Used to detect methods masquerading as native. */ 20275 var maskSrcKey = (function() { 20276 var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || ''); 20277 return uid ? ('Symbol(src)_1.' + uid) : ''; 20278 }()); 20279 20280 /** 20281 * Used to resolve the 20282 * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) 20283 * of values. 20284 */ 20285 var nativeObjectToString = objectProto.toString; 20286 20287 /** Used to infer the `Object` constructor. */ 20288 var objectCtorString = funcToString.call(Object); 20289 20290 /** Used to restore the original `_` reference in `_.noConflict`. */ 20291 var oldDash = root._; 20292 20293 /** Used to detect if a method is native. */ 20294 var reIsNative = RegExp('^' + 20295 funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\$&') 20296 .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$' 20297 ); 20298 20299 /** Built-in value references. */ 20300 var Buffer = moduleExports ? context.Buffer : undefined, 20301 Symbol = context.Symbol, 20302 Uint8Array = context.Uint8Array, 20303 allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined, 20304 getPrototype = overArg(Object.getPrototypeOf, Object), 20305 objectCreate = Object.create, 20306 propertyIsEnumerable = objectProto.propertyIsEnumerable, 20307 splice = arrayProto.splice, 20308 spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined, 20309 symIterator = Symbol ? Symbol.iterator : undefined, 20310 symToStringTag = Symbol ? Symbol.toStringTag : undefined; 20311 20312 var defineProperty = (function() { 20313 try { 20314 var func = getNative(Object, 'defineProperty'); 20315 func({}, '', {}); 20316 return func; 20317 } catch (e) {} 20318 }()); 20319 20320 /** Mocked built-ins. */ 20321 var ctxClearTimeout = context.clearTimeout !== root.clearTimeout && context.clearTimeout, 20322 ctxNow = Date && Date.now !== root.Date.now && Date.now, 20323 ctxSetTimeout = context.setTimeout !== root.setTimeout && context.setTimeout; 20324 20325 /* Built-in method references for those with the same name as other `lodash` methods. */ 20326 var nativeCeil = Math.ceil, 20327 nativeFloor = Math.floor, 20328 nativeGetSymbols = Object.getOwnPropertySymbols, 20329 nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined, 20330 nativeIsFinite = context.isFinite, 20331 nativeJoin = arrayProto.join, 20332 nativeKeys = overArg(Object.keys, Object), 20333 nativeMax = Math.max, 20334 nativeMin = Math.min, 20335 nativeNow = Date.now, 20336 nativeParseInt = context.parseInt, 20337 nativeRandom = Math.random, 20338 nativeReverse = arrayProto.reverse; 20339 20340 /* Built-in method references that are verified to be native. */ 20341 var DataView = getNative(context, 'DataView'), 20342 Map = getNative(context, 'Map'), 20343 Promise = getNative(context, 'Promise'), 20344 Set = getNative(context, 'Set'), 20345 WeakMap = getNative(context, 'WeakMap'), 20346 nativeCreate = getNative(Object, 'create'); 20347 20348 /** Used to store function metadata. */ 20349 var metaMap = WeakMap && new WeakMap; 20350 20351 /** Used to lookup unminified function names. */ 20352 var realNames = {}; 20353 20354 /** Used to detect maps, sets, and weakmaps. */ 20355 var dataViewCtorString = toSource(DataView), 20356 mapCtorString = toSource(Map), 20357 promiseCtorString = toSource(Promise), 20358 setCtorString = toSource(Set), 20359 weakMapCtorString = toSource(WeakMap); 20360 20361 /** Used to convert symbols to primitives and strings. */ 20362 var symbolProto = Symbol ? Symbol.prototype : undefined, 20363 symbolValueOf = symbolProto ? symbolProto.valueOf : undefined, 20364 symbolToString = symbolProto ? symbolProto.toString : undefined; 20365 20366 /*------------------------------------------------------------------------*/ 20367 20368 /** 20369 * Creates a `lodash` object which wraps `value` to enable implicit method 20370 * chain sequences. Methods that operate on and return arrays, collections, 20371 * and functions can be chained together. Methods that retrieve a single value 20372 * or may return a primitive value will automatically end the chain sequence 20373 * and return the unwrapped value. Otherwise, the value must be unwrapped 20374 * with `_#value`. 20375 * 20376 * Explicit chain sequences, which must be unwrapped with `_#value`, may be 20377 * enabled using `_.chain`. 20378 * 20379 * The execution of chained methods is lazy, that is, it's deferred until 20380 * `_#value` is implicitly or explicitly called. 20381 * 20382 * Lazy evaluation allows several methods to support shortcut fusion. 20383 * Shortcut fusion is an optimization to merge iteratee calls; this avoids 20384 * the creation of intermediate arrays and can greatly reduce the number of 20385 * iteratee executions. Sections of a chain sequence qualify for shortcut 20386 * fusion if the section is applied to an array and iteratees accept only 20387 * one argument. The heuristic for whether a section qualifies for shortcut 20388 * fusion is subject to change. 20389 * 20390 * Chaining is supported in custom builds as long as the `_#value` method is 20391 * directly or indirectly included in the build. 20392 * 20393 * In addition to lodash methods, wrappers have `Array` and `String` methods. 20394 * 20395 * The wrapper `Array` methods are: 20396 * `concat`, `join`, `pop`, `push`, `shift`, `sort`, `splice`, and `unshift` 20397 * 20398 * The wrapper `String` methods are: 20399 * `replace` and `split` 20400 * 20401 * The wrapper methods that support shortcut fusion are: 20402 * `at`, `compact`, `drop`, `dropRight`, `dropWhile`, `filter`, `find`, 20403 * `findLast`, `head`, `initial`, `last`, `map`, `reject`, `reverse`, `slice`, 20404 * `tail`, `take`, `takeRight`, `takeRightWhile`, `takeWhile`, and `toArray` 20405 * 20406 * The chainable wrapper methods are: 20407 * `after`, `ary`, `assign`, `assignIn`, `assignInWith`, `assignWith`, `at`, 20408 * `before`, `bind`, `bindAll`, `bindKey`, `castArray`, `chain`, `chunk`, 20409 * `commit`, `compact`, `concat`, `conforms`, `constant`, `countBy`, `create`, 20410 * `curry`, `debounce`, `defaults`, `defaultsDeep`, `defer`, `delay`, 20411 * `difference`, `differenceBy`, `differenceWith`, `drop`, `dropRight`, 20412 * `dropRightWhile`, `dropWhile`, `extend`, `extendWith`, `fill`, `filter`, 20413 * `flatMap`, `flatMapDeep`, `flatMapDepth`, `flatten`, `flattenDeep`, 20414 * `flattenDepth`, `flip`, `flow`, `flowRight`, `fromPairs`, `functions`, 20415 * `functionsIn`, `groupBy`, `initial`, `intersection`, `intersectionBy`, 20416 * `intersectionWith`, `invert`, `invertBy`, `invokeMap`, `iteratee`, `keyBy`, 20417 * `keys`, `keysIn`, `map`, `mapKeys`, `mapValues`, `matches`, `matchesProperty`, 20418 * `memoize`, `merge`, `mergeWith`, `method`, `methodOf`, `mixin`, `negate`, 20419 * `nthArg`, `omit`, `omitBy`, `once`, `orderBy`, `over`, `overArgs`, 20420 * `overEvery`, `overSome`, `partial`, `partialRight`, `partition`, `pick`, 20421 * `pickBy`, `plant`, `property`, `propertyOf`, `pull`, `pullAll`, `pullAllBy`, 20422 * `pullAllWith`, `pullAt`, `push`, `range`, `rangeRight`, `rearg`, `reject`, 20423 * `remove`, `rest`, `reverse`, `sampleSize`, `set`, `setWith`, `shuffle`, 20424 * `slice`, `sort`, `sortBy`, `splice`, `spread`, `tail`, `take`, `takeRight`, 20425 * `takeRightWhile`, `takeWhile`, `tap`, `throttle`, `thru`, `toArray`, 20426 * `toPairs`, `toPairsIn`, `toPath`, `toPlainObject`, `transform`, `unary`, 20427 * `union`, `unionBy`, `unionWith`, `uniq`, `uniqBy`, `uniqWith`, `unset`, 20428 * `unshift`, `unzip`, `unzipWith`, `update`, `updateWith`, `values`, 20429 * `valuesIn`, `without`, `wrap`, `xor`, `xorBy`, `xorWith`, `zip`, 20430 * `zipObject`, `zipObjectDeep`, and `zipWith` 20431 * 20432 * The wrapper methods that are **not** chainable by default are: 20433 * `add`, `attempt`, `camelCase`, `capitalize`, `ceil`, `clamp`, `clone`, 20434 * `cloneDeep`, `cloneDeepWith`, `cloneWith`, `conformsTo`, `deburr`, 20435 * `defaultTo`, `divide`, `each`, `eachRight`, `endsWith`, `eq`, `escape`, 20436 * `escapeRegExp`, `every`, `find`, `findIndex`, `findKey`, `findLast`, 20437 * `findLastIndex`, `findLastKey`, `first`, `floor`, `forEach`, `forEachRight`, 20438 * `forIn`, `forInRight`, `forOwn`, `forOwnRight`, `get`, `gt`, `gte`, `has`, 20439 * `hasIn`, `head`, `identity`, `includes`, `indexOf`, `inRange`, `invoke`, 20440 * `isArguments`, `isArray`, `isArrayBuffer`, `isArrayLike`, `isArrayLikeObject`, 20441 * `isBoolean`, `isBuffer`, `isDate`, `isElement`, `isEmpty`, `isEqual`, 20442 * `isEqualWith`, `isError`, `isFinite`, `isFunction`, `isInteger`, `isLength`, 20443 * `isMap`, `isMatch`, `isMatchWith`, `isNaN`, `isNative`, `isNil`, `isNull`, 20444 * `isNumber`, `isObject`, `isObjectLike`, `isPlainObject`, `isRegExp`, 20445 * `isSafeInteger`, `isSet`, `isString`, `isUndefined`, `isTypedArray`, 20446 * `isWeakMap`, `isWeakSet`, `join`, `kebabCase`, `last`, `lastIndexOf`, 20447 * `lowerCase`, `lowerFirst`, `lt`, `lte`, `max`, `maxBy`, `mean`, `meanBy`, 20448 * `min`, `minBy`, `multiply`, `noConflict`, `noop`, `now`, `nth`, `pad`, 20449 * `padEnd`, `padStart`, `parseInt`, `pop`, `random`, `reduce`, `reduceRight`, 20450 * `repeat`, `result`, `round`, `runInContext`, `sample`, `shift`, `size`, 20451 * `snakeCase`, `some`, `sortedIndex`, `sortedIndexBy`, `sortedLastIndex`, 20452 * `sortedLastIndexBy`, `startCase`, `startsWith`, `stubArray`, `stubFalse`, 20453 * `stubObject`, `stubString`, `stubTrue`, `subtract`, `sum`, `sumBy`, 20454 * `template`, `times`, `toFinite`, `toInteger`, `toJSON`, `toLength`, 20455 * `toLower`, `toNumber`, `toSafeInteger`, `toString`, `toUpper`, `trim`, 20456 * `trimEnd`, `trimStart`, `truncate`, `unescape`, `uniqueId`, `upperCase`, 20457 * `upperFirst`, `value`, and `words` 20458 * 20459 * @name _ 20460 * @constructor 20461 * @category Seq 20462 * @param {*} value The value to wrap in a `lodash` instance. 20463 * @returns {Object} Returns the new `lodash` wrapper instance. 20464 * @example 20465 * 20466 * function square(n) { 20467 * return n * n; 20468 * } 20469 * 20470 * var wrapped = _([1, 2, 3]); 20471 * 20472 * // Returns an unwrapped value. 20473 * wrapped.reduce(_.add); 20474 * // => 6 20475 * 20476 * // Returns a wrapped value. 20477 * var squares = wrapped.map(square); 20478 * 20479 * _.isArray(squares); 20480 * // => false 20481 * 20482 * _.isArray(squares.value()); 20483 * // => true 20484 */ 20485 function lodash(value) { 20486 if (isObjectLike(value) && !isArray(value) && !(value instanceof LazyWrapper)) { 20487 if (value instanceof LodashWrapper) { 20488 return value; 20489 } 20490 if (hasOwnProperty.call(value, '__wrapped__')) { 20491 return wrapperClone(value); 20492 } 20493 } 20494 return new LodashWrapper(value); 20495 } 20496 20497 /** 20498 * The base implementation of `_.create` without support for assigning 20499 * properties to the created object. 20500 * 20501 * @private 20502 * @param {Object} proto The object to inherit from. 20503 * @returns {Object} Returns the new object. 20504 */ 20505 var baseCreate = (function() { 20506 function object() {} 20507 return function(proto) { 20508 if (!isObject(proto)) { 20509 return {}; 20510 } 20511 if (objectCreate) { 20512 return objectCreate(proto); 20513 } 20514 object.prototype = proto; 20515 var result = new object; 20516 object.prototype = undefined; 20517 return result; 20518 }; 20519 }()); 20520 20521 /** 20522 * The function whose prototype chain sequence wrappers inherit from. 20523 * 20524 * @private 20525 */ 20526 function baseLodash() { 20527 // No operation performed. 20528 } 20529 20530 /** 20531 * The base constructor for creating `lodash` wrapper objects. 20532 * 20533 * @private 20534 * @param {*} value The value to wrap. 20535 * @param {boolean} [chainAll] Enable explicit method chain sequences. 20536 */ 20537 function LodashWrapper(value, chainAll) { 20538 this.__wrapped__ = value; 20539 this.__actions__ = []; 20540 this.__chain__ = !!chainAll; 20541 this.__index__ = 0; 20542 this.__values__ = undefined; 20543 } 20544 20545 /** 20546 * By default, the template delimiters used by lodash are like those in 20547 * embedded Ruby (ERB) as well as ES2015 template strings. Change the 20548 * following template settings to use alternative delimiters. 20549 * 20550 * @static 20551 * @memberOf _ 20552 * @type {Object} 20553 */ 20554 lodash.templateSettings = { 20555 20556 /** 20557 * Used to detect `data` property values to be HTML-escaped. 20558 * 20559 * @memberOf _.templateSettings 20560 * @type {RegExp} 20561 */ 20562 'escape': reEscape, 20563 20564 /** 20565 * Used to detect code to be evaluated. 20566 * 20567 * @memberOf _.templateSettings 20568 * @type {RegExp} 20569 */ 20570 'evaluate': reEvaluate, 20571 20572 /** 20573 * Used to detect `data` property values to inject. 20574 * 20575 * @memberOf _.templateSettings 20576 * @type {RegExp} 20577 */ 20578 'interpolate': reInterpolate, 20579 20580 /** 20581 * Used to reference the data object in the template text. 20582 * 20583 * @memberOf _.templateSettings 20584 * @type {string} 20585 */ 20586 'variable': '', 20587 20588 /** 20589 * Used to import variables into the compiled template. 20590 * 20591 * @memberOf _.templateSettings 20592 * @type {Object} 20593 */ 20594 'imports': { 20595 20596 /** 20597 * A reference to the `lodash` function. 20598 * 20599 * @memberOf _.templateSettings.imports 20600 * @type {Function} 20601 */ 20602 '_': lodash 20603 } 20604 }; 20605 20606 // Ensure wrappers are instances of `baseLodash`. 20607 lodash.prototype = baseLodash.prototype; 20608 lodash.prototype.constructor = lodash; 20609 20610 LodashWrapper.prototype = baseCreate(baseLodash.prototype); 20611 LodashWrapper.prototype.constructor = LodashWrapper; 20612 20613 /*------------------------------------------------------------------------*/ 20614 20615 /** 20616 * Creates a lazy wrapper object which wraps `value` to enable lazy evaluation. 20617 * 20618 * @private 20619 * @constructor 20620 * @param {*} value The value to wrap. 20621 */ 20622 function LazyWrapper(value) { 20623 this.__wrapped__ = value; 20624 this.__actions__ = []; 20625 this.__dir__ = 1; 20626 this.__filtered__ = false; 20627 this.__iteratees__ = []; 20628 this.__takeCount__ = MAX_ARRAY_LENGTH; 20629 this.__views__ = []; 20630 } 20631 20632 /** 20633 * Creates a clone of the lazy wrapper object. 20634 * 20635 * @private 20636 * @name clone 20637 * @memberOf LazyWrapper 20638 * @returns {Object} Returns the cloned `LazyWrapper` object. 20639 */ 20640 function lazyClone() { 20641 var result = new LazyWrapper(this.__wrapped__); 20642 result.__actions__ = copyArray(this.__actions__); 20643 result.__dir__ = this.__dir__; 20644 result.__filtered__ = this.__filtered__; 20645 result.__iteratees__ = copyArray(this.__iteratees__); 20646 result.__takeCount__ = this.__takeCount__; 20647 result.__views__ = copyArray(this.__views__); 20648 return result; 20649 } 20650 20651 /** 20652 * Reverses the direction of lazy iteration. 20653 * 20654 * @private 20655 * @name reverse 20656 * @memberOf LazyWrapper 20657 * @returns {Object} Returns the new reversed `LazyWrapper` object. 20658 */ 20659 function lazyReverse() { 20660 if (this.__filtered__) { 20661 var result = new LazyWrapper(this); 20662 result.__dir__ = -1; 20663 result.__filtered__ = true; 20664 } else { 20665 result = this.clone(); 20666 result.__dir__ *= -1; 20667 } 20668 return result; 20669 } 20670 20671 /** 20672 * Extracts the unwrapped value from its lazy wrapper. 20673 * 20674 * @private 20675 * @name value 20676 * @memberOf LazyWrapper 20677 * @returns {*} Returns the unwrapped value. 20678 */ 20679 function lazyValue() { 20680 var array = this.__wrapped__.value(), 20681 dir = this.__dir__, 20682 isArr = isArray(array), 20683 isRight = dir < 0, 20684 arrLength = isArr ? array.length : 0, 20685 view = getView(0, arrLength, this.__views__), 20686 start = view.start, 20687 end = view.end, 20688 length = end - start, 20689 index = isRight ? end : (start - 1), 20690 iteratees = this.__iteratees__, 20691 iterLength = iteratees.length, 20692 resIndex = 0, 20693 takeCount = nativeMin(length, this.__takeCount__); 20694 20695 if (!isArr || (!isRight && arrLength == length && takeCount == length)) { 20696 return baseWrapperValue(array, this.__actions__); 20697 } 20698 var result = []; 20699 20700 outer: 20701 while (length-- && resIndex < takeCount) { 20702 index += dir; 20703 20704 var iterIndex = -1, 20705 value = array[index]; 20706 20707 while (++iterIndex < iterLength) { 20708 var data = iteratees[iterIndex], 20709 iteratee = data.iteratee, 20710 type = data.type, 20711 computed = iteratee(value); 20712 20713 if (type == LAZY_MAP_FLAG) { 20714 value = computed; 20715 } else if (!computed) { 20716 if (type == LAZY_FILTER_FLAG) { 20717 continue outer; 20718 } else { 20719 break outer; 20720 } 20721 } 20722 } 20723 result[resIndex++] = value; 20724 } 20725 return result; 20726 } 20727 20728 // Ensure `LazyWrapper` is an instance of `baseLodash`. 20729 LazyWrapper.prototype = baseCreate(baseLodash.prototype); 20730 LazyWrapper.prototype.constructor = LazyWrapper; 20731 20732 /*------------------------------------------------------------------------*/ 20733 20734 /** 20735 * Creates a hash object. 20736 * 20737 * @private 20738 * @constructor 20739 * @param {Array} [entries] The key-value pairs to cache. 20740 */ 20741 function Hash(entries) { 20742 var index = -1, 20743 length = entries == null ? 0 : entries.length; 20744 20745 this.clear(); 20746 while (++index < length) { 20747 var entry = entries[index]; 20748 this.set(entry[0], entry[1]); 20749 } 20750 } 20751 20752 /** 20753 * Removes all key-value entries from the hash. 20754 * 20755 * @private 20756 * @name clear 20757 * @memberOf Hash 20758 */ 20759 function hashClear() { 20760 this.__data__ = nativeCreate ? nativeCreate(null) : {}; 20761 this.size = 0; 20762 } 20763 20764 /** 20765 * Removes `key` and its value from the hash. 20766 * 20767 * @private 20768 * @name delete 20769 * @memberOf Hash 20770 * @param {Object} hash The hash to modify. 20771 * @param {string} key The key of the value to remove. 20772 * @returns {boolean} Returns `true` if the entry was removed, else `false`. 20773 */ 20774 function hashDelete(key) { 20775 var result = this.has(key) && delete this.__data__[key]; 20776 this.size -= result ? 1 : 0; 20777 return result; 20778 } 20779 20780 /** 20781 * Gets the hash value for `key`. 20782 * 20783 * @private 20784 * @name get 20785 * @memberOf Hash 20786 * @param {string} key The key of the value to get. 20787 * @returns {*} Returns the entry value. 20788 */ 20789 function hashGet(key) { 20790 var data = this.__data__; 20791 if (nativeCreate) { 20792 var result = data[key]; 20793 return result === HASH_UNDEFINED ? undefined : result; 20794 } 20795 return hasOwnProperty.call(data, key) ? data[key] : undefined; 20796 } 20797 20798 /** 20799 * Checks if a hash value for `key` exists. 20800 * 20801 * @private 20802 * @name has 20803 * @memberOf Hash 20804 * @param {string} key The key of the entry to check. 20805 * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. 20806 */ 20807 function hashHas(key) { 20808 var data = this.__data__; 20809 return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key); 20810 } 20811 20812 /** 20813 * Sets the hash `key` to `value`. 20814 * 20815 * @private 20816 * @name set 20817 * @memberOf Hash 20818 * @param {string} key The key of the value to set. 20819 * @param {*} value The value to set. 20820 * @returns {Object} Returns the hash instance. 20821 */ 20822 function hashSet(key, value) { 20823 var data = this.__data__; 20824 this.size += this.has(key) ? 0 : 1; 20825 data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value; 20826 return this; 20827 } 20828 20829 // Add methods to `Hash`. 20830 Hash.prototype.clear = hashClear; 20831 Hash.prototype['delete'] = hashDelete; 20832 Hash.prototype.get = hashGet; 20833 Hash.prototype.has = hashHas; 20834 Hash.prototype.set = hashSet; 20835 20836 /*------------------------------------------------------------------------*/ 20837 20838 /** 20839 * Creates an list cache object. 20840 * 20841 * @private 20842 * @constructor 20843 * @param {Array} [entries] The key-value pairs to cache. 20844 */ 20845 function ListCache(entries) { 20846 var index = -1, 20847 length = entries == null ? 0 : entries.length; 20848 20849 this.clear(); 20850 while (++index < length) { 20851 var entry = entries[index]; 20852 this.set(entry[0], entry[1]); 20853 } 20854 } 20855 20856 /** 20857 * Removes all key-value entries from the list cache. 20858 * 20859 * @private 20860 * @name clear 20861 * @memberOf ListCache 20862 */ 20863 function listCacheClear() { 20864 this.__data__ = []; 20865 this.size = 0; 20866 } 20867 20868 /** 20869 * Removes `key` and its value from the list cache. 20870 * 20871 * @private 20872 * @name delete 20873 * @memberOf ListCache 20874 * @param {string} key The key of the value to remove. 20875 * @returns {boolean} Returns `true` if the entry was removed, else `false`. 20876 */ 20877 function listCacheDelete(key) { 20878 var data = this.__data__, 20879 index = assocIndexOf(data, key); 20880 20881 if (index < 0) { 20882 return false; 20883 } 20884 var lastIndex = data.length - 1; 20885 if (index == lastIndex) { 20886 data.pop(); 20887 } else { 20888 splice.call(data, index, 1); 20889 } 20890 --this.size; 20891 return true; 20892 } 20893 20894 /** 20895 * Gets the list cache value for `key`. 20896 * 20897 * @private 20898 * @name get 20899 * @memberOf ListCache 20900 * @param {string} key The key of the value to get. 20901 * @returns {*} Returns the entry value. 20902 */ 20903 function listCacheGet(key) { 20904 var data = this.__data__, 20905 index = assocIndexOf(data, key); 20906 20907 return index < 0 ? undefined : data[index][1]; 20908 } 20909 20910 /** 20911 * Checks if a list cache value for `key` exists. 20912 * 20913 * @private 20914 * @name has 20915 * @memberOf ListCache 20916 * @param {string} key The key of the entry to check. 20917 * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. 20918 */ 20919 function listCacheHas(key) { 20920 return assocIndexOf(this.__data__, key) > -1; 20921 } 20922 20923 /** 20924 * Sets the list cache `key` to `value`. 20925 * 20926 * @private 20927 * @name set 20928 * @memberOf ListCache 20929 * @param {string} key The key of the value to set. 20930 * @param {*} value The value to set. 20931 * @returns {Object} Returns the list cache instance. 20932 */ 20933 function listCacheSet(key, value) { 20934 var data = this.__data__, 20935 index = assocIndexOf(data, key); 20936 20937 if (index < 0) { 20938 ++this.size; 20939 data.push([key, value]); 20940 } else { 20941 data[index][1] = value; 20942 } 20943 return this; 20944 } 20945 20946 // Add methods to `ListCache`. 20947 ListCache.prototype.clear = listCacheClear; 20948 ListCache.prototype['delete'] = listCacheDelete; 20949 ListCache.prototype.get = listCacheGet; 20950 ListCache.prototype.has = listCacheHas; 20951 ListCache.prototype.set = listCacheSet; 20952 20953 /*------------------------------------------------------------------------*/ 20954 20955 /** 20956 * Creates a map cache object to store key-value pairs. 20957 * 20958 * @private 20959 * @constructor 20960 * @param {Array} [entries] The key-value pairs to cache. 20961 */ 20962 function MapCache(entries) { 20963 var index = -1, 20964 length = entries == null ? 0 : entries.length; 20965 20966 this.clear(); 20967 while (++index < length) { 20968 var entry = entries[index]; 20969 this.set(entry[0], entry[1]); 20970 } 20971 } 20972 20973 /** 20974 * Removes all key-value entries from the map. 20975 * 20976 * @private 20977 * @name clear 20978 * @memberOf MapCache 20979 */ 20980 function mapCacheClear() { 20981 this.size = 0; 20982 this.__data__ = { 20983 'hash': new Hash, 20984 'map': new (Map || ListCache), 20985 'string': new Hash 20986 }; 20987 } 20988 20989 /** 20990 * Removes `key` and its value from the map. 20991 * 20992 * @private 20993 * @name delete 20994 * @memberOf MapCache 20995 * @param {string} key The key of the value to remove. 20996 * @returns {boolean} Returns `true` if the entry was removed, else `false`. 20997 */ 20998 function mapCacheDelete(key) { 20999 var result = getMapData(this, key)['delete'](key); 21000 this.size -= result ? 1 : 0; 21001 return result; 21002 } 21003 21004 /** 21005 * Gets the map value for `key`. 21006 * 21007 * @private 21008 * @name get 21009 * @memberOf MapCache 21010 * @param {string} key The key of the value to get. 21011 * @returns {*} Returns the entry value. 21012 */ 21013 function mapCacheGet(key) { 21014 return getMapData(this, key).get(key); 21015 } 21016 21017 /** 21018 * Checks if a map value for `key` exists. 21019 * 21020 * @private 21021 * @name has 21022 * @memberOf MapCache 21023 * @param {string} key The key of the entry to check. 21024 * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. 21025 */ 21026 function mapCacheHas(key) { 21027 return getMapData(this, key).has(key); 21028 } 21029 21030 /** 21031 * Sets the map `key` to `value`. 21032 * 21033 * @private 21034 * @name set 21035 * @memberOf MapCache 21036 * @param {string} key The key of the value to set. 21037 * @param {*} value The value to set. 21038 * @returns {Object} Returns the map cache instance. 21039 */ 21040 function mapCacheSet(key, value) { 21041 var data = getMapData(this, key), 21042 size = data.size; 21043 21044 data.set(key, value); 21045 this.size += data.size == size ? 0 : 1; 21046 return this; 21047 } 21048 21049 // Add methods to `MapCache`. 21050 MapCache.prototype.clear = mapCacheClear; 21051 MapCache.prototype['delete'] = mapCacheDelete; 21052 MapCache.prototype.get = mapCacheGet; 21053 MapCache.prototype.has = mapCacheHas; 21054 MapCache.prototype.set = mapCacheSet; 21055 21056 /*------------------------------------------------------------------------*/ 21057 21058 /** 21059 * 21060 * Creates an array cache object to store unique values. 21061 * 21062 * @private 21063 * @constructor 21064 * @param {Array} [values] The values to cache. 21065 */ 21066 function SetCache(values) { 21067 var index = -1, 21068 length = values == null ? 0 : values.length; 21069 21070 this.__data__ = new MapCache; 21071 while (++index < length) { 21072 this.add(values[index]); 21073 } 21074 } 21075 21076 /** 21077 * Adds `value` to the array cache. 21078 * 21079 * @private 21080 * @name add 21081 * @memberOf SetCache 21082 * @alias push 21083 * @param {*} value The value to cache. 21084 * @returns {Object} Returns the cache instance. 21085 */ 21086 function setCacheAdd(value) { 21087 this.__data__.set(value, HASH_UNDEFINED); 21088 return this; 21089 } 21090 21091 /** 21092 * Checks if `value` is in the array cache. 21093 * 21094 * @private 21095 * @name has 21096 * @memberOf SetCache 21097 * @param {*} value The value to search for. 21098 * @returns {number} Returns `true` if `value` is found, else `false`. 21099 */ 21100 function setCacheHas(value) { 21101 return this.__data__.has(value); 21102 } 21103 21104 // Add methods to `SetCache`. 21105 SetCache.prototype.add = SetCache.prototype.push = setCacheAdd; 21106 SetCache.prototype.has = setCacheHas; 21107 21108 /*------------------------------------------------------------------------*/ 21109 21110 /** 21111 * Creates a stack cache object to store key-value pairs. 21112 * 21113 * @private 21114 * @constructor 21115 * @param {Array} [entries] The key-value pairs to cache. 21116 */ 21117 function Stack(entries) { 21118 var data = this.__data__ = new ListCache(entries); 21119 this.size = data.size; 21120 } 21121 21122 /** 21123 * Removes all key-value entries from the stack. 21124 * 21125 * @private 21126 * @name clear 21127 * @memberOf Stack 21128 */ 21129 function stackClear() { 21130 this.__data__ = new ListCache; 21131 this.size = 0; 21132 } 21133 21134 /** 21135 * Removes `key` and its value from the stack. 21136 * 21137 * @private 21138 * @name delete 21139 * @memberOf Stack 21140 * @param {string} key The key of the value to remove. 21141 * @returns {boolean} Returns `true` if the entry was removed, else `false`. 21142 */ 21143 function stackDelete(key) { 21144 var data = this.__data__, 21145 result = data['delete'](key); 21146 21147 this.size = data.size; 21148 return result; 21149 } 21150 21151 /** 21152 * Gets the stack value for `key`. 21153 * 21154 * @private 21155 * @name get 21156 * @memberOf Stack 21157 * @param {string} key The key of the value to get. 21158 * @returns {*} Returns the entry value. 21159 */ 21160 function stackGet(key) { 21161 return this.__data__.get(key); 21162 } 21163 21164 /** 21165 * Checks if a stack value for `key` exists. 21166 * 21167 * @private 21168 * @name has 21169 * @memberOf Stack 21170 * @param {string} key The key of the entry to check. 21171 * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. 21172 */ 21173 function stackHas(key) { 21174 return this.__data__.has(key); 21175 } 21176 21177 /** 21178 * Sets the stack `key` to `value`. 21179 * 21180 * @private 21181 * @name set 21182 * @memberOf Stack 21183 * @param {string} key The key of the value to set. 21184 * @param {*} value The value to set. 21185 * @returns {Object} Returns the stack cache instance. 21186 */ 21187 function stackSet(key, value) { 21188 var data = this.__data__; 21189 if (data instanceof ListCache) { 21190 var pairs = data.__data__; 21191 if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) { 21192 pairs.push([key, value]); 21193 this.size = ++data.size; 21194 return this; 21195 } 21196 data = this.__data__ = new MapCache(pairs); 21197 } 21198 data.set(key, value); 21199 this.size = data.size; 21200 return this; 21201 } 21202 21203 // Add methods to `Stack`. 21204 Stack.prototype.clear = stackClear; 21205 Stack.prototype['delete'] = stackDelete; 21206 Stack.prototype.get = stackGet; 21207 Stack.prototype.has = stackHas; 21208 Stack.prototype.set = stackSet; 21209 21210 /*------------------------------------------------------------------------*/ 21211 21212 /** 21213 * Creates an array of the enumerable property names of the array-like `value`. 21214 * 21215 * @private 21216 * @param {*} value The value to query. 21217 * @param {boolean} inherited Specify returning inherited property names. 21218 * @returns {Array} Returns the array of property names. 21219 */ 21220 function arrayLikeKeys(value, inherited) { 21221 var isArr = isArray(value), 21222 isArg = !isArr && isArguments(value), 21223 isBuff = !isArr && !isArg && isBuffer(value), 21224 isType = !isArr && !isArg && !isBuff && isTypedArray(value), 21225 skipIndexes = isArr || isArg || isBuff || isType, 21226 result = skipIndexes ? baseTimes(value.length, String) : [], 21227 length = result.length; 21228 21229 for (var key in value) { 21230 if ((inherited || hasOwnProperty.call(value, key)) && 21231 !(skipIndexes && ( 21232 // Safari 9 has enumerable `arguments.length` in strict mode. 21233 key == 'length' || 21234 // Node.js 0.10 has enumerable non-index properties on buffers. 21235 (isBuff && (key == 'offset' || key == 'parent')) || 21236 // PhantomJS 2 has enumerable non-index properties on typed arrays. 21237 (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) || 21238 // Skip index properties. 21239 isIndex(key, length) 21240 ))) { 21241 result.push(key); 21242 } 21243 } 21244 return result; 21245 } 21246 21247 /** 21248 * A specialized version of `_.sample` for arrays. 21249 * 21250 * @private 21251 * @param {Array} array The array to sample. 21252 * @returns {*} Returns the random element. 21253 */ 21254 function arraySample(array) { 21255 var length = array.length; 21256 return length ? array[baseRandom(0, length - 1)] : undefined; 21257 } 21258 21259 /** 21260 * A specialized version of `_.sampleSize` for arrays. 21261 * 21262 * @private 21263 * @param {Array} array The array to sample. 21264 * @param {number} n The number of elements to sample. 21265 * @returns {Array} Returns the random elements. 21266 */ 21267 function arraySampleSize(array, n) { 21268 return shuffleSelf(copyArray(array), baseClamp(n, 0, array.length)); 21269 } 21270 21271 /** 21272 * A specialized version of `_.shuffle` for arrays. 21273 * 21274 * @private 21275 * @param {Array} array The array to shuffle. 21276 * @returns {Array} Returns the new shuffled array. 21277 */ 21278 function arrayShuffle(array) { 21279 return shuffleSelf(copyArray(array)); 21280 } 21281 21282 /** 21283 * This function is like `assignValue` except that it doesn't assign 21284 * `undefined` values. 21285 * 21286 * @private 21287 * @param {Object} object The object to modify. 21288 * @param {string} key The key of the property to assign. 21289 * @param {*} value The value to assign. 21290 */ 21291 function assignMergeValue(object, key, value) { 21292 if ((value !== undefined && !eq(object[key], value)) || 21293 (value === undefined && !(key in object))) { 21294 baseAssignValue(object, key, value); 21295 } 21296 } 21297 21298 /** 21299 * Assigns `value` to `key` of `object` if the existing value is not equivalent 21300 * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) 21301 * for equality comparisons. 21302 * 21303 * @private 21304 * @param {Object} object The object to modify. 21305 * @param {string} key The key of the property to assign. 21306 * @param {*} value The value to assign. 21307 */ 21308 function assignValue(object, key, value) { 21309 var objValue = object[key]; 21310 if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) || 21311 (value === undefined && !(key in object))) { 21312 baseAssignValue(object, key, value); 21313 } 21314 } 21315 21316 /** 21317 * Gets the index at which the `key` is found in `array` of key-value pairs. 21318 * 21319 * @private 21320 * @param {Array} array The array to inspect. 21321 * @param {*} key The key to search for. 21322 * @returns {number} Returns the index of the matched value, else `-1`. 21323 */ 21324 function assocIndexOf(array, key) { 21325 var length = array.length; 21326 while (length--) { 21327 if (eq(array[length][0], key)) { 21328 return length; 21329 } 21330 } 21331 return -1; 21332 } 21333 21334 /** 21335 * Aggregates elements of `collection` on `accumulator` with keys transformed 21336 * by `iteratee` and values set by `setter`. 21337 * 21338 * @private 21339 * @param {Array|Object} collection The collection to iterate over. 21340 * @param {Function} setter The function to set `accumulator` values. 21341 * @param {Function} iteratee The iteratee to transform keys. 21342 * @param {Object} accumulator The initial aggregated object. 21343 * @returns {Function} Returns `accumulator`. 21344 */ 21345 function baseAggregator(collection, setter, iteratee, accumulator) { 21346 baseEach(collection, function(value, key, collection) { 21347 setter(accumulator, value, iteratee(value), collection); 21348 }); 21349 return accumulator; 21350 } 21351 21352 /** 21353 * The base implementation of `_.assign` without support for multiple sources 21354 * or `customizer` functions. 21355 * 21356 * @private 21357 * @param {Object} object The destination object. 21358 * @param {Object} source The source object. 21359 * @returns {Object} Returns `object`. 21360 */ 21361 function baseAssign(object, source) { 21362 return object && copyObject(source, keys(source), object); 21363 } 21364 21365 /** 21366 * The base implementation of `_.assignIn` without support for multiple sources 21367 * or `customizer` functions. 21368 * 21369 * @private 21370 * @param {Object} object The destination object. 21371 * @param {Object} source The source object. 21372 * @returns {Object} Returns `object`. 21373 */ 21374 function baseAssignIn(object, source) { 21375 return object && copyObject(source, keysIn(source), object); 21376 } 21377 21378 /** 21379 * The base implementation of `assignValue` and `assignMergeValue` without 21380 * value checks. 21381 * 21382 * @private 21383 * @param {Object} object The object to modify. 21384 * @param {string} key The key of the property to assign. 21385 * @param {*} value The value to assign. 21386 */ 21387 function baseAssignValue(object, key, value) { 21388 if (key == '__proto__' && defineProperty) { 21389 defineProperty(object, key, { 21390 'configurable': true, 21391 'enumerable': true, 21392 'value': value, 21393 'writable': true 21394 }); 21395 } else { 21396 object[key] = value; 21397 } 21398 } 21399 21400 /** 21401 * The base implementation of `_.at` without support for individual paths. 21402 * 21403 * @private 21404 * @param {Object} object The object to iterate over. 21405 * @param {string[]} paths The property paths to pick. 21406 * @returns {Array} Returns the picked elements. 21407 */ 21408 function baseAt(object, paths) { 21409 var index = -1, 21410 length = paths.length, 21411 result = Array(length), 21412 skip = object == null; 21413 21414 while (++index < length) { 21415 result[index] = skip ? undefined : get(object, paths[index]); 21416 } 21417 return result; 21418 } 21419 21420 /** 21421 * The base implementation of `_.clamp` which doesn't coerce arguments. 21422 * 21423 * @private 21424 * @param {number} number The number to clamp. 21425 * @param {number} [lower] The lower bound. 21426 * @param {number} upper The upper bound. 21427 * @returns {number} Returns the clamped number. 21428 */ 21429 function baseClamp(number, lower, upper) { 21430 if (number === number) { 21431 if (upper !== undefined) { 21432 number = number <= upper ? number : upper; 21433 } 21434 if (lower !== undefined) { 21435 number = number >= lower ? number : lower; 21436 } 21437 } 21438 return number; 21439 } 21440 21441 /** 21442 * The base implementation of `_.clone` and `_.cloneDeep` which tracks 21443 * traversed objects. 21444 * 21445 * @private 21446 * @param {*} value The value to clone. 21447 * @param {boolean} bitmask The bitmask flags. 21448 * 1 - Deep clone 21449 * 2 - Flatten inherited properties 21450 * 4 - Clone symbols 21451 * @param {Function} [customizer] The function to customize cloning. 21452 * @param {string} [key] The key of `value`. 21453 * @param {Object} [object] The parent object of `value`. 21454 * @param {Object} [stack] Tracks traversed objects and their clone counterparts. 21455 * @returns {*} Returns the cloned value. 21456 */ 21457 function baseClone(value, bitmask, customizer, key, object, stack) { 21458 var result, 21459 isDeep = bitmask & CLONE_DEEP_FLAG, 21460 isFlat = bitmask & CLONE_FLAT_FLAG, 21461 isFull = bitmask & CLONE_SYMBOLS_FLAG; 21462 21463 if (customizer) { 21464 result = object ? customizer(value, key, object, stack) : customizer(value); 21465 } 21466 if (result !== undefined) { 21467 return result; 21468 } 21469 if (!isObject(value)) { 21470 return value; 21471 } 21472 var isArr = isArray(value); 21473 if (isArr) { 21474 result = initCloneArray(value); 21475 if (!isDeep) { 21476 return copyArray(value, result); 21477 } 21478 } else { 21479 var tag = getTag(value), 21480 isFunc = tag == funcTag || tag == genTag; 21481 21482 if (isBuffer(value)) { 21483 return cloneBuffer(value, isDeep); 21484 } 21485 if (tag == objectTag || tag == argsTag || (isFunc && !object)) { 21486 result = (isFlat || isFunc) ? {} : initCloneObject(value); 21487 if (!isDeep) { 21488 return isFlat 21489 ? copySymbolsIn(value, baseAssignIn(result, value)) 21490 : copySymbols(value, baseAssign(result, value)); 21491 } 21492 } else { 21493 if (!cloneableTags[tag]) { 21494 return object ? value : {}; 21495 } 21496 result = initCloneByTag(value, tag, isDeep); 21497 } 21498 } 21499 // Check for circular references and return its corresponding clone. 21500 stack || (stack = new Stack); 21501 var stacked = stack.get(value); 21502 if (stacked) { 21503 return stacked; 21504 } 21505 stack.set(value, result); 21506 21507 if (isSet(value)) { 21508 value.forEach(function(subValue) { 21509 result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack)); 21510 }); 21511 } else if (isMap(value)) { 21512 value.forEach(function(subValue, key) { 21513 result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack)); 21514 }); 21515 } 21516 21517 var keysFunc = isFull 21518 ? (isFlat ? getAllKeysIn : getAllKeys) 21519 : (isFlat ? keysIn : keys); 21520 21521 var props = isArr ? undefined : keysFunc(value); 21522 arrayEach(props || value, function(subValue, key) { 21523 if (props) { 21524 key = subValue; 21525 subValue = value[key]; 21526 } 21527 // Recursively populate clone (susceptible to call stack limits). 21528 assignValue(result, key, baseClone(subValue, bitmask, customizer, key, value, stack)); 21529 }); 21530 return result; 21531 } 21532 21533 /** 21534 * The base implementation of `_.conforms` which doesn't clone `source`. 21535 * 21536 * @private 21537 * @param {Object} source The object of property predicates to conform to. 21538 * @returns {Function} Returns the new spec function. 21539 */ 21540 function baseConforms(source) { 21541 var props = keys(source); 21542 return function(object) { 21543 return baseConformsTo(object, source, props); 21544 }; 21545 } 21546 21547 /** 21548 * The base implementation of `_.conformsTo` which accepts `props` to check. 21549 * 21550 * @private 21551 * @param {Object} object The object to inspect. 21552 * @param {Object} source The object of property predicates to conform to. 21553 * @returns {boolean} Returns `true` if `object` conforms, else `false`. 21554 */ 21555 function baseConformsTo(object, source, props) { 21556 var length = props.length; 21557 if (object == null) { 21558 return !length; 21559 } 21560 object = Object(object); 21561 while (length--) { 21562 var key = props[length], 21563 predicate = source[key], 21564 value = object[key]; 21565 21566 if ((value === undefined && !(key in object)) || !predicate(value)) { 21567 return false; 21568 } 21569 } 21570 return true; 21571 } 21572 21573 /** 21574 * The base implementation of `_.delay` and `_.defer` which accepts `args` 21575 * to provide to `func`. 21576 * 21577 * @private 21578 * @param {Function} func The function to delay. 21579 * @param {number} wait The number of milliseconds to delay invocation. 21580 * @param {Array} args The arguments to provide to `func`. 21581 * @returns {number|Object} Returns the timer id or timeout object. 21582 */ 21583 function baseDelay(func, wait, args) { 21584 if (typeof func != 'function') { 21585 throw new TypeError(FUNC_ERROR_TEXT); 21586 } 21587 return setTimeout(function() { func.apply(undefined, args); }, wait); 21588 } 21589 21590 /** 21591 * The base implementation of methods like `_.difference` without support 21592 * for excluding multiple arrays or iteratee shorthands. 21593 * 21594 * @private 21595 * @param {Array} array The array to inspect. 21596 * @param {Array} values The values to exclude. 21597 * @param {Function} [iteratee] The iteratee invoked per element. 21598 * @param {Function} [comparator] The comparator invoked per element. 21599 * @returns {Array} Returns the new array of filtered values. 21600 */ 21601 function baseDifference(array, values, iteratee, comparator) { 21602 var index = -1, 21603 includes = arrayIncludes, 21604 isCommon = true, 21605 length = array.length, 21606 result = [], 21607 valuesLength = values.length; 21608 21609 if (!length) { 21610 return result; 21611 } 21612 if (iteratee) { 21613 values = arrayMap(values, baseUnary(iteratee)); 21614 } 21615 if (comparator) { 21616 includes = arrayIncludesWith; 21617 isCommon = false; 21618 } 21619 else if (values.length >= LARGE_ARRAY_SIZE) { 21620 includes = cacheHas; 21621 isCommon = false; 21622 values = new SetCache(values); 21623 } 21624 outer: 21625 while (++index < length) { 21626 var value = array[index], 21627 computed = iteratee == null ? value : iteratee(value); 21628 21629 value = (comparator || value !== 0) ? value : 0; 21630 if (isCommon && computed === computed) { 21631 var valuesIndex = valuesLength; 21632 while (valuesIndex--) { 21633 if (values[valuesIndex] === computed) { 21634 continue outer; 21635 } 21636 } 21637 result.push(value); 21638 } 21639 else if (!includes(values, computed, comparator)) { 21640 result.push(value); 21641 } 21642 } 21643 return result; 21644 } 21645 21646 /** 21647 * The base implementation of `_.forEach` without support for iteratee shorthands. 21648 * 21649 * @private 21650 * @param {Array|Object} collection The collection to iterate over. 21651 * @param {Function} iteratee The function invoked per iteration. 21652 * @returns {Array|Object} Returns `collection`. 21653 */ 21654 var baseEach = createBaseEach(baseForOwn); 21655 21656 /** 21657 * The base implementation of `_.forEachRight` without support for iteratee shorthands. 21658 * 21659 * @private 21660 * @param {Array|Object} collection The collection to iterate over. 21661 * @param {Function} iteratee The function invoked per iteration. 21662 * @returns {Array|Object} Returns `collection`. 21663 */ 21664 var baseEachRight = createBaseEach(baseForOwnRight, true); 21665 21666 /** 21667 * The base implementation of `_.every` without support for iteratee shorthands. 21668 * 21669 * @private 21670 * @param {Array|Object} collection The collection to iterate over. 21671 * @param {Function} predicate The function invoked per iteration. 21672 * @returns {boolean} Returns `true` if all elements pass the predicate check, 21673 * else `false` 21674 */ 21675 function baseEvery(collection, predicate) { 21676 var result = true; 21677 baseEach(collection, function(value, index, collection) { 21678 result = !!predicate(value, index, collection); 21679 return result; 21680 }); 21681 return result; 21682 } 21683 21684 /** 21685 * The base implementation of methods like `_.max` and `_.min` which accepts a 21686 * `comparator` to determine the extremum value. 21687 * 21688 * @private 21689 * @param {Array} array The array to iterate over. 21690 * @param {Function} iteratee The iteratee invoked per iteration. 21691 * @param {Function} comparator The comparator used to compare values. 21692 * @returns {*} Returns the extremum value. 21693 */ 21694 function baseExtremum(array, iteratee, comparator) { 21695 var index = -1, 21696 length = array.length; 21697 21698 while (++index < length) { 21699 var value = array[index], 21700 current = iteratee(value); 21701 21702 if (current != null && (computed === undefined 21703 ? (current === current && !isSymbol(current)) 21704 : comparator(current, computed) 21705 )) { 21706 var computed = current, 21707 result = value; 21708 } 21709 } 21710 return result; 21711 } 21712 21713 /** 21714 * The base implementation of `_.fill` without an iteratee call guard. 21715 * 21716 * @private 21717 * @param {Array} array The array to fill. 21718 * @param {*} value The value to fill `array` with. 21719 * @param {number} [start=0] The start position. 21720 * @param {number} [end=array.length] The end position. 21721 * @returns {Array} Returns `array`. 21722 */ 21723 function baseFill(array, value, start, end) { 21724 var length = array.length; 21725 21726 start = toInteger(start); 21727 if (start < 0) { 21728 start = -start > length ? 0 : (length + start); 21729 } 21730 end = (end === undefined || end > length) ? length : toInteger(end); 21731 if (end < 0) { 21732 end += length; 21733 } 21734 end = start > end ? 0 : toLength(end); 21735 while (start < end) { 21736 array[start++] = value; 21737 } 21738 return array; 21739 } 21740 21741 /** 21742 * The base implementation of `_.filter` without support for iteratee shorthands. 21743 * 21744 * @private 21745 * @param {Array|Object} collection The collection to iterate over. 21746 * @param {Function} predicate The function invoked per iteration. 21747 * @returns {Array} Returns the new filtered array. 21748 */ 21749 function baseFilter(collection, predicate) { 21750 var result = []; 21751 baseEach(collection, function(value, index, collection) { 21752 if (predicate(value, index, collection)) { 21753 result.push(value); 21754 } 21755 }); 21756 return result; 21757 } 21758 21759 /** 21760 * The base implementation of `_.flatten` with support for restricting flattening. 21761 * 21762 * @private 21763 * @param {Array} array The array to flatten. 21764 * @param {number} depth The maximum recursion depth. 21765 * @param {boolean} [predicate=isFlattenable] The function invoked per iteration. 21766 * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks. 21767 * @param {Array} [result=[]] The initial result value. 21768 * @returns {Array} Returns the new flattened array. 21769 */ 21770 function baseFlatten(array, depth, predicate, isStrict, result) { 21771 var index = -1, 21772 length = array.length; 21773 21774 predicate || (predicate = isFlattenable); 21775 result || (result = []); 21776 21777 while (++index < length) { 21778 var value = array[index]; 21779 if (depth > 0 && predicate(value)) { 21780 if (depth > 1) { 21781 // Recursively flatten arrays (susceptible to call stack limits). 21782 baseFlatten(value, depth - 1, predicate, isStrict, result); 21783 } else { 21784 arrayPush(result, value); 21785 } 21786 } else if (!isStrict) { 21787 result[result.length] = value; 21788 } 21789 } 21790 return result; 21791 } 21792 21793 /** 21794 * The base implementation of `baseForOwn` which iterates over `object` 21795 * properties returned by `keysFunc` and invokes `iteratee` for each property. 21796 * Iteratee functions may exit iteration early by explicitly returning `false`. 21797 * 21798 * @private 21799 * @param {Object} object The object to iterate over. 21800 * @param {Function} iteratee The function invoked per iteration. 21801 * @param {Function} keysFunc The function to get the keys of `object`. 21802 * @returns {Object} Returns `object`. 21803 */ 21804 var baseFor = createBaseFor(); 21805 21806 /** 21807 * This function is like `baseFor` except that it iterates over properties 21808 * in the opposite order. 21809 * 21810 * @private 21811 * @param {Object} object The object to iterate over. 21812 * @param {Function} iteratee The function invoked per iteration. 21813 * @param {Function} keysFunc The function to get the keys of `object`. 21814 * @returns {Object} Returns `object`. 21815 */ 21816 var baseForRight = createBaseFor(true); 21817 21818 /** 21819 * The base implementation of `_.forOwn` without support for iteratee shorthands. 21820 * 21821 * @private 21822 * @param {Object} object The object to iterate over. 21823 * @param {Function} iteratee The function invoked per iteration. 21824 * @returns {Object} Returns `object`. 21825 */ 21826 function baseForOwn(object, iteratee) { 21827 return object && baseFor(object, iteratee, keys); 21828 } 21829 21830 /** 21831 * The base implementation of `_.forOwnRight` without support for iteratee shorthands. 21832 * 21833 * @private 21834 * @param {Object} object The object to iterate over. 21835 * @param {Function} iteratee The function invoked per iteration. 21836 * @returns {Object} Returns `object`. 21837 */ 21838 function baseForOwnRight(object, iteratee) { 21839 return object && baseForRight(object, iteratee, keys); 21840 } 21841 21842 /** 21843 * The base implementation of `_.functions` which creates an array of 21844 * `object` function property names filtered from `props`. 21845 * 21846 * @private 21847 * @param {Object} object The object to inspect. 21848 * @param {Array} props The property names to filter. 21849 * @returns {Array} Returns the function names. 21850 */ 21851 function baseFunctions(object, props) { 21852 return arrayFilter(props, function(key) { 21853 return isFunction(object[key]); 21854 }); 21855 } 21856 21857 /** 21858 * The base implementation of `_.get` without support for default values. 21859 * 21860 * @private 21861 * @param {Object} object The object to query. 21862 * @param {Array|string} path The path of the property to get. 21863 * @returns {*} Returns the resolved value. 21864 */ 21865 function baseGet(object, path) { 21866 path = castPath(path, object); 21867 21868 var index = 0, 21869 length = path.length; 21870 21871 while (object != null && index < length) { 21872 object = object[toKey(path[index++])]; 21873 } 21874 return (index && index == length) ? object : undefined; 21875 } 21876 21877 /** 21878 * The base implementation of `getAllKeys` and `getAllKeysIn` which uses 21879 * `keysFunc` and `symbolsFunc` to get the enumerable property names and 21880 * symbols of `object`. 21881 * 21882 * @private 21883 * @param {Object} object The object to query. 21884 * @param {Function} keysFunc The function to get the keys of `object`. 21885 * @param {Function} symbolsFunc The function to get the symbols of `object`. 21886 * @returns {Array} Returns the array of property names and symbols. 21887 */ 21888 function baseGetAllKeys(object, keysFunc, symbolsFunc) { 21889 var result = keysFunc(object); 21890 return isArray(object) ? result : arrayPush(result, symbolsFunc(object)); 21891 } 21892 21893 /** 21894 * The base implementation of `getTag` without fallbacks for buggy environments. 21895 * 21896 * @private 21897 * @param {*} value The value to query. 21898 * @returns {string} Returns the `toStringTag`. 21899 */ 21900 function baseGetTag(value) { 21901 if (value == null) { 21902 return value === undefined ? undefinedTag : nullTag; 21903 } 21904 return (symToStringTag && symToStringTag in Object(value)) 21905 ? getRawTag(value) 21906 : objectToString(value); 21907 } 21908 21909 /** 21910 * The base implementation of `_.gt` which doesn't coerce arguments. 21911 * 21912 * @private 21913 * @param {*} value The value to compare. 21914 * @param {*} other The other value to compare. 21915 * @returns {boolean} Returns `true` if `value` is greater than `other`, 21916 * else `false`. 21917 */ 21918 function baseGt(value, other) { 21919 return value > other; 21920 } 21921 21922 /** 21923 * The base implementation of `_.has` without support for deep paths. 21924 * 21925 * @private 21926 * @param {Object} [object] The object to query. 21927 * @param {Array|string} key The key to check. 21928 * @returns {boolean} Returns `true` if `key` exists, else `false`. 21929 */ 21930 function baseHas(object, key) { 21931 return object != null && hasOwnProperty.call(object, key); 21932 } 21933 21934 /** 21935 * The base implementation of `_.hasIn` without support for deep paths. 21936 * 21937 * @private 21938 * @param {Object} [object] The object to query. 21939 * @param {Array|string} key The key to check. 21940 * @returns {boolean} Returns `true` if `key` exists, else `false`. 21941 */ 21942 function baseHasIn(object, key) { 21943 return object != null && key in Object(object); 21944 } 21945 21946 /** 21947 * The base implementation of `_.inRange` which doesn't coerce arguments. 21948 * 21949 * @private 21950 * @param {number} number The number to check. 21951 * @param {number} start The start of the range. 21952 * @param {number} end The end of the range. 21953 * @returns {boolean} Returns `true` if `number` is in the range, else `false`. 21954 */ 21955 function baseInRange(number, start, end) { 21956 return number >= nativeMin(start, end) && number < nativeMax(start, end); 21957 } 21958 21959 /** 21960 * The base implementation of methods like `_.intersection`, without support 21961 * for iteratee shorthands, that accepts an array of arrays to inspect. 21962 * 21963 * @private 21964 * @param {Array} arrays The arrays to inspect. 21965 * @param {Function} [iteratee] The iteratee invoked per element. 21966 * @param {Function} [comparator] The comparator invoked per element. 21967 * @returns {Array} Returns the new array of shared values. 21968 */ 21969 function baseIntersection(arrays, iteratee, comparator) { 21970 var includes = comparator ? arrayIncludesWith : arrayIncludes, 21971 length = arrays[0].length, 21972 othLength = arrays.length, 21973 othIndex = othLength, 21974 caches = Array(othLength), 21975 maxLength = Infinity, 21976 result = []; 21977 21978 while (othIndex--) { 21979 var array = arrays[othIndex]; 21980 if (othIndex && iteratee) { 21981 array = arrayMap(array, baseUnary(iteratee)); 21982 } 21983 maxLength = nativeMin(array.length, maxLength); 21984 caches[othIndex] = !comparator && (iteratee || (length >= 120 && array.length >= 120)) 21985 ? new SetCache(othIndex && array) 21986 : undefined; 21987 } 21988 array = arrays[0]; 21989 21990 var index = -1, 21991 seen = caches[0]; 21992 21993 outer: 21994 while (++index < length && result.length < maxLength) { 21995 var value = array[index], 21996 computed = iteratee ? iteratee(value) : value; 21997 21998 value = (comparator || value !== 0) ? value : 0; 21999 if (!(seen 22000 ? cacheHas(seen, computed) 22001 : includes(result, computed, comparator) 22002 )) { 22003 othIndex = othLength; 22004 while (--othIndex) { 22005 var cache = caches[othIndex]; 22006 if (!(cache 22007 ? cacheHas(cache, computed) 22008 : includes(arrays[othIndex], computed, comparator)) 22009 ) { 22010 continue outer; 22011 } 22012 } 22013 if (seen) { 22014 seen.push(computed); 22015 } 22016 result.push(value); 22017 } 22018 } 22019 return result; 22020 } 22021 22022 /** 22023 * The base implementation of `_.invert` and `_.invertBy` which inverts 22024 * `object` with values transformed by `iteratee` and set by `setter`. 22025 * 22026 * @private 22027 * @param {Object} object The object to iterate over. 22028 * @param {Function} setter The function to set `accumulator` values. 22029 * @param {Function} iteratee The iteratee to transform values. 22030 * @param {Object} accumulator The initial inverted object. 22031 * @returns {Function} Returns `accumulator`. 22032 */ 22033 function baseInverter(object, setter, iteratee, accumulator) { 22034 baseForOwn(object, function(value, key, object) { 22035 setter(accumulator, iteratee(value), key, object); 22036 }); 22037 return accumulator; 22038 } 22039 22040 /** 22041 * The base implementation of `_.invoke` without support for individual 22042 * method arguments. 22043 * 22044 * @private 22045 * @param {Object} object The object to query. 22046 * @param {Array|string} path The path of the method to invoke. 22047 * @param {Array} args The arguments to invoke the method with. 22048 * @returns {*} Returns the result of the invoked method. 22049 */ 22050 function baseInvoke(object, path, args) { 22051 path = castPath(path, object); 22052 object = parent(object, path); 22053 var func = object == null ? object : object[toKey(last(path))]; 22054 return func == null ? undefined : apply(func, object, args); 22055 } 22056 22057 /** 22058 * The base implementation of `_.isArguments`. 22059 * 22060 * @private 22061 * @param {*} value The value to check. 22062 * @returns {boolean} Returns `true` if `value` is an `arguments` object, 22063 */ 22064 function baseIsArguments(value) { 22065 return isObjectLike(value) && baseGetTag(value) == argsTag; 22066 } 22067 22068 /** 22069 * The base implementation of `_.isArrayBuffer` without Node.js optimizations. 22070 * 22071 * @private 22072 * @param {*} value The value to check. 22073 * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`. 22074 */ 22075 function baseIsArrayBuffer(value) { 22076 return isObjectLike(value) && baseGetTag(value) == arrayBufferTag; 22077 } 22078 22079 /** 22080 * The base implementation of `_.isDate` without Node.js optimizations. 22081 * 22082 * @private 22083 * @param {*} value The value to check. 22084 * @returns {boolean} Returns `true` if `value` is a date object, else `false`. 22085 */ 22086 function baseIsDate(value) { 22087 return isObjectLike(value) && baseGetTag(value) == dateTag; 22088 } 22089 22090 /** 22091 * The base implementation of `_.isEqual` which supports partial comparisons 22092 * and tracks traversed objects. 22093 * 22094 * @private 22095 * @param {*} value The value to compare. 22096 * @param {*} other The other value to compare. 22097 * @param {boolean} bitmask The bitmask flags. 22098 * 1 - Unordered comparison 22099 * 2 - Partial comparison 22100 * @param {Function} [customizer] The function to customize comparisons. 22101 * @param {Object} [stack] Tracks traversed `value` and `other` objects. 22102 * @returns {boolean} Returns `true` if the values are equivalent, else `false`. 22103 */ 22104 function baseIsEqual(value, other, bitmask, customizer, stack) { 22105 if (value === other) { 22106 return true; 22107 } 22108 if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) { 22109 return value !== value && other !== other; 22110 } 22111 return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack); 22112 } 22113 22114 /** 22115 * A specialized version of `baseIsEqual` for arrays and objects which performs 22116 * deep comparisons and tracks traversed objects enabling objects with circular 22117 * references to be compared. 22118 * 22119 * @private 22120 * @param {Object} object The object to compare. 22121 * @param {Object} other The other object to compare. 22122 * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. 22123 * @param {Function} customizer The function to customize comparisons. 22124 * @param {Function} equalFunc The function to determine equivalents of values. 22125 * @param {Object} [stack] Tracks traversed `object` and `other` objects. 22126 * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. 22127 */ 22128 function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) { 22129 var objIsArr = isArray(object), 22130 othIsArr = isArray(other), 22131 objTag = objIsArr ? arrayTag : getTag(object), 22132 othTag = othIsArr ? arrayTag : getTag(other); 22133 22134 objTag = objTag == argsTag ? objectTag : objTag; 22135 othTag = othTag == argsTag ? objectTag : othTag; 22136 22137 var objIsObj = objTag == objectTag, 22138 othIsObj = othTag == objectTag, 22139 isSameTag = objTag == othTag; 22140 22141 if (isSameTag && isBuffer(object)) { 22142 if (!isBuffer(other)) { 22143 return false; 22144 } 22145 objIsArr = true; 22146 objIsObj = false; 22147 } 22148 if (isSameTag && !objIsObj) { 22149 stack || (stack = new Stack); 22150 return (objIsArr || isTypedArray(object)) 22151 ? equalArrays(object, other, bitmask, customizer, equalFunc, stack) 22152 : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack); 22153 } 22154 if (!(bitmask & COMPARE_PARTIAL_FLAG)) { 22155 var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'), 22156 othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__'); 22157 22158 if (objIsWrapped || othIsWrapped) { 22159 var objUnwrapped = objIsWrapped ? object.value() : object, 22160 othUnwrapped = othIsWrapped ? other.value() : other; 22161 22162 stack || (stack = new Stack); 22163 return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack); 22164 } 22165 } 22166 if (!isSameTag) { 22167 return false; 22168 } 22169 stack || (stack = new Stack); 22170 return equalObjects(object, other, bitmask, customizer, equalFunc, stack); 22171 } 22172 22173 /** 22174 * The base implementation of `_.isMap` without Node.js optimizations. 22175 * 22176 * @private 22177 * @param {*} value The value to check. 22178 * @returns {boolean} Returns `true` if `value` is a map, else `false`. 22179 */ 22180 function baseIsMap(value) { 22181 return isObjectLike(value) && getTag(value) == mapTag; 22182 } 22183 22184 /** 22185 * The base implementation of `_.isMatch` without support for iteratee shorthands. 22186 * 22187 * @private 22188 * @param {Object} object The object to inspect. 22189 * @param {Object} source The object of property values to match. 22190 * @param {Array} matchData The property names, values, and compare flags to match. 22191 * @param {Function} [customizer] The function to customize comparisons. 22192 * @returns {boolean} Returns `true` if `object` is a match, else `false`. 22193 */ 22194 function baseIsMatch(object, source, matchData, customizer) { 22195 var index = matchData.length, 22196 length = index, 22197 noCustomizer = !customizer; 22198 22199 if (object == null) { 22200 return !length; 22201 } 22202 object = Object(object); 22203 while (index--) { 22204 var data = matchData[index]; 22205 if ((noCustomizer && data[2]) 22206 ? data[1] !== object[data[0]] 22207 : !(data[0] in object) 22208 ) { 22209 return false; 22210 } 22211 } 22212 while (++index < length) { 22213 data = matchData[index]; 22214 var key = data[0], 22215 objValue = object[key], 22216 srcValue = data[1]; 22217 22218 if (noCustomizer && data[2]) { 22219 if (objValue === undefined && !(key in object)) { 22220 return false; 22221 } 22222 } else { 22223 var stack = new Stack; 22224 if (customizer) { 22225 var result = customizer(objValue, srcValue, key, object, source, stack); 22226 } 22227 if (!(result === undefined 22228 ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack) 22229 : result 22230 )) { 22231 return false; 22232 } 22233 } 22234 } 22235 return true; 22236 } 22237 22238 /** 22239 * The base implementation of `_.isNative` without bad shim checks. 22240 * 22241 * @private 22242 * @param {*} value The value to check. 22243 * @returns {boolean} Returns `true` if `value` is a native function, 22244 * else `false`. 22245 */ 22246 function baseIsNative(value) { 22247 if (!isObject(value) || isMasked(value)) { 22248 return false; 22249 } 22250 var pattern = isFunction(value) ? reIsNative : reIsHostCtor; 22251 return pattern.test(toSource(value)); 22252 } 22253 22254 /** 22255 * The base implementation of `_.isRegExp` without Node.js optimizations. 22256 * 22257 * @private 22258 * @param {*} value The value to check. 22259 * @returns {boolean} Returns `true` if `value` is a regexp, else `false`. 22260 */ 22261 function baseIsRegExp(value) { 22262 return isObjectLike(value) && baseGetTag(value) == regexpTag; 22263 } 22264 22265 /** 22266 * The base implementation of `_.isSet` without Node.js optimizations. 22267 * 22268 * @private 22269 * @param {*} value The value to check. 22270 * @returns {boolean} Returns `true` if `value` is a set, else `false`. 22271 */ 22272 function baseIsSet(value) { 22273 return isObjectLike(value) && getTag(value) == setTag; 22274 } 22275 22276 /** 22277 * The base implementation of `_.isTypedArray` without Node.js optimizations. 22278 * 22279 * @private 22280 * @param {*} value The value to check. 22281 * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. 22282 */ 22283 function baseIsTypedArray(value) { 22284 return isObjectLike(value) && 22285 isLength(value.length) && !!typedArrayTags[baseGetTag(value)]; 22286 } 22287 22288 /** 22289 * The base implementation of `_.iteratee`. 22290 * 22291 * @private 22292 * @param {*} [value=_.identity] The value to convert to an iteratee. 22293 * @returns {Function} Returns the iteratee. 22294 */ 22295 function baseIteratee(value) { 22296 // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9. 22297 // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details. 22298 if (typeof value == 'function') { 22299 return value; 22300 } 22301 if (value == null) { 22302 return identity; 22303 } 22304 if (typeof value == 'object') { 22305 return isArray(value) 22306 ? baseMatchesProperty(value[0], value[1]) 22307 : baseMatches(value); 22308 } 22309 return property(value); 22310 } 22311 22312 /** 22313 * The base implementation of `_.keys` which doesn't treat sparse arrays as dense. 22314 * 22315 * @private 22316 * @param {Object} object The object to query. 22317 * @returns {Array} Returns the array of property names. 22318 */ 22319 function baseKeys(object) { 22320 if (!isPrototype(object)) { 22321 return nativeKeys(object); 22322 } 22323 var result = []; 22324 for (var key in Object(object)) { 22325 if (hasOwnProperty.call(object, key) && key != 'constructor') { 22326 result.push(key); 22327 } 22328 } 22329 return result; 22330 } 22331 22332 /** 22333 * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense. 22334 * 22335 * @private 22336 * @param {Object} object The object to query. 22337 * @returns {Array} Returns the array of property names. 22338 */ 22339 function baseKeysIn(object) { 22340 if (!isObject(object)) { 22341 return nativeKeysIn(object); 22342 } 22343 var isProto = isPrototype(object), 22344 result = []; 22345 22346 for (var key in object) { 22347 if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) { 22348 result.push(key); 22349 } 22350 } 22351 return result; 22352 } 22353 22354 /** 22355 * The base implementation of `_.lt` which doesn't coerce arguments. 22356 * 22357 * @private 22358 * @param {*} value The value to compare. 22359 * @param {*} other The other value to compare. 22360 * @returns {boolean} Returns `true` if `value` is less than `other`, 22361 * else `false`. 22362 */ 22363 function baseLt(value, other) { 22364 return value < other; 22365 } 22366 22367 /** 22368 * The base implementation of `_.map` without support for iteratee shorthands. 22369 * 22370 * @private 22371 * @param {Array|Object} collection The collection to iterate over. 22372 * @param {Function} iteratee The function invoked per iteration. 22373 * @returns {Array} Returns the new mapped array. 22374 */ 22375 function baseMap(collection, iteratee) { 22376 var index = -1, 22377 result = isArrayLike(collection) ? Array(collection.length) : []; 22378 22379 baseEach(collection, function(value, key, collection) { 22380 result[++index] = iteratee(value, key, collection); 22381 }); 22382 return result; 22383 } 22384 22385 /** 22386 * The base implementation of `_.matches` which doesn't clone `source`. 22387 * 22388 * @private 22389 * @param {Object} source The object of property values to match. 22390 * @returns {Function} Returns the new spec function. 22391 */ 22392 function baseMatches(source) { 22393 var matchData = getMatchData(source); 22394 if (matchData.length == 1 && matchData[0][2]) { 22395 return matchesStrictComparable(matchData[0][0], matchData[0][1]); 22396 } 22397 return function(object) { 22398 return object === source || baseIsMatch(object, source, matchData); 22399 }; 22400 } 22401 22402 /** 22403 * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`. 22404 * 22405 * @private 22406 * @param {string} path The path of the property to get. 22407 * @param {*} srcValue The value to match. 22408 * @returns {Function} Returns the new spec function. 22409 */ 22410 function baseMatchesProperty(path, srcValue) { 22411 if (isKey(path) && isStrictComparable(srcValue)) { 22412 return matchesStrictComparable(toKey(path), srcValue); 22413 } 22414 return function(object) { 22415 var objValue = get(object, path); 22416 return (objValue === undefined && objValue === srcValue) 22417 ? hasIn(object, path) 22418 : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG); 22419 }; 22420 } 22421 22422 /** 22423 * The base implementation of `_.merge` without support for multiple sources. 22424 * 22425 * @private 22426 * @param {Object} object The destination object. 22427 * @param {Object} source The source object. 22428 * @param {number} srcIndex The index of `source`. 22429 * @param {Function} [customizer] The function to customize merged values. 22430 * @param {Object} [stack] Tracks traversed source values and their merged 22431 * counterparts. 22432 */ 22433 function baseMerge(object, source, srcIndex, customizer, stack) { 22434 if (object === source) { 22435 return; 22436 } 22437 baseFor(source, function(srcValue, key) { 22438 stack || (stack = new Stack); 22439 if (isObject(srcValue)) { 22440 baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack); 22441 } 22442 else { 22443 var newValue = customizer 22444 ? customizer(safeGet(object, key), srcValue, (key + ''), object, source, stack) 22445 : undefined; 22446 22447 if (newValue === undefined) { 22448 newValue = srcValue; 22449 } 22450 assignMergeValue(object, key, newValue); 22451 } 22452 }, keysIn); 22453 } 22454 22455 /** 22456 * A specialized version of `baseMerge` for arrays and objects which performs 22457 * deep merges and tracks traversed objects enabling objects with circular 22458 * references to be merged. 22459 * 22460 * @private 22461 * @param {Object} object The destination object. 22462 * @param {Object} source The source object. 22463 * @param {string} key The key of the value to merge. 22464 * @param {number} srcIndex The index of `source`. 22465 * @param {Function} mergeFunc The function to merge values. 22466 * @param {Function} [customizer] The function to customize assigned values. 22467 * @param {Object} [stack] Tracks traversed source values and their merged 22468 * counterparts. 22469 */ 22470 function baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) { 22471 var objValue = safeGet(object, key), 22472 srcValue = safeGet(source, key), 22473 stacked = stack.get(srcValue); 22474 22475 if (stacked) { 22476 assignMergeValue(object, key, stacked); 22477 return; 22478 } 22479 var newValue = customizer 22480 ? customizer(objValue, srcValue, (key + ''), object, source, stack) 22481 : undefined; 22482 22483 var isCommon = newValue === undefined; 22484 22485 if (isCommon) { 22486 var isArr = isArray(srcValue), 22487 isBuff = !isArr && isBuffer(srcValue), 22488 isTyped = !isArr && !isBuff && isTypedArray(srcValue); 22489 22490 newValue = srcValue; 22491 if (isArr || isBuff || isTyped) { 22492 if (isArray(objValue)) { 22493 newValue = objValue; 22494 } 22495 else if (isArrayLikeObject(objValue)) { 22496 newValue = copyArray(objValue); 22497 } 22498 else if (isBuff) { 22499 isCommon = false; 22500 newValue = cloneBuffer(srcValue, true); 22501 } 22502 else if (isTyped) { 22503 isCommon = false; 22504 newValue = cloneTypedArray(srcValue, true); 22505 } 22506 else { 22507 newValue = []; 22508 } 22509 } 22510 else if (isPlainObject(srcValue) || isArguments(srcValue)) { 22511 newValue = objValue; 22512 if (isArguments(objValue)) { 22513 newValue = toPlainObject(objValue); 22514 } 22515 else if (!isObject(objValue) || isFunction(objValue)) { 22516 newValue = initCloneObject(srcValue); 22517 } 22518 } 22519 else { 22520 isCommon = false; 22521 } 22522 } 22523 if (isCommon) { 22524 // Recursively merge objects and arrays (susceptible to call stack limits). 22525 stack.set(srcValue, newValue); 22526 mergeFunc(newValue, srcValue, srcIndex, customizer, stack); 22527 stack['delete'](srcValue); 22528 } 22529 assignMergeValue(object, key, newValue); 22530 } 22531 22532 /** 22533 * The base implementation of `_.nth` which doesn't coerce arguments. 22534 * 22535 * @private 22536 * @param {Array} array The array to query. 22537 * @param {number} n The index of the element to return. 22538 * @returns {*} Returns the nth element of `array`. 22539 */ 22540 function baseNth(array, n) { 22541 var length = array.length; 22542 if (!length) { 22543 return; 22544 } 22545 n += n < 0 ? length : 0; 22546 return isIndex(n, length) ? array[n] : undefined; 22547 } 22548 22549 /** 22550 * The base implementation of `_.orderBy` without param guards. 22551 * 22552 * @private 22553 * @param {Array|Object} collection The collection to iterate over. 22554 * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by. 22555 * @param {string[]} orders The sort orders of `iteratees`. 22556 * @returns {Array} Returns the new sorted array. 22557 */ 22558 function baseOrderBy(collection, iteratees, orders) { 22559 if (iteratees.length) { 22560 iteratees = arrayMap(iteratees, function(iteratee) { 22561 if (isArray(iteratee)) { 22562 return function(value) { 22563 return baseGet(value, iteratee.length === 1 ? iteratee[0] : iteratee); 22564 } 22565 } 22566 return iteratee; 22567 }); 22568 } else { 22569 iteratees = [identity]; 22570 } 22571 22572 var index = -1; 22573 iteratees = arrayMap(iteratees, baseUnary(getIteratee())); 22574 22575 var result = baseMap(collection, function(value, key, collection) { 22576 var criteria = arrayMap(iteratees, function(iteratee) { 22577 return iteratee(value); 22578 }); 22579 return { 'criteria': criteria, 'index': ++index, 'value': value }; 22580 }); 22581 22582 return baseSortBy(result, function(object, other) { 22583 return compareMultiple(object, other, orders); 22584 }); 22585 } 22586 22587 /** 22588 * The base implementation of `_.pick` without support for individual 22589 * property identifiers. 22590 * 22591 * @private 22592 * @param {Object} object The source object. 22593 * @param {string[]} paths The property paths to pick. 22594 * @returns {Object} Returns the new object. 22595 */ 22596 function basePick(object, paths) { 22597 return basePickBy(object, paths, function(value, path) { 22598 return hasIn(object, path); 22599 }); 22600 } 22601 22602 /** 22603 * The base implementation of `_.pickBy` without support for iteratee shorthands. 22604 * 22605 * @private 22606 * @param {Object} object The source object. 22607 * @param {string[]} paths The property paths to pick. 22608 * @param {Function} predicate The function invoked per property. 22609 * @returns {Object} Returns the new object. 22610 */ 22611 function basePickBy(object, paths, predicate) { 22612 var index = -1, 22613 length = paths.length, 22614 result = {}; 22615 22616 while (++index < length) { 22617 var path = paths[index], 22618 value = baseGet(object, path); 22619 22620 if (predicate(value, path)) { 22621 baseSet(result, castPath(path, object), value); 22622 } 22623 } 22624 return result; 22625 } 22626 22627 /** 22628 * A specialized version of `baseProperty` which supports deep paths. 22629 * 22630 * @private 22631 * @param {Array|string} path The path of the property to get. 22632 * @returns {Function} Returns the new accessor function. 22633 */ 22634 function basePropertyDeep(path) { 22635 return function(object) { 22636 return baseGet(object, path); 22637 }; 22638 } 22639 22640 /** 22641 * The base implementation of `_.pullAllBy` without support for iteratee 22642 * shorthands. 22643 * 22644 * @private 22645 * @param {Array} array The array to modify. 22646 * @param {Array} values The values to remove. 22647 * @param {Function} [iteratee] The iteratee invoked per element. 22648 * @param {Function} [comparator] The comparator invoked per element. 22649 * @returns {Array} Returns `array`. 22650 */ 22651 function basePullAll(array, values, iteratee, comparator) { 22652 var indexOf = comparator ? baseIndexOfWith : baseIndexOf, 22653 index = -1, 22654 length = values.length, 22655 seen = array; 22656 22657 if (array === values) { 22658 values = copyArray(values); 22659 } 22660 if (iteratee) { 22661 seen = arrayMap(array, baseUnary(iteratee)); 22662 } 22663 while (++index < length) { 22664 var fromIndex = 0, 22665 value = values[index], 22666 computed = iteratee ? iteratee(value) : value; 22667 22668 while ((fromIndex = indexOf(seen, computed, fromIndex, comparator)) > -1) { 22669 if (seen !== array) { 22670 splice.call(seen, fromIndex, 1); 22671 } 22672 splice.call(array, fromIndex, 1); 22673 } 22674 } 22675 return array; 22676 } 22677 22678 /** 22679 * The base implementation of `_.pullAt` without support for individual 22680 * indexes or capturing the removed elements. 22681 * 22682 * @private 22683 * @param {Array} array The array to modify. 22684 * @param {number[]} indexes The indexes of elements to remove. 22685 * @returns {Array} Returns `array`. 22686 */ 22687 function basePullAt(array, indexes) { 22688 var length = array ? indexes.length : 0, 22689 lastIndex = length - 1; 22690 22691 while (length--) { 22692 var index = indexes[length]; 22693 if (length == lastIndex || index !== previous) { 22694 var previous = index; 22695 if (isIndex(index)) { 22696 splice.call(array, index, 1); 22697 } else { 22698 baseUnset(array, index); 22699 } 22700 } 22701 } 22702 return array; 22703 } 22704 22705 /** 22706 * The base implementation of `_.random` without support for returning 22707 * floating-point numbers. 22708 * 22709 * @private 22710 * @param {number} lower The lower bound. 22711 * @param {number} upper The upper bound. 22712 * @returns {number} Returns the random number. 22713 */ 22714 function baseRandom(lower, upper) { 22715 return lower + nativeFloor(nativeRandom() * (upper - lower + 1)); 22716 } 22717 22718 /** 22719 * The base implementation of `_.range` and `_.rangeRight` which doesn't 22720 * coerce arguments. 22721 * 22722 * @private 22723 * @param {number} start The start of the range. 22724 * @param {number} end The end of the range. 22725 * @param {number} step The value to increment or decrement by. 22726 * @param {boolean} [fromRight] Specify iterating from right to left. 22727 * @returns {Array} Returns the range of numbers. 22728 */ 22729 function baseRange(start, end, step, fromRight) { 22730 var index = -1, 22731 length = nativeMax(nativeCeil((end - start) / (step || 1)), 0), 22732 result = Array(length); 22733 22734 while (length--) { 22735 result[fromRight ? length : ++index] = start; 22736 start += step; 22737 } 22738 return result; 22739 } 22740 22741 /** 22742 * The base implementation of `_.repeat` which doesn't coerce arguments. 22743 * 22744 * @private 22745 * @param {string} string The string to repeat. 22746 * @param {number} n The number of times to repeat the string. 22747 * @returns {string} Returns the repeated string. 22748 */ 22749 function baseRepeat(string, n) { 22750 var result = ''; 22751 if (!string || n < 1 || n > MAX_SAFE_INTEGER) { 22752 return result; 22753 } 22754 // Leverage the exponentiation by squaring algorithm for a faster repeat. 22755 // See https://en.wikipedia.org/wiki/Exponentiation_by_squaring for more details. 22756 do { 22757 if (n % 2) { 22758 result += string; 22759 } 22760 n = nativeFloor(n / 2); 22761 if (n) { 22762 string += string; 22763 } 22764 } while (n); 22765 22766 return result; 22767 } 22768 22769 /** 22770 * The base implementation of `_.rest` which doesn't validate or coerce arguments. 22771 * 22772 * @private 22773 * @param {Function} func The function to apply a rest parameter to. 22774 * @param {number} [start=func.length-1] The start position of the rest parameter. 22775 * @returns {Function} Returns the new function. 22776 */ 22777 function baseRest(func, start) { 22778 return setToString(overRest(func, start, identity), func + ''); 22779 } 22780 22781 /** 22782 * The base implementation of `_.sample`. 22783 * 22784 * @private 22785 * @param {Array|Object} collection The collection to sample. 22786 * @returns {*} Returns the random element. 22787 */ 22788 function baseSample(collection) { 22789 return arraySample(values(collection)); 22790 } 22791 22792 /** 22793 * The base implementation of `_.sampleSize` without param guards. 22794 * 22795 * @private 22796 * @param {Array|Object} collection The collection to sample. 22797 * @param {number} n The number of elements to sample. 22798 * @returns {Array} Returns the random elements. 22799 */ 22800 function baseSampleSize(collection, n) { 22801 var array = values(collection); 22802 return shuffleSelf(array, baseClamp(n, 0, array.length)); 22803 } 22804 22805 /** 22806 * The base implementation of `_.set`. 22807 * 22808 * @private 22809 * @param {Object} object The object to modify. 22810 * @param {Array|string} path The path of the property to set. 22811 * @param {*} value The value to set. 22812 * @param {Function} [customizer] The function to customize path creation. 22813 * @returns {Object} Returns `object`. 22814 */ 22815 function baseSet(object, path, value, customizer) { 22816 if (!isObject(object)) { 22817 return object; 22818 } 22819 path = castPath(path, object); 22820 22821 var index = -1, 22822 length = path.length, 22823 lastIndex = length - 1, 22824 nested = object; 22825 22826 while (nested != null && ++index < length) { 22827 var key = toKey(path[index]), 22828 newValue = value; 22829 22830 if (key === '__proto__' || key === 'constructor' || key === 'prototype') { 22831 return object; 22832 } 22833 22834 if (index != lastIndex) { 22835 var objValue = nested[key]; 22836 newValue = customizer ? customizer(objValue, key, nested) : undefined; 22837 if (newValue === undefined) { 22838 newValue = isObject(objValue) 22839 ? objValue 22840 : (isIndex(path[index + 1]) ? [] : {}); 22841 } 22842 } 22843 assignValue(nested, key, newValue); 22844 nested = nested[key]; 22845 } 22846 return object; 22847 } 22848 22849 /** 22850 * The base implementation of `setData` without support for hot loop shorting. 22851 * 22852 * @private 22853 * @param {Function} func The function to associate metadata with. 22854 * @param {*} data The metadata. 22855 * @returns {Function} Returns `func`. 22856 */ 22857 var baseSetData = !metaMap ? identity : function(func, data) { 22858 metaMap.set(func, data); 22859 return func; 22860 }; 22861 22862 /** 22863 * The base implementation of `setToString` without support for hot loop shorting. 22864 * 22865 * @private 22866 * @param {Function} func The function to modify. 22867 * @param {Function} string The `toString` result. 22868 * @returns {Function} Returns `func`. 22869 */ 22870 var baseSetToString = !defineProperty ? identity : function(func, string) { 22871 return defineProperty(func, 'toString', { 22872 'configurable': true, 22873 'enumerable': false, 22874 'value': constant(string), 22875 'writable': true 22876 }); 22877 }; 22878 22879 /** 22880 * The base implementation of `_.shuffle`. 22881 * 22882 * @private 22883 * @param {Array|Object} collection The collection to shuffle. 22884 * @returns {Array} Returns the new shuffled array. 22885 */ 22886 function baseShuffle(collection) { 22887 return shuffleSelf(values(collection)); 22888 } 22889 22890 /** 22891 * The base implementation of `_.slice` without an iteratee call guard. 22892 * 22893 * @private 22894 * @param {Array} array The array to slice. 22895 * @param {number} [start=0] The start position. 22896 * @param {number} [end=array.length] The end position. 22897 * @returns {Array} Returns the slice of `array`. 22898 */ 22899 function baseSlice(array, start, end) { 22900 var index = -1, 22901 length = array.length; 22902 22903 if (start < 0) { 22904 start = -start > length ? 0 : (length + start); 22905 } 22906 end = end > length ? length : end; 22907 if (end < 0) { 22908 end += length; 22909 } 22910 length = start > end ? 0 : ((end - start) >>> 0); 22911 start >>>= 0; 22912 22913 var result = Array(length); 22914 while (++index < length) { 22915 result[index] = array[index + start]; 22916 } 22917 return result; 22918 } 22919 22920 /** 22921 * The base implementation of `_.some` without support for iteratee shorthands. 22922 * 22923 * @private 22924 * @param {Array|Object} collection The collection to iterate over. 22925 * @param {Function} predicate The function invoked per iteration. 22926 * @returns {boolean} Returns `true` if any element passes the predicate check, 22927 * else `false`. 22928 */ 22929 function baseSome(collection, predicate) { 22930 var result; 22931 22932 baseEach(collection, function(value, index, collection) { 22933 result = predicate(value, index, collection); 22934 return !result; 22935 }); 22936 return !!result; 22937 } 22938 22939 /** 22940 * The base implementation of `_.sortedIndex` and `_.sortedLastIndex` which 22941 * performs a binary search of `array` to determine the index at which `value` 22942 * should be inserted into `array` in order to maintain its sort order. 22943 * 22944 * @private 22945 * @param {Array} array The sorted array to inspect. 22946 * @param {*} value The value to evaluate. 22947 * @param {boolean} [retHighest] Specify returning the highest qualified index. 22948 * @returns {number} Returns the index at which `value` should be inserted 22949 * into `array`. 22950 */ 22951 function baseSortedIndex(array, value, retHighest) { 22952 var low = 0, 22953 high = array == null ? low : array.length; 22954 22955 if (typeof value == 'number' && value === value && high <= HALF_MAX_ARRAY_LENGTH) { 22956 while (low < high) { 22957 var mid = (low + high) >>> 1, 22958 computed = array[mid]; 22959 22960 if (computed !== null && !isSymbol(computed) && 22961 (retHighest ? (computed <= value) : (computed < value))) { 22962 low = mid + 1; 22963 } else { 22964 high = mid; 22965 } 22966 } 22967 return high; 22968 } 22969 return baseSortedIndexBy(array, value, identity, retHighest); 22970 } 22971 22972 /** 22973 * The base implementation of `_.sortedIndexBy` and `_.sortedLastIndexBy` 22974 * which invokes `iteratee` for `value` and each element of `array` to compute 22975 * their sort ranking. The iteratee is invoked with one argument; (value). 22976 * 22977 * @private 22978 * @param {Array} array The sorted array to inspect. 22979 * @param {*} value The value to evaluate. 22980 * @param {Function} iteratee The iteratee invoked per element. 22981 * @param {boolean} [retHighest] Specify returning the highest qualified index. 22982 * @returns {number} Returns the index at which `value` should be inserted 22983 * into `array`. 22984 */ 22985 function baseSortedIndexBy(array, value, iteratee, retHighest) { 22986 var low = 0, 22987 high = array == null ? 0 : array.length; 22988 if (high === 0) { 22989 return 0; 22990 } 22991 22992 value = iteratee(value); 22993 var valIsNaN = value !== value, 22994 valIsNull = value === null, 22995 valIsSymbol = isSymbol(value), 22996 valIsUndefined = value === undefined; 22997 22998 while (low < high) { 22999 var mid = nativeFloor((low + high) / 2), 23000 computed = iteratee(array[mid]), 23001 othIsDefined = computed !== undefined, 23002 othIsNull = computed === null, 23003 othIsReflexive = computed === computed, 23004 othIsSymbol = isSymbol(computed); 23005 23006 if (valIsNaN) { 23007 var setLow = retHighest || othIsReflexive; 23008 } else if (valIsUndefined) { 23009 setLow = othIsReflexive && (retHighest || othIsDefined); 23010 } else if (valIsNull) { 23011 setLow = othIsReflexive && othIsDefined && (retHighest || !othIsNull); 23012 } else if (valIsSymbol) { 23013 setLow = othIsReflexive && othIsDefined && !othIsNull && (retHighest || !othIsSymbol); 23014 } else if (othIsNull || othIsSymbol) { 23015 setLow = false; 23016 } else { 23017 setLow = retHighest ? (computed <= value) : (computed < value); 23018 } 23019 if (setLow) { 23020 low = mid + 1; 23021 } else { 23022 high = mid; 23023 } 23024 } 23025 return nativeMin(high, MAX_ARRAY_INDEX); 23026 } 23027 23028 /** 23029 * The base implementation of `_.sortedUniq` and `_.sortedUniqBy` without 23030 * support for iteratee shorthands. 23031 * 23032 * @private 23033 * @param {Array} array The array to inspect. 23034 * @param {Function} [iteratee] The iteratee invoked per element. 23035 * @returns {Array} Returns the new duplicate free array. 23036 */ 23037 function baseSortedUniq(array, iteratee) { 23038 var index = -1, 23039 length = array.length, 23040 resIndex = 0, 23041 result = []; 23042 23043 while (++index < length) { 23044 var value = array[index], 23045 computed = iteratee ? iteratee(value) : value; 23046 23047 if (!index || !eq(computed, seen)) { 23048 var seen = computed; 23049 result[resIndex++] = value === 0 ? 0 : value; 23050 } 23051 } 23052 return result; 23053 } 23054 23055 /** 23056 * The base implementation of `_.toNumber` which doesn't ensure correct 23057 * conversions of binary, hexadecimal, or octal string values. 23058 * 23059 * @private 23060 * @param {*} value The value to process. 23061 * @returns {number} Returns the number. 23062 */ 23063 function baseToNumber(value) { 23064 if (typeof value == 'number') { 23065 return value; 23066 } 23067 if (isSymbol(value)) { 23068 return NAN; 23069 } 23070 return +value; 23071 } 23072 23073 /** 23074 * The base implementation of `_.toString` which doesn't convert nullish 23075 * values to empty strings. 23076 * 23077 * @private 23078 * @param {*} value The value to process. 23079 * @returns {string} Returns the string. 23080 */ 23081 function baseToString(value) { 23082 // Exit early for strings to avoid a performance hit in some environments. 23083 if (typeof value == 'string') { 23084 return value; 23085 } 23086 if (isArray(value)) { 23087 // Recursively convert values (susceptible to call stack limits). 23088 return arrayMap(value, baseToString) + ''; 23089 } 23090 if (isSymbol(value)) { 23091 return symbolToString ? symbolToString.call(value) : ''; 23092 } 23093 var result = (value + ''); 23094 return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; 23095 } 23096 23097 /** 23098 * The base implementation of `_.uniqBy` without support for iteratee shorthands. 23099 * 23100 * @private 23101 * @param {Array} array The array to inspect. 23102 * @param {Function} [iteratee] The iteratee invoked per element. 23103 * @param {Function} [comparator] The comparator invoked per element. 23104 * @returns {Array} Returns the new duplicate free array. 23105 */ 23106 function baseUniq(array, iteratee, comparator) { 23107 var index = -1, 23108 includes = arrayIncludes, 23109 length = array.length, 23110 isCommon = true, 23111 result = [], 23112 seen = result; 23113 23114 if (comparator) { 23115 isCommon = false; 23116 includes = arrayIncludesWith; 23117 } 23118 else if (length >= LARGE_ARRAY_SIZE) { 23119 var set = iteratee ? null : createSet(array); 23120 if (set) { 23121 return setToArray(set); 23122 } 23123 isCommon = false; 23124 includes = cacheHas; 23125 seen = new SetCache; 23126 } 23127 else { 23128 seen = iteratee ? [] : result; 23129 } 23130 outer: 23131 while (++index < length) { 23132 var value = array[index], 23133 computed = iteratee ? iteratee(value) : value; 23134 23135 value = (comparator || value !== 0) ? value : 0; 23136 if (isCommon && computed === computed) { 23137 var seenIndex = seen.length; 23138 while (seenIndex--) { 23139 if (seen[seenIndex] === computed) { 23140 continue outer; 23141 } 23142 } 23143 if (iteratee) { 23144 seen.push(computed); 23145 } 23146 result.push(value); 23147 } 23148 else if (!includes(seen, computed, comparator)) { 23149 if (seen !== result) { 23150 seen.push(computed); 23151 } 23152 result.push(value); 23153 } 23154 } 23155 return result; 23156 } 23157 23158 /** 23159 * The base implementation of `_.unset`. 23160 * 23161 * @private 23162 * @param {Object} object The object to modify. 23163 * @param {Array|string} path The property path to unset. 23164 * @returns {boolean} Returns `true` if the property is deleted, else `false`. 23165 */ 23166 function baseUnset(object, path) { 23167 path = castPath(path, object); 23168 object = parent(object, path); 23169 return object == null || delete object[toKey(last(path))]; 23170 } 23171 23172 /** 23173 * The base implementation of `_.update`. 23174 * 23175 * @private 23176 * @param {Object} object The object to modify. 23177 * @param {Array|string} path The path of the property to update. 23178 * @param {Function} updater The function to produce the updated value. 23179 * @param {Function} [customizer] The function to customize path creation. 23180 * @returns {Object} Returns `object`. 23181 */ 23182 function baseUpdate(object, path, updater, customizer) { 23183 return baseSet(object, path, updater(baseGet(object, path)), customizer); 23184 } 23185 23186 /** 23187 * The base implementation of methods like `_.dropWhile` and `_.takeWhile` 23188 * without support for iteratee shorthands. 23189 * 23190 * @private 23191 * @param {Array} array The array to query. 23192 * @param {Function} predicate The function invoked per iteration. 23193 * @param {boolean} [isDrop] Specify dropping elements instead of taking them. 23194 * @param {boolean} [fromRight] Specify iterating from right to left. 23195 * @returns {Array} Returns the slice of `array`. 23196 */ 23197 function baseWhile(array, predicate, isDrop, fromRight) { 23198 var length = array.length, 23199 index = fromRight ? length : -1; 23200 23201 while ((fromRight ? index-- : ++index < length) && 23202 predicate(array[index], index, array)) {} 23203 23204 return isDrop 23205 ? baseSlice(array, (fromRight ? 0 : index), (fromRight ? index + 1 : length)) 23206 : baseSlice(array, (fromRight ? index + 1 : 0), (fromRight ? length : index)); 23207 } 23208 23209 /** 23210 * The base implementation of `wrapperValue` which returns the result of 23211 * performing a sequence of actions on the unwrapped `value`, where each 23212 * successive action is supplied the return value of the previous. 23213 * 23214 * @private 23215 * @param {*} value The unwrapped value. 23216 * @param {Array} actions Actions to perform to resolve the unwrapped value. 23217 * @returns {*} Returns the resolved value. 23218 */ 23219 function baseWrapperValue(value, actions) { 23220 var result = value; 23221 if (result instanceof LazyWrapper) { 23222 result = result.value(); 23223 } 23224 return arrayReduce(actions, function(result, action) { 23225 return action.func.apply(action.thisArg, arrayPush([result], action.args)); 23226 }, result); 23227 } 23228 23229 /** 23230 * The base implementation of methods like `_.xor`, without support for 23231 * iteratee shorthands, that accepts an array of arrays to inspect. 23232 * 23233 * @private 23234 * @param {Array} arrays The arrays to inspect. 23235 * @param {Function} [iteratee] The iteratee invoked per element. 23236 * @param {Function} [comparator] The comparator invoked per element. 23237 * @returns {Array} Returns the new array of values. 23238 */ 23239 function baseXor(arrays, iteratee, comparator) { 23240 var length = arrays.length; 23241 if (length < 2) { 23242 return length ? baseUniq(arrays[0]) : []; 23243 } 23244 var index = -1, 23245 result = Array(length); 23246 23247 while (++index < length) { 23248 var array = arrays[index], 23249 othIndex = -1; 23250 23251 while (++othIndex < length) { 23252 if (othIndex != index) { 23253 result[index] = baseDifference(result[index] || array, arrays[othIndex], iteratee, comparator); 23254 } 23255 } 23256 } 23257 return baseUniq(baseFlatten(result, 1), iteratee, comparator); 23258 } 23259 23260 /** 23261 * This base implementation of `_.zipObject` which assigns values using `assignFunc`. 23262 * 23263 * @private 23264 * @param {Array} props The property identifiers. 23265 * @param {Array} values The property values. 23266 * @param {Function} assignFunc The function to assign values. 23267 * @returns {Object} Returns the new object. 23268 */ 23269 function baseZipObject(props, values, assignFunc) { 23270 var index = -1, 23271 length = props.length, 23272 valsLength = values.length, 23273 result = {}; 23274 23275 while (++index < length) { 23276 var value = index < valsLength ? values[index] : undefined; 23277 assignFunc(result, props[index], value); 23278 } 23279 return result; 23280 } 23281 23282 /** 23283 * Casts `value` to an empty array if it's not an array like object. 23284 * 23285 * @private 23286 * @param {*} value The value to inspect. 23287 * @returns {Array|Object} Returns the cast array-like object. 23288 */ 23289 function castArrayLikeObject(value) { 23290 return isArrayLikeObject(value) ? value : []; 23291 } 23292 23293 /** 23294 * Casts `value` to `identity` if it's not a function. 23295 * 23296 * @private 23297 * @param {*} value The value to inspect. 23298 * @returns {Function} Returns cast function. 23299 */ 23300 function castFunction(value) { 23301 return typeof value == 'function' ? value : identity; 23302 } 23303 23304 /** 23305 * Casts `value` to a path array if it's not one. 23306 * 23307 * @private 23308 * @param {*} value The value to inspect. 23309 * @param {Object} [object] The object to query keys on. 23310 * @returns {Array} Returns the cast property path array. 23311 */ 23312 function castPath(value, object) { 23313 if (isArray(value)) { 23314 return value; 23315 } 23316 return isKey(value, object) ? [value] : stringToPath(toString(value)); 23317 } 23318 23319 /** 23320 * A `baseRest` alias which can be replaced with `identity` by module 23321 * replacement plugins. 23322 * 23323 * @private 23324 * @type {Function} 23325 * @param {Function} func The function to apply a rest parameter to. 23326 * @returns {Function} Returns the new function. 23327 */ 23328 var castRest = baseRest; 23329 23330 /** 23331 * Casts `array` to a slice if it's needed. 23332 * 23333 * @private 23334 * @param {Array} array The array to inspect. 23335 * @param {number} start The start position. 23336 * @param {number} [end=array.length] The end position. 23337 * @returns {Array} Returns the cast slice. 23338 */ 23339 function castSlice(array, start, end) { 23340 var length = array.length; 23341 end = end === undefined ? length : end; 23342 return (!start && end >= length) ? array : baseSlice(array, start, end); 23343 } 23344 23345 /** 23346 * A simple wrapper around the global [`clearTimeout`](https://mdn.io/clearTimeout). 23347 * 23348 * @private 23349 * @param {number|Object} id The timer id or timeout object of the timer to clear. 23350 */ 23351 var clearTimeout = ctxClearTimeout || function(id) { 23352 return root.clearTimeout(id); 23353 }; 23354 23355 /** 23356 * Creates a clone of `buffer`. 23357 * 23358 * @private 23359 * @param {Buffer} buffer The buffer to clone. 23360 * @param {boolean} [isDeep] Specify a deep clone. 23361 * @returns {Buffer} Returns the cloned buffer. 23362 */ 23363 function cloneBuffer(buffer, isDeep) { 23364 if (isDeep) { 23365 return buffer.slice(); 23366 } 23367 var length = buffer.length, 23368 result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length); 23369 23370 buffer.copy(result); 23371 return result; 23372 } 23373 23374 /** 23375 * Creates a clone of `arrayBuffer`. 23376 * 23377 * @private 23378 * @param {ArrayBuffer} arrayBuffer The array buffer to clone. 23379 * @returns {ArrayBuffer} Returns the cloned array buffer. 23380 */ 23381 function cloneArrayBuffer(arrayBuffer) { 23382 var result = new arrayBuffer.constructor(arrayBuffer.byteLength); 23383 new Uint8Array(result).set(new Uint8Array(arrayBuffer)); 23384 return result; 23385 } 23386 23387 /** 23388 * Creates a clone of `dataView`. 23389 * 23390 * @private 23391 * @param {Object} dataView The data view to clone. 23392 * @param {boolean} [isDeep] Specify a deep clone. 23393 * @returns {Object} Returns the cloned data view. 23394 */ 23395 function cloneDataView(dataView, isDeep) { 23396 var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer; 23397 return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength); 23398 } 23399 23400 /** 23401 * Creates a clone of `regexp`. 23402 * 23403 * @private 23404 * @param {Object} regexp The regexp to clone. 23405 * @returns {Object} Returns the cloned regexp. 23406 */ 23407 function cloneRegExp(regexp) { 23408 var result = new regexp.constructor(regexp.source, reFlags.exec(regexp)); 23409 result.lastIndex = regexp.lastIndex; 23410 return result; 23411 } 23412 23413 /** 23414 * Creates a clone of the `symbol` object. 23415 * 23416 * @private 23417 * @param {Object} symbol The symbol object to clone. 23418 * @returns {Object} Returns the cloned symbol object. 23419 */ 23420 function cloneSymbol(symbol) { 23421 return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {}; 23422 } 23423 23424 /** 23425 * Creates a clone of `typedArray`. 23426 * 23427 * @private 23428 * @param {Object} typedArray The typed array to clone. 23429 * @param {boolean} [isDeep] Specify a deep clone. 23430 * @returns {Object} Returns the cloned typed array. 23431 */ 23432 function cloneTypedArray(typedArray, isDeep) { 23433 var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer; 23434 return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length); 23435 } 23436 23437 /** 23438 * Compares values to sort them in ascending order. 23439 * 23440 * @private 23441 * @param {*} value The value to compare. 23442 * @param {*} other The other value to compare. 23443 * @returns {number} Returns the sort order indicator for `value`. 23444 */ 23445 function compareAscending(value, other) { 23446 if (value !== other) { 23447 var valIsDefined = value !== undefined, 23448 valIsNull = value === null, 23449 valIsReflexive = value === value, 23450 valIsSymbol = isSymbol(value); 23451 23452 var othIsDefined = other !== undefined, 23453 othIsNull = other === null, 23454 othIsReflexive = other === other, 23455 othIsSymbol = isSymbol(other); 23456 23457 if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) || 23458 (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) || 23459 (valIsNull && othIsDefined && othIsReflexive) || 23460 (!valIsDefined && othIsReflexive) || 23461 !valIsReflexive) { 23462 return 1; 23463 } 23464 if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) || 23465 (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) || 23466 (othIsNull && valIsDefined && valIsReflexive) || 23467 (!othIsDefined && valIsReflexive) || 23468 !othIsReflexive) { 23469 return -1; 23470 } 23471 } 23472 return 0; 23473 } 23474 23475 /** 23476 * Used by `_.orderBy` to compare multiple properties of a value to another 23477 * and stable sort them. 23478 * 23479 * If `orders` is unspecified, all values are sorted in ascending order. Otherwise, 23480 * specify an order of "desc" for descending or "asc" for ascending sort order 23481 * of corresponding values. 23482 * 23483 * @private 23484 * @param {Object} object The object to compare. 23485 * @param {Object} other The other object to compare. 23486 * @param {boolean[]|string[]} orders The order to sort by for each property. 23487 * @returns {number} Returns the sort order indicator for `object`. 23488 */ 23489 function compareMultiple(object, other, orders) { 23490 var index = -1, 23491 objCriteria = object.criteria, 23492 othCriteria = other.criteria, 23493 length = objCriteria.length, 23494 ordersLength = orders.length; 23495 23496 while (++index < length) { 23497 var result = compareAscending(objCriteria[index], othCriteria[index]); 23498 if (result) { 23499 if (index >= ordersLength) { 23500 return result; 23501 } 23502 var order = orders[index]; 23503 return result * (order == 'desc' ? -1 : 1); 23504 } 23505 } 23506 // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications 23507 // that causes it, under certain circumstances, to provide the same value for 23508 // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247 23509 // for more details. 23510 // 23511 // This also ensures a stable sort in V8 and other engines. 23512 // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details. 23513 return object.index - other.index; 23514 } 23515 23516 /** 23517 * Creates an array that is the composition of partially applied arguments, 23518 * placeholders, and provided arguments into a single array of arguments. 23519 * 23520 * @private 23521 * @param {Array} args The provided arguments. 23522 * @param {Array} partials The arguments to prepend to those provided. 23523 * @param {Array} holders The `partials` placeholder indexes. 23524 * @params {boolean} [isCurried] Specify composing for a curried function. 23525 * @returns {Array} Returns the new array of composed arguments. 23526 */ 23527 function composeArgs(args, partials, holders, isCurried) { 23528 var argsIndex = -1, 23529 argsLength = args.length, 23530 holdersLength = holders.length, 23531 leftIndex = -1, 23532 leftLength = partials.length, 23533 rangeLength = nativeMax(argsLength - holdersLength, 0), 23534 result = Array(leftLength + rangeLength), 23535 isUncurried = !isCurried; 23536 23537 while (++leftIndex < leftLength) { 23538 result[leftIndex] = partials[leftIndex]; 23539 } 23540 while (++argsIndex < holdersLength) { 23541 if (isUncurried || argsIndex < argsLength) { 23542 result[holders[argsIndex]] = args[argsIndex]; 23543 } 23544 } 23545 while (rangeLength--) { 23546 result[leftIndex++] = args[argsIndex++]; 23547 } 23548 return result; 23549 } 23550 23551 /** 23552 * This function is like `composeArgs` except that the arguments composition 23553 * is tailored for `_.partialRight`. 23554 * 23555 * @private 23556 * @param {Array} args The provided arguments. 23557 * @param {Array} partials The arguments to append to those provided. 23558 * @param {Array} holders The `partials` placeholder indexes. 23559 * @params {boolean} [isCurried] Specify composing for a curried function. 23560 * @returns {Array} Returns the new array of composed arguments. 23561 */ 23562 function composeArgsRight(args, partials, holders, isCurried) { 23563 var argsIndex = -1, 23564 argsLength = args.length, 23565 holdersIndex = -1, 23566 holdersLength = holders.length, 23567 rightIndex = -1, 23568 rightLength = partials.length, 23569 rangeLength = nativeMax(argsLength - holdersLength, 0), 23570 result = Array(rangeLength + rightLength), 23571 isUncurried = !isCurried; 23572 23573 while (++argsIndex < rangeLength) { 23574 result[argsIndex] = args[argsIndex]; 23575 } 23576 var offset = argsIndex; 23577 while (++rightIndex < rightLength) { 23578 result[offset + rightIndex] = partials[rightIndex]; 23579 } 23580 while (++holdersIndex < holdersLength) { 23581 if (isUncurried || argsIndex < argsLength) { 23582 result[offset + holders[holdersIndex]] = args[argsIndex++]; 23583 } 23584 } 23585 return result; 23586 } 23587 23588 /** 23589 * Copies the values of `source` to `array`. 23590 * 23591 * @private 23592 * @param {Array} source The array to copy values from. 23593 * @param {Array} [array=[]] The array to copy values to. 23594 * @returns {Array} Returns `array`. 23595 */ 23596 function copyArray(source, array) { 23597 var index = -1, 23598 length = source.length; 23599 23600 array || (array = Array(length)); 23601 while (++index < length) { 23602 array[index] = source[index]; 23603 } 23604 return array; 23605 } 23606 23607 /** 23608 * Copies properties of `source` to `object`. 23609 * 23610 * @private 23611 * @param {Object} source The object to copy properties from. 23612 * @param {Array} props The property identifiers to copy. 23613 * @param {Object} [object={}] The object to copy properties to. 23614 * @param {Function} [customizer] The function to customize copied values. 23615 * @returns {Object} Returns `object`. 23616 */ 23617 function copyObject(source, props, object, customizer) { 23618 var isNew = !object; 23619 object || (object = {}); 23620 23621 var index = -1, 23622 length = props.length; 23623 23624 while (++index < length) { 23625 var key = props[index]; 23626 23627 var newValue = customizer 23628 ? customizer(object[key], source[key], key, object, source) 23629 : undefined; 23630 23631 if (newValue === undefined) { 23632 newValue = source[key]; 23633 } 23634 if (isNew) { 23635 baseAssignValue(object, key, newValue); 23636 } else { 23637 assignValue(object, key, newValue); 23638 } 23639 } 23640 return object; 23641 } 23642 23643 /** 23644 * Copies own symbols of `source` to `object`. 23645 * 23646 * @private 23647 * @param {Object} source The object to copy symbols from. 23648 * @param {Object} [object={}] The object to copy symbols to. 23649 * @returns {Object} Returns `object`. 23650 */ 23651 function copySymbols(source, object) { 23652 return copyObject(source, getSymbols(source), object); 23653 } 23654 23655 /** 23656 * Copies own and inherited symbols of `source` to `object`. 23657 * 23658 * @private 23659 * @param {Object} source The object to copy symbols from. 23660 * @param {Object} [object={}] The object to copy symbols to. 23661 * @returns {Object} Returns `object`. 23662 */ 23663 function copySymbolsIn(source, object) { 23664 return copyObject(source, getSymbolsIn(source), object); 23665 } 23666 23667 /** 23668 * Creates a function like `_.groupBy`. 23669 * 23670 * @private 23671 * @param {Function} setter The function to set accumulator values. 23672 * @param {Function} [initializer] The accumulator object initializer. 23673 * @returns {Function} Returns the new aggregator function. 23674 */ 23675 function createAggregator(setter, initializer) { 23676 return function(collection, iteratee) { 23677 var func = isArray(collection) ? arrayAggregator : baseAggregator, 23678 accumulator = initializer ? initializer() : {}; 23679 23680 return func(collection, setter, getIteratee(iteratee, 2), accumulator); 23681 }; 23682 } 23683 23684 /** 23685 * Creates a function like `_.assign`. 23686 * 23687 * @private 23688 * @param {Function} assigner The function to assign values. 23689 * @returns {Function} Returns the new assigner function. 23690 */ 23691 function createAssigner(assigner) { 23692 return baseRest(function(object, sources) { 23693 var index = -1, 23694 length = sources.length, 23695 customizer = length > 1 ? sources[length - 1] : undefined, 23696 guard = length > 2 ? sources[2] : undefined; 23697 23698 customizer = (assigner.length > 3 && typeof customizer == 'function') 23699 ? (length--, customizer) 23700 : undefined; 23701 23702 if (guard && isIterateeCall(sources[0], sources[1], guard)) { 23703 customizer = length < 3 ? undefined : customizer; 23704 length = 1; 23705 } 23706 object = Object(object); 23707 while (++index < length) { 23708 var source = sources[index]; 23709 if (source) { 23710 assigner(object, source, index, customizer); 23711 } 23712 } 23713 return object; 23714 }); 23715 } 23716 23717 /** 23718 * Creates a `baseEach` or `baseEachRight` function. 23719 * 23720 * @private 23721 * @param {Function} eachFunc The function to iterate over a collection. 23722 * @param {boolean} [fromRight] Specify iterating from right to left. 23723 * @returns {Function} Returns the new base function. 23724 */ 23725 function createBaseEach(eachFunc, fromRight) { 23726 return function(collection, iteratee) { 23727 if (collection == null) { 23728 return collection; 23729 } 23730 if (!isArrayLike(collection)) { 23731 return eachFunc(collection, iteratee); 23732 } 23733 var length = collection.length, 23734 index = fromRight ? length : -1, 23735 iterable = Object(collection); 23736 23737 while ((fromRight ? index-- : ++index < length)) { 23738 if (iteratee(iterable[index], index, iterable) === false) { 23739 break; 23740 } 23741 } 23742 return collection; 23743 }; 23744 } 23745 23746 /** 23747 * Creates a base function for methods like `_.forIn` and `_.forOwn`. 23748 * 23749 * @private 23750 * @param {boolean} [fromRight] Specify iterating from right to left. 23751 * @returns {Function} Returns the new base function. 23752 */ 23753 function createBaseFor(fromRight) { 23754 return function(object, iteratee, keysFunc) { 23755 var index = -1, 23756 iterable = Object(object), 23757 props = keysFunc(object), 23758 length = props.length; 23759 23760 while (length--) { 23761 var key = props[fromRight ? length : ++index]; 23762 if (iteratee(iterable[key], key, iterable) === false) { 23763 break; 23764 } 23765 } 23766 return object; 23767 }; 23768 } 23769 23770 /** 23771 * Creates a function that wraps `func` to invoke it with the optional `this` 23772 * binding of `thisArg`. 23773 * 23774 * @private 23775 * @param {Function} func The function to wrap. 23776 * @param {number} bitmask The bitmask flags. See `createWrap` for more details. 23777 * @param {*} [thisArg] The `this` binding of `func`. 23778 * @returns {Function} Returns the new wrapped function. 23779 */ 23780 function createBind(func, bitmask, thisArg) { 23781 var isBind = bitmask & WRAP_BIND_FLAG, 23782 Ctor = createCtor(func); 23783 23784 function wrapper() { 23785 var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func; 23786 return fn.apply(isBind ? thisArg : this, arguments); 23787 } 23788 return wrapper; 23789 } 23790 23791 /** 23792 * Creates a function like `_.lowerFirst`. 23793 * 23794 * @private 23795 * @param {string} methodName The name of the `String` case method to use. 23796 * @returns {Function} Returns the new case function. 23797 */ 23798 function createCaseFirst(methodName) { 23799 return function(string) { 23800 string = toString(string); 23801 23802 var strSymbols = hasUnicode(string) 23803 ? stringToArray(string) 23804 : undefined; 23805 23806 var chr = strSymbols 23807 ? strSymbols[0] 23808 : string.charAt(0); 23809 23810 var trailing = strSymbols 23811 ? castSlice(strSymbols, 1).join('') 23812 : string.slice(1); 23813 23814 return chr[methodName]() + trailing; 23815 }; 23816 } 23817 23818 /** 23819 * Creates a function like `_.camelCase`. 23820 * 23821 * @private 23822 * @param {Function} callback The function to combine each word. 23823 * @returns {Function} Returns the new compounder function. 23824 */ 23825 function createCompounder(callback) { 23826 return function(string) { 23827 return arrayReduce(words(deburr(string).replace(reApos, '')), callback, ''); 23828 }; 23829 } 23830 23831 /** 23832 * Creates a function that produces an instance of `Ctor` regardless of 23833 * whether it was invoked as part of a `new` expression or by `call` or `apply`. 23834 * 23835 * @private 23836 * @param {Function} Ctor The constructor to wrap. 23837 * @returns {Function} Returns the new wrapped function. 23838 */ 23839 function createCtor(Ctor) { 23840 return function() { 23841 // Use a `switch` statement to work with class constructors. See 23842 // http://ecma-international.org/ecma-262/7.0/#sec-ecmascript-function-objects-call-thisargument-argumentslist 23843 // for more details. 23844 var args = arguments; 23845 switch (args.length) { 23846 case 0: return new Ctor; 23847 case 1: return new Ctor(args[0]); 23848 case 2: return new Ctor(args[0], args[1]); 23849 case 3: return new Ctor(args[0], args[1], args[2]); 23850 case 4: return new Ctor(args[0], args[1], args[2], args[3]); 23851 case 5: return new Ctor(args[0], args[1], args[2], args[3], args[4]); 23852 case 6: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5]); 23853 case 7: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5], args[6]); 23854 } 23855 var thisBinding = baseCreate(Ctor.prototype), 23856 result = Ctor.apply(thisBinding, args); 23857 23858 // Mimic the constructor's `return` behavior. 23859 // See https://es5.github.io/#x13.2.2 for more details. 23860 return isObject(result) ? result : thisBinding; 23861 }; 23862 } 23863 23864 /** 23865 * Creates a function that wraps `func` to enable currying. 23866 * 23867 * @private 23868 * @param {Function} func The function to wrap. 23869 * @param {number} bitmask The bitmask flags. See `createWrap` for more details. 23870 * @param {number} arity The arity of `func`. 23871 * @returns {Function} Returns the new wrapped function. 23872 */ 23873 function createCurry(func, bitmask, arity) { 23874 var Ctor = createCtor(func); 23875 23876 function wrapper() { 23877 var length = arguments.length, 23878 args = Array(length), 23879 index = length, 23880 placeholder = getHolder(wrapper); 23881 23882 while (index--) { 23883 args[index] = arguments[index]; 23884 } 23885 var holders = (length < 3 && args[0] !== placeholder && args[length - 1] !== placeholder) 23886 ? [] 23887 : replaceHolders(args, placeholder); 23888 23889 length -= holders.length; 23890 if (length < arity) { 23891 return createRecurry( 23892 func, bitmask, createHybrid, wrapper.placeholder, undefined, 23893 args, holders, undefined, undefined, arity - length); 23894 } 23895 var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func; 23896 return apply(fn, this, args); 23897 } 23898 return wrapper; 23899 } 23900 23901 /** 23902 * Creates a `_.find` or `_.findLast` function. 23903 * 23904 * @private 23905 * @param {Function} findIndexFunc The function to find the collection index. 23906 * @returns {Function} Returns the new find function. 23907 */ 23908 function createFind(findIndexFunc) { 23909 return function(collection, predicate, fromIndex) { 23910 var iterable = Object(collection); 23911 if (!isArrayLike(collection)) { 23912 var iteratee = getIteratee(predicate, 3); 23913 collection = keys(collection); 23914 predicate = function(key) { return iteratee(iterable[key], key, iterable); }; 23915 } 23916 var index = findIndexFunc(collection, predicate, fromIndex); 23917 return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined; 23918 }; 23919 } 23920 23921 /** 23922 * Creates a `_.flow` or `_.flowRight` function. 23923 * 23924 * @private 23925 * @param {boolean} [fromRight] Specify iterating from right to left. 23926 * @returns {Function} Returns the new flow function. 23927 */ 23928 function createFlow(fromRight) { 23929 return flatRest(function(funcs) { 23930 var length = funcs.length, 23931 index = length, 23932 prereq = LodashWrapper.prototype.thru; 23933 23934 if (fromRight) { 23935 funcs.reverse(); 23936 } 23937 while (index--) { 23938 var func = funcs[index]; 23939 if (typeof func != 'function') { 23940 throw new TypeError(FUNC_ERROR_TEXT); 23941 } 23942 if (prereq && !wrapper && getFuncName(func) == 'wrapper') { 23943 var wrapper = new LodashWrapper([], true); 23944 } 23945 } 23946 index = wrapper ? index : length; 23947 while (++index < length) { 23948 func = funcs[index]; 23949 23950 var funcName = getFuncName(func), 23951 data = funcName == 'wrapper' ? getData(func) : undefined; 23952 23953 if (data && isLaziable(data[0]) && 23954 data[1] == (WRAP_ARY_FLAG | WRAP_CURRY_FLAG | WRAP_PARTIAL_FLAG | WRAP_REARG_FLAG) && 23955 !data[4].length && data[9] == 1 23956 ) { 23957 wrapper = wrapper[getFuncName(data[0])].apply(wrapper, data[3]); 23958 } else { 23959 wrapper = (func.length == 1 && isLaziable(func)) 23960 ? wrapper[funcName]() 23961 : wrapper.thru(func); 23962 } 23963 } 23964 return function() { 23965 var args = arguments, 23966 value = args[0]; 23967 23968 if (wrapper && args.length == 1 && isArray(value)) { 23969 return wrapper.plant(value).value(); 23970 } 23971 var index = 0, 23972 result = length ? funcs[index].apply(this, args) : value; 23973 23974 while (++index < length) { 23975 result = funcs[index].call(this, result); 23976 } 23977 return result; 23978 }; 23979 }); 23980 } 23981 23982 /** 23983 * Creates a function that wraps `func` to invoke it with optional `this` 23984 * binding of `thisArg`, partial application, and currying. 23985 * 23986 * @private 23987 * @param {Function|string} func The function or method name to wrap. 23988 * @param {number} bitmask The bitmask flags. See `createWrap` for more details. 23989 * @param {*} [thisArg] The `this` binding of `func`. 23990 * @param {Array} [partials] The arguments to prepend to those provided to 23991 * the new function. 23992 * @param {Array} [holders] The `partials` placeholder indexes. 23993 * @param {Array} [partialsRight] The arguments to append to those provided 23994 * to the new function. 23995 * @param {Array} [holdersRight] The `partialsRight` placeholder indexes. 23996 * @param {Array} [argPos] The argument positions of the new function. 23997 * @param {number} [ary] The arity cap of `func`. 23998 * @param {number} [arity] The arity of `func`. 23999 * @returns {Function} Returns the new wrapped function. 24000 */ 24001 function createHybrid(func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity) { 24002 var isAry = bitmask & WRAP_ARY_FLAG, 24003 isBind = bitmask & WRAP_BIND_FLAG, 24004 isBindKey = bitmask & WRAP_BIND_KEY_FLAG, 24005 isCurried = bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG), 24006 isFlip = bitmask & WRAP_FLIP_FLAG, 24007 Ctor = isBindKey ? undefined : createCtor(func); 24008 24009 function wrapper() { 24010 var length = arguments.length, 24011 args = Array(length), 24012 index = length; 24013 24014 while (index--) { 24015 args[index] = arguments[index]; 24016 } 24017 if (isCurried) { 24018 var placeholder = getHolder(wrapper), 24019 holdersCount = countHolders(args, placeholder); 24020 } 24021 if (partials) { 24022 args = composeArgs(args, partials, holders, isCurried); 24023 } 24024 if (partialsRight) { 24025 args = composeArgsRight(args, partialsRight, holdersRight, isCurried); 24026 } 24027 length -= holdersCount; 24028 if (isCurried && length < arity) { 24029 var newHolders = replaceHolders(args, placeholder); 24030 return createRecurry( 24031 func, bitmask, createHybrid, wrapper.placeholder, thisArg, 24032 args, newHolders, argPos, ary, arity - length 24033 ); 24034 } 24035 var thisBinding = isBind ? thisArg : this, 24036 fn = isBindKey ? thisBinding[func] : func; 24037 24038 length = args.length; 24039 if (argPos) { 24040 args = reorder(args, argPos); 24041 } else if (isFlip && length > 1) { 24042 args.reverse(); 24043 } 24044 if (isAry && ary < length) { 24045 args.length = ary; 24046 } 24047 if (this && this !== root && this instanceof wrapper) { 24048 fn = Ctor || createCtor(fn); 24049 } 24050 return fn.apply(thisBinding, args); 24051 } 24052 return wrapper; 24053 } 24054 24055 /** 24056 * Creates a function like `_.invertBy`. 24057 * 24058 * @private 24059 * @param {Function} setter The function to set accumulator values. 24060 * @param {Function} toIteratee The function to resolve iteratees. 24061 * @returns {Function} Returns the new inverter function. 24062 */ 24063 function createInverter(setter, toIteratee) { 24064 return function(object, iteratee) { 24065 return baseInverter(object, setter, toIteratee(iteratee), {}); 24066 }; 24067 } 24068 24069 /** 24070 * Creates a function that performs a mathematical operation on two values. 24071 * 24072 * @private 24073 * @param {Function} operator The function to perform the operation. 24074 * @param {number} [defaultValue] The value used for `undefined` arguments. 24075 * @returns {Function} Returns the new mathematical operation function. 24076 */ 24077 function createMathOperation(operator, defaultValue) { 24078 return function(value, other) { 24079 var result; 24080 if (value === undefined && other === undefined) { 24081 return defaultValue; 24082 } 24083 if (value !== undefined) { 24084 result = value; 24085 } 24086 if (other !== undefined) { 24087 if (result === undefined) { 24088 return other; 24089 } 24090 if (typeof value == 'string' || typeof other == 'string') { 24091 value = baseToString(value); 24092 other = baseToString(other); 24093 } else { 24094 value = baseToNumber(value); 24095 other = baseToNumber(other); 24096 } 24097 result = operator(value, other); 24098 } 24099 return result; 24100 }; 24101 } 24102 24103 /** 24104 * Creates a function like `_.over`. 24105 * 24106 * @private 24107 * @param {Function} arrayFunc The function to iterate over iteratees. 24108 * @returns {Function} Returns the new over function. 24109 */ 24110 function createOver(arrayFunc) { 24111 return flatRest(function(iteratees) { 24112 iteratees = arrayMap(iteratees, baseUnary(getIteratee())); 24113 return baseRest(function(args) { 24114 var thisArg = this; 24115 return arrayFunc(iteratees, function(iteratee) { 24116 return apply(iteratee, thisArg, args); 24117 }); 24118 }); 24119 }); 24120 } 24121 24122 /** 24123 * Creates the padding for `string` based on `length`. The `chars` string 24124 * is truncated if the number of characters exceeds `length`. 24125 * 24126 * @private 24127 * @param {number} length The padding length. 24128 * @param {string} [chars=' '] The string used as padding. 24129 * @returns {string} Returns the padding for `string`. 24130 */ 24131 function createPadding(length, chars) { 24132 chars = chars === undefined ? ' ' : baseToString(chars); 24133 24134 var charsLength = chars.length; 24135 if (charsLength < 2) { 24136 return charsLength ? baseRepeat(chars, length) : chars; 24137 } 24138 var result = baseRepeat(chars, nativeCeil(length / stringSize(chars))); 24139 return hasUnicode(chars) 24140 ? castSlice(stringToArray(result), 0, length).join('') 24141 : result.slice(0, length); 24142 } 24143 24144 /** 24145 * Creates a function that wraps `func` to invoke it with the `this` binding 24146 * of `thisArg` and `partials` prepended to the arguments it receives. 24147 * 24148 * @private 24149 * @param {Function} func The function to wrap. 24150 * @param {number} bitmask The bitmask flags. See `createWrap` for more details. 24151 * @param {*} thisArg The `this` binding of `func`. 24152 * @param {Array} partials The arguments to prepend to those provided to 24153 * the new function. 24154 * @returns {Function} Returns the new wrapped function. 24155 */ 24156 function createPartial(func, bitmask, thisArg, partials) { 24157 var isBind = bitmask & WRAP_BIND_FLAG, 24158 Ctor = createCtor(func); 24159 24160 function wrapper() { 24161 var argsIndex = -1, 24162 argsLength = arguments.length, 24163 leftIndex = -1, 24164 leftLength = partials.length, 24165 args = Array(leftLength + argsLength), 24166 fn = (this && this !== root && this instanceof wrapper) ? Ctor : func; 24167 24168 while (++leftIndex < leftLength) { 24169 args[leftIndex] = partials[leftIndex]; 24170 } 24171 while (argsLength--) { 24172 args[leftIndex++] = arguments[++argsIndex]; 24173 } 24174 return apply(fn, isBind ? thisArg : this, args); 24175 } 24176 return wrapper; 24177 } 24178 24179 /** 24180 * Creates a `_.range` or `_.rangeRight` function. 24181 * 24182 * @private 24183 * @param {boolean} [fromRight] Specify iterating from right to left. 24184 * @returns {Function} Returns the new range function. 24185 */ 24186 function createRange(fromRight) { 24187 return function(start, end, step) { 24188 if (step && typeof step != 'number' && isIterateeCall(start, end, step)) { 24189 end = step = undefined; 24190 } 24191 // Ensure the sign of `-0` is preserved. 24192 start = toFinite(start); 24193 if (end === undefined) { 24194 end = start; 24195 start = 0; 24196 } else { 24197 end = toFinite(end); 24198 } 24199 step = step === undefined ? (start < end ? 1 : -1) : toFinite(step); 24200 return baseRange(start, end, step, fromRight); 24201 }; 24202 } 24203 24204 /** 24205 * Creates a function that performs a relational operation on two values. 24206 * 24207 * @private 24208 * @param {Function} operator The function to perform the operation. 24209 * @returns {Function} Returns the new relational operation function. 24210 */ 24211 function createRelationalOperation(operator) { 24212 return function(value, other) { 24213 if (!(typeof value == 'string' && typeof other == 'string')) { 24214 value = toNumber(value); 24215 other = toNumber(other); 24216 } 24217 return operator(value, other); 24218 }; 24219 } 24220 24221 /** 24222 * Creates a function that wraps `func` to continue currying. 24223 * 24224 * @private 24225 * @param {Function} func The function to wrap. 24226 * @param {number} bitmask The bitmask flags. See `createWrap` for more details. 24227 * @param {Function} wrapFunc The function to create the `func` wrapper. 24228 * @param {*} placeholder The placeholder value. 24229 * @param {*} [thisArg] The `this` binding of `func`. 24230 * @param {Array} [partials] The arguments to prepend to those provided to 24231 * the new function. 24232 * @param {Array} [holders] The `partials` placeholder indexes. 24233 * @param {Array} [argPos] The argument positions of the new function. 24234 * @param {number} [ary] The arity cap of `func`. 24235 * @param {number} [arity] The arity of `func`. 24236 * @returns {Function} Returns the new wrapped function. 24237 */ 24238 function createRecurry(func, bitmask, wrapFunc, placeholder, thisArg, partials, holders, argPos, ary, arity) { 24239 var isCurry = bitmask & WRAP_CURRY_FLAG, 24240 newHolders = isCurry ? holders : undefined, 24241 newHoldersRight = isCurry ? undefined : holders, 24242 newPartials = isCurry ? partials : undefined, 24243 newPartialsRight = isCurry ? undefined : partials; 24244 24245 bitmask |= (isCurry ? WRAP_PARTIAL_FLAG : WRAP_PARTIAL_RIGHT_FLAG); 24246 bitmask &= ~(isCurry ? WRAP_PARTIAL_RIGHT_FLAG : WRAP_PARTIAL_FLAG); 24247 24248 if (!(bitmask & WRAP_CURRY_BOUND_FLAG)) { 24249 bitmask &= ~(WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG); 24250 } 24251 var newData = [ 24252 func, bitmask, thisArg, newPartials, newHolders, newPartialsRight, 24253 newHoldersRight, argPos, ary, arity 24254 ]; 24255 24256 var result = wrapFunc.apply(undefined, newData); 24257 if (isLaziable(func)) { 24258 setData(result, newData); 24259 } 24260 result.placeholder = placeholder; 24261 return setWrapToString(result, func, bitmask); 24262 } 24263 24264 /** 24265 * Creates a function like `_.round`. 24266 * 24267 * @private 24268 * @param {string} methodName The name of the `Math` method to use when rounding. 24269 * @returns {Function} Returns the new round function. 24270 */ 24271 function createRound(methodName) { 24272 var func = Math[methodName]; 24273 return function(number, precision) { 24274 number = toNumber(number); 24275 precision = precision == null ? 0 : nativeMin(toInteger(precision), 292); 24276 if (precision && nativeIsFinite(number)) { 24277 // Shift with exponential notation to avoid floating-point issues. 24278 // See [MDN](https://mdn.io/round#Examples) for more details. 24279 var pair = (toString(number) + 'e').split('e'), 24280 value = func(pair[0] + 'e' + (+pair[1] + precision)); 24281 24282 pair = (toString(value) + 'e').split('e'); 24283 return +(pair[0] + 'e' + (+pair[1] - precision)); 24284 } 24285 return func(number); 24286 }; 24287 } 24288 24289 /** 24290 * Creates a set object of `values`. 24291 * 24292 * @private 24293 * @param {Array} values The values to add to the set. 24294 * @returns {Object} Returns the new set. 24295 */ 24296 var createSet = !(Set && (1 / setToArray(new Set([,-0]))[1]) == INFINITY) ? noop : function(values) { 24297 return new Set(values); 24298 }; 24299 24300 /** 24301 * Creates a `_.toPairs` or `_.toPairsIn` function. 24302 * 24303 * @private 24304 * @param {Function} keysFunc The function to get the keys of a given object. 24305 * @returns {Function} Returns the new pairs function. 24306 */ 24307 function createToPairs(keysFunc) { 24308 return function(object) { 24309 var tag = getTag(object); 24310 if (tag == mapTag) { 24311 return mapToArray(object); 24312 } 24313 if (tag == setTag) { 24314 return setToPairs(object); 24315 } 24316 return baseToPairs(object, keysFunc(object)); 24317 }; 24318 } 24319 24320 /** 24321 * Creates a function that either curries or invokes `func` with optional 24322 * `this` binding and partially applied arguments. 24323 * 24324 * @private 24325 * @param {Function|string} func The function or method name to wrap. 24326 * @param {number} bitmask The bitmask flags. 24327 * 1 - `_.bind` 24328 * 2 - `_.bindKey` 24329 * 4 - `_.curry` or `_.curryRight` of a bound function 24330 * 8 - `_.curry` 24331 * 16 - `_.curryRight` 24332 * 32 - `_.partial` 24333 * 64 - `_.partialRight` 24334 * 128 - `_.rearg` 24335 * 256 - `_.ary` 24336 * 512 - `_.flip` 24337 * @param {*} [thisArg] The `this` binding of `func`. 24338 * @param {Array} [partials] The arguments to be partially applied. 24339 * @param {Array} [holders] The `partials` placeholder indexes. 24340 * @param {Array} [argPos] The argument positions of the new function. 24341 * @param {number} [ary] The arity cap of `func`. 24342 * @param {number} [arity] The arity of `func`. 24343 * @returns {Function} Returns the new wrapped function. 24344 */ 24345 function createWrap(func, bitmask, thisArg, partials, holders, argPos, ary, arity) { 24346 var isBindKey = bitmask & WRAP_BIND_KEY_FLAG; 24347 if (!isBindKey && typeof func != 'function') { 24348 throw new TypeError(FUNC_ERROR_TEXT); 24349 } 24350 var length = partials ? partials.length : 0; 24351 if (!length) { 24352 bitmask &= ~(WRAP_PARTIAL_FLAG | WRAP_PARTIAL_RIGHT_FLAG); 24353 partials = holders = undefined; 24354 } 24355 ary = ary === undefined ? ary : nativeMax(toInteger(ary), 0); 24356 arity = arity === undefined ? arity : toInteger(arity); 24357 length -= holders ? holders.length : 0; 24358 24359 if (bitmask & WRAP_PARTIAL_RIGHT_FLAG) { 24360 var partialsRight = partials, 24361 holdersRight = holders; 24362 24363 partials = holders = undefined; 24364 } 24365 var data = isBindKey ? undefined : getData(func); 24366 24367 var newData = [ 24368 func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, 24369 argPos, ary, arity 24370 ]; 24371 24372 if (data) { 24373 mergeData(newData, data); 24374 } 24375 func = newData[0]; 24376 bitmask = newData[1]; 24377 thisArg = newData[2]; 24378 partials = newData[3]; 24379 holders = newData[4]; 24380 arity = newData[9] = newData[9] === undefined 24381 ? (isBindKey ? 0 : func.length) 24382 : nativeMax(newData[9] - length, 0); 24383 24384 if (!arity && bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG)) { 24385 bitmask &= ~(WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG); 24386 } 24387 if (!bitmask || bitmask == WRAP_BIND_FLAG) { 24388 var result = createBind(func, bitmask, thisArg); 24389 } else if (bitmask == WRAP_CURRY_FLAG || bitmask == WRAP_CURRY_RIGHT_FLAG) { 24390 result = createCurry(func, bitmask, arity); 24391 } else if ((bitmask == WRAP_PARTIAL_FLAG || bitmask == (WRAP_BIND_FLAG | WRAP_PARTIAL_FLAG)) && !holders.length) { 24392 result = createPartial(func, bitmask, thisArg, partials); 24393 } else { 24394 result = createHybrid.apply(undefined, newData); 24395 } 24396 var setter = data ? baseSetData : setData; 24397 return setWrapToString(setter(result, newData), func, bitmask); 24398 } 24399 24400 /** 24401 * Used by `_.defaults` to customize its `_.assignIn` use to assign properties 24402 * of source objects to the destination object for all destination properties 24403 * that resolve to `undefined`. 24404 * 24405 * @private 24406 * @param {*} objValue The destination value. 24407 * @param {*} srcValue The source value. 24408 * @param {string} key The key of the property to assign. 24409 * @param {Object} object The parent object of `objValue`. 24410 * @returns {*} Returns the value to assign. 24411 */ 24412 function customDefaultsAssignIn(objValue, srcValue, key, object) { 24413 if (objValue === undefined || 24414 (eq(objValue, objectProto[key]) && !hasOwnProperty.call(object, key))) { 24415 return srcValue; 24416 } 24417 return objValue; 24418 } 24419 24420 /** 24421 * Used by `_.defaultsDeep` to customize its `_.merge` use to merge source 24422 * objects into destination objects that are passed thru. 24423 * 24424 * @private 24425 * @param {*} objValue The destination value. 24426 * @param {*} srcValue The source value. 24427 * @param {string} key The key of the property to merge. 24428 * @param {Object} object The parent object of `objValue`. 24429 * @param {Object} source The parent object of `srcValue`. 24430 * @param {Object} [stack] Tracks traversed source values and their merged 24431 * counterparts. 24432 * @returns {*} Returns the value to assign. 24433 */ 24434 function customDefaultsMerge(objValue, srcValue, key, object, source, stack) { 24435 if (isObject(objValue) && isObject(srcValue)) { 24436 // Recursively merge objects and arrays (susceptible to call stack limits). 24437 stack.set(srcValue, objValue); 24438 baseMerge(objValue, srcValue, undefined, customDefaultsMerge, stack); 24439 stack['delete'](srcValue); 24440 } 24441 return objValue; 24442 } 24443 24444 /** 24445 * Used by `_.omit` to customize its `_.cloneDeep` use to only clone plain 24446 * objects. 24447 * 24448 * @private 24449 * @param {*} value The value to inspect. 24450 * @param {string} key The key of the property to inspect. 24451 * @returns {*} Returns the uncloned value or `undefined` to defer cloning to `_.cloneDeep`. 24452 */ 24453 function customOmitClone(value) { 24454 return isPlainObject(value) ? undefined : value; 24455 } 24456 24457 /** 24458 * A specialized version of `baseIsEqualDeep` for arrays with support for 24459 * partial deep comparisons. 24460 * 24461 * @private 24462 * @param {Array} array The array to compare. 24463 * @param {Array} other The other array to compare. 24464 * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. 24465 * @param {Function} customizer The function to customize comparisons. 24466 * @param {Function} equalFunc The function to determine equivalents of values. 24467 * @param {Object} stack Tracks traversed `array` and `other` objects. 24468 * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`. 24469 */ 24470 function equalArrays(array, other, bitmask, customizer, equalFunc, stack) { 24471 var isPartial = bitmask & COMPARE_PARTIAL_FLAG, 24472 arrLength = array.length, 24473 othLength = other.length; 24474 24475 if (arrLength != othLength && !(isPartial && othLength > arrLength)) { 24476 return false; 24477 } 24478 // Check that cyclic values are equal. 24479 var arrStacked = stack.get(array); 24480 var othStacked = stack.get(other); 24481 if (arrStacked && othStacked) { 24482 return arrStacked == other && othStacked == array; 24483 } 24484 var index = -1, 24485 result = true, 24486 seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined; 24487 24488 stack.set(array, other); 24489 stack.set(other, array); 24490 24491 // Ignore non-index properties. 24492 while (++index < arrLength) { 24493 var arrValue = array[index], 24494 othValue = other[index]; 24495 24496 if (customizer) { 24497 var compared = isPartial 24498 ? customizer(othValue, arrValue, index, other, array, stack) 24499 : customizer(arrValue, othValue, index, array, other, stack); 24500 } 24501 if (compared !== undefined) { 24502 if (compared) { 24503 continue; 24504 } 24505 result = false; 24506 break; 24507 } 24508 // Recursively compare arrays (susceptible to call stack limits). 24509 if (seen) { 24510 if (!arraySome(other, function(othValue, othIndex) { 24511 if (!cacheHas(seen, othIndex) && 24512 (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) { 24513 return seen.push(othIndex); 24514 } 24515 })) { 24516 result = false; 24517 break; 24518 } 24519 } else if (!( 24520 arrValue === othValue || 24521 equalFunc(arrValue, othValue, bitmask, customizer, stack) 24522 )) { 24523 result = false; 24524 break; 24525 } 24526 } 24527 stack['delete'](array); 24528 stack['delete'](other); 24529 return result; 24530 } 24531 24532 /** 24533 * A specialized version of `baseIsEqualDeep` for comparing objects of 24534 * the same `toStringTag`. 24535 * 24536 * **Note:** This function only supports comparing values with tags of 24537 * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`. 24538 * 24539 * @private 24540 * @param {Object} object The object to compare. 24541 * @param {Object} other The other object to compare. 24542 * @param {string} tag The `toStringTag` of the objects to compare. 24543 * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. 24544 * @param {Function} customizer The function to customize comparisons. 24545 * @param {Function} equalFunc The function to determine equivalents of values. 24546 * @param {Object} stack Tracks traversed `object` and `other` objects. 24547 * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. 24548 */ 24549 function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) { 24550 switch (tag) { 24551 case dataViewTag: 24552 if ((object.byteLength != other.byteLength) || 24553 (object.byteOffset != other.byteOffset)) { 24554 return false; 24555 } 24556 object = object.buffer; 24557 other = other.buffer; 24558 24559 case arrayBufferTag: 24560 if ((object.byteLength != other.byteLength) || 24561 !equalFunc(new Uint8Array(object), new Uint8Array(other))) { 24562 return false; 24563 } 24564 return true; 24565 24566 case boolTag: 24567 case dateTag: 24568 case numberTag: 24569 // Coerce booleans to `1` or `0` and dates to milliseconds. 24570 // Invalid dates are coerced to `NaN`. 24571 return eq(+object, +other); 24572 24573 case errorTag: 24574 return object.name == other.name && object.message == other.message; 24575 24576 case regexpTag: 24577 case stringTag: 24578 // Coerce regexes to strings and treat strings, primitives and objects, 24579 // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring 24580 // for more details. 24581 return object == (other + ''); 24582 24583 case mapTag: 24584 var convert = mapToArray; 24585 24586 case setTag: 24587 var isPartial = bitmask & COMPARE_PARTIAL_FLAG; 24588 convert || (convert = setToArray); 24589 24590 if (object.size != other.size && !isPartial) { 24591 return false; 24592 } 24593 // Assume cyclic values are equal. 24594 var stacked = stack.get(object); 24595 if (stacked) { 24596 return stacked == other; 24597 } 24598 bitmask |= COMPARE_UNORDERED_FLAG; 24599 24600 // Recursively compare objects (susceptible to call stack limits). 24601 stack.set(object, other); 24602 var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack); 24603 stack['delete'](object); 24604 return result; 24605 24606 case symbolTag: 24607 if (symbolValueOf) { 24608 return symbolValueOf.call(object) == symbolValueOf.call(other); 24609 } 24610 } 24611 return false; 24612 } 24613 24614 /** 24615 * A specialized version of `baseIsEqualDeep` for objects with support for 24616 * partial deep comparisons. 24617 * 24618 * @private 24619 * @param {Object} object The object to compare. 24620 * @param {Object} other The other object to compare. 24621 * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. 24622 * @param {Function} customizer The function to customize comparisons. 24623 * @param {Function} equalFunc The function to determine equivalents of values. 24624 * @param {Object} stack Tracks traversed `object` and `other` objects. 24625 * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. 24626 */ 24627 function equalObjects(object, other, bitmask, customizer, equalFunc, stack) { 24628 var isPartial = bitmask & COMPARE_PARTIAL_FLAG, 24629 objProps = getAllKeys(object), 24630 objLength = objProps.length, 24631 othProps = getAllKeys(other), 24632 othLength = othProps.length; 24633 24634 if (objLength != othLength && !isPartial) { 24635 return false; 24636 } 24637 var index = objLength; 24638 while (index--) { 24639 var key = objProps[index]; 24640 if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) { 24641 return false; 24642 } 24643 } 24644 // Check that cyclic values are equal. 24645 var objStacked = stack.get(object); 24646 var othStacked = stack.get(other); 24647 if (objStacked && othStacked) { 24648 return objStacked == other && othStacked == object; 24649 } 24650 var result = true; 24651 stack.set(object, other); 24652 stack.set(other, object); 24653 24654 var skipCtor = isPartial; 24655 while (++index < objLength) { 24656 key = objProps[index]; 24657 var objValue = object[key], 24658 othValue = other[key]; 24659 24660 if (customizer) { 24661 var compared = isPartial 24662 ? customizer(othValue, objValue, key, other, object, stack) 24663 : customizer(objValue, othValue, key, object, other, stack); 24664 } 24665 // Recursively compare objects (susceptible to call stack limits). 24666 if (!(compared === undefined 24667 ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack)) 24668 : compared 24669 )) { 24670 result = false; 24671 break; 24672 } 24673 skipCtor || (skipCtor = key == 'constructor'); 24674 } 24675 if (result && !skipCtor) { 24676 var objCtor = object.constructor, 24677 othCtor = other.constructor; 24678 24679 // Non `Object` object instances with different constructors are not equal. 24680 if (objCtor != othCtor && 24681 ('constructor' in object && 'constructor' in other) && 24682 !(typeof objCtor == 'function' && objCtor instanceof objCtor && 24683 typeof othCtor == 'function' && othCtor instanceof othCtor)) { 24684 result = false; 24685 } 24686 } 24687 stack['delete'](object); 24688 stack['delete'](other); 24689 return result; 24690 } 24691 24692 /** 24693 * A specialized version of `baseRest` which flattens the rest array. 24694 * 24695 * @private 24696 * @param {Function} func The function to apply a rest parameter to. 24697 * @returns {Function} Returns the new function. 24698 */ 24699 function flatRest(func) { 24700 return setToString(overRest(func, undefined, flatten), func + ''); 24701 } 24702 24703 /** 24704 * Creates an array of own enumerable property names and symbols of `object`. 24705 * 24706 * @private 24707 * @param {Object} object The object to query. 24708 * @returns {Array} Returns the array of property names and symbols. 24709 */ 24710 function getAllKeys(object) { 24711 return baseGetAllKeys(object, keys, getSymbols); 24712 } 24713 24714 /** 24715 * Creates an array of own and inherited enumerable property names and 24716 * symbols of `object`. 24717 * 24718 * @private 24719 * @param {Object} object The object to query. 24720 * @returns {Array} Returns the array of property names and symbols. 24721 */ 24722 function getAllKeysIn(object) { 24723 return baseGetAllKeys(object, keysIn, getSymbolsIn); 24724 } 24725 24726 /** 24727 * Gets metadata for `func`. 24728 * 24729 * @private 24730 * @param {Function} func The function to query. 24731 * @returns {*} Returns the metadata for `func`. 24732 */ 24733 var getData = !metaMap ? noop : function(func) { 24734 return metaMap.get(func); 24735 }; 24736 24737 /** 24738 * Gets the name of `func`. 24739 * 24740 * @private 24741 * @param {Function} func The function to query. 24742 * @returns {string} Returns the function name. 24743 */ 24744 function getFuncName(func) { 24745 var result = (func.name + ''), 24746 array = realNames[result], 24747 length = hasOwnProperty.call(realNames, result) ? array.length : 0; 24748 24749 while (length--) { 24750 var data = array[length], 24751 otherFunc = data.func; 24752 if (otherFunc == null || otherFunc == func) { 24753 return data.name; 24754 } 24755 } 24756 return result; 24757 } 24758 24759 /** 24760 * Gets the argument placeholder value for `func`. 24761 * 24762 * @private 24763 * @param {Function} func The function to inspect. 24764 * @returns {*} Returns the placeholder value. 24765 */ 24766 function getHolder(func) { 24767 var object = hasOwnProperty.call(lodash, 'placeholder') ? lodash : func; 24768 return object.placeholder; 24769 } 24770 24771 /** 24772 * Gets the appropriate "iteratee" function. If `_.iteratee` is customized, 24773 * this function returns the custom method, otherwise it returns `baseIteratee`. 24774 * If arguments are provided, the chosen function is invoked with them and 24775 * its result is returned. 24776 * 24777 * @private 24778 * @param {*} [value] The value to convert to an iteratee. 24779 * @param {number} [arity] The arity of the created iteratee. 24780 * @returns {Function} Returns the chosen function or its result. 24781 */ 24782 function getIteratee() { 24783 var result = lodash.iteratee || iteratee; 24784 result = result === iteratee ? baseIteratee : result; 24785 return arguments.length ? result(arguments[0], arguments[1]) : result; 24786 } 24787 24788 /** 24789 * Gets the data for `map`. 24790 * 24791 * @private 24792 * @param {Object} map The map to query. 24793 * @param {string} key The reference key. 24794 * @returns {*} Returns the map data. 24795 */ 24796 function getMapData(map, key) { 24797 var data = map.__data__; 24798 return isKeyable(key) 24799 ? data[typeof key == 'string' ? 'string' : 'hash'] 24800 : data.map; 24801 } 24802 24803 /** 24804 * Gets the property names, values, and compare flags of `object`. 24805 * 24806 * @private 24807 * @param {Object} object The object to query. 24808 * @returns {Array} Returns the match data of `object`. 24809 */ 24810 function getMatchData(object) { 24811 var result = keys(object), 24812 length = result.length; 24813 24814 while (length--) { 24815 var key = result[length], 24816 value = object[key]; 24817 24818 result[length] = [key, value, isStrictComparable(value)]; 24819 } 24820 return result; 24821 } 24822 24823 /** 24824 * Gets the native function at `key` of `object`. 24825 * 24826 * @private 24827 * @param {Object} object The object to query. 24828 * @param {string} key The key of the method to get. 24829 * @returns {*} Returns the function if it's native, else `undefined`. 24830 */ 24831 function getNative(object, key) { 24832 var value = getValue(object, key); 24833 return baseIsNative(value) ? value : undefined; 24834 } 24835 24836 /** 24837 * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values. 24838 * 24839 * @private 24840 * @param {*} value The value to query. 24841 * @returns {string} Returns the raw `toStringTag`. 24842 */ 24843 function getRawTag(value) { 24844 var isOwn = hasOwnProperty.call(value, symToStringTag), 24845 tag = value[symToStringTag]; 24846 24847 try { 24848 value[symToStringTag] = undefined; 24849 var unmasked = true; 24850 } catch (e) {} 24851 24852 var result = nativeObjectToString.call(value); 24853 if (unmasked) { 24854 if (isOwn) { 24855 value[symToStringTag] = tag; 24856 } else { 24857 delete value[symToStringTag]; 24858 } 24859 } 24860 return result; 24861 } 24862 24863 /** 24864 * Creates an array of the own enumerable symbols of `object`. 24865 * 24866 * @private 24867 * @param {Object} object The object to query. 24868 * @returns {Array} Returns the array of symbols. 24869 */ 24870 var getSymbols = !nativeGetSymbols ? stubArray : function(object) { 24871 if (object == null) { 24872 return []; 24873 } 24874 object = Object(object); 24875 return arrayFilter(nativeGetSymbols(object), function(symbol) { 24876 return propertyIsEnumerable.call(object, symbol); 24877 }); 24878 }; 24879 24880 /** 24881 * Creates an array of the own and inherited enumerable symbols of `object`. 24882 * 24883 * @private 24884 * @param {Object} object The object to query. 24885 * @returns {Array} Returns the array of symbols. 24886 */ 24887 var getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) { 24888 var result = []; 24889 while (object) { 24890 arrayPush(result, getSymbols(object)); 24891 object = getPrototype(object); 24892 } 24893 return result; 24894 }; 24895 24896 /** 24897 * Gets the `toStringTag` of `value`. 24898 * 24899 * @private 24900 * @param {*} value The value to query. 24901 * @returns {string} Returns the `toStringTag`. 24902 */ 24903 var getTag = baseGetTag; 24904 24905 // Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6. 24906 if ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) || 24907 (Map && getTag(new Map) != mapTag) || 24908 (Promise && getTag(Promise.resolve()) != promiseTag) || 24909 (Set && getTag(new Set) != setTag) || 24910 (WeakMap && getTag(new WeakMap) != weakMapTag)) { 24911 getTag = function(value) { 24912 var result = baseGetTag(value), 24913 Ctor = result == objectTag ? value.constructor : undefined, 24914 ctorString = Ctor ? toSource(Ctor) : ''; 24915 24916 if (ctorString) { 24917 switch (ctorString) { 24918 case dataViewCtorString: return dataViewTag; 24919 case mapCtorString: return mapTag; 24920 case promiseCtorString: return promiseTag; 24921 case setCtorString: return setTag; 24922 case weakMapCtorString: return weakMapTag; 24923 } 24924 } 24925 return result; 24926 }; 24927 } 24928 24929 /** 24930 * Gets the view, applying any `transforms` to the `start` and `end` positions. 24931 * 24932 * @private 24933 * @param {number} start The start of the view. 24934 * @param {number} end The end of the view. 24935 * @param {Array} transforms The transformations to apply to the view. 24936 * @returns {Object} Returns an object containing the `start` and `end` 24937 * positions of the view. 24938 */ 24939 function getView(start, end, transforms) { 24940 var index = -1, 24941 length = transforms.length; 24942 24943 while (++index < length) { 24944 var data = transforms[index], 24945 size = data.size; 24946 24947 switch (data.type) { 24948 case 'drop': start += size; break; 24949 case 'dropRight': end -= size; break; 24950 case 'take': end = nativeMin(end, start + size); break; 24951 case 'takeRight': start = nativeMax(start, end - size); break; 24952 } 24953 } 24954 return { 'start': start, 'end': end }; 24955 } 24956 24957 /** 24958 * Extracts wrapper details from the `source` body comment. 24959 * 24960 * @private 24961 * @param {string} source The source to inspect. 24962 * @returns {Array} Returns the wrapper details. 24963 */ 24964 function getWrapDetails(source) { 24965 var match = source.match(reWrapDetails); 24966 return match ? match[1].split(reSplitDetails) : []; 24967 } 24968 24969 /** 24970 * Checks if `path` exists on `object`. 24971 * 24972 * @private 24973 * @param {Object} object The object to query. 24974 * @param {Array|string} path The path to check. 24975 * @param {Function} hasFunc The function to check properties. 24976 * @returns {boolean} Returns `true` if `path` exists, else `false`. 24977 */ 24978 function hasPath(object, path, hasFunc) { 24979 path = castPath(path, object); 24980 24981 var index = -1, 24982 length = path.length, 24983 result = false; 24984 24985 while (++index < length) { 24986 var key = toKey(path[index]); 24987 if (!(result = object != null && hasFunc(object, key))) { 24988 break; 24989 } 24990 object = object[key]; 24991 } 24992 if (result || ++index != length) { 24993 return result; 24994 } 24995 length = object == null ? 0 : object.length; 24996 return !!length && isLength(length) && isIndex(key, length) && 24997 (isArray(object) || isArguments(object)); 24998 } 24999 25000 /** 25001 * Initializes an array clone. 25002 * 25003 * @private 25004 * @param {Array} array The array to clone. 25005 * @returns {Array} Returns the initialized clone. 25006 */ 25007 function initCloneArray(array) { 25008 var length = array.length, 25009 result = new array.constructor(length); 25010 25011 // Add properties assigned by `RegExp#exec`. 25012 if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) { 25013 result.index = array.index; 25014 result.input = array.input; 25015 } 25016 return result; 25017 } 25018 25019 /** 25020 * Initializes an object clone. 25021 * 25022 * @private 25023 * @param {Object} object The object to clone. 25024 * @returns {Object} Returns the initialized clone. 25025 */ 25026 function initCloneObject(object) { 25027 return (typeof object.constructor == 'function' && !isPrototype(object)) 25028 ? baseCreate(getPrototype(object)) 25029 : {}; 25030 } 25031 25032 /** 25033 * Initializes an object clone based on its `toStringTag`. 25034 * 25035 * **Note:** This function only supports cloning values with tags of 25036 * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`. 25037 * 25038 * @private 25039 * @param {Object} object The object to clone. 25040 * @param {string} tag The `toStringTag` of the object to clone. 25041 * @param {boolean} [isDeep] Specify a deep clone. 25042 * @returns {Object} Returns the initialized clone. 25043 */ 25044 function initCloneByTag(object, tag, isDeep) { 25045 var Ctor = object.constructor; 25046 switch (tag) { 25047 case arrayBufferTag: 25048 return cloneArrayBuffer(object); 25049 25050 case boolTag: 25051 case dateTag: 25052 return new Ctor(+object); 25053 25054 case dataViewTag: 25055 return cloneDataView(object, isDeep); 25056 25057 case float32Tag: case float64Tag: 25058 case int8Tag: case int16Tag: case int32Tag: 25059 case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag: 25060 return cloneTypedArray(object, isDeep); 25061 25062 case mapTag: 25063 return new Ctor; 25064 25065 case numberTag: 25066 case stringTag: 25067 return new Ctor(object); 25068 25069 case regexpTag: 25070 return cloneRegExp(object); 25071 25072 case setTag: 25073 return new Ctor; 25074 25075 case symbolTag: 25076 return cloneSymbol(object); 25077 } 25078 } 25079 25080 /** 25081 * Inserts wrapper `details` in a comment at the top of the `source` body. 25082 * 25083 * @private 25084 * @param {string} source The source to modify. 25085 * @returns {Array} details The details to insert. 25086 * @returns {string} Returns the modified source. 25087 */ 25088 function insertWrapDetails(source, details) { 25089 var length = details.length; 25090 if (!length) { 25091 return source; 25092 } 25093 var lastIndex = length - 1; 25094 details[lastIndex] = (length > 1 ? '& ' : '') + details[lastIndex]; 25095 details = details.join(length > 2 ? ', ' : ' '); 25096 return source.replace(reWrapComment, '{\n/* [wrapped with ' + details + '] */\n'); 25097 } 25098 25099 /** 25100 * Checks if `value` is a flattenable `arguments` object or array. 25101 * 25102 * @private 25103 * @param {*} value The value to check. 25104 * @returns {boolean} Returns `true` if `value` is flattenable, else `false`. 25105 */ 25106 function isFlattenable(value) { 25107 return isArray(value) || isArguments(value) || 25108 !!(spreadableSymbol && value && value[spreadableSymbol]); 25109 } 25110 25111 /** 25112 * Checks if `value` is a valid array-like index. 25113 * 25114 * @private 25115 * @param {*} value The value to check. 25116 * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index. 25117 * @returns {boolean} Returns `true` if `value` is a valid index, else `false`. 25118 */ 25119 function isIndex(value, length) { 25120 var type = typeof value; 25121 length = length == null ? MAX_SAFE_INTEGER : length; 25122 25123 return !!length && 25124 (type == 'number' || 25125 (type != 'symbol' && reIsUint.test(value))) && 25126 (value > -1 && value % 1 == 0 && value < length); 25127 } 25128 25129 /** 25130 * Checks if the given arguments are from an iteratee call. 25131 * 25132 * @private 25133 * @param {*} value The potential iteratee value argument. 25134 * @param {*} index The potential iteratee index or key argument. 25135 * @param {*} object The potential iteratee object argument. 25136 * @returns {boolean} Returns `true` if the arguments are from an iteratee call, 25137 * else `false`. 25138 */ 25139 function isIterateeCall(value, index, object) { 25140 if (!isObject(object)) { 25141 return false; 25142 } 25143 var type = typeof index; 25144 if (type == 'number' 25145 ? (isArrayLike(object) && isIndex(index, object.length)) 25146 : (type == 'string' && index in object) 25147 ) { 25148 return eq(object[index], value); 25149 } 25150 return false; 25151 } 25152 25153 /** 25154 * Checks if `value` is a property name and not a property path. 25155 * 25156 * @private 25157 * @param {*} value The value to check. 25158 * @param {Object} [object] The object to query keys on. 25159 * @returns {boolean} Returns `true` if `value` is a property name, else `false`. 25160 */ 25161 function isKey(value, object) { 25162 if (isArray(value)) { 25163 return false; 25164 } 25165 var type = typeof value; 25166 if (type == 'number' || type == 'symbol' || type == 'boolean' || 25167 value == null || isSymbol(value)) { 25168 return true; 25169 } 25170 return reIsPlainProp.test(value) || !reIsDeepProp.test(value) || 25171 (object != null && value in Object(object)); 25172 } 25173 25174 /** 25175 * Checks if `value` is suitable for use as unique object key. 25176 * 25177 * @private 25178 * @param {*} value The value to check. 25179 * @returns {boolean} Returns `true` if `value` is suitable, else `false`. 25180 */ 25181 function isKeyable(value) { 25182 var type = typeof value; 25183 return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean') 25184 ? (value !== '__proto__') 25185 : (value === null); 25186 } 25187 25188 /** 25189 * Checks if `func` has a lazy counterpart. 25190 * 25191 * @private 25192 * @param {Function} func The function to check. 25193 * @returns {boolean} Returns `true` if `func` has a lazy counterpart, 25194 * else `false`. 25195 */ 25196 function isLaziable(func) { 25197 var funcName = getFuncName(func), 25198 other = lodash[funcName]; 25199 25200 if (typeof other != 'function' || !(funcName in LazyWrapper.prototype)) { 25201 return false; 25202 } 25203 if (func === other) { 25204 return true; 25205 } 25206 var data = getData(other); 25207 return !!data && func === data[0]; 25208 } 25209 25210 /** 25211 * Checks if `func` has its source masked. 25212 * 25213 * @private 25214 * @param {Function} func The function to check. 25215 * @returns {boolean} Returns `true` if `func` is masked, else `false`. 25216 */ 25217 function isMasked(func) { 25218 return !!maskSrcKey && (maskSrcKey in func); 25219 } 25220 25221 /** 25222 * Checks if `func` is capable of being masked. 25223 * 25224 * @private 25225 * @param {*} value The value to check. 25226 * @returns {boolean} Returns `true` if `func` is maskable, else `false`. 25227 */ 25228 var isMaskable = coreJsData ? isFunction : stubFalse; 25229 25230 /** 25231 * Checks if `value` is likely a prototype object. 25232 * 25233 * @private 25234 * @param {*} value The value to check. 25235 * @returns {boolean} Returns `true` if `value` is a prototype, else `false`. 25236 */ 25237 function isPrototype(value) { 25238 var Ctor = value && value.constructor, 25239 proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto; 25240 25241 return value === proto; 25242 } 25243 25244 /** 25245 * Checks if `value` is suitable for strict equality comparisons, i.e. `===`. 25246 * 25247 * @private 25248 * @param {*} value The value to check. 25249 * @returns {boolean} Returns `true` if `value` if suitable for strict 25250 * equality comparisons, else `false`. 25251 */ 25252 function isStrictComparable(value) { 25253 return value === value && !isObject(value); 25254 } 25255 25256 /** 25257 * A specialized version of `matchesProperty` for source values suitable 25258 * for strict equality comparisons, i.e. `===`. 25259 * 25260 * @private 25261 * @param {string} key The key of the property to get. 25262 * @param {*} srcValue The value to match. 25263 * @returns {Function} Returns the new spec function. 25264 */ 25265 function matchesStrictComparable(key, srcValue) { 25266 return function(object) { 25267 if (object == null) { 25268 return false; 25269 } 25270 return object[key] === srcValue && 25271 (srcValue !== undefined || (key in Object(object))); 25272 }; 25273 } 25274 25275 /** 25276 * A specialized version of `_.memoize` which clears the memoized function's 25277 * cache when it exceeds `MAX_MEMOIZE_SIZE`. 25278 * 25279 * @private 25280 * @param {Function} func The function to have its output memoized. 25281 * @returns {Function} Returns the new memoized function. 25282 */ 25283 function memoizeCapped(func) { 25284 var result = memoize(func, function(key) { 25285 if (cache.size === MAX_MEMOIZE_SIZE) { 25286 cache.clear(); 25287 } 25288 return key; 25289 }); 25290 25291 var cache = result.cache; 25292 return result; 25293 } 25294 25295 /** 25296 * Merges the function metadata of `source` into `data`. 25297 * 25298 * Merging metadata reduces the number of wrappers used to invoke a function. 25299 * This is possible because methods like `_.bind`, `_.curry`, and `_.partial` 25300 * may be applied regardless of execution order. Methods like `_.ary` and 25301 * `_.rearg` modify function arguments, making the order in which they are 25302 * executed important, preventing the merging of metadata. However, we make 25303 * an exception for a safe combined case where curried functions have `_.ary` 25304 * and or `_.rearg` applied. 25305 * 25306 * @private 25307 * @param {Array} data The destination metadata. 25308 * @param {Array} source The source metadata. 25309 * @returns {Array} Returns `data`. 25310 */ 25311 function mergeData(data, source) { 25312 var bitmask = data[1], 25313 srcBitmask = source[1], 25314 newBitmask = bitmask | srcBitmask, 25315 isCommon = newBitmask < (WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG | WRAP_ARY_FLAG); 25316 25317 var isCombo = 25318 ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_CURRY_FLAG)) || 25319 ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_REARG_FLAG) && (data[7].length <= source[8])) || 25320 ((srcBitmask == (WRAP_ARY_FLAG | WRAP_REARG_FLAG)) && (source[7].length <= source[8]) && (bitmask == WRAP_CURRY_FLAG)); 25321 25322 // Exit early if metadata can't be merged. 25323 if (!(isCommon || isCombo)) { 25324 return data; 25325 } 25326 // Use source `thisArg` if available. 25327 if (srcBitmask & WRAP_BIND_FLAG) { 25328 data[2] = source[2]; 25329 // Set when currying a bound function. 25330 newBitmask |= bitmask & WRAP_BIND_FLAG ? 0 : WRAP_CURRY_BOUND_FLAG; 25331 } 25332 // Compose partial arguments. 25333 var value = source[3]; 25334 if (value) { 25335 var partials = data[3]; 25336 data[3] = partials ? composeArgs(partials, value, source[4]) : value; 25337 data[4] = partials ? replaceHolders(data[3], PLACEHOLDER) : source[4]; 25338 } 25339 // Compose partial right arguments. 25340 value = source[5]; 25341 if (value) { 25342 partials = data[5]; 25343 data[5] = partials ? composeArgsRight(partials, value, source[6]) : value; 25344 data[6] = partials ? replaceHolders(data[5], PLACEHOLDER) : source[6]; 25345 } 25346 // Use source `argPos` if available. 25347 value = source[7]; 25348 if (value) { 25349 data[7] = value; 25350 } 25351 // Use source `ary` if it's smaller. 25352 if (srcBitmask & WRAP_ARY_FLAG) { 25353 data[8] = data[8] == null ? source[8] : nativeMin(data[8], source[8]); 25354 } 25355 // Use source `arity` if one is not provided. 25356 if (data[9] == null) { 25357 data[9] = source[9]; 25358 } 25359 // Use source `func` and merge bitmasks. 25360 data[0] = source[0]; 25361 data[1] = newBitmask; 25362 25363 return data; 25364 } 25365 25366 /** 25367 * This function is like 25368 * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) 25369 * except that it includes inherited enumerable properties. 25370 * 25371 * @private 25372 * @param {Object} object The object to query. 25373 * @returns {Array} Returns the array of property names. 25374 */ 25375 function nativeKeysIn(object) { 25376 var result = []; 25377 if (object != null) { 25378 for (var key in Object(object)) { 25379 result.push(key); 25380 } 25381 } 25382 return result; 25383 } 25384 25385 /** 25386 * Converts `value` to a string using `Object.prototype.toString`. 25387 * 25388 * @private 25389 * @param {*} value The value to convert. 25390 * @returns {string} Returns the converted string. 25391 */ 25392 function objectToString(value) { 25393 return nativeObjectToString.call(value); 25394 } 25395 25396 /** 25397 * A specialized version of `baseRest` which transforms the rest array. 25398 * 25399 * @private 25400 * @param {Function} func The function to apply a rest parameter to. 25401 * @param {number} [start=func.length-1] The start position of the rest parameter. 25402 * @param {Function} transform The rest array transform. 25403 * @returns {Function} Returns the new function. 25404 */ 25405 function overRest(func, start, transform) { 25406 start = nativeMax(start === undefined ? (func.length - 1) : start, 0); 25407 return function() { 25408 var args = arguments, 25409 index = -1, 25410 length = nativeMax(args.length - start, 0), 25411 array = Array(length); 25412 25413 while (++index < length) { 25414 array[index] = args[start + index]; 25415 } 25416 index = -1; 25417 var otherArgs = Array(start + 1); 25418 while (++index < start) { 25419 otherArgs[index] = args[index]; 25420 } 25421 otherArgs[start] = transform(array); 25422 return apply(func, this, otherArgs); 25423 }; 25424 } 25425 25426 /** 25427 * Gets the parent value at `path` of `object`. 25428 * 25429 * @private 25430 * @param {Object} object The object to query. 25431 * @param {Array} path The path to get the parent value of. 25432 * @returns {*} Returns the parent value. 25433 */ 25434 function parent(object, path) { 25435 return path.length < 2 ? object : baseGet(object, baseSlice(path, 0, -1)); 25436 } 25437 25438 /** 25439 * Reorder `array` according to the specified indexes where the element at 25440 * the first index is assigned as the first element, the element at 25441 * the second index is assigned as the second element, and so on. 25442 * 25443 * @private 25444 * @param {Array} array The array to reorder. 25445 * @param {Array} indexes The arranged array indexes. 25446 * @returns {Array} Returns `array`. 25447 */ 25448 function reorder(array, indexes) { 25449 var arrLength = array.length, 25450 length = nativeMin(indexes.length, arrLength), 25451 oldArray = copyArray(array); 25452 25453 while (length--) { 25454 var index = indexes[length]; 25455 array[length] = isIndex(index, arrLength) ? oldArray[index] : undefined; 25456 } 25457 return array; 25458 } 25459 25460 /** 25461 * Gets the value at `key`, unless `key` is "__proto__" or "constructor". 25462 * 25463 * @private 25464 * @param {Object} object The object to query. 25465 * @param {string} key The key of the property to get. 25466 * @returns {*} Returns the property value. 25467 */ 25468 function safeGet(object, key) { 25469 if (key === 'constructor' && typeof object[key] === 'function') { 25470 return; 25471 } 25472 25473 if (key == '__proto__') { 25474 return; 25475 } 25476 25477 return object[key]; 25478 } 25479 25480 /** 25481 * Sets metadata for `func`. 25482 * 25483 * **Note:** If this function becomes hot, i.e. is invoked a lot in a short 25484 * period of time, it will trip its breaker and transition to an identity 25485 * function to avoid garbage collection pauses in V8. See 25486 * [V8 issue 2070](https://bugs.chromium.org/p/v8/issues/detail?id=2070) 25487 * for more details. 25488 * 25489 * @private 25490 * @param {Function} func The function to associate metadata with. 25491 * @param {*} data The metadata. 25492 * @returns {Function} Returns `func`. 25493 */ 25494 var setData = shortOut(baseSetData); 25495 25496 /** 25497 * A simple wrapper around the global [`setTimeout`](https://mdn.io/setTimeout). 25498 * 25499 * @private 25500 * @param {Function} func The function to delay. 25501 * @param {number} wait The number of milliseconds to delay invocation. 25502 * @returns {number|Object} Returns the timer id or timeout object. 25503 */ 25504 var setTimeout = ctxSetTimeout || function(func, wait) { 25505 return root.setTimeout(func, wait); 25506 }; 25507 25508 /** 25509 * Sets the `toString` method of `func` to return `string`. 25510 * 25511 * @private 25512 * @param {Function} func The function to modify. 25513 * @param {Function} string The `toString` result. 25514 * @returns {Function} Returns `func`. 25515 */ 25516 var setToString = shortOut(baseSetToString); 25517 25518 /** 25519 * Sets the `toString` method of `wrapper` to mimic the source of `reference` 25520 * with wrapper details in a comment at the top of the source body. 25521 * 25522 * @private 25523 * @param {Function} wrapper The function to modify. 25524 * @param {Function} reference The reference function. 25525 * @param {number} bitmask The bitmask flags. See `createWrap` for more details. 25526 * @returns {Function} Returns `wrapper`. 25527 */ 25528 function setWrapToString(wrapper, reference, bitmask) { 25529 var source = (reference + ''); 25530 return setToString(wrapper, insertWrapDetails(source, updateWrapDetails(getWrapDetails(source), bitmask))); 25531 } 25532 25533 /** 25534 * Creates a function that'll short out and invoke `identity` instead 25535 * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN` 25536 * milliseconds. 25537 * 25538 * @private 25539 * @param {Function} func The function to restrict. 25540 * @returns {Function} Returns the new shortable function. 25541 */ 25542 function shortOut(func) { 25543 var count = 0, 25544 lastCalled = 0; 25545 25546 return function() { 25547 var stamp = nativeNow(), 25548 remaining = HOT_SPAN - (stamp - lastCalled); 25549 25550 lastCalled = stamp; 25551 if (remaining > 0) { 25552 if (++count >= HOT_COUNT) { 25553 return arguments[0]; 25554 } 25555 } else { 25556 count = 0; 25557 } 25558 return func.apply(undefined, arguments); 25559 }; 25560 } 25561 25562 /** 25563 * A specialized version of `_.shuffle` which mutates and sets the size of `array`. 25564 * 25565 * @private 25566 * @param {Array} array The array to shuffle. 25567 * @param {number} [size=array.length] The size of `array`. 25568 * @returns {Array} Returns `array`. 25569 */ 25570 function shuffleSelf(array, size) { 25571 var index = -1, 25572 length = array.length, 25573 lastIndex = length - 1; 25574 25575 size = size === undefined ? length : size; 25576 while (++index < size) { 25577 var rand = baseRandom(index, lastIndex), 25578 value = array[rand]; 25579 25580 array[rand] = array[index]; 25581 array[index] = value; 25582 } 25583 array.length = size; 25584 return array; 25585 } 25586 25587 /** 25588 * Converts `string` to a property path array. 25589 * 25590 * @private 25591 * @param {string} string The string to convert. 25592 * @returns {Array} Returns the property path array. 25593 */ 25594 var stringToPath = memoizeCapped(function(string) { 25595 var result = []; 25596 if (string.charCodeAt(0) === 46 /* . */) { 25597 result.push(''); 25598 } 25599 string.replace(rePropName, function(match, number, quote, subString) { 25600 result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match)); 25601 }); 25602 return result; 25603 }); 25604 25605 /** 25606 * Converts `value` to a string key if it's not a string or symbol. 25607 * 25608 * @private 25609 * @param {*} value The value to inspect. 25610 * @returns {string|symbol} Returns the key. 25611 */ 25612 function toKey(value) { 25613 if (typeof value == 'string' || isSymbol(value)) { 25614 return value; 25615 } 25616 var result = (value + ''); 25617 return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; 25618 } 25619 25620 /** 25621 * Converts `func` to its source code. 25622 * 25623 * @private 25624 * @param {Function} func The function to convert. 25625 * @returns {string} Returns the source code. 25626 */ 25627 function toSource(func) { 25628 if (func != null) { 25629 try { 25630 return funcToString.call(func); 25631 } catch (e) {} 25632 try { 25633 return (func + ''); 25634 } catch (e) {} 25635 } 25636 return ''; 25637 } 25638 25639 /** 25640 * Updates wrapper `details` based on `bitmask` flags. 25641 * 25642 * @private 25643 * @returns {Array} details The details to modify. 25644 * @param {number} bitmask The bitmask flags. See `createWrap` for more details. 25645 * @returns {Array} Returns `details`. 25646 */ 25647 function updateWrapDetails(details, bitmask) { 25648 arrayEach(wrapFlags, function(pair) { 25649 var value = '_.' + pair[0]; 25650 if ((bitmask & pair[1]) && !arrayIncludes(details, value)) { 25651 details.push(value); 25652 } 25653 }); 25654 return details.sort(); 25655 } 25656 25657 /** 25658 * Creates a clone of `wrapper`. 25659 * 25660 * @private 25661 * @param {Object} wrapper The wrapper to clone. 25662 * @returns {Object} Returns the cloned wrapper. 25663 */ 25664 function wrapperClone(wrapper) { 25665 if (wrapper instanceof LazyWrapper) { 25666 return wrapper.clone(); 25667 } 25668 var result = new LodashWrapper(wrapper.__wrapped__, wrapper.__chain__); 25669 result.__actions__ = copyArray(wrapper.__actions__); 25670 result.__index__ = wrapper.__index__; 25671 result.__values__ = wrapper.__values__; 25672 return result; 25673 } 25674 25675 /*------------------------------------------------------------------------*/ 25676 25677 /** 25678 * Creates an array of elements split into groups the length of `size`. 25679 * If `array` can't be split evenly, the final chunk will be the remaining 25680 * elements. 25681 * 25682 * @static 25683 * @memberOf _ 25684 * @since 3.0.0 25685 * @category Array 25686 * @param {Array} array The array to process. 25687 * @param {number} [size=1] The length of each chunk 25688 * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. 25689 * @returns {Array} Returns the new array of chunks. 25690 * @example 25691 * 25692 * _.chunk(['a', 'b', 'c', 'd'], 2); 25693 * // => [['a', 'b'], ['c', 'd']] 25694 * 25695 * _.chunk(['a', 'b', 'c', 'd'], 3); 25696 * // => [['a', 'b', 'c'], ['d']] 25697 */ 25698 function chunk(array, size, guard) { 25699 if ((guard ? isIterateeCall(array, size, guard) : size === undefined)) { 25700 size = 1; 25701 } else { 25702 size = nativeMax(toInteger(size), 0); 25703 } 25704 var length = array == null ? 0 : array.length; 25705 if (!length || size < 1) { 25706 return []; 25707 } 25708 var index = 0, 25709 resIndex = 0, 25710 result = Array(nativeCeil(length / size)); 25711 25712 while (index < length) { 25713 result[resIndex++] = baseSlice(array, index, (index += size)); 25714 } 25715 return result; 25716 } 25717 25718 /** 25719 * Creates an array with all falsey values removed. The values `false`, `null`, 25720 * `0`, `""`, `undefined`, and `NaN` are falsey. 25721 * 25722 * @static 25723 * @memberOf _ 25724 * @since 0.1.0 25725 * @category Array 25726 * @param {Array} array The array to compact. 25727 * @returns {Array} Returns the new array of filtered values. 25728 * @example 25729 * 25730 * _.compact([0, 1, false, 2, '', 3]); 25731 * // => [1, 2, 3] 25732 */ 25733 function compact(array) { 25734 var index = -1, 25735 length = array == null ? 0 : array.length, 25736 resIndex = 0, 25737 result = []; 25738 25739 while (++index < length) { 25740 var value = array[index]; 25741 if (value) { 25742 result[resIndex++] = value; 25743 } 25744 } 25745 return result; 25746 } 25747 25748 /** 25749 * Creates a new array concatenating `array` with any additional arrays 25750 * and/or values. 25751 * 25752 * @static 25753 * @memberOf _ 25754 * @since 4.0.0 25755 * @category Array 25756 * @param {Array} array The array to concatenate. 25757 * @param {...*} [values] The values to concatenate. 25758 * @returns {Array} Returns the new concatenated array. 25759 * @example 25760 * 25761 * var array = [1]; 25762 * var other = _.concat(array, 2, [3], [[4]]); 25763 * 25764 * console.log(other); 25765 * // => [1, 2, 3, [4]] 25766 * 25767 * console.log(array); 25768 * // => [1] 25769 */ 25770 function concat() { 25771 var length = arguments.length; 25772 if (!length) { 25773 return []; 25774 } 25775 var args = Array(length - 1), 25776 array = arguments[0], 25777 index = length; 25778 25779 while (index--) { 25780 args[index - 1] = arguments[index]; 25781 } 25782 return arrayPush(isArray(array) ? copyArray(array) : [array], baseFlatten(args, 1)); 25783 } 25784 25785 /** 25786 * Creates an array of `array` values not included in the other given arrays 25787 * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) 25788 * for equality comparisons. The order and references of result values are 25789 * determined by the first array. 25790 * 25791 * **Note:** Unlike `_.pullAll`, this method returns a new array. 25792 * 25793 * @static 25794 * @memberOf _ 25795 * @since 0.1.0 25796 * @category Array 25797 * @param {Array} array The array to inspect. 25798 * @param {...Array} [values] The values to exclude. 25799 * @returns {Array} Returns the new array of filtered values. 25800 * @see _.without, _.xor 25801 * @example 25802 * 25803 * _.difference([2, 1], [2, 3]); 25804 * // => [1] 25805 */ 25806 var difference = baseRest(function(array, values) { 25807 return isArrayLikeObject(array) 25808 ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true)) 25809 : []; 25810 }); 25811 25812 /** 25813 * This method is like `_.difference` except that it accepts `iteratee` which 25814 * is invoked for each element of `array` and `values` to generate the criterion 25815 * by which they're compared. The order and references of result values are 25816 * determined by the first array. The iteratee is invoked with one argument: 25817 * (value). 25818 * 25819 * **Note:** Unlike `_.pullAllBy`, this method returns a new array. 25820 * 25821 * @static 25822 * @memberOf _ 25823 * @since 4.0.0 25824 * @category Array 25825 * @param {Array} array The array to inspect. 25826 * @param {...Array} [values] The values to exclude. 25827 * @param {Function} [iteratee=_.identity] The iteratee invoked per element. 25828 * @returns {Array} Returns the new array of filtered values. 25829 * @example 25830 * 25831 * _.differenceBy([2.1, 1.2], [2.3, 3.4], Math.floor); 25832 * // => [1.2] 25833 * 25834 * // The `_.property` iteratee shorthand. 25835 * _.differenceBy([{ 'x': 2 }, { 'x': 1 }], [{ 'x': 1 }], 'x'); 25836 * // => [{ 'x': 2 }] 25837 */ 25838 var differenceBy = baseRest(function(array, values) { 25839 var iteratee = last(values); 25840 if (isArrayLikeObject(iteratee)) { 25841 iteratee = undefined; 25842 } 25843 return isArrayLikeObject(array) 25844 ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), getIteratee(iteratee, 2)) 25845 : []; 25846 }); 25847 25848 /** 25849 * This method is like `_.difference` except that it accepts `comparator` 25850 * which is invoked to compare elements of `array` to `values`. The order and 25851 * references of result values are determined by the first array. The comparator 25852 * is invoked with two arguments: (arrVal, othVal). 25853 * 25854 * **Note:** Unlike `_.pullAllWith`, this method returns a new array. 25855 * 25856 * @static 25857 * @memberOf _ 25858 * @since 4.0.0 25859 * @category Array 25860 * @param {Array} array The array to inspect. 25861 * @param {...Array} [values] The values to exclude. 25862 * @param {Function} [comparator] The comparator invoked per element. 25863 * @returns {Array} Returns the new array of filtered values. 25864 * @example 25865 * 25866 * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]; 25867 * 25868 * _.differenceWith(objects, [{ 'x': 1, 'y': 2 }], _.isEqual); 25869 * // => [{ 'x': 2, 'y': 1 }] 25870 */ 25871 var differenceWith = baseRest(function(array, values) { 25872 var comparator = last(values); 25873 if (isArrayLikeObject(comparator)) { 25874 comparator = undefined; 25875 } 25876 return isArrayLikeObject(array) 25877 ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), undefined, comparator) 25878 : []; 25879 }); 25880 25881 /** 25882 * Creates a slice of `array` with `n` elements dropped from the beginning. 25883 * 25884 * @static 25885 * @memberOf _ 25886 * @since 0.5.0 25887 * @category Array 25888 * @param {Array} array The array to query. 25889 * @param {number} [n=1] The number of elements to drop. 25890 * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. 25891 * @returns {Array} Returns the slice of `array`. 25892 * @example 25893 * 25894 * _.drop([1, 2, 3]); 25895 * // => [2, 3] 25896 * 25897 * _.drop([1, 2, 3], 2); 25898 * // => [3] 25899 * 25900 * _.drop([1, 2, 3], 5); 25901 * // => [] 25902 * 25903 * _.drop([1, 2, 3], 0); 25904 * // => [1, 2, 3] 25905 */ 25906 function drop(array, n, guard) { 25907 var length = array == null ? 0 : array.length; 25908 if (!length) { 25909 return []; 25910 } 25911 n = (guard || n === undefined) ? 1 : toInteger(n); 25912 return baseSlice(array, n < 0 ? 0 : n, length); 25913 } 25914 25915 /** 25916 * Creates a slice of `array` with `n` elements dropped from the end. 25917 * 25918 * @static 25919 * @memberOf _ 25920 * @since 3.0.0 25921 * @category Array 25922 * @param {Array} array The array to query. 25923 * @param {number} [n=1] The number of elements to drop. 25924 * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. 25925 * @returns {Array} Returns the slice of `array`. 25926 * @example 25927 * 25928 * _.dropRight([1, 2, 3]); 25929 * // => [1, 2] 25930 * 25931 * _.dropRight([1, 2, 3], 2); 25932 * // => [1] 25933 * 25934 * _.dropRight([1, 2, 3], 5); 25935 * // => [] 25936 * 25937 * _.dropRight([1, 2, 3], 0); 25938 * // => [1, 2, 3] 25939 */ 25940 function dropRight(array, n, guard) { 25941 var length = array == null ? 0 : array.length; 25942 if (!length) { 25943 return []; 25944 } 25945 n = (guard || n === undefined) ? 1 : toInteger(n); 25946 n = length - n; 25947 return baseSlice(array, 0, n < 0 ? 0 : n); 25948 } 25949 25950 /** 25951 * Creates a slice of `array` excluding elements dropped from the end. 25952 * Elements are dropped until `predicate` returns falsey. The predicate is 25953 * invoked with three arguments: (value, index, array). 25954 * 25955 * @static 25956 * @memberOf _ 25957 * @since 3.0.0 25958 * @category Array 25959 * @param {Array} array The array to query. 25960 * @param {Function} [predicate=_.identity] The function invoked per iteration. 25961 * @returns {Array} Returns the slice of `array`. 25962 * @example 25963 * 25964 * var users = [ 25965 * { 'user': 'barney', 'active': true }, 25966 * { 'user': 'fred', 'active': false }, 25967 * { 'user': 'pebbles', 'active': false } 25968 * ]; 25969 * 25970 * _.dropRightWhile(users, function(o) { return !o.active; }); 25971 * // => objects for ['barney'] 25972 * 25973 * // The `_.matches` iteratee shorthand. 25974 * _.dropRightWhile(users, { 'user': 'pebbles', 'active': false }); 25975 * // => objects for ['barney', 'fred'] 25976 * 25977 * // The `_.matchesProperty` iteratee shorthand. 25978 * _.dropRightWhile(users, ['active', false]); 25979 * // => objects for ['barney'] 25980 * 25981 * // The `_.property` iteratee shorthand. 25982 * _.dropRightWhile(users, 'active'); 25983 * // => objects for ['barney', 'fred', 'pebbles'] 25984 */ 25985 function dropRightWhile(array, predicate) { 25986 return (array && array.length) 25987 ? baseWhile(array, getIteratee(predicate, 3), true, true) 25988 : []; 25989 } 25990 25991 /** 25992 * Creates a slice of `array` excluding elements dropped from the beginning. 25993 * Elements are dropped until `predicate` returns falsey. The predicate is 25994 * invoked with three arguments: (value, index, array). 25995 * 25996 * @static 25997 * @memberOf _ 25998 * @since 3.0.0 25999 * @category Array 26000 * @param {Array} array The array to query. 26001 * @param {Function} [predicate=_.identity] The function invoked per iteration. 26002 * @returns {Array} Returns the slice of `array`. 26003 * @example 26004 * 26005 * var users = [ 26006 * { 'user': 'barney', 'active': false }, 26007 * { 'user': 'fred', 'active': false }, 26008 * { 'user': 'pebbles', 'active': true } 26009 * ]; 26010 * 26011 * _.dropWhile(users, function(o) { return !o.active; }); 26012 * // => objects for ['pebbles'] 26013 * 26014 * // The `_.matches` iteratee shorthand. 26015 * _.dropWhile(users, { 'user': 'barney', 'active': false }); 26016 * // => objects for ['fred', 'pebbles'] 26017 * 26018 * // The `_.matchesProperty` iteratee shorthand. 26019 * _.dropWhile(users, ['active', false]); 26020 * // => objects for ['pebbles'] 26021 * 26022 * // The `_.property` iteratee shorthand. 26023 * _.dropWhile(users, 'active'); 26024 * // => objects for ['barney', 'fred', 'pebbles'] 26025 */ 26026 function dropWhile(array, predicate) { 26027 return (array && array.length) 26028 ? baseWhile(array, getIteratee(predicate, 3), true) 26029 : []; 26030 } 26031 26032 /** 26033 * Fills elements of `array` with `value` from `start` up to, but not 26034 * including, `end`. 26035 * 26036 * **Note:** This method mutates `array`. 26037 * 26038 * @static 26039 * @memberOf _ 26040 * @since 3.2.0 26041 * @category Array 26042 * @param {Array} array The array to fill. 26043 * @param {*} value The value to fill `array` with. 26044 * @param {number} [start=0] The start position. 26045 * @param {number} [end=array.length] The end position. 26046 * @returns {Array} Returns `array`. 26047 * @example 26048 * 26049 * var array = [1, 2, 3]; 26050 * 26051 * _.fill(array, 'a'); 26052 * console.log(array); 26053 * // => ['a', 'a', 'a'] 26054 * 26055 * _.fill(Array(3), 2); 26056 * // => [2, 2, 2] 26057 * 26058 * _.fill([4, 6, 8, 10], '*', 1, 3); 26059 * // => [4, '*', '*', 10] 26060 */ 26061 function fill(array, value, start, end) { 26062 var length = array == null ? 0 : array.length; 26063 if (!length) { 26064 return []; 26065 } 26066 if (start && typeof start != 'number' && isIterateeCall(array, value, start)) { 26067 start = 0; 26068 end = length; 26069 } 26070 return baseFill(array, value, start, end); 26071 } 26072 26073 /** 26074 * This method is like `_.find` except that it returns the index of the first 26075 * element `predicate` returns truthy for instead of the element itself. 26076 * 26077 * @static 26078 * @memberOf _ 26079 * @since 1.1.0 26080 * @category Array 26081 * @param {Array} array The array to inspect. 26082 * @param {Function} [predicate=_.identity] The function invoked per iteration. 26083 * @param {number} [fromIndex=0] The index to search from. 26084 * @returns {number} Returns the index of the found element, else `-1`. 26085 * @example 26086 * 26087 * var users = [ 26088 * { 'user': 'barney', 'active': false }, 26089 * { 'user': 'fred', 'active': false }, 26090 * { 'user': 'pebbles', 'active': true } 26091 * ]; 26092 * 26093 * _.findIndex(users, function(o) { return o.user == 'barney'; }); 26094 * // => 0 26095 * 26096 * // The `_.matches` iteratee shorthand. 26097 * _.findIndex(users, { 'user': 'fred', 'active': false }); 26098 * // => 1 26099 * 26100 * // The `_.matchesProperty` iteratee shorthand. 26101 * _.findIndex(users, ['active', false]); 26102 * // => 0 26103 * 26104 * // The `_.property` iteratee shorthand. 26105 * _.findIndex(users, 'active'); 26106 * // => 2 26107 */ 26108 function findIndex(array, predicate, fromIndex) { 26109 var length = array == null ? 0 : array.length; 26110 if (!length) { 26111 return -1; 26112 } 26113 var index = fromIndex == null ? 0 : toInteger(fromIndex); 26114 if (index < 0) { 26115 index = nativeMax(length + index, 0); 26116 } 26117 return baseFindIndex(array, getIteratee(predicate, 3), index); 26118 } 26119 26120 /** 26121 * This method is like `_.findIndex` except that it iterates over elements 26122 * of `collection` from right to left. 26123 * 26124 * @static 26125 * @memberOf _ 26126 * @since 2.0.0 26127 * @category Array 26128 * @param {Array} array The array to inspect. 26129 * @param {Function} [predicate=_.identity] The function invoked per iteration. 26130 * @param {number} [fromIndex=array.length-1] The index to search from. 26131 * @returns {number} Returns the index of the found element, else `-1`. 26132 * @example 26133 * 26134 * var users = [ 26135 * { 'user': 'barney', 'active': true }, 26136 * { 'user': 'fred', 'active': false }, 26137 * { 'user': 'pebbles', 'active': false } 26138 * ]; 26139 * 26140 * _.findLastIndex(users, function(o) { return o.user == 'pebbles'; }); 26141 * // => 2 26142 * 26143 * // The `_.matches` iteratee shorthand. 26144 * _.findLastIndex(users, { 'user': 'barney', 'active': true }); 26145 * // => 0 26146 * 26147 * // The `_.matchesProperty` iteratee shorthand. 26148 * _.findLastIndex(users, ['active', false]); 26149 * // => 2 26150 * 26151 * // The `_.property` iteratee shorthand. 26152 * _.findLastIndex(users, 'active'); 26153 * // => 0 26154 */ 26155 function findLastIndex(array, predicate, fromIndex) { 26156 var length = array == null ? 0 : array.length; 26157 if (!length) { 26158 return -1; 26159 } 26160 var index = length - 1; 26161 if (fromIndex !== undefined) { 26162 index = toInteger(fromIndex); 26163 index = fromIndex < 0 26164 ? nativeMax(length + index, 0) 26165 : nativeMin(index, length - 1); 26166 } 26167 return baseFindIndex(array, getIteratee(predicate, 3), index, true); 26168 } 26169 26170 /** 26171 * Flattens `array` a single level deep. 26172 * 26173 * @static 26174 * @memberOf _ 26175 * @since 0.1.0 26176 * @category Array 26177 * @param {Array} array The array to flatten. 26178 * @returns {Array} Returns the new flattened array. 26179 * @example 26180 * 26181 * _.flatten([1, [2, [3, [4]], 5]]); 26182 * // => [1, 2, [3, [4]], 5] 26183 */ 26184 function flatten(array) { 26185 var length = array == null ? 0 : array.length; 26186 return length ? baseFlatten(array, 1) : []; 26187 } 26188 26189 /** 26190 * Recursively flattens `array`. 26191 * 26192 * @static 26193 * @memberOf _ 26194 * @since 3.0.0 26195 * @category Array 26196 * @param {Array} array The array to flatten. 26197 * @returns {Array} Returns the new flattened array. 26198 * @example 26199 * 26200 * _.flattenDeep([1, [2, [3, [4]], 5]]); 26201 * // => [1, 2, 3, 4, 5] 26202 */ 26203 function flattenDeep(array) { 26204 var length = array == null ? 0 : array.length; 26205 return length ? baseFlatten(array, INFINITY) : []; 26206 } 26207 26208 /** 26209 * Recursively flatten `array` up to `depth` times. 26210 * 26211 * @static 26212 * @memberOf _ 26213 * @since 4.4.0 26214 * @category Array 26215 * @param {Array} array The array to flatten. 26216 * @param {number} [depth=1] The maximum recursion depth. 26217 * @returns {Array} Returns the new flattened array. 26218 * @example 26219 * 26220 * var array = [1, [2, [3, [4]], 5]]; 26221 * 26222 * _.flattenDepth(array, 1); 26223 * // => [1, 2, [3, [4]], 5] 26224 * 26225 * _.flattenDepth(array, 2); 26226 * // => [1, 2, 3, [4], 5] 26227 */ 26228 function flattenDepth(array, depth) { 26229 var length = array == null ? 0 : array.length; 26230 if (!length) { 26231 return []; 26232 } 26233 depth = depth === undefined ? 1 : toInteger(depth); 26234 return baseFlatten(array, depth); 26235 } 26236 26237 /** 26238 * The inverse of `_.toPairs`; this method returns an object composed 26239 * from key-value `pairs`. 26240 * 26241 * @static 26242 * @memberOf _ 26243 * @since 4.0.0 26244 * @category Array 26245 * @param {Array} pairs The key-value pairs. 26246 * @returns {Object} Returns the new object. 26247 * @example 26248 * 26249 * _.fromPairs([['a', 1], ['b', 2]]); 26250 * // => { 'a': 1, 'b': 2 } 26251 */ 26252 function fromPairs(pairs) { 26253 var index = -1, 26254 length = pairs == null ? 0 : pairs.length, 26255 result = {}; 26256 26257 while (++index < length) { 26258 var pair = pairs[index]; 26259 result[pair[0]] = pair[1]; 26260 } 26261 return result; 26262 } 26263 26264 /** 26265 * Gets the first element of `array`. 26266 * 26267 * @static 26268 * @memberOf _ 26269 * @since 0.1.0 26270 * @alias first 26271 * @category Array 26272 * @param {Array} array The array to query. 26273 * @returns {*} Returns the first element of `array`. 26274 * @example 26275 * 26276 * _.head([1, 2, 3]); 26277 * // => 1 26278 * 26279 * _.head([]); 26280 * // => undefined 26281 */ 26282 function head(array) { 26283 return (array && array.length) ? array[0] : undefined; 26284 } 26285 26286 /** 26287 * Gets the index at which the first occurrence of `value` is found in `array` 26288 * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) 26289 * for equality comparisons. If `fromIndex` is negative, it's used as the 26290 * offset from the end of `array`. 26291 * 26292 * @static 26293 * @memberOf _ 26294 * @since 0.1.0 26295 * @category Array 26296 * @param {Array} array The array to inspect. 26297 * @param {*} value The value to search for. 26298 * @param {number} [fromIndex=0] The index to search from. 26299 * @returns {number} Returns the index of the matched value, else `-1`. 26300 * @example 26301 * 26302 * _.indexOf([1, 2, 1, 2], 2); 26303 * // => 1 26304 * 26305 * // Search from the `fromIndex`. 26306 * _.indexOf([1, 2, 1, 2], 2, 2); 26307 * // => 3 26308 */ 26309 function indexOf(array, value, fromIndex) { 26310 var length = array == null ? 0 : array.length; 26311 if (!length) { 26312 return -1; 26313 } 26314 var index = fromIndex == null ? 0 : toInteger(fromIndex); 26315 if (index < 0) { 26316 index = nativeMax(length + index, 0); 26317 } 26318 return baseIndexOf(array, value, index); 26319 } 26320 26321 /** 26322 * Gets all but the last element of `array`. 26323 * 26324 * @static 26325 * @memberOf _ 26326 * @since 0.1.0 26327 * @category Array 26328 * @param {Array} array The array to query. 26329 * @returns {Array} Returns the slice of `array`. 26330 * @example 26331 * 26332 * _.initial([1, 2, 3]); 26333 * // => [1, 2] 26334 */ 26335 function initial(array) { 26336 var length = array == null ? 0 : array.length; 26337 return length ? baseSlice(array, 0, -1) : []; 26338 } 26339 26340 /** 26341 * Creates an array of unique values that are included in all given arrays 26342 * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) 26343 * for equality comparisons. The order and references of result values are 26344 * determined by the first array. 26345 * 26346 * @static 26347 * @memberOf _ 26348 * @since 0.1.0 26349 * @category Array 26350 * @param {...Array} [arrays] The arrays to inspect. 26351 * @returns {Array} Returns the new array of intersecting values. 26352 * @example 26353 * 26354 * _.intersection([2, 1], [2, 3]); 26355 * // => [2] 26356 */ 26357 var intersection = baseRest(function(arrays) { 26358 var mapped = arrayMap(arrays, castArrayLikeObject); 26359 return (mapped.length && mapped[0] === arrays[0]) 26360 ? baseIntersection(mapped) 26361 : []; 26362 }); 26363 26364 /** 26365 * This method is like `_.intersection` except that it accepts `iteratee` 26366 * which is invoked for each element of each `arrays` to generate the criterion 26367 * by which they're compared. The order and references of result values are 26368 * determined by the first array. The iteratee is invoked with one argument: 26369 * (value). 26370 * 26371 * @static 26372 * @memberOf _ 26373 * @since 4.0.0 26374 * @category Array 26375 * @param {...Array} [arrays] The arrays to inspect. 26376 * @param {Function} [iteratee=_.identity] The iteratee invoked per element. 26377 * @returns {Array} Returns the new array of intersecting values. 26378 * @example 26379 * 26380 * _.intersectionBy([2.1, 1.2], [2.3, 3.4], Math.floor); 26381 * // => [2.1] 26382 * 26383 * // The `_.property` iteratee shorthand. 26384 * _.intersectionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x'); 26385 * // => [{ 'x': 1 }] 26386 */ 26387 var intersectionBy = baseRest(function(arrays) { 26388 var iteratee = last(arrays), 26389 mapped = arrayMap(arrays, castArrayLikeObject); 26390 26391 if (iteratee === last(mapped)) { 26392 iteratee = undefined; 26393 } else { 26394 mapped.pop(); 26395 } 26396 return (mapped.length && mapped[0] === arrays[0]) 26397 ? baseIntersection(mapped, getIteratee(iteratee, 2)) 26398 : []; 26399 }); 26400 26401 /** 26402 * This method is like `_.intersection` except that it accepts `comparator` 26403 * which is invoked to compare elements of `arrays`. The order and references 26404 * of result values are determined by the first array. The comparator is 26405 * invoked with two arguments: (arrVal, othVal). 26406 * 26407 * @static 26408 * @memberOf _ 26409 * @since 4.0.0 26410 * @category Array 26411 * @param {...Array} [arrays] The arrays to inspect. 26412 * @param {Function} [comparator] The comparator invoked per element. 26413 * @returns {Array} Returns the new array of intersecting values. 26414 * @example 26415 * 26416 * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]; 26417 * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }]; 26418 * 26419 * _.intersectionWith(objects, others, _.isEqual); 26420 * // => [{ 'x': 1, 'y': 2 }] 26421 */ 26422 var intersectionWith = baseRest(function(arrays) { 26423 var comparator = last(arrays), 26424 mapped = arrayMap(arrays, castArrayLikeObject); 26425 26426 comparator = typeof comparator == 'function' ? comparator : undefined; 26427 if (comparator) { 26428 mapped.pop(); 26429 } 26430 return (mapped.length && mapped[0] === arrays[0]) 26431 ? baseIntersection(mapped, undefined, comparator) 26432 : []; 26433 }); 26434 26435 /** 26436 * Converts all elements in `array` into a string separated by `separator`. 26437 * 26438 * @static 26439 * @memberOf _ 26440 * @since 4.0.0 26441 * @category Array 26442 * @param {Array} array The array to convert. 26443 * @param {string} [separator=','] The element separator. 26444 * @returns {string} Returns the joined string. 26445 * @example 26446 * 26447 * _.join(['a', 'b', 'c'], '~'); 26448 * // => 'a~b~c' 26449 */ 26450 function join(array, separator) { 26451 return array == null ? '' : nativeJoin.call(array, separator); 26452 } 26453 26454 /** 26455 * Gets the last element of `array`. 26456 * 26457 * @static 26458 * @memberOf _ 26459 * @since 0.1.0 26460 * @category Array 26461 * @param {Array} array The array to query. 26462 * @returns {*} Returns the last element of `array`. 26463 * @example 26464 * 26465 * _.last([1, 2, 3]); 26466 * // => 3 26467 */ 26468 function last(array) { 26469 var length = array == null ? 0 : array.length; 26470 return length ? array[length - 1] : undefined; 26471 } 26472 26473 /** 26474 * This method is like `_.indexOf` except that it iterates over elements of 26475 * `array` from right to left. 26476 * 26477 * @static 26478 * @memberOf _ 26479 * @since 0.1.0 26480 * @category Array 26481 * @param {Array} array The array to inspect. 26482 * @param {*} value The value to search for. 26483 * @param {number} [fromIndex=array.length-1] The index to search from. 26484 * @returns {number} Returns the index of the matched value, else `-1`. 26485 * @example 26486 * 26487 * _.lastIndexOf([1, 2, 1, 2], 2); 26488 * // => 3 26489 * 26490 * // Search from the `fromIndex`. 26491 * _.lastIndexOf([1, 2, 1, 2], 2, 2); 26492 * // => 1 26493 */ 26494 function lastIndexOf(array, value, fromIndex) { 26495 var length = array == null ? 0 : array.length; 26496 if (!length) { 26497 return -1; 26498 } 26499 var index = length; 26500 if (fromIndex !== undefined) { 26501 index = toInteger(fromIndex); 26502 index = index < 0 ? nativeMax(length + index, 0) : nativeMin(index, length - 1); 26503 } 26504 return value === value 26505 ? strictLastIndexOf(array, value, index) 26506 : baseFindIndex(array, baseIsNaN, index, true); 26507 } 26508 26509 /** 26510 * Gets the element at index `n` of `array`. If `n` is negative, the nth 26511 * element from the end is returned. 26512 * 26513 * @static 26514 * @memberOf _ 26515 * @since 4.11.0 26516 * @category Array 26517 * @param {Array} array The array to query. 26518 * @param {number} [n=0] The index of the element to return. 26519 * @returns {*} Returns the nth element of `array`. 26520 * @example 26521 * 26522 * var array = ['a', 'b', 'c', 'd']; 26523 * 26524 * _.nth(array, 1); 26525 * // => 'b' 26526 * 26527 * _.nth(array, -2); 26528 * // => 'c'; 26529 */ 26530 function nth(array, n) { 26531 return (array && array.length) ? baseNth(array, toInteger(n)) : undefined; 26532 } 26533 26534 /** 26535 * Removes all given values from `array` using 26536 * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) 26537 * for equality comparisons. 26538 * 26539 * **Note:** Unlike `_.without`, this method mutates `array`. Use `_.remove` 26540 * to remove elements from an array by predicate. 26541 * 26542 * @static 26543 * @memberOf _ 26544 * @since 2.0.0 26545 * @category Array 26546 * @param {Array} array The array to modify. 26547 * @param {...*} [values] The values to remove. 26548 * @returns {Array} Returns `array`. 26549 * @example 26550 * 26551 * var array = ['a', 'b', 'c', 'a', 'b', 'c']; 26552 * 26553 * _.pull(array, 'a', 'c'); 26554 * console.log(array); 26555 * // => ['b', 'b'] 26556 */ 26557 var pull = baseRest(pullAll); 26558 26559 /** 26560 * This method is like `_.pull` except that it accepts an array of values to remove. 26561 * 26562 * **Note:** Unlike `_.difference`, this method mutates `array`. 26563 * 26564 * @static 26565 * @memberOf _ 26566 * @since 4.0.0 26567 * @category Array 26568 * @param {Array} array The array to modify. 26569 * @param {Array} values The values to remove. 26570 * @returns {Array} Returns `array`. 26571 * @example 26572 * 26573 * var array = ['a', 'b', 'c', 'a', 'b', 'c']; 26574 * 26575 * _.pullAll(array, ['a', 'c']); 26576 * console.log(array); 26577 * // => ['b', 'b'] 26578 */ 26579 function pullAll(array, values) { 26580 return (array && array.length && values && values.length) 26581 ? basePullAll(array, values) 26582 : array; 26583 } 26584 26585 /** 26586 * This method is like `_.pullAll` except that it accepts `iteratee` which is 26587 * invoked for each element of `array` and `values` to generate the criterion 26588 * by which they're compared. The iteratee is invoked with one argument: (value). 26589 * 26590 * **Note:** Unlike `_.differenceBy`, this method mutates `array`. 26591 * 26592 * @static 26593 * @memberOf _ 26594 * @since 4.0.0 26595 * @category Array 26596 * @param {Array} array The array to modify. 26597 * @param {Array} values The values to remove. 26598 * @param {Function} [iteratee=_.identity] The iteratee invoked per element. 26599 * @returns {Array} Returns `array`. 26600 * @example 26601 * 26602 * var array = [{ 'x': 1 }, { 'x': 2 }, { 'x': 3 }, { 'x': 1 }]; 26603 * 26604 * _.pullAllBy(array, [{ 'x': 1 }, { 'x': 3 }], 'x'); 26605 * console.log(array); 26606 * // => [{ 'x': 2 }] 26607 */ 26608 function pullAllBy(array, values, iteratee) { 26609 return (array && array.length && values && values.length) 26610 ? basePullAll(array, values, getIteratee(iteratee, 2)) 26611 : array; 26612 } 26613 26614 /** 26615 * This method is like `_.pullAll` except that it accepts `comparator` which 26616 * is invoked to compare elements of `array` to `values`. The comparator is 26617 * invoked with two arguments: (arrVal, othVal). 26618 * 26619 * **Note:** Unlike `_.differenceWith`, this method mutates `array`. 26620 * 26621 * @static 26622 * @memberOf _ 26623 * @since 4.6.0 26624 * @category Array 26625 * @param {Array} array The array to modify. 26626 * @param {Array} values The values to remove. 26627 * @param {Function} [comparator] The comparator invoked per element. 26628 * @returns {Array} Returns `array`. 26629 * @example 26630 * 26631 * var array = [{ 'x': 1, 'y': 2 }, { 'x': 3, 'y': 4 }, { 'x': 5, 'y': 6 }]; 26632 * 26633 * _.pullAllWith(array, [{ 'x': 3, 'y': 4 }], _.isEqual); 26634 * console.log(array); 26635 * // => [{ 'x': 1, 'y': 2 }, { 'x': 5, 'y': 6 }] 26636 */ 26637 function pullAllWith(array, values, comparator) { 26638 return (array && array.length && values && values.length) 26639 ? basePullAll(array, values, undefined, comparator) 26640 : array; 26641 } 26642 26643 /** 26644 * Removes elements from `array` corresponding to `indexes` and returns an 26645 * array of removed elements. 26646 * 26647 * **Note:** Unlike `_.at`, this method mutates `array`. 26648 * 26649 * @static 26650 * @memberOf _ 26651 * @since 3.0.0 26652 * @category Array 26653 * @param {Array} array The array to modify. 26654 * @param {...(number|number[])} [indexes] The indexes of elements to remove. 26655 * @returns {Array} Returns the new array of removed elements. 26656 * @example 26657 * 26658 * var array = ['a', 'b', 'c', 'd']; 26659 * var pulled = _.pullAt(array, [1, 3]); 26660 * 26661 * console.log(array); 26662 * // => ['a', 'c'] 26663 * 26664 * console.log(pulled); 26665 * // => ['b', 'd'] 26666 */ 26667 var pullAt = flatRest(function(array, indexes) { 26668 var length = array == null ? 0 : array.length, 26669 result = baseAt(array, indexes); 26670 26671 basePullAt(array, arrayMap(indexes, function(index) { 26672 return isIndex(index, length) ? +index : index; 26673 }).sort(compareAscending)); 26674 26675 return result; 26676 }); 26677 26678 /** 26679 * Removes all elements from `array` that `predicate` returns truthy for 26680 * and returns an array of the removed elements. The predicate is invoked 26681 * with three arguments: (value, index, array). 26682 * 26683 * **Note:** Unlike `_.filter`, this method mutates `array`. Use `_.pull` 26684 * to pull elements from an array by value. 26685 * 26686 * @static 26687 * @memberOf _ 26688 * @since 2.0.0 26689 * @category Array 26690 * @param {Array} array The array to modify. 26691 * @param {Function} [predicate=_.identity] The function invoked per iteration. 26692 * @returns {Array} Returns the new array of removed elements. 26693 * @example 26694 * 26695 * var array = [1, 2, 3, 4]; 26696 * var evens = _.remove(array, function(n) { 26697 * return n % 2 == 0; 26698 * }); 26699 * 26700 * console.log(array); 26701 * // => [1, 3] 26702 * 26703 * console.log(evens); 26704 * // => [2, 4] 26705 */ 26706 function remove(array, predicate) { 26707 var result = []; 26708 if (!(array && array.length)) { 26709 return result; 26710 } 26711 var index = -1, 26712 indexes = [], 26713 length = array.length; 26714 26715 predicate = getIteratee(predicate, 3); 26716 while (++index < length) { 26717 var value = array[index]; 26718 if (predicate(value, index, array)) { 26719 result.push(value); 26720 indexes.push(index); 26721 } 26722 } 26723 basePullAt(array, indexes); 26724 return result; 26725 } 26726 26727 /** 26728 * Reverses `array` so that the first element becomes the last, the second 26729 * element becomes the second to last, and so on. 26730 * 26731 * **Note:** This method mutates `array` and is based on 26732 * [`Array#reverse`](https://mdn.io/Array/reverse). 26733 * 26734 * @static 26735 * @memberOf _ 26736 * @since 4.0.0 26737 * @category Array 26738 * @param {Array} array The array to modify. 26739 * @returns {Array} Returns `array`. 26740 * @example 26741 * 26742 * var array = [1, 2, 3]; 26743 * 26744 * _.reverse(array); 26745 * // => [3, 2, 1] 26746 * 26747 * console.log(array); 26748 * // => [3, 2, 1] 26749 */ 26750 function reverse(array) { 26751 return array == null ? array : nativeReverse.call(array); 26752 } 26753 26754 /** 26755 * Creates a slice of `array` from `start` up to, but not including, `end`. 26756 * 26757 * **Note:** This method is used instead of 26758 * [`Array#slice`](https://mdn.io/Array/slice) to ensure dense arrays are 26759 * returned. 26760 * 26761 * @static 26762 * @memberOf _ 26763 * @since 3.0.0 26764 * @category Array 26765 * @param {Array} array The array to slice. 26766 * @param {number} [start=0] The start position. 26767 * @param {number} [end=array.length] The end position. 26768 * @returns {Array} Returns the slice of `array`. 26769 */ 26770 function slice(array, start, end) { 26771 var length = array == null ? 0 : array.length; 26772 if (!length) { 26773 return []; 26774 } 26775 if (end && typeof end != 'number' && isIterateeCall(array, start, end)) { 26776 start = 0; 26777 end = length; 26778 } 26779 else { 26780 start = start == null ? 0 : toInteger(start); 26781 end = end === undefined ? length : toInteger(end); 26782 } 26783 return baseSlice(array, start, end); 26784 } 26785 26786 /** 26787 * Uses a binary search to determine the lowest index at which `value` 26788 * should be inserted into `array` in order to maintain its sort order. 26789 * 26790 * @static 26791 * @memberOf _ 26792 * @since 0.1.0 26793 * @category Array 26794 * @param {Array} array The sorted array to inspect. 26795 * @param {*} value The value to evaluate. 26796 * @returns {number} Returns the index at which `value` should be inserted 26797 * into `array`. 26798 * @example 26799 * 26800 * _.sortedIndex([30, 50], 40); 26801 * // => 1 26802 */ 26803 function sortedIndex(array, value) { 26804 return baseSortedIndex(array, value); 26805 } 26806 26807 /** 26808 * This method is like `_.sortedIndex` except that it accepts `iteratee` 26809 * which is invoked for `value` and each element of `array` to compute their 26810 * sort ranking. The iteratee is invoked with one argument: (value). 26811 * 26812 * @static 26813 * @memberOf _ 26814 * @since 4.0.0 26815 * @category Array 26816 * @param {Array} array The sorted array to inspect. 26817 * @param {*} value The value to evaluate. 26818 * @param {Function} [iteratee=_.identity] The iteratee invoked per element. 26819 * @returns {number} Returns the index at which `value` should be inserted 26820 * into `array`. 26821 * @example 26822 * 26823 * var objects = [{ 'x': 4 }, { 'x': 5 }]; 26824 * 26825 * _.sortedIndexBy(objects, { 'x': 4 }, function(o) { return o.x; }); 26826 * // => 0 26827 * 26828 * // The `_.property` iteratee shorthand. 26829 * _.sortedIndexBy(objects, { 'x': 4 }, 'x'); 26830 * // => 0 26831 */ 26832 function sortedIndexBy(array, value, iteratee) { 26833 return baseSortedIndexBy(array, value, getIteratee(iteratee, 2)); 26834 } 26835 26836 /** 26837 * This method is like `_.indexOf` except that it performs a binary 26838 * search on a sorted `array`. 26839 * 26840 * @static 26841 * @memberOf _ 26842 * @since 4.0.0 26843 * @category Array 26844 * @param {Array} array The array to inspect. 26845 * @param {*} value The value to search for. 26846 * @returns {number} Returns the index of the matched value, else `-1`. 26847 * @example 26848 * 26849 * _.sortedIndexOf([4, 5, 5, 5, 6], 5); 26850 * // => 1 26851 */ 26852 function sortedIndexOf(array, value) { 26853 var length = array == null ? 0 : array.length; 26854 if (length) { 26855 var index = baseSortedIndex(array, value); 26856 if (index < length && eq(array[index], value)) { 26857 return index; 26858 } 26859 } 26860 return -1; 26861 } 26862 26863 /** 26864 * This method is like `_.sortedIndex` except that it returns the highest 26865 * index at which `value` should be inserted into `array` in order to 26866 * maintain its sort order. 26867 * 26868 * @static 26869 * @memberOf _ 26870 * @since 3.0.0 26871 * @category Array 26872 * @param {Array} array The sorted array to inspect. 26873 * @param {*} value The value to evaluate. 26874 * @returns {number} Returns the index at which `value` should be inserted 26875 * into `array`. 26876 * @example 26877 * 26878 * _.sortedLastIndex([4, 5, 5, 5, 6], 5); 26879 * // => 4 26880 */ 26881 function sortedLastIndex(array, value) { 26882 return baseSortedIndex(array, value, true); 26883 } 26884 26885 /** 26886 * This method is like `_.sortedLastIndex` except that it accepts `iteratee` 26887 * which is invoked for `value` and each element of `array` to compute their 26888 * sort ranking. The iteratee is invoked with one argument: (value). 26889 * 26890 * @static 26891 * @memberOf _ 26892 * @since 4.0.0 26893 * @category Array 26894 * @param {Array} array The sorted array to inspect. 26895 * @param {*} value The value to evaluate. 26896 * @param {Function} [iteratee=_.identity] The iteratee invoked per element. 26897 * @returns {number} Returns the index at which `value` should be inserted 26898 * into `array`. 26899 * @example 26900 * 26901 * var objects = [{ 'x': 4 }, { 'x': 5 }]; 26902 * 26903 * _.sortedLastIndexBy(objects, { 'x': 4 }, function(o) { return o.x; }); 26904 * // => 1 26905 * 26906 * // The `_.property` iteratee shorthand. 26907 * _.sortedLastIndexBy(objects, { 'x': 4 }, 'x'); 26908 * // => 1 26909 */ 26910 function sortedLastIndexBy(array, value, iteratee) { 26911 return baseSortedIndexBy(array, value, getIteratee(iteratee, 2), true); 26912 } 26913 26914 /** 26915 * This method is like `_.lastIndexOf` except that it performs a binary 26916 * search on a sorted `array`. 26917 * 26918 * @static 26919 * @memberOf _ 26920 * @since 4.0.0 26921 * @category Array 26922 * @param {Array} array The array to inspect. 26923 * @param {*} value The value to search for. 26924 * @returns {number} Returns the index of the matched value, else `-1`. 26925 * @example 26926 * 26927 * _.sortedLastIndexOf([4, 5, 5, 5, 6], 5); 26928 * // => 3 26929 */ 26930 function sortedLastIndexOf(array, value) { 26931 var length = array == null ? 0 : array.length; 26932 if (length) { 26933 var index = baseSortedIndex(array, value, true) - 1; 26934 if (eq(array[index], value)) { 26935 return index; 26936 } 26937 } 26938 return -1; 26939 } 26940 26941 /** 26942 * This method is like `_.uniq` except that it's designed and optimized 26943 * for sorted arrays. 26944 * 26945 * @static 26946 * @memberOf _ 26947 * @since 4.0.0 26948 * @category Array 26949 * @param {Array} array The array to inspect. 26950 * @returns {Array} Returns the new duplicate free array. 26951 * @example 26952 * 26953 * _.sortedUniq([1, 1, 2]); 26954 * // => [1, 2] 26955 */ 26956 function sortedUniq(array) { 26957 return (array && array.length) 26958 ? baseSortedUniq(array) 26959 : []; 26960 } 26961 26962 /** 26963 * This method is like `_.uniqBy` except that it's designed and optimized 26964 * for sorted arrays. 26965 * 26966 * @static 26967 * @memberOf _ 26968 * @since 4.0.0 26969 * @category Array 26970 * @param {Array} array The array to inspect. 26971 * @param {Function} [iteratee] The iteratee invoked per element. 26972 * @returns {Array} Returns the new duplicate free array. 26973 * @example 26974 * 26975 * _.sortedUniqBy([1.1, 1.2, 2.3, 2.4], Math.floor); 26976 * // => [1.1, 2.3] 26977 */ 26978 function sortedUniqBy(array, iteratee) { 26979 return (array && array.length) 26980 ? baseSortedUniq(array, getIteratee(iteratee, 2)) 26981 : []; 26982 } 26983 26984 /** 26985 * Gets all but the first element of `array`. 26986 * 26987 * @static 26988 * @memberOf _ 26989 * @since 4.0.0 26990 * @category Array 26991 * @param {Array} array The array to query. 26992 * @returns {Array} Returns the slice of `array`. 26993 * @example 26994 * 26995 * _.tail([1, 2, 3]); 26996 * // => [2, 3] 26997 */ 26998 function tail(array) { 26999 var length = array == null ? 0 : array.length; 27000 return length ? baseSlice(array, 1, length) : []; 27001 } 27002 27003 /** 27004 * Creates a slice of `array` with `n` elements taken from the beginning. 27005 * 27006 * @static 27007 * @memberOf _ 27008 * @since 0.1.0 27009 * @category Array 27010 * @param {Array} array The array to query. 27011 * @param {number} [n=1] The number of elements to take. 27012 * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. 27013 * @returns {Array} Returns the slice of `array`. 27014 * @example 27015 * 27016 * _.take([1, 2, 3]); 27017 * // => [1] 27018 * 27019 * _.take([1, 2, 3], 2); 27020 * // => [1, 2] 27021 * 27022 * _.take([1, 2, 3], 5); 27023 * // => [1, 2, 3] 27024 * 27025 * _.take([1, 2, 3], 0); 27026 * // => [] 27027 */ 27028 function take(array, n, guard) { 27029 if (!(array && array.length)) { 27030 return []; 27031 } 27032 n = (guard || n === undefined) ? 1 : toInteger(n); 27033 return baseSlice(array, 0, n < 0 ? 0 : n); 27034 } 27035 27036 /** 27037 * Creates a slice of `array` with `n` elements taken from the end. 27038 * 27039 * @static 27040 * @memberOf _ 27041 * @since 3.0.0 27042 * @category Array 27043 * @param {Array} array The array to query. 27044 * @param {number} [n=1] The number of elements to take. 27045 * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. 27046 * @returns {Array} Returns the slice of `array`. 27047 * @example 27048 * 27049 * _.takeRight([1, 2, 3]); 27050 * // => [3] 27051 * 27052 * _.takeRight([1, 2, 3], 2); 27053 * // => [2, 3] 27054 * 27055 * _.takeRight([1, 2, 3], 5); 27056 * // => [1, 2, 3] 27057 * 27058 * _.takeRight([1, 2, 3], 0); 27059 * // => [] 27060 */ 27061 function takeRight(array, n, guard) { 27062 var length = array == null ? 0 : array.length; 27063 if (!length) { 27064 return []; 27065 } 27066 n = (guard || n === undefined) ? 1 : toInteger(n); 27067 n = length - n; 27068 return baseSlice(array, n < 0 ? 0 : n, length); 27069 } 27070 27071 /** 27072 * Creates a slice of `array` with elements taken from the end. Elements are 27073 * taken until `predicate` returns falsey. The predicate is invoked with 27074 * three arguments: (value, index, array). 27075 * 27076 * @static 27077 * @memberOf _ 27078 * @since 3.0.0 27079 * @category Array 27080 * @param {Array} array The array to query. 27081 * @param {Function} [predicate=_.identity] The function invoked per iteration. 27082 * @returns {Array} Returns the slice of `array`. 27083 * @example 27084 * 27085 * var users = [ 27086 * { 'user': 'barney', 'active': true }, 27087 * { 'user': 'fred', 'active': false }, 27088 * { 'user': 'pebbles', 'active': false } 27089 * ]; 27090 * 27091 * _.takeRightWhile(users, function(o) { return !o.active; }); 27092 * // => objects for ['fred', 'pebbles'] 27093 * 27094 * // The `_.matches` iteratee shorthand. 27095 * _.takeRightWhile(users, { 'user': 'pebbles', 'active': false }); 27096 * // => objects for ['pebbles'] 27097 * 27098 * // The `_.matchesProperty` iteratee shorthand. 27099 * _.takeRightWhile(users, ['active', false]); 27100 * // => objects for ['fred', 'pebbles'] 27101 * 27102 * // The `_.property` iteratee shorthand. 27103 * _.takeRightWhile(users, 'active'); 27104 * // => [] 27105 */ 27106 function takeRightWhile(array, predicate) { 27107 return (array && array.length) 27108 ? baseWhile(array, getIteratee(predicate, 3), false, true) 27109 : []; 27110 } 27111 27112 /** 27113 * Creates a slice of `array` with elements taken from the beginning. Elements 27114 * are taken until `predicate` returns falsey. The predicate is invoked with 27115 * three arguments: (value, index, array). 27116 * 27117 * @static 27118 * @memberOf _ 27119 * @since 3.0.0 27120 * @category Array 27121 * @param {Array} array The array to query. 27122 * @param {Function} [predicate=_.identity] The function invoked per iteration. 27123 * @returns {Array} Returns the slice of `array`. 27124 * @example 27125 * 27126 * var users = [ 27127 * { 'user': 'barney', 'active': false }, 27128 * { 'user': 'fred', 'active': false }, 27129 * { 'user': 'pebbles', 'active': true } 27130 * ]; 27131 * 27132 * _.takeWhile(users, function(o) { return !o.active; }); 27133 * // => objects for ['barney', 'fred'] 27134 * 27135 * // The `_.matches` iteratee shorthand. 27136 * _.takeWhile(users, { 'user': 'barney', 'active': false }); 27137 * // => objects for ['barney'] 27138 * 27139 * // The `_.matchesProperty` iteratee shorthand. 27140 * _.takeWhile(users, ['active', false]); 27141 * // => objects for ['barney', 'fred'] 27142 * 27143 * // The `_.property` iteratee shorthand. 27144 * _.takeWhile(users, 'active'); 27145 * // => [] 27146 */ 27147 function takeWhile(array, predicate) { 27148 return (array && array.length) 27149 ? baseWhile(array, getIteratee(predicate, 3)) 27150 : []; 27151 } 27152 27153 /** 27154 * Creates an array of unique values, in order, from all given arrays using 27155 * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) 27156 * for equality comparisons. 27157 * 27158 * @static 27159 * @memberOf _ 27160 * @since 0.1.0 27161 * @category Array 27162 * @param {...Array} [arrays] The arrays to inspect. 27163 * @returns {Array} Returns the new array of combined values. 27164 * @example 27165 * 27166 * _.union([2], [1, 2]); 27167 * // => [2, 1] 27168 */ 27169 var union = baseRest(function(arrays) { 27170 return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true)); 27171 }); 27172 27173 /** 27174 * This method is like `_.union` except that it accepts `iteratee` which is 27175 * invoked for each element of each `arrays` to generate the criterion by 27176 * which uniqueness is computed. Result values are chosen from the first 27177 * array in which the value occurs. The iteratee is invoked with one argument: 27178 * (value). 27179 * 27180 * @static 27181 * @memberOf _ 27182 * @since 4.0.0 27183 * @category Array 27184 * @param {...Array} [arrays] The arrays to inspect. 27185 * @param {Function} [iteratee=_.identity] The iteratee invoked per element. 27186 * @returns {Array} Returns the new array of combined values. 27187 * @example 27188 * 27189 * _.unionBy([2.1], [1.2, 2.3], Math.floor); 27190 * // => [2.1, 1.2] 27191 * 27192 * // The `_.property` iteratee shorthand. 27193 * _.unionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x'); 27194 * // => [{ 'x': 1 }, { 'x': 2 }] 27195 */ 27196 var unionBy = baseRest(function(arrays) { 27197 var iteratee = last(arrays); 27198 if (isArrayLikeObject(iteratee)) { 27199 iteratee = undefined; 27200 } 27201 return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), getIteratee(iteratee, 2)); 27202 }); 27203 27204 /** 27205 * This method is like `_.union` except that it accepts `comparator` which 27206 * is invoked to compare elements of `arrays`. Result values are chosen from 27207 * the first array in which the value occurs. The comparator is invoked 27208 * with two arguments: (arrVal, othVal). 27209 * 27210 * @static 27211 * @memberOf _ 27212 * @since 4.0.0 27213 * @category Array 27214 * @param {...Array} [arrays] The arrays to inspect. 27215 * @param {Function} [comparator] The comparator invoked per element. 27216 * @returns {Array} Returns the new array of combined values. 27217 * @example 27218 * 27219 * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]; 27220 * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }]; 27221 * 27222 * _.unionWith(objects, others, _.isEqual); 27223 * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }] 27224 */ 27225 var unionWith = baseRest(function(arrays) { 27226 var comparator = last(arrays); 27227 comparator = typeof comparator == 'function' ? comparator : undefined; 27228 return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), undefined, comparator); 27229 }); 27230 27231 /** 27232 * Creates a duplicate-free version of an array, using 27233 * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) 27234 * for equality comparisons, in which only the first occurrence of each element 27235 * is kept. The order of result values is determined by the order they occur 27236 * in the array. 27237 * 27238 * @static 27239 * @memberOf _ 27240 * @since 0.1.0 27241 * @category Array 27242 * @param {Array} array The array to inspect. 27243 * @returns {Array} Returns the new duplicate free array. 27244 * @example 27245 * 27246 * _.uniq([2, 1, 2]); 27247 * // => [2, 1] 27248 */ 27249 function uniq(array) { 27250 return (array && array.length) ? baseUniq(array) : []; 27251 } 27252 27253 /** 27254 * This method is like `_.uniq` except that it accepts `iteratee` which is 27255 * invoked for each element in `array` to generate the criterion by which 27256 * uniqueness is computed. The order of result values is determined by the 27257 * order they occur in the array. The iteratee is invoked with one argument: 27258 * (value). 27259 * 27260 * @static 27261 * @memberOf _ 27262 * @since 4.0.0 27263 * @category Array 27264 * @param {Array} array The array to inspect. 27265 * @param {Function} [iteratee=_.identity] The iteratee invoked per element. 27266 * @returns {Array} Returns the new duplicate free array. 27267 * @example 27268 * 27269 * _.uniqBy([2.1, 1.2, 2.3], Math.floor); 27270 * // => [2.1, 1.2] 27271 * 27272 * // The `_.property` iteratee shorthand. 27273 * _.uniqBy([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x'); 27274 * // => [{ 'x': 1 }, { 'x': 2 }] 27275 */ 27276 function uniqBy(array, iteratee) { 27277 return (array && array.length) ? baseUniq(array, getIteratee(iteratee, 2)) : []; 27278 } 27279 27280 /** 27281 * This method is like `_.uniq` except that it accepts `comparator` which 27282 * is invoked to compare elements of `array`. The order of result values is 27283 * determined by the order they occur in the array.The comparator is invoked 27284 * with two arguments: (arrVal, othVal). 27285 * 27286 * @static 27287 * @memberOf _ 27288 * @since 4.0.0 27289 * @category Array 27290 * @param {Array} array The array to inspect. 27291 * @param {Function} [comparator] The comparator invoked per element. 27292 * @returns {Array} Returns the new duplicate free array. 27293 * @example 27294 * 27295 * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 2 }]; 27296 * 27297 * _.uniqWith(objects, _.isEqual); 27298 * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }] 27299 */ 27300 function uniqWith(array, comparator) { 27301 comparator = typeof comparator == 'function' ? comparator : undefined; 27302 return (array && array.length) ? baseUniq(array, undefined, comparator) : []; 27303 } 27304 27305 /** 27306 * This method is like `_.zip` except that it accepts an array of grouped 27307 * elements and creates an array regrouping the elements to their pre-zip 27308 * configuration. 27309 * 27310 * @static 27311 * @memberOf _ 27312 * @since 1.2.0 27313 * @category Array 27314 * @param {Array} array The array of grouped elements to process. 27315 * @returns {Array} Returns the new array of regrouped elements. 27316 * @example 27317 * 27318 * var zipped = _.zip(['a', 'b'], [1, 2], [true, false]); 27319 * // => [['a', 1, true], ['b', 2, false]] 27320 * 27321 * _.unzip(zipped); 27322 * // => [['a', 'b'], [1, 2], [true, false]] 27323 */ 27324 function unzip(array) { 27325 if (!(array && array.length)) { 27326 return []; 27327 } 27328 var length = 0; 27329 array = arrayFilter(array, function(group) { 27330 if (isArrayLikeObject(group)) { 27331 length = nativeMax(group.length, length); 27332 return true; 27333 } 27334 }); 27335 return baseTimes(length, function(index) { 27336 return arrayMap(array, baseProperty(index)); 27337 }); 27338 } 27339 27340 /** 27341 * This method is like `_.unzip` except that it accepts `iteratee` to specify 27342 * how regrouped values should be combined. The iteratee is invoked with the 27343 * elements of each group: (...group). 27344 * 27345 * @static 27346 * @memberOf _ 27347 * @since 3.8.0 27348 * @category Array 27349 * @param {Array} array The array of grouped elements to process. 27350 * @param {Function} [iteratee=_.identity] The function to combine 27351 * regrouped values. 27352 * @returns {Array} Returns the new array of regrouped elements. 27353 * @example 27354 * 27355 * var zipped = _.zip([1, 2], [10, 20], [100, 200]); 27356 * // => [[1, 10, 100], [2, 20, 200]] 27357 * 27358 * _.unzipWith(zipped, _.add); 27359 * // => [3, 30, 300] 27360 */ 27361 function unzipWith(array, iteratee) { 27362 if (!(array && array.length)) { 27363 return []; 27364 } 27365 var result = unzip(array); 27366 if (iteratee == null) { 27367 return result; 27368 } 27369 return arrayMap(result, function(group) { 27370 return apply(iteratee, undefined, group); 27371 }); 27372 } 27373 27374 /** 27375 * Creates an array excluding all given values using 27376 * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) 27377 * for equality comparisons. 27378 * 27379 * **Note:** Unlike `_.pull`, this method returns a new array. 27380 * 27381 * @static 27382 * @memberOf _ 27383 * @since 0.1.0 27384 * @category Array 27385 * @param {Array} array The array to inspect. 27386 * @param {...*} [values] The values to exclude. 27387 * @returns {Array} Returns the new array of filtered values. 27388 * @see _.difference, _.xor 27389 * @example 27390 * 27391 * _.without([2, 1, 2, 3], 1, 2); 27392 * // => [3] 27393 */ 27394 var without = baseRest(function(array, values) { 27395 return isArrayLikeObject(array) 27396 ? baseDifference(array, values) 27397 : []; 27398 }); 27399 27400 /** 27401 * Creates an array of unique values that is the 27402 * [symmetric difference](https://en.wikipedia.org/wiki/Symmetric_difference) 27403 * of the given arrays. The order of result values is determined by the order 27404 * they occur in the arrays. 27405 * 27406 * @static 27407 * @memberOf _ 27408 * @since 2.4.0 27409 * @category Array 27410 * @param {...Array} [arrays] The arrays to inspect. 27411 * @returns {Array} Returns the new array of filtered values. 27412 * @see _.difference, _.without 27413 * @example 27414 * 27415 * _.xor([2, 1], [2, 3]); 27416 * // => [1, 3] 27417 */ 27418 var xor = baseRest(function(arrays) { 27419 return baseXor(arrayFilter(arrays, isArrayLikeObject)); 27420 }); 27421 27422 /** 27423 * This method is like `_.xor` except that it accepts `iteratee` which is 27424 * invoked for each element of each `arrays` to generate the criterion by 27425 * which by which they're compared. The order of result values is determined 27426 * by the order they occur in the arrays. The iteratee is invoked with one 27427 * argument: (value). 27428 * 27429 * @static 27430 * @memberOf _ 27431 * @since 4.0.0 27432 * @category Array 27433 * @param {...Array} [arrays] The arrays to inspect. 27434 * @param {Function} [iteratee=_.identity] The iteratee invoked per element. 27435 * @returns {Array} Returns the new array of filtered values. 27436 * @example 27437 * 27438 * _.xorBy([2.1, 1.2], [2.3, 3.4], Math.floor); 27439 * // => [1.2, 3.4] 27440 * 27441 * // The `_.property` iteratee shorthand. 27442 * _.xorBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x'); 27443 * // => [{ 'x': 2 }] 27444 */ 27445 var xorBy = baseRest(function(arrays) { 27446 var iteratee = last(arrays); 27447 if (isArrayLikeObject(iteratee)) { 27448 iteratee = undefined; 27449 } 27450 return baseXor(arrayFilter(arrays, isArrayLikeObject), getIteratee(iteratee, 2)); 27451 }); 27452 27453 /** 27454 * This method is like `_.xor` except that it accepts `comparator` which is 27455 * invoked to compare elements of `arrays`. The order of result values is 27456 * determined by the order they occur in the arrays. The comparator is invoked 27457 * with two arguments: (arrVal, othVal). 27458 * 27459 * @static 27460 * @memberOf _ 27461 * @since 4.0.0 27462 * @category Array 27463 * @param {...Array} [arrays] The arrays to inspect. 27464 * @param {Function} [comparator] The comparator invoked per element. 27465 * @returns {Array} Returns the new array of filtered values. 27466 * @example 27467 * 27468 * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]; 27469 * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }]; 27470 * 27471 * _.xorWith(objects, others, _.isEqual); 27472 * // => [{ 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }] 27473 */ 27474 var xorWith = baseRest(function(arrays) { 27475 var comparator = last(arrays); 27476 comparator = typeof comparator == 'function' ? comparator : undefined; 27477 return baseXor(arrayFilter(arrays, isArrayLikeObject), undefined, comparator); 27478 }); 27479 27480 /** 27481 * Creates an array of grouped elements, the first of which contains the 27482 * first elements of the given arrays, the second of which contains the 27483 * second elements of the given arrays, and so on. 27484 * 27485 * @static 27486 * @memberOf _ 27487 * @since 0.1.0 27488 * @category Array 27489 * @param {...Array} [arrays] The arrays to process. 27490 * @returns {Array} Returns the new array of grouped elements. 27491 * @example 27492 * 27493 * _.zip(['a', 'b'], [1, 2], [true, false]); 27494 * // => [['a', 1, true], ['b', 2, false]] 27495 */ 27496 var zip = baseRest(unzip); 27497 27498 /** 27499 * This method is like `_.fromPairs` except that it accepts two arrays, 27500 * one of property identifiers and one of corresponding values. 27501 * 27502 * @static 27503 * @memberOf _ 27504 * @since 0.4.0 27505 * @category Array 27506 * @param {Array} [props=[]] The property identifiers. 27507 * @param {Array} [values=[]] The property values. 27508 * @returns {Object} Returns the new object. 27509 * @example 27510 * 27511 * _.zipObject(['a', 'b'], [1, 2]); 27512 * // => { 'a': 1, 'b': 2 } 27513 */ 27514 function zipObject(props, values) { 27515 return baseZipObject(props || [], values || [], assignValue); 27516 } 27517 27518 /** 27519 * This method is like `_.zipObject` except that it supports property paths. 27520 * 27521 * @static 27522 * @memberOf _ 27523 * @since 4.1.0 27524 * @category Array 27525 * @param {Array} [props=[]] The property identifiers. 27526 * @param {Array} [values=[]] The property values. 27527 * @returns {Object} Returns the new object. 27528 * @example 27529 * 27530 * _.zipObjectDeep(['a.b[0].c', 'a.b[1].d'], [1, 2]); 27531 * // => { 'a': { 'b': [{ 'c': 1 }, { 'd': 2 }] } } 27532 */ 27533 function zipObjectDeep(props, values) { 27534 return baseZipObject(props || [], values || [], baseSet); 27535 } 27536 27537 /** 27538 * This method is like `_.zip` except that it accepts `iteratee` to specify 27539 * how grouped values should be combined. The iteratee is invoked with the 27540 * elements of each group: (...group). 27541 * 27542 * @static 27543 * @memberOf _ 27544 * @since 3.8.0 27545 * @category Array 27546 * @param {...Array} [arrays] The arrays to process. 27547 * @param {Function} [iteratee=_.identity] The function to combine 27548 * grouped values. 27549 * @returns {Array} Returns the new array of grouped elements. 27550 * @example 27551 * 27552 * _.zipWith([1, 2], [10, 20], [100, 200], function(a, b, c) { 27553 * return a + b + c; 27554 * }); 27555 * // => [111, 222] 27556 */ 27557 var zipWith = baseRest(function(arrays) { 27558 var length = arrays.length, 27559 iteratee = length > 1 ? arrays[length - 1] : undefined; 27560 27561 iteratee = typeof iteratee == 'function' ? (arrays.pop(), iteratee) : undefined; 27562 return unzipWith(arrays, iteratee); 27563 }); 27564 27565 /*------------------------------------------------------------------------*/ 27566 27567 /** 27568 * Creates a `lodash` wrapper instance that wraps `value` with explicit method 27569 * chain sequences enabled. The result of such sequences must be unwrapped 27570 * with `_#value`. 27571 * 27572 * @static 27573 * @memberOf _ 27574 * @since 1.3.0 27575 * @category Seq 27576 * @param {*} value The value to wrap. 27577 * @returns {Object} Returns the new `lodash` wrapper instance. 27578 * @example 27579 * 27580 * var users = [ 27581 * { 'user': 'barney', 'age': 36 }, 27582 * { 'user': 'fred', 'age': 40 }, 27583 * { 'user': 'pebbles', 'age': 1 } 27584 * ]; 27585 * 27586 * var youngest = _ 27587 * .chain(users) 27588 * .sortBy('age') 27589 * .map(function(o) { 27590 * return o.user + ' is ' + o.age; 27591 * }) 27592 * .head() 27593 * .value(); 27594 * // => 'pebbles is 1' 27595 */ 27596 function chain(value) { 27597 var result = lodash(value); 27598 result.__chain__ = true; 27599 return result; 27600 } 27601 27602 /** 27603 * This method invokes `interceptor` and returns `value`. The interceptor 27604 * is invoked with one argument; (value). The purpose of this method is to 27605 * "tap into" a method chain sequence in order to modify intermediate results. 27606 * 27607 * @static 27608 * @memberOf _ 27609 * @since 0.1.0 27610 * @category Seq 27611 * @param {*} value The value to provide to `interceptor`. 27612 * @param {Function} interceptor The function to invoke. 27613 * @returns {*} Returns `value`. 27614 * @example 27615 * 27616 * _([1, 2, 3]) 27617 * .tap(function(array) { 27618 * // Mutate input array. 27619 * array.pop(); 27620 * }) 27621 * .reverse() 27622 * .value(); 27623 * // => [2, 1] 27624 */ 27625 function tap(value, interceptor) { 27626 interceptor(value); 27627 return value; 27628 } 27629 27630 /** 27631 * This method is like `_.tap` except that it returns the result of `interceptor`. 27632 * The purpose of this method is to "pass thru" values replacing intermediate 27633 * results in a method chain sequence. 27634 * 27635 * @static 27636 * @memberOf _ 27637 * @since 3.0.0 27638 * @category Seq 27639 * @param {*} value The value to provide to `interceptor`. 27640 * @param {Function} interceptor The function to invoke. 27641 * @returns {*} Returns the result of `interceptor`. 27642 * @example 27643 * 27644 * _(' abc ') 27645 * .chain() 27646 * .trim() 27647 * .thru(function(value) { 27648 * return [value]; 27649 * }) 27650 * .value(); 27651 * // => ['abc'] 27652 */ 27653 function thru(value, interceptor) { 27654 return interceptor(value); 27655 } 27656 27657 /** 27658 * This method is the wrapper version of `_.at`. 27659 * 27660 * @name at 27661 * @memberOf _ 27662 * @since 1.0.0 27663 * @category Seq 27664 * @param {...(string|string[])} [paths] The property paths to pick. 27665 * @returns {Object} Returns the new `lodash` wrapper instance. 27666 * @example 27667 * 27668 * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] }; 27669 * 27670 * _(object).at(['a[0].b.c', 'a[1]']).value(); 27671 * // => [3, 4] 27672 */ 27673 var wrapperAt = flatRest(function(paths) { 27674 var length = paths.length, 27675 start = length ? paths[0] : 0, 27676 value = this.__wrapped__, 27677 interceptor = function(object) { return baseAt(object, paths); }; 27678 27679 if (length > 1 || this.__actions__.length || 27680 !(value instanceof LazyWrapper) || !isIndex(start)) { 27681 return this.thru(interceptor); 27682 } 27683 value = value.slice(start, +start + (length ? 1 : 0)); 27684 value.__actions__.push({ 27685 'func': thru, 27686 'args': [interceptor], 27687 'thisArg': undefined 27688 }); 27689 return new LodashWrapper(value, this.__chain__).thru(function(array) { 27690 if (length && !array.length) { 27691 array.push(undefined); 27692 } 27693 return array; 27694 }); 27695 }); 27696 27697 /** 27698 * Creates a `lodash` wrapper instance with explicit method chain sequences enabled. 27699 * 27700 * @name chain 27701 * @memberOf _ 27702 * @since 0.1.0 27703 * @category Seq 27704 * @returns {Object} Returns the new `lodash` wrapper instance. 27705 * @example 27706 * 27707 * var users = [ 27708 * { 'user': 'barney', 'age': 36 }, 27709 * { 'user': 'fred', 'age': 40 } 27710 * ]; 27711 * 27712 * // A sequence without explicit chaining. 27713 * _(users).head(); 27714 * // => { 'user': 'barney', 'age': 36 } 27715 * 27716 * // A sequence with explicit chaining. 27717 * _(users) 27718 * .chain() 27719 * .head() 27720 * .pick('user') 27721 * .value(); 27722 * // => { 'user': 'barney' } 27723 */ 27724 function wrapperChain() { 27725 return chain(this); 27726 } 27727 27728 /** 27729 * Executes the chain sequence and returns the wrapped result. 27730 * 27731 * @name commit 27732 * @memberOf _ 27733 * @since 3.2.0 27734 * @category Seq 27735 * @returns {Object} Returns the new `lodash` wrapper instance. 27736 * @example 27737 * 27738 * var array = [1, 2]; 27739 * var wrapped = _(array).push(3); 27740 * 27741 * console.log(array); 27742 * // => [1, 2] 27743 * 27744 * wrapped = wrapped.commit(); 27745 * console.log(array); 27746 * // => [1, 2, 3] 27747 * 27748 * wrapped.last(); 27749 * // => 3 27750 * 27751 * console.log(array); 27752 * // => [1, 2, 3] 27753 */ 27754 function wrapperCommit() { 27755 return new LodashWrapper(this.value(), this.__chain__); 27756 } 27757 27758 /** 27759 * Gets the next value on a wrapped object following the 27760 * [iterator protocol](https://mdn.io/iteration_protocols#iterator). 27761 * 27762 * @name next 27763 * @memberOf _ 27764 * @since 4.0.0 27765 * @category Seq 27766 * @returns {Object} Returns the next iterator value. 27767 * @example 27768 * 27769 * var wrapped = _([1, 2]); 27770 * 27771 * wrapped.next(); 27772 * // => { 'done': false, 'value': 1 } 27773 * 27774 * wrapped.next(); 27775 * // => { 'done': false, 'value': 2 } 27776 * 27777 * wrapped.next(); 27778 * // => { 'done': true, 'value': undefined } 27779 */ 27780 function wrapperNext() { 27781 if (this.__values__ === undefined) { 27782 this.__values__ = toArray(this.value()); 27783 } 27784 var done = this.__index__ >= this.__values__.length, 27785 value = done ? undefined : this.__values__[this.__index__++]; 27786 27787 return { 'done': done, 'value': value }; 27788 } 27789 27790 /** 27791 * Enables the wrapper to be iterable. 27792 * 27793 * @name Symbol.iterator 27794 * @memberOf _ 27795 * @since 4.0.0 27796 * @category Seq 27797 * @returns {Object} Returns the wrapper object. 27798 * @example 27799 * 27800 * var wrapped = _([1, 2]); 27801 * 27802 * wrapped[Symbol.iterator]() === wrapped; 27803 * // => true 27804 * 27805 * Array.from(wrapped); 27806 * // => [1, 2] 27807 */ 27808 function wrapperToIterator() { 27809 return this; 27810 } 27811 27812 /** 27813 * Creates a clone of the chain sequence planting `value` as the wrapped value. 27814 * 27815 * @name plant 27816 * @memberOf _ 27817 * @since 3.2.0 27818 * @category Seq 27819 * @param {*} value The value to plant. 27820 * @returns {Object} Returns the new `lodash` wrapper instance. 27821 * @example 27822 * 27823 * function square(n) { 27824 * return n * n; 27825 * } 27826 * 27827 * var wrapped = _([1, 2]).map(square); 27828 * var other = wrapped.plant([3, 4]); 27829 * 27830 * other.value(); 27831 * // => [9, 16] 27832 * 27833 * wrapped.value(); 27834 * // => [1, 4] 27835 */ 27836 function wrapperPlant(value) { 27837 var result, 27838 parent = this; 27839 27840 while (parent instanceof baseLodash) { 27841 var clone = wrapperClone(parent); 27842 clone.__index__ = 0; 27843 clone.__values__ = undefined; 27844 if (result) { 27845 previous.__wrapped__ = clone; 27846 } else { 27847 result = clone; 27848 } 27849 var previous = clone; 27850 parent = parent.__wrapped__; 27851 } 27852 previous.__wrapped__ = value; 27853 return result; 27854 } 27855 27856 /** 27857 * This method is the wrapper version of `_.reverse`. 27858 * 27859 * **Note:** This method mutates the wrapped array. 27860 * 27861 * @name reverse 27862 * @memberOf _ 27863 * @since 0.1.0 27864 * @category Seq 27865 * @returns {Object} Returns the new `lodash` wrapper instance. 27866 * @example 27867 * 27868 * var array = [1, 2, 3]; 27869 * 27870 * _(array).reverse().value() 27871 * // => [3, 2, 1] 27872 * 27873 * console.log(array); 27874 * // => [3, 2, 1] 27875 */ 27876 function wrapperReverse() { 27877 var value = this.__wrapped__; 27878 if (value instanceof LazyWrapper) { 27879 var wrapped = value; 27880 if (this.__actions__.length) { 27881 wrapped = new LazyWrapper(this); 27882 } 27883 wrapped = wrapped.reverse(); 27884 wrapped.__actions__.push({ 27885 'func': thru, 27886 'args': [reverse], 27887 'thisArg': undefined 27888 }); 27889 return new LodashWrapper(wrapped, this.__chain__); 27890 } 27891 return this.thru(reverse); 27892 } 27893 27894 /** 27895 * Executes the chain sequence to resolve the unwrapped value. 27896 * 27897 * @name value 27898 * @memberOf _ 27899 * @since 0.1.0 27900 * @alias toJSON, valueOf 27901 * @category Seq 27902 * @returns {*} Returns the resolved unwrapped value. 27903 * @example 27904 * 27905 * _([1, 2, 3]).value(); 27906 * // => [1, 2, 3] 27907 */ 27908 function wrapperValue() { 27909 return baseWrapperValue(this.__wrapped__, this.__actions__); 27910 } 27911 27912 /*------------------------------------------------------------------------*/ 27913 27914 /** 27915 * Creates an object composed of keys generated from the results of running 27916 * each element of `collection` thru `iteratee`. The corresponding value of 27917 * each key is the number of times the key was returned by `iteratee`. The 27918 * iteratee is invoked with one argument: (value). 27919 * 27920 * @static 27921 * @memberOf _ 27922 * @since 0.5.0 27923 * @category Collection 27924 * @param {Array|Object} collection The collection to iterate over. 27925 * @param {Function} [iteratee=_.identity] The iteratee to transform keys. 27926 * @returns {Object} Returns the composed aggregate object. 27927 * @example 27928 * 27929 * _.countBy([6.1, 4.2, 6.3], Math.floor); 27930 * // => { '4': 1, '6': 2 } 27931 * 27932 * // The `_.property` iteratee shorthand. 27933 * _.countBy(['one', 'two', 'three'], 'length'); 27934 * // => { '3': 2, '5': 1 } 27935 */ 27936 var countBy = createAggregator(function(result, value, key) { 27937 if (hasOwnProperty.call(result, key)) { 27938 ++result[key]; 27939 } else { 27940 baseAssignValue(result, key, 1); 27941 } 27942 }); 27943 27944 /** 27945 * Checks if `predicate` returns truthy for **all** elements of `collection`. 27946 * Iteration is stopped once `predicate` returns falsey. The predicate is 27947 * invoked with three arguments: (value, index|key, collection). 27948 * 27949 * **Note:** This method returns `true` for 27950 * [empty collections](https://en.wikipedia.org/wiki/Empty_set) because 27951 * [everything is true](https://en.wikipedia.org/wiki/Vacuous_truth) of 27952 * elements of empty collections. 27953 * 27954 * @static 27955 * @memberOf _ 27956 * @since 0.1.0 27957 * @category Collection 27958 * @param {Array|Object} collection The collection to iterate over. 27959 * @param {Function} [predicate=_.identity] The function invoked per iteration. 27960 * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. 27961 * @returns {boolean} Returns `true` if all elements pass the predicate check, 27962 * else `false`. 27963 * @example 27964 * 27965 * _.every([true, 1, null, 'yes'], Boolean); 27966 * // => false 27967 * 27968 * var users = [ 27969 * { 'user': 'barney', 'age': 36, 'active': false }, 27970 * { 'user': 'fred', 'age': 40, 'active': false } 27971 * ]; 27972 * 27973 * // The `_.matches` iteratee shorthand. 27974 * _.every(users, { 'user': 'barney', 'active': false }); 27975 * // => false 27976 * 27977 * // The `_.matchesProperty` iteratee shorthand. 27978 * _.every(users, ['active', false]); 27979 * // => true 27980 * 27981 * // The `_.property` iteratee shorthand. 27982 * _.every(users, 'active'); 27983 * // => false 27984 */ 27985 function every(collection, predicate, guard) { 27986 var func = isArray(collection) ? arrayEvery : baseEvery; 27987 if (guard && isIterateeCall(collection, predicate, guard)) { 27988 predicate = undefined; 27989 } 27990 return func(collection, getIteratee(predicate, 3)); 27991 } 27992 27993 /** 27994 * Iterates over elements of `collection`, returning an array of all elements 27995 * `predicate` returns truthy for. The predicate is invoked with three 27996 * arguments: (value, index|key, collection). 27997 * 27998 * **Note:** Unlike `_.remove`, this method returns a new array. 27999 * 28000 * @static 28001 * @memberOf _ 28002 * @since 0.1.0 28003 * @category Collection 28004 * @param {Array|Object} collection The collection to iterate over. 28005 * @param {Function} [predicate=_.identity] The function invoked per iteration. 28006 * @returns {Array} Returns the new filtered array. 28007 * @see _.reject 28008 * @example 28009 * 28010 * var users = [ 28011 * { 'user': 'barney', 'age': 36, 'active': true }, 28012 * { 'user': 'fred', 'age': 40, 'active': false } 28013 * ]; 28014 * 28015 * _.filter(users, function(o) { return !o.active; }); 28016 * // => objects for ['fred'] 28017 * 28018 * // The `_.matches` iteratee shorthand. 28019 * _.filter(users, { 'age': 36, 'active': true }); 28020 * // => objects for ['barney'] 28021 * 28022 * // The `_.matchesProperty` iteratee shorthand. 28023 * _.filter(users, ['active', false]); 28024 * // => objects for ['fred'] 28025 * 28026 * // The `_.property` iteratee shorthand. 28027 * _.filter(users, 'active'); 28028 * // => objects for ['barney'] 28029 * 28030 * // Combining several predicates using `_.overEvery` or `_.overSome`. 28031 * _.filter(users, _.overSome([{ 'age': 36 }, ['age', 40]])); 28032 * // => objects for ['fred', 'barney'] 28033 */ 28034 function filter(collection, predicate) { 28035 var func = isArray(collection) ? arrayFilter : baseFilter; 28036 return func(collection, getIteratee(predicate, 3)); 28037 } 28038 28039 /** 28040 * Iterates over elements of `collection`, returning the first element 28041 * `predicate` returns truthy for. The predicate is invoked with three 28042 * arguments: (value, index|key, collection). 28043 * 28044 * @static 28045 * @memberOf _ 28046 * @since 0.1.0 28047 * @category Collection 28048 * @param {Array|Object} collection The collection to inspect. 28049 * @param {Function} [predicate=_.identity] The function invoked per iteration. 28050 * @param {number} [fromIndex=0] The index to search from. 28051 * @returns {*} Returns the matched element, else `undefined`. 28052 * @example 28053 * 28054 * var users = [ 28055 * { 'user': 'barney', 'age': 36, 'active': true }, 28056 * { 'user': 'fred', 'age': 40, 'active': false }, 28057 * { 'user': 'pebbles', 'age': 1, 'active': true } 28058 * ]; 28059 * 28060 * _.find(users, function(o) { return o.age < 40; }); 28061 * // => object for 'barney' 28062 * 28063 * // The `_.matches` iteratee shorthand. 28064 * _.find(users, { 'age': 1, 'active': true }); 28065 * // => object for 'pebbles' 28066 * 28067 * // The `_.matchesProperty` iteratee shorthand. 28068 * _.find(users, ['active', false]); 28069 * // => object for 'fred' 28070 * 28071 * // The `_.property` iteratee shorthand. 28072 * _.find(users, 'active'); 28073 * // => object for 'barney' 28074 */ 28075 var find = createFind(findIndex); 28076 28077 /** 28078 * This method is like `_.find` except that it iterates over elements of 28079 * `collection` from right to left. 28080 * 28081 * @static 28082 * @memberOf _ 28083 * @since 2.0.0 28084 * @category Collection 28085 * @param {Array|Object} collection The collection to inspect. 28086 * @param {Function} [predicate=_.identity] The function invoked per iteration. 28087 * @param {number} [fromIndex=collection.length-1] The index to search from. 28088 * @returns {*} Returns the matched element, else `undefined`. 28089 * @example 28090 * 28091 * _.findLast([1, 2, 3, 4], function(n) { 28092 * return n % 2 == 1; 28093 * }); 28094 * // => 3 28095 */ 28096 var findLast = createFind(findLastIndex); 28097 28098 /** 28099 * Creates a flattened array of values by running each element in `collection` 28100 * thru `iteratee` and flattening the mapped results. The iteratee is invoked 28101 * with three arguments: (value, index|key, collection). 28102 * 28103 * @static 28104 * @memberOf _ 28105 * @since 4.0.0 28106 * @category Collection 28107 * @param {Array|Object} collection The collection to iterate over. 28108 * @param {Function} [iteratee=_.identity] The function invoked per iteration. 28109 * @returns {Array} Returns the new flattened array. 28110 * @example 28111 * 28112 * function duplicate(n) { 28113 * return [n, n]; 28114 * } 28115 * 28116 * _.flatMap([1, 2], duplicate); 28117 * // => [1, 1, 2, 2] 28118 */ 28119 function flatMap(collection, iteratee) { 28120 return baseFlatten(map(collection, iteratee), 1); 28121 } 28122 28123 /** 28124 * This method is like `_.flatMap` except that it recursively flattens the 28125 * mapped results. 28126 * 28127 * @static 28128 * @memberOf _ 28129 * @since 4.7.0 28130 * @category Collection 28131 * @param {Array|Object} collection The collection to iterate over. 28132 * @param {Function} [iteratee=_.identity] The function invoked per iteration. 28133 * @returns {Array} Returns the new flattened array. 28134 * @example 28135 * 28136 * function duplicate(n) { 28137 * return [[[n, n]]]; 28138 * } 28139 * 28140 * _.flatMapDeep([1, 2], duplicate); 28141 * // => [1, 1, 2, 2] 28142 */ 28143 function flatMapDeep(collection, iteratee) { 28144 return baseFlatten(map(collection, iteratee), INFINITY); 28145 } 28146 28147 /** 28148 * This method is like `_.flatMap` except that it recursively flattens the 28149 * mapped results up to `depth` times. 28150 * 28151 * @static 28152 * @memberOf _ 28153 * @since 4.7.0 28154 * @category Collection 28155 * @param {Array|Object} collection The collection to iterate over. 28156 * @param {Function} [iteratee=_.identity] The function invoked per iteration. 28157 * @param {number} [depth=1] The maximum recursion depth. 28158 * @returns {Array} Returns the new flattened array. 28159 * @example 28160 * 28161 * function duplicate(n) { 28162 * return [[[n, n]]]; 28163 * } 28164 * 28165 * _.flatMapDepth([1, 2], duplicate, 2); 28166 * // => [[1, 1], [2, 2]] 28167 */ 28168 function flatMapDepth(collection, iteratee, depth) { 28169 depth = depth === undefined ? 1 : toInteger(depth); 28170 return baseFlatten(map(collection, iteratee), depth); 28171 } 28172 28173 /** 28174 * Iterates over elements of `collection` and invokes `iteratee` for each element. 28175 * The iteratee is invoked with three arguments: (value, index|key, collection). 28176 * Iteratee functions may exit iteration early by explicitly returning `false`. 28177 * 28178 * **Note:** As with other "Collections" methods, objects with a "length" 28179 * property are iterated like arrays. To avoid this behavior use `_.forIn` 28180 * or `_.forOwn` for object iteration. 28181 * 28182 * @static 28183 * @memberOf _ 28184 * @since 0.1.0 28185 * @alias each 28186 * @category Collection 28187 * @param {Array|Object} collection The collection to iterate over. 28188 * @param {Function} [iteratee=_.identity] The function invoked per iteration. 28189 * @returns {Array|Object} Returns `collection`. 28190 * @see _.forEachRight 28191 * @example 28192 * 28193 * _.forEach([1, 2], function(value) { 28194 * console.log(value); 28195 * }); 28196 * // => Logs `1` then `2`. 28197 * 28198 * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) { 28199 * console.log(key); 28200 * }); 28201 * // => Logs 'a' then 'b' (iteration order is not guaranteed). 28202 */ 28203 function forEach(collection, iteratee) { 28204 var func = isArray(collection) ? arrayEach : baseEach; 28205 return func(collection, getIteratee(iteratee, 3)); 28206 } 28207 28208 /** 28209 * This method is like `_.forEach` except that it iterates over elements of 28210 * `collection` from right to left. 28211 * 28212 * @static 28213 * @memberOf _ 28214 * @since 2.0.0 28215 * @alias eachRight 28216 * @category Collection 28217 * @param {Array|Object} collection The collection to iterate over. 28218 * @param {Function} [iteratee=_.identity] The function invoked per iteration. 28219 * @returns {Array|Object} Returns `collection`. 28220 * @see _.forEach 28221 * @example 28222 * 28223 * _.forEachRight([1, 2], function(value) { 28224 * console.log(value); 28225 * }); 28226 * // => Logs `2` then `1`. 28227 */ 28228 function forEachRight(collection, iteratee) { 28229 var func = isArray(collection) ? arrayEachRight : baseEachRight; 28230 return func(collection, getIteratee(iteratee, 3)); 28231 } 28232 28233 /** 28234 * Creates an object composed of keys generated from the results of running 28235 * each element of `collection` thru `iteratee`. The order of grouped values 28236 * is determined by the order they occur in `collection`. The corresponding 28237 * value of each key is an array of elements responsible for generating the 28238 * key. The iteratee is invoked with one argument: (value). 28239 * 28240 * @static 28241 * @memberOf _ 28242 * @since 0.1.0 28243 * @category Collection 28244 * @param {Array|Object} collection The collection to iterate over. 28245 * @param {Function} [iteratee=_.identity] The iteratee to transform keys. 28246 * @returns {Object} Returns the composed aggregate object. 28247 * @example 28248 * 28249 * _.groupBy([6.1, 4.2, 6.3], Math.floor); 28250 * // => { '4': [4.2], '6': [6.1, 6.3] } 28251 * 28252 * // The `_.property` iteratee shorthand. 28253 * _.groupBy(['one', 'two', 'three'], 'length'); 28254 * // => { '3': ['one', 'two'], '5': ['three'] } 28255 */ 28256 var groupBy = createAggregator(function(result, value, key) { 28257 if (hasOwnProperty.call(result, key)) { 28258 result[key].push(value); 28259 } else { 28260 baseAssignValue(result, key, [value]); 28261 } 28262 }); 28263 28264 /** 28265 * Checks if `value` is in `collection`. If `collection` is a string, it's 28266 * checked for a substring of `value`, otherwise 28267 * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) 28268 * is used for equality comparisons. If `fromIndex` is negative, it's used as 28269 * the offset from the end of `collection`. 28270 * 28271 * @static 28272 * @memberOf _ 28273 * @since 0.1.0 28274 * @category Collection 28275 * @param {Array|Object|string} collection The collection to inspect. 28276 * @param {*} value The value to search for. 28277 * @param {number} [fromIndex=0] The index to search from. 28278 * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`. 28279 * @returns {boolean} Returns `true` if `value` is found, else `false`. 28280 * @example 28281 * 28282 * _.includes([1, 2, 3], 1); 28283 * // => true 28284 * 28285 * _.includes([1, 2, 3], 1, 2); 28286 * // => false 28287 * 28288 * _.includes({ 'a': 1, 'b': 2 }, 1); 28289 * // => true 28290 * 28291 * _.includes('abcd', 'bc'); 28292 * // => true 28293 */ 28294 function includes(collection, value, fromIndex, guard) { 28295 collection = isArrayLike(collection) ? collection : values(collection); 28296 fromIndex = (fromIndex && !guard) ? toInteger(fromIndex) : 0; 28297 28298 var length = collection.length; 28299 if (fromIndex < 0) { 28300 fromIndex = nativeMax(length + fromIndex, 0); 28301 } 28302 return isString(collection) 28303 ? (fromIndex <= length && collection.indexOf(value, fromIndex) > -1) 28304 : (!!length && baseIndexOf(collection, value, fromIndex) > -1); 28305 } 28306 28307 /** 28308 * Invokes the method at `path` of each element in `collection`, returning 28309 * an array of the results of each invoked method. Any additional arguments 28310 * are provided to each invoked method. If `path` is a function, it's invoked 28311 * for, and `this` bound to, each element in `collection`. 28312 * 28313 * @static 28314 * @memberOf _ 28315 * @since 4.0.0 28316 * @category Collection 28317 * @param {Array|Object} collection The collection to iterate over. 28318 * @param {Array|Function|string} path The path of the method to invoke or 28319 * the function invoked per iteration. 28320 * @param {...*} [args] The arguments to invoke each method with. 28321 * @returns {Array} Returns the array of results. 28322 * @example 28323 * 28324 * _.invokeMap([[5, 1, 7], [3, 2, 1]], 'sort'); 28325 * // => [[1, 5, 7], [1, 2, 3]] 28326 * 28327 * _.invokeMap([123, 456], String.prototype.split, ''); 28328 * // => [['1', '2', '3'], ['4', '5', '6']] 28329 */ 28330 var invokeMap = baseRest(function(collection, path, args) { 28331 var index = -1, 28332 isFunc = typeof path == 'function', 28333 result = isArrayLike(collection) ? Array(collection.length) : []; 28334 28335 baseEach(collection, function(value) { 28336 result[++index] = isFunc ? apply(path, value, args) : baseInvoke(value, path, args); 28337 }); 28338 return result; 28339 }); 28340 28341 /** 28342 * Creates an object composed of keys generated from the results of running 28343 * each element of `collection` thru `iteratee`. The corresponding value of 28344 * each key is the last element responsible for generating the key. The 28345 * iteratee is invoked with one argument: (value). 28346 * 28347 * @static 28348 * @memberOf _ 28349 * @since 4.0.0 28350 * @category Collection 28351 * @param {Array|Object} collection The collection to iterate over. 28352 * @param {Function} [iteratee=_.identity] The iteratee to transform keys. 28353 * @returns {Object} Returns the composed aggregate object. 28354 * @example 28355 * 28356 * var array = [ 28357 * { 'dir': 'left', 'code': 97 }, 28358 * { 'dir': 'right', 'code': 100 } 28359 * ]; 28360 * 28361 * _.keyBy(array, function(o) { 28362 * return String.fromCharCode(o.code); 28363 * }); 28364 * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } } 28365 * 28366 * _.keyBy(array, 'dir'); 28367 * // => { 'left': { 'dir': 'left', 'code': 97 }, 'right': { 'dir': 'right', 'code': 100 } } 28368 */ 28369 var keyBy = createAggregator(function(result, value, key) { 28370 baseAssignValue(result, key, value); 28371 }); 28372 28373 /** 28374 * Creates an array of values by running each element in `collection` thru 28375 * `iteratee`. The iteratee is invoked with three arguments: 28376 * (value, index|key, collection). 28377 * 28378 * Many lodash methods are guarded to work as iteratees for methods like 28379 * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`. 28380 * 28381 * The guarded methods are: 28382 * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`, 28383 * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`, 28384 * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`, 28385 * `template`, `trim`, `trimEnd`, `trimStart`, and `words` 28386 * 28387 * @static 28388 * @memberOf _ 28389 * @since 0.1.0 28390 * @category Collection 28391 * @param {Array|Object} collection The collection to iterate over. 28392 * @param {Function} [iteratee=_.identity] The function invoked per iteration. 28393 * @returns {Array} Returns the new mapped array. 28394 * @example 28395 * 28396 * function square(n) { 28397 * return n * n; 28398 * } 28399 * 28400 * _.map([4, 8], square); 28401 * // => [16, 64] 28402 * 28403 * _.map({ 'a': 4, 'b': 8 }, square); 28404 * // => [16, 64] (iteration order is not guaranteed) 28405 * 28406 * var users = [ 28407 * { 'user': 'barney' }, 28408 * { 'user': 'fred' } 28409 * ]; 28410 * 28411 * // The `_.property` iteratee shorthand. 28412 * _.map(users, 'user'); 28413 * // => ['barney', 'fred'] 28414 */ 28415 function map(collection, iteratee) { 28416 var func = isArray(collection) ? arrayMap : baseMap; 28417 return func(collection, getIteratee(iteratee, 3)); 28418 } 28419 28420 /** 28421 * This method is like `_.sortBy` except that it allows specifying the sort 28422 * orders of the iteratees to sort by. If `orders` is unspecified, all values 28423 * are sorted in ascending order. Otherwise, specify an order of "desc" for 28424 * descending or "asc" for ascending sort order of corresponding values. 28425 * 28426 * @static 28427 * @memberOf _ 28428 * @since 4.0.0 28429 * @category Collection 28430 * @param {Array|Object} collection The collection to iterate over. 28431 * @param {Array[]|Function[]|Object[]|string[]} [iteratees=[_.identity]] 28432 * The iteratees to sort by. 28433 * @param {string[]} [orders] The sort orders of `iteratees`. 28434 * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`. 28435 * @returns {Array} Returns the new sorted array. 28436 * @example 28437 * 28438 * var users = [ 28439 * { 'user': 'fred', 'age': 48 }, 28440 * { 'user': 'barney', 'age': 34 }, 28441 * { 'user': 'fred', 'age': 40 }, 28442 * { 'user': 'barney', 'age': 36 } 28443 * ]; 28444 * 28445 * // Sort by `user` in ascending order and by `age` in descending order. 28446 * _.orderBy(users, ['user', 'age'], ['asc', 'desc']); 28447 * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]] 28448 */ 28449 function orderBy(collection, iteratees, orders, guard) { 28450 if (collection == null) { 28451 return []; 28452 } 28453 if (!isArray(iteratees)) { 28454 iteratees = iteratees == null ? [] : [iteratees]; 28455 } 28456 orders = guard ? undefined : orders; 28457 if (!isArray(orders)) { 28458 orders = orders == null ? [] : [orders]; 28459 } 28460 return baseOrderBy(collection, iteratees, orders); 28461 } 28462 28463 /** 28464 * Creates an array of elements split into two groups, the first of which 28465 * contains elements `predicate` returns truthy for, the second of which 28466 * contains elements `predicate` returns falsey for. The predicate is 28467 * invoked with one argument: (value). 28468 * 28469 * @static 28470 * @memberOf _ 28471 * @since 3.0.0 28472 * @category Collection 28473 * @param {Array|Object} collection The collection to iterate over. 28474 * @param {Function} [predicate=_.identity] The function invoked per iteration. 28475 * @returns {Array} Returns the array of grouped elements. 28476 * @example 28477 * 28478 * var users = [ 28479 * { 'user': 'barney', 'age': 36, 'active': false }, 28480 * { 'user': 'fred', 'age': 40, 'active': true }, 28481 * { 'user': 'pebbles', 'age': 1, 'active': false } 28482 * ]; 28483 * 28484 * _.partition(users, function(o) { return o.active; }); 28485 * // => objects for [['fred'], ['barney', 'pebbles']] 28486 * 28487 * // The `_.matches` iteratee shorthand. 28488 * _.partition(users, { 'age': 1, 'active': false }); 28489 * // => objects for [['pebbles'], ['barney', 'fred']] 28490 * 28491 * // The `_.matchesProperty` iteratee shorthand. 28492 * _.partition(users, ['active', false]); 28493 * // => objects for [['barney', 'pebbles'], ['fred']] 28494 * 28495 * // The `_.property` iteratee shorthand. 28496 * _.partition(users, 'active'); 28497 * // => objects for [['fred'], ['barney', 'pebbles']] 28498 */ 28499 var partition = createAggregator(function(result, value, key) { 28500 result[key ? 0 : 1].push(value); 28501 }, function() { return [[], []]; }); 28502 28503 /** 28504 * Reduces `collection` to a value which is the accumulated result of running 28505 * each element in `collection` thru `iteratee`, where each successive 28506 * invocation is supplied the return value of the previous. If `accumulator` 28507 * is not given, the first element of `collection` is used as the initial 28508 * value. The iteratee is invoked with four arguments: 28509 * (accumulator, value, index|key, collection). 28510 * 28511 * Many lodash methods are guarded to work as iteratees for methods like 28512 * `_.reduce`, `_.reduceRight`, and `_.transform`. 28513 * 28514 * The guarded methods are: 28515 * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`, 28516 * and `sortBy` 28517 * 28518 * @static 28519 * @memberOf _ 28520 * @since 0.1.0 28521 * @category Collection 28522 * @param {Array|Object} collection The collection to iterate over. 28523 * @param {Function} [iteratee=_.identity] The function invoked per iteration. 28524 * @param {*} [accumulator] The initial value. 28525 * @returns {*} Returns the accumulated value. 28526 * @see _.reduceRight 28527 * @example 28528 * 28529 * _.reduce([1, 2], function(sum, n) { 28530 * return sum + n; 28531 * }, 0); 28532 * // => 3 28533 * 28534 * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) { 28535 * (result[value] || (result[value] = [])).push(key); 28536 * return result; 28537 * }, {}); 28538 * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed) 28539 */ 28540 function reduce(collection, iteratee, accumulator) { 28541 var func = isArray(collection) ? arrayReduce : baseReduce, 28542 initAccum = arguments.length < 3; 28543 28544 return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEach); 28545 } 28546 28547 /** 28548 * This method is like `_.reduce` except that it iterates over elements of 28549 * `collection` from right to left. 28550 * 28551 * @static 28552 * @memberOf _ 28553 * @since 0.1.0 28554 * @category Collection 28555 * @param {Array|Object} collection The collection to iterate over. 28556 * @param {Function} [iteratee=_.identity] The function invoked per iteration. 28557 * @param {*} [accumulator] The initial value. 28558 * @returns {*} Returns the accumulated value. 28559 * @see _.reduce 28560 * @example 28561 * 28562 * var array = [[0, 1], [2, 3], [4, 5]]; 28563 * 28564 * _.reduceRight(array, function(flattened, other) { 28565 * return flattened.concat(other); 28566 * }, []); 28567 * // => [4, 5, 2, 3, 0, 1] 28568 */ 28569 function reduceRight(collection, iteratee, accumulator) { 28570 var func = isArray(collection) ? arrayReduceRight : baseReduce, 28571 initAccum = arguments.length < 3; 28572 28573 return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEachRight); 28574 } 28575 28576 /** 28577 * The opposite of `_.filter`; this method returns the elements of `collection` 28578 * that `predicate` does **not** return truthy for. 28579 * 28580 * @static 28581 * @memberOf _ 28582 * @since 0.1.0 28583 * @category Collection 28584 * @param {Array|Object} collection The collection to iterate over. 28585 * @param {Function} [predicate=_.identity] The function invoked per iteration. 28586 * @returns {Array} Returns the new filtered array. 28587 * @see _.filter 28588 * @example 28589 * 28590 * var users = [ 28591 * { 'user': 'barney', 'age': 36, 'active': false }, 28592 * { 'user': 'fred', 'age': 40, 'active': true } 28593 * ]; 28594 * 28595 * _.reject(users, function(o) { return !o.active; }); 28596 * // => objects for ['fred'] 28597 * 28598 * // The `_.matches` iteratee shorthand. 28599 * _.reject(users, { 'age': 40, 'active': true }); 28600 * // => objects for ['barney'] 28601 * 28602 * // The `_.matchesProperty` iteratee shorthand. 28603 * _.reject(users, ['active', false]); 28604 * // => objects for ['fred'] 28605 * 28606 * // The `_.property` iteratee shorthand. 28607 * _.reject(users, 'active'); 28608 * // => objects for ['barney'] 28609 */ 28610 function reject(collection, predicate) { 28611 var func = isArray(collection) ? arrayFilter : baseFilter; 28612 return func(collection, negate(getIteratee(predicate, 3))); 28613 } 28614 28615 /** 28616 * Gets a random element from `collection`. 28617 * 28618 * @static 28619 * @memberOf _ 28620 * @since 2.0.0 28621 * @category Collection 28622 * @param {Array|Object} collection The collection to sample. 28623 * @returns {*} Returns the random element. 28624 * @example 28625 * 28626 * _.sample([1, 2, 3, 4]); 28627 * // => 2 28628 */ 28629 function sample(collection) { 28630 var func = isArray(collection) ? arraySample : baseSample; 28631 return func(collection); 28632 } 28633 28634 /** 28635 * Gets `n` random elements at unique keys from `collection` up to the 28636 * size of `collection`. 28637 * 28638 * @static 28639 * @memberOf _ 28640 * @since 4.0.0 28641 * @category Collection 28642 * @param {Array|Object} collection The collection to sample. 28643 * @param {number} [n=1] The number of elements to sample. 28644 * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. 28645 * @returns {Array} Returns the random elements. 28646 * @example 28647 * 28648 * _.sampleSize([1, 2, 3], 2); 28649 * // => [3, 1] 28650 * 28651 * _.sampleSize([1, 2, 3], 4); 28652 * // => [2, 3, 1] 28653 */ 28654 function sampleSize(collection, n, guard) { 28655 if ((guard ? isIterateeCall(collection, n, guard) : n === undefined)) { 28656 n = 1; 28657 } else { 28658 n = toInteger(n); 28659 } 28660 var func = isArray(collection) ? arraySampleSize : baseSampleSize; 28661 return func(collection, n); 28662 } 28663 28664 /** 28665 * Creates an array of shuffled values, using a version of the 28666 * [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher-Yates_shuffle). 28667 * 28668 * @static 28669 * @memberOf _ 28670 * @since 0.1.0 28671 * @category Collection 28672 * @param {Array|Object} collection The collection to shuffle. 28673 * @returns {Array} Returns the new shuffled array. 28674 * @example 28675 * 28676 * _.shuffle([1, 2, 3, 4]); 28677 * // => [4, 1, 3, 2] 28678 */ 28679 function shuffle(collection) { 28680 var func = isArray(collection) ? arrayShuffle : baseShuffle; 28681 return func(collection); 28682 } 28683 28684 /** 28685 * Gets the size of `collection` by returning its length for array-like 28686 * values or the number of own enumerable string keyed properties for objects. 28687 * 28688 * @static 28689 * @memberOf _ 28690 * @since 0.1.0 28691 * @category Collection 28692 * @param {Array|Object|string} collection The collection to inspect. 28693 * @returns {number} Returns the collection size. 28694 * @example 28695 * 28696 * _.size([1, 2, 3]); 28697 * // => 3 28698 * 28699 * _.size({ 'a': 1, 'b': 2 }); 28700 * // => 2 28701 * 28702 * _.size('pebbles'); 28703 * // => 7 28704 */ 28705 function size(collection) { 28706 if (collection == null) { 28707 return 0; 28708 } 28709 if (isArrayLike(collection)) { 28710 return isString(collection) ? stringSize(collection) : collection.length; 28711 } 28712 var tag = getTag(collection); 28713 if (tag == mapTag || tag == setTag) { 28714 return collection.size; 28715 } 28716 return baseKeys(collection).length; 28717 } 28718 28719 /** 28720 * Checks if `predicate` returns truthy for **any** element of `collection`. 28721 * Iteration is stopped once `predicate` returns truthy. The predicate is 28722 * invoked with three arguments: (value, index|key, collection). 28723 * 28724 * @static 28725 * @memberOf _ 28726 * @since 0.1.0 28727 * @category Collection 28728 * @param {Array|Object} collection The collection to iterate over. 28729 * @param {Function} [predicate=_.identity] The function invoked per iteration. 28730 * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. 28731 * @returns {boolean} Returns `true` if any element passes the predicate check, 28732 * else `false`. 28733 * @example 28734 * 28735 * _.some([null, 0, 'yes', false], Boolean); 28736 * // => true 28737 * 28738 * var users = [ 28739 * { 'user': 'barney', 'active': true }, 28740 * { 'user': 'fred', 'active': false } 28741 * ]; 28742 * 28743 * // The `_.matches` iteratee shorthand. 28744 * _.some(users, { 'user': 'barney', 'active': false }); 28745 * // => false 28746 * 28747 * // The `_.matchesProperty` iteratee shorthand. 28748 * _.some(users, ['active', false]); 28749 * // => true 28750 * 28751 * // The `_.property` iteratee shorthand. 28752 * _.some(users, 'active'); 28753 * // => true 28754 */ 28755 function some(collection, predicate, guard) { 28756 var func = isArray(collection) ? arraySome : baseSome; 28757 if (guard && isIterateeCall(collection, predicate, guard)) { 28758 predicate = undefined; 28759 } 28760 return func(collection, getIteratee(predicate, 3)); 28761 } 28762 28763 /** 28764 * Creates an array of elements, sorted in ascending order by the results of 28765 * running each element in a collection thru each iteratee. This method 28766 * performs a stable sort, that is, it preserves the original sort order of 28767 * equal elements. The iteratees are invoked with one argument: (value). 28768 * 28769 * @static 28770 * @memberOf _ 28771 * @since 0.1.0 28772 * @category Collection 28773 * @param {Array|Object} collection The collection to iterate over. 28774 * @param {...(Function|Function[])} [iteratees=[_.identity]] 28775 * The iteratees to sort by. 28776 * @returns {Array} Returns the new sorted array. 28777 * @example 28778 * 28779 * var users = [ 28780 * { 'user': 'fred', 'age': 48 }, 28781 * { 'user': 'barney', 'age': 36 }, 28782 * { 'user': 'fred', 'age': 30 }, 28783 * { 'user': 'barney', 'age': 34 } 28784 * ]; 28785 * 28786 * _.sortBy(users, [function(o) { return o.user; }]); 28787 * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 30]] 28788 * 28789 * _.sortBy(users, ['user', 'age']); 28790 * // => objects for [['barney', 34], ['barney', 36], ['fred', 30], ['fred', 48]] 28791 */ 28792 var sortBy = baseRest(function(collection, iteratees) { 28793 if (collection == null) { 28794 return []; 28795 } 28796 var length = iteratees.length; 28797 if (length > 1 && isIterateeCall(collection, iteratees[0], iteratees[1])) { 28798 iteratees = []; 28799 } else if (length > 2 && isIterateeCall(iteratees[0], iteratees[1], iteratees[2])) { 28800 iteratees = [iteratees[0]]; 28801 } 28802 return baseOrderBy(collection, baseFlatten(iteratees, 1), []); 28803 }); 28804 28805 /*------------------------------------------------------------------------*/ 28806 28807 /** 28808 * Gets the timestamp of the number of milliseconds that have elapsed since 28809 * the Unix epoch (1 January 1970 00:00:00 UTC). 28810 * 28811 * @static 28812 * @memberOf _ 28813 * @since 2.4.0 28814 * @category Date 28815 * @returns {number} Returns the timestamp. 28816 * @example 28817 * 28818 * _.defer(function(stamp) { 28819 * console.log(_.now() - stamp); 28820 * }, _.now()); 28821 * // => Logs the number of milliseconds it took for the deferred invocation. 28822 */ 28823 var now = ctxNow || function() { 28824 return root.Date.now(); 28825 }; 28826 28827 /*------------------------------------------------------------------------*/ 28828 28829 /** 28830 * The opposite of `_.before`; this method creates a function that invokes 28831 * `func` once it's called `n` or more times. 28832 * 28833 * @static 28834 * @memberOf _ 28835 * @since 0.1.0 28836 * @category Function 28837 * @param {number} n The number of calls before `func` is invoked. 28838 * @param {Function} func The function to restrict. 28839 * @returns {Function} Returns the new restricted function. 28840 * @example 28841 * 28842 * var saves = ['profile', 'settings']; 28843 * 28844 * var done = _.after(saves.length, function() { 28845 * console.log('done saving!'); 28846 * }); 28847 * 28848 * _.forEach(saves, function(type) { 28849 * asyncSave({ 'type': type, 'complete': done }); 28850 * }); 28851 * // => Logs 'done saving!' after the two async saves have completed. 28852 */ 28853 function after(n, func) { 28854 if (typeof func != 'function') { 28855 throw new TypeError(FUNC_ERROR_TEXT); 28856 } 28857 n = toInteger(n); 28858 return function() { 28859 if (--n < 1) { 28860 return func.apply(this, arguments); 28861 } 28862 }; 28863 } 28864 28865 /** 28866 * Creates a function that invokes `func`, with up to `n` arguments, 28867 * ignoring any additional arguments. 28868 * 28869 * @static 28870 * @memberOf _ 28871 * @since 3.0.0 28872 * @category Function 28873 * @param {Function} func The function to cap arguments for. 28874 * @param {number} [n=func.length] The arity cap. 28875 * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. 28876 * @returns {Function} Returns the new capped function. 28877 * @example 28878 * 28879 * _.map(['6', '8', '10'], _.ary(parseInt, 1)); 28880 * // => [6, 8, 10] 28881 */ 28882 function ary(func, n, guard) { 28883 n = guard ? undefined : n; 28884 n = (func && n == null) ? func.length : n; 28885 return createWrap(func, WRAP_ARY_FLAG, undefined, undefined, undefined, undefined, n); 28886 } 28887 28888 /** 28889 * Creates a function that invokes `func`, with the `this` binding and arguments 28890 * of the created function, while it's called less than `n` times. Subsequent 28891 * calls to the created function return the result of the last `func` invocation. 28892 * 28893 * @static 28894 * @memberOf _ 28895 * @since 3.0.0 28896 * @category Function 28897 * @param {number} n The number of calls at which `func` is no longer invoked. 28898 * @param {Function} func The function to restrict. 28899 * @returns {Function} Returns the new restricted function. 28900 * @example 28901 * 28902 * jQuery(element).on('click', _.before(5, addContactToList)); 28903 * // => Allows adding up to 4 contacts to the list. 28904 */ 28905 function before(n, func) { 28906 var result; 28907 if (typeof func != 'function') { 28908 throw new TypeError(FUNC_ERROR_TEXT); 28909 } 28910 n = toInteger(n); 28911 return function() { 28912 if (--n > 0) { 28913 result = func.apply(this, arguments); 28914 } 28915 if (n <= 1) { 28916 func = undefined; 28917 } 28918 return result; 28919 }; 28920 } 28921 28922 /** 28923 * Creates a function that invokes `func` with the `this` binding of `thisArg` 28924 * and `partials` prepended to the arguments it receives. 28925 * 28926 * The `_.bind.placeholder` value, which defaults to `_` in monolithic builds, 28927 * may be used as a placeholder for partially applied arguments. 28928 * 28929 * **Note:** Unlike native `Function#bind`, this method doesn't set the "length" 28930 * property of bound functions. 28931 * 28932 * @static 28933 * @memberOf _ 28934 * @since 0.1.0 28935 * @category Function 28936 * @param {Function} func The function to bind. 28937 * @param {*} thisArg The `this` binding of `func`. 28938 * @param {...*} [partials] The arguments to be partially applied. 28939 * @returns {Function} Returns the new bound function. 28940 * @example 28941 * 28942 * function greet(greeting, punctuation) { 28943 * return greeting + ' ' + this.user + punctuation; 28944 * } 28945 * 28946 * var object = { 'user': 'fred' }; 28947 * 28948 * var bound = _.bind(greet, object, 'hi'); 28949 * bound('!'); 28950 * // => 'hi fred!' 28951 * 28952 * // Bound with placeholders. 28953 * var bound = _.bind(greet, object, _, '!'); 28954 * bound('hi'); 28955 * // => 'hi fred!' 28956 */ 28957 var bind = baseRest(function(func, thisArg, partials) { 28958 var bitmask = WRAP_BIND_FLAG; 28959 if (partials.length) { 28960 var holders = replaceHolders(partials, getHolder(bind)); 28961 bitmask |= WRAP_PARTIAL_FLAG; 28962 } 28963 return createWrap(func, bitmask, thisArg, partials, holders); 28964 }); 28965 28966 /** 28967 * Creates a function that invokes the method at `object[key]` with `partials` 28968 * prepended to the arguments it receives. 28969 * 28970 * This method differs from `_.bind` by allowing bound functions to reference 28971 * methods that may be redefined or don't yet exist. See 28972 * [Peter Michaux's article](http://peter.michaux.ca/articles/lazy-function-definition-pattern) 28973 * for more details. 28974 * 28975 * The `_.bindKey.placeholder` value, which defaults to `_` in monolithic 28976 * builds, may be used as a placeholder for partially applied arguments. 28977 * 28978 * @static 28979 * @memberOf _ 28980 * @since 0.10.0 28981 * @category Function 28982 * @param {Object} object The object to invoke the method on. 28983 * @param {string} key The key of the method. 28984 * @param {...*} [partials] The arguments to be partially applied. 28985 * @returns {Function} Returns the new bound function. 28986 * @example 28987 * 28988 * var object = { 28989 * 'user': 'fred', 28990 * 'greet': function(greeting, punctuation) { 28991 * return greeting + ' ' + this.user + punctuation; 28992 * } 28993 * }; 28994 * 28995 * var bound = _.bindKey(object, 'greet', 'hi'); 28996 * bound('!'); 28997 * // => 'hi fred!' 28998 * 28999 * object.greet = function(greeting, punctuation) { 29000 * return greeting + 'ya ' + this.user + punctuation; 29001 * }; 29002 * 29003 * bound('!'); 29004 * // => 'hiya fred!' 29005 * 29006 * // Bound with placeholders. 29007 * var bound = _.bindKey(object, 'greet', _, '!'); 29008 * bound('hi'); 29009 * // => 'hiya fred!' 29010 */ 29011 var bindKey = baseRest(function(object, key, partials) { 29012 var bitmask = WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG; 29013 if (partials.length) { 29014 var holders = replaceHolders(partials, getHolder(bindKey)); 29015 bitmask |= WRAP_PARTIAL_FLAG; 29016 } 29017 return createWrap(key, bitmask, object, partials, holders); 29018 }); 29019 29020 /** 29021 * Creates a function that accepts arguments of `func` and either invokes 29022 * `func` returning its result, if at least `arity` number of arguments have 29023 * been provided, or returns a function that accepts the remaining `func` 29024 * arguments, and so on. The arity of `func` may be specified if `func.length` 29025 * is not sufficient. 29026 * 29027 * The `_.curry.placeholder` value, which defaults to `_` in monolithic builds, 29028 * may be used as a placeholder for provided arguments. 29029 * 29030 * **Note:** This method doesn't set the "length" property of curried functions. 29031 * 29032 * @static 29033 * @memberOf _ 29034 * @since 2.0.0 29035 * @category Function 29036 * @param {Function} func The function to curry. 29037 * @param {number} [arity=func.length] The arity of `func`. 29038 * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. 29039 * @returns {Function} Returns the new curried function. 29040 * @example 29041 * 29042 * var abc = function(a, b, c) { 29043 * return [a, b, c]; 29044 * }; 29045 * 29046 * var curried = _.curry(abc); 29047 * 29048 * curried(1)(2)(3); 29049 * // => [1, 2, 3] 29050 * 29051 * curried(1, 2)(3); 29052 * // => [1, 2, 3] 29053 * 29054 * curried(1, 2, 3); 29055 * // => [1, 2, 3] 29056 * 29057 * // Curried with placeholders. 29058 * curried(1)(_, 3)(2); 29059 * // => [1, 2, 3] 29060 */ 29061 function curry(func, arity, guard) { 29062 arity = guard ? undefined : arity; 29063 var result = createWrap(func, WRAP_CURRY_FLAG, undefined, undefined, undefined, undefined, undefined, arity); 29064 result.placeholder = curry.placeholder; 29065 return result; 29066 } 29067 29068 /** 29069 * This method is like `_.curry` except that arguments are applied to `func` 29070 * in the manner of `_.partialRight` instead of `_.partial`. 29071 * 29072 * The `_.curryRight.placeholder` value, which defaults to `_` in monolithic 29073 * builds, may be used as a placeholder for provided arguments. 29074 * 29075 * **Note:** This method doesn't set the "length" property of curried functions. 29076 * 29077 * @static 29078 * @memberOf _ 29079 * @since 3.0.0 29080 * @category Function 29081 * @param {Function} func The function to curry. 29082 * @param {number} [arity=func.length] The arity of `func`. 29083 * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. 29084 * @returns {Function} Returns the new curried function. 29085 * @example 29086 * 29087 * var abc = function(a, b, c) { 29088 * return [a, b, c]; 29089 * }; 29090 * 29091 * var curried = _.curryRight(abc); 29092 * 29093 * curried(3)(2)(1); 29094 * // => [1, 2, 3] 29095 * 29096 * curried(2, 3)(1); 29097 * // => [1, 2, 3] 29098 * 29099 * curried(1, 2, 3); 29100 * // => [1, 2, 3] 29101 * 29102 * // Curried with placeholders. 29103 * curried(3)(1, _)(2); 29104 * // => [1, 2, 3] 29105 */ 29106 function curryRight(func, arity, guard) { 29107 arity = guard ? undefined : arity; 29108 var result = createWrap(func, WRAP_CURRY_RIGHT_FLAG, undefined, undefined, undefined, undefined, undefined, arity); 29109 result.placeholder = curryRight.placeholder; 29110 return result; 29111 } 29112 29113 /** 29114 * Creates a debounced function that delays invoking `func` until after `wait` 29115 * milliseconds have elapsed since the last time the debounced function was 29116 * invoked. The debounced function comes with a `cancel` method to cancel 29117 * delayed `func` invocations and a `flush` method to immediately invoke them. 29118 * Provide `options` to indicate whether `func` should be invoked on the 29119 * leading and/or trailing edge of the `wait` timeout. The `func` is invoked 29120 * with the last arguments provided to the debounced function. Subsequent 29121 * calls to the debounced function return the result of the last `func` 29122 * invocation. 29123 * 29124 * **Note:** If `leading` and `trailing` options are `true`, `func` is 29125 * invoked on the trailing edge of the timeout only if the debounced function 29126 * is invoked more than once during the `wait` timeout. 29127 * 29128 * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred 29129 * until to the next tick, similar to `setTimeout` with a timeout of `0`. 29130 * 29131 * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/) 29132 * for details over the differences between `_.debounce` and `_.throttle`. 29133 * 29134 * @static 29135 * @memberOf _ 29136 * @since 0.1.0 29137 * @category Function 29138 * @param {Function} func The function to debounce. 29139 * @param {number} [wait=0] The number of milliseconds to delay. 29140 * @param {Object} [options={}] The options object. 29141 * @param {boolean} [options.leading=false] 29142 * Specify invoking on the leading edge of the timeout. 29143 * @param {number} [options.maxWait] 29144 * The maximum time `func` is allowed to be delayed before it's invoked. 29145 * @param {boolean} [options.trailing=true] 29146 * Specify invoking on the trailing edge of the timeout. 29147 * @returns {Function} Returns the new debounced function. 29148 * @example 29149 * 29150 * // Avoid costly calculations while the window size is in flux. 29151 * jQuery(window).on('resize', _.debounce(calculateLayout, 150)); 29152 * 29153 * // Invoke `sendMail` when clicked, debouncing subsequent calls. 29154 * jQuery(element).on('click', _.debounce(sendMail, 300, { 29155 * 'leading': true, 29156 * 'trailing': false 29157 * })); 29158 * 29159 * // Ensure `batchLog` is invoked once after 1 second of debounced calls. 29160 * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 }); 29161 * var source = new EventSource('/stream'); 29162 * jQuery(source).on('message', debounced); 29163 * 29164 * // Cancel the trailing debounced invocation. 29165 * jQuery(window).on('popstate', debounced.cancel); 29166 */ 29167 function debounce(func, wait, options) { 29168 var lastArgs, 29169 lastThis, 29170 maxWait, 29171 result, 29172 timerId, 29173 lastCallTime, 29174 lastInvokeTime = 0, 29175 leading = false, 29176 maxing = false, 29177 trailing = true; 29178 29179 if (typeof func != 'function') { 29180 throw new TypeError(FUNC_ERROR_TEXT); 29181 } 29182 wait = toNumber(wait) || 0; 29183 if (isObject(options)) { 29184 leading = !!options.leading; 29185 maxing = 'maxWait' in options; 29186 maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait; 29187 trailing = 'trailing' in options ? !!options.trailing : trailing; 29188 } 29189 29190 function invokeFunc(time) { 29191 var args = lastArgs, 29192 thisArg = lastThis; 29193 29194 lastArgs = lastThis = undefined; 29195 lastInvokeTime = time; 29196 result = func.apply(thisArg, args); 29197 return result; 29198 } 29199 29200 function leadingEdge(time) { 29201 // Reset any `maxWait` timer. 29202 lastInvokeTime = time; 29203 // Start the timer for the trailing edge. 29204 timerId = setTimeout(timerExpired, wait); 29205 // Invoke the leading edge. 29206 return leading ? invokeFunc(time) : result; 29207 } 29208 29209 function remainingWait(time) { 29210 var timeSinceLastCall = time - lastCallTime, 29211 timeSinceLastInvoke = time - lastInvokeTime, 29212 timeWaiting = wait - timeSinceLastCall; 29213 29214 return maxing 29215 ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke) 29216 : timeWaiting; 29217 } 29218 29219 function shouldInvoke(time) { 29220 var timeSinceLastCall = time - lastCallTime, 29221 timeSinceLastInvoke = time - lastInvokeTime; 29222 29223 // Either this is the first call, activity has stopped and we're at the 29224 // trailing edge, the system time has gone backwards and we're treating 29225 // it as the trailing edge, or we've hit the `maxWait` limit. 29226 return (lastCallTime === undefined || (timeSinceLastCall >= wait) || 29227 (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait)); 29228 } 29229 29230 function timerExpired() { 29231 var time = now(); 29232 if (shouldInvoke(time)) { 29233 return trailingEdge(time); 29234 } 29235 // Restart the timer. 29236 timerId = setTimeout(timerExpired, remainingWait(time)); 29237 } 29238 29239 function trailingEdge(time) { 29240 timerId = undefined; 29241 29242 // Only invoke if we have `lastArgs` which means `func` has been 29243 // debounced at least once. 29244 if (trailing && lastArgs) { 29245 return invokeFunc(time); 29246 } 29247 lastArgs = lastThis = undefined; 29248 return result; 29249 } 29250 29251 function cancel() { 29252 if (timerId !== undefined) { 29253 clearTimeout(timerId); 29254 } 29255 lastInvokeTime = 0; 29256 lastArgs = lastCallTime = lastThis = timerId = undefined; 29257 } 29258 29259 function flush() { 29260 return timerId === undefined ? result : trailingEdge(now()); 29261 } 29262 29263 function debounced() { 29264 var time = now(), 29265 isInvoking = shouldInvoke(time); 29266 29267 lastArgs = arguments; 29268 lastThis = this; 29269 lastCallTime = time; 29270 29271 if (isInvoking) { 29272 if (timerId === undefined) { 29273 return leadingEdge(lastCallTime); 29274 } 29275 if (maxing) { 29276 // Handle invocations in a tight loop. 29277 clearTimeout(timerId); 29278 timerId = setTimeout(timerExpired, wait); 29279 return invokeFunc(lastCallTime); 29280 } 29281 } 29282 if (timerId === undefined) { 29283 timerId = setTimeout(timerExpired, wait); 29284 } 29285 return result; 29286 } 29287 debounced.cancel = cancel; 29288 debounced.flush = flush; 29289 return debounced; 29290 } 29291 29292 /** 29293 * Defers invoking the `func` until the current call stack has cleared. Any 29294 * additional arguments are provided to `func` when it's invoked. 29295 * 29296 * @static 29297 * @memberOf _ 29298 * @since 0.1.0 29299 * @category Function 29300 * @param {Function} func The function to defer. 29301 * @param {...*} [args] The arguments to invoke `func` with. 29302 * @returns {number} Returns the timer id. 29303 * @example 29304 * 29305 * _.defer(function(text) { 29306 * console.log(text); 29307 * }, 'deferred'); 29308 * // => Logs 'deferred' after one millisecond. 29309 */ 29310 var defer = baseRest(function(func, args) { 29311 return baseDelay(func, 1, args); 29312 }); 29313 29314 /** 29315 * Invokes `func` after `wait` milliseconds. Any additional arguments are 29316 * provided to `func` when it's invoked. 29317 * 29318 * @static 29319 * @memberOf _ 29320 * @since 0.1.0 29321 * @category Function 29322 * @param {Function} func The function to delay. 29323 * @param {number} wait The number of milliseconds to delay invocation. 29324 * @param {...*} [args] The arguments to invoke `func` with. 29325 * @returns {number} Returns the timer id. 29326 * @example 29327 * 29328 * _.delay(function(text) { 29329 * console.log(text); 29330 * }, 1000, 'later'); 29331 * // => Logs 'later' after one second. 29332 */ 29333 var delay = baseRest(function(func, wait, args) { 29334 return baseDelay(func, toNumber(wait) || 0, args); 29335 }); 29336 29337 /** 29338 * Creates a function that invokes `func` with arguments reversed. 29339 * 29340 * @static 29341 * @memberOf _ 29342 * @since 4.0.0 29343 * @category Function 29344 * @param {Function} func The function to flip arguments for. 29345 * @returns {Function} Returns the new flipped function. 29346 * @example 29347 * 29348 * var flipped = _.flip(function() { 29349 * return _.toArray(arguments); 29350 * }); 29351 * 29352 * flipped('a', 'b', 'c', 'd'); 29353 * // => ['d', 'c', 'b', 'a'] 29354 */ 29355 function flip(func) { 29356 return createWrap(func, WRAP_FLIP_FLAG); 29357 } 29358 29359 /** 29360 * Creates a function that memoizes the result of `func`. If `resolver` is 29361 * provided, it determines the cache key for storing the result based on the 29362 * arguments provided to the memoized function. By default, the first argument 29363 * provided to the memoized function is used as the map cache key. The `func` 29364 * is invoked with the `this` binding of the memoized function. 29365 * 29366 * **Note:** The cache is exposed as the `cache` property on the memoized 29367 * function. Its creation may be customized by replacing the `_.memoize.Cache` 29368 * constructor with one whose instances implement the 29369 * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object) 29370 * method interface of `clear`, `delete`, `get`, `has`, and `set`. 29371 * 29372 * @static 29373 * @memberOf _ 29374 * @since 0.1.0 29375 * @category Function 29376 * @param {Function} func The function to have its output memoized. 29377 * @param {Function} [resolver] The function to resolve the cache key. 29378 * @returns {Function} Returns the new memoized function. 29379 * @example 29380 * 29381 * var object = { 'a': 1, 'b': 2 }; 29382 * var other = { 'c': 3, 'd': 4 }; 29383 * 29384 * var values = _.memoize(_.values); 29385 * values(object); 29386 * // => [1, 2] 29387 * 29388 * values(other); 29389 * // => [3, 4] 29390 * 29391 * object.a = 2; 29392 * values(object); 29393 * // => [1, 2] 29394 * 29395 * // Modify the result cache. 29396 * values.cache.set(object, ['a', 'b']); 29397 * values(object); 29398 * // => ['a', 'b'] 29399 * 29400 * // Replace `_.memoize.Cache`. 29401 * _.memoize.Cache = WeakMap; 29402 */ 29403 function memoize(func, resolver) { 29404 if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) { 29405 throw new TypeError(FUNC_ERROR_TEXT); 29406 } 29407 var memoized = function() { 29408 var args = arguments, 29409 key = resolver ? resolver.apply(this, args) : args[0], 29410 cache = memoized.cache; 29411 29412 if (cache.has(key)) { 29413 return cache.get(key); 29414 } 29415 var result = func.apply(this, args); 29416 memoized.cache = cache.set(key, result) || cache; 29417 return result; 29418 }; 29419 memoized.cache = new (memoize.Cache || MapCache); 29420 return memoized; 29421 } 29422 29423 // Expose `MapCache`. 29424 memoize.Cache = MapCache; 29425 29426 /** 29427 * Creates a function that negates the result of the predicate `func`. The 29428 * `func` predicate is invoked with the `this` binding and arguments of the 29429 * created function. 29430 * 29431 * @static 29432 * @memberOf _ 29433 * @since 3.0.0 29434 * @category Function 29435 * @param {Function} predicate The predicate to negate. 29436 * @returns {Function} Returns the new negated function. 29437 * @example 29438 * 29439 * function isEven(n) { 29440 * return n % 2 == 0; 29441 * } 29442 * 29443 * _.filter([1, 2, 3, 4, 5, 6], _.negate(isEven)); 29444 * // => [1, 3, 5] 29445 */ 29446 function negate(predicate) { 29447 if (typeof predicate != 'function') { 29448 throw new TypeError(FUNC_ERROR_TEXT); 29449 } 29450 return function() { 29451 var args = arguments; 29452 switch (args.length) { 29453 case 0: return !predicate.call(this); 29454 case 1: return !predicate.call(this, args[0]); 29455 case 2: return !predicate.call(this, args[0], args[1]); 29456 case 3: return !predicate.call(this, args[0], args[1], args[2]); 29457 } 29458 return !predicate.apply(this, args); 29459 }; 29460 } 29461 29462 /** 29463 * Creates a function that is restricted to invoking `func` once. Repeat calls 29464 * to the function return the value of the first invocation. The `func` is 29465 * invoked with the `this` binding and arguments of the created function. 29466 * 29467 * @static 29468 * @memberOf _ 29469 * @since 0.1.0 29470 * @category Function 29471 * @param {Function} func The function to restrict. 29472 * @returns {Function} Returns the new restricted function. 29473 * @example 29474 * 29475 * var initialize = _.once(createApplication); 29476 * initialize(); 29477 * initialize(); 29478 * // => `createApplication` is invoked once 29479 */ 29480 function once(func) { 29481 return before(2, func); 29482 } 29483 29484 /** 29485 * Creates a function that invokes `func` with its arguments transformed. 29486 * 29487 * @static 29488 * @since 4.0.0 29489 * @memberOf _ 29490 * @category Function 29491 * @param {Function} func The function to wrap. 29492 * @param {...(Function|Function[])} [transforms=[_.identity]] 29493 * The argument transforms. 29494 * @returns {Function} Returns the new function. 29495 * @example 29496 * 29497 * function doubled(n) { 29498 * return n * 2; 29499 * } 29500 * 29501 * function square(n) { 29502 * return n * n; 29503 * } 29504 * 29505 * var func = _.overArgs(function(x, y) { 29506 * return [x, y]; 29507 * }, [square, doubled]); 29508 * 29509 * func(9, 3); 29510 * // => [81, 6] 29511 * 29512 * func(10, 5); 29513 * // => [100, 10] 29514 */ 29515 var overArgs = castRest(function(func, transforms) { 29516 transforms = (transforms.length == 1 && isArray(transforms[0])) 29517 ? arrayMap(transforms[0], baseUnary(getIteratee())) 29518 : arrayMap(baseFlatten(transforms, 1), baseUnary(getIteratee())); 29519 29520 var funcsLength = transforms.length; 29521 return baseRest(function(args) { 29522 var index = -1, 29523 length = nativeMin(args.length, funcsLength); 29524 29525 while (++index < length) { 29526 args[index] = transforms[index].call(this, args[index]); 29527 } 29528 return apply(func, this, args); 29529 }); 29530 }); 29531 29532 /** 29533 * Creates a function that invokes `func` with `partials` prepended to the 29534 * arguments it receives. This method is like `_.bind` except it does **not** 29535 * alter the `this` binding. 29536 * 29537 * The `_.partial.placeholder` value, which defaults to `_` in monolithic 29538 * builds, may be used as a placeholder for partially applied arguments. 29539 * 29540 * **Note:** This method doesn't set the "length" property of partially 29541 * applied functions. 29542 * 29543 * @static 29544 * @memberOf _ 29545 * @since 0.2.0 29546 * @category Function 29547 * @param {Function} func The function to partially apply arguments to. 29548 * @param {...*} [partials] The arguments to be partially applied. 29549 * @returns {Function} Returns the new partially applied function. 29550 * @example 29551 * 29552 * function greet(greeting, name) { 29553 * return greeting + ' ' + name; 29554 * } 29555 * 29556 * var sayHelloTo = _.partial(greet, 'hello'); 29557 * sayHelloTo('fred'); 29558 * // => 'hello fred' 29559 * 29560 * // Partially applied with placeholders. 29561 * var greetFred = _.partial(greet, _, 'fred'); 29562 * greetFred('hi'); 29563 * // => 'hi fred' 29564 */ 29565 var partial = baseRest(function(func, partials) { 29566 var holders = replaceHolders(partials, getHolder(partial)); 29567 return createWrap(func, WRAP_PARTIAL_FLAG, undefined, partials, holders); 29568 }); 29569 29570 /** 29571 * This method is like `_.partial` except that partially applied arguments 29572 * are appended to the arguments it receives. 29573 * 29574 * The `_.partialRight.placeholder` value, which defaults to `_` in monolithic 29575 * builds, may be used as a placeholder for partially applied arguments. 29576 * 29577 * **Note:** This method doesn't set the "length" property of partially 29578 * applied functions. 29579 * 29580 * @static 29581 * @memberOf _ 29582 * @since 1.0.0 29583 * @category Function 29584 * @param {Function} func The function to partially apply arguments to. 29585 * @param {...*} [partials] The arguments to be partially applied. 29586 * @returns {Function} Returns the new partially applied function. 29587 * @example 29588 * 29589 * function greet(greeting, name) { 29590 * return greeting + ' ' + name; 29591 * } 29592 * 29593 * var greetFred = _.partialRight(greet, 'fred'); 29594 * greetFred('hi'); 29595 * // => 'hi fred' 29596 * 29597 * // Partially applied with placeholders. 29598 * var sayHelloTo = _.partialRight(greet, 'hello', _); 29599 * sayHelloTo('fred'); 29600 * // => 'hello fred' 29601 */ 29602 var partialRight = baseRest(function(func, partials) { 29603 var holders = replaceHolders(partials, getHolder(partialRight)); 29604 return createWrap(func, WRAP_PARTIAL_RIGHT_FLAG, undefined, partials, holders); 29605 }); 29606 29607 /** 29608 * Creates a function that invokes `func` with arguments arranged according 29609 * to the specified `indexes` where the argument value at the first index is 29610 * provided as the first argument, the argument value at the second index is 29611 * provided as the second argument, and so on. 29612 * 29613 * @static 29614 * @memberOf _ 29615 * @since 3.0.0 29616 * @category Function 29617 * @param {Function} func The function to rearrange arguments for. 29618 * @param {...(number|number[])} indexes The arranged argument indexes. 29619 * @returns {Function} Returns the new function. 29620 * @example 29621 * 29622 * var rearged = _.rearg(function(a, b, c) { 29623 * return [a, b, c]; 29624 * }, [2, 0, 1]); 29625 * 29626 * rearged('b', 'c', 'a') 29627 * // => ['a', 'b', 'c'] 29628 */ 29629 var rearg = flatRest(function(func, indexes) { 29630 return createWrap(func, WRAP_REARG_FLAG, undefined, undefined, undefined, indexes); 29631 }); 29632 29633 /** 29634 * Creates a function that invokes `func` with the `this` binding of the 29635 * created function and arguments from `start` and beyond provided as 29636 * an array. 29637 * 29638 * **Note:** This method is based on the 29639 * [rest parameter](https://mdn.io/rest_parameters). 29640 * 29641 * @static 29642 * @memberOf _ 29643 * @since 4.0.0 29644 * @category Function 29645 * @param {Function} func The function to apply a rest parameter to. 29646 * @param {number} [start=func.length-1] The start position of the rest parameter. 29647 * @returns {Function} Returns the new function. 29648 * @example 29649 * 29650 * var say = _.rest(function(what, names) { 29651 * return what + ' ' + _.initial(names).join(', ') + 29652 * (_.size(names) > 1 ? ', & ' : '') + _.last(names); 29653 * }); 29654 * 29655 * say('hello', 'fred', 'barney', 'pebbles'); 29656 * // => 'hello fred, barney, & pebbles' 29657 */ 29658 function rest(func, start) { 29659 if (typeof func != 'function') { 29660 throw new TypeError(FUNC_ERROR_TEXT); 29661 } 29662 start = start === undefined ? start : toInteger(start); 29663 return baseRest(func, start); 29664 } 29665 29666 /** 29667 * Creates a function that invokes `func` with the `this` binding of the 29668 * create function and an array of arguments much like 29669 * [`Function#apply`](http://www.ecma-international.org/ecma-262/7.0/#sec-function.prototype.apply). 29670 * 29671 * **Note:** This method is based on the 29672 * [spread operator](https://mdn.io/spread_operator). 29673 * 29674 * @static 29675 * @memberOf _ 29676 * @since 3.2.0 29677 * @category Function 29678 * @param {Function} func The function to spread arguments over. 29679 * @param {number} [start=0] The start position of the spread. 29680 * @returns {Function} Returns the new function. 29681 * @example 29682 * 29683 * var say = _.spread(function(who, what) { 29684 * return who + ' says ' + what; 29685 * }); 29686 * 29687 * say(['fred', 'hello']); 29688 * // => 'fred says hello' 29689 * 29690 * var numbers = Promise.all([ 29691 * Promise.resolve(40), 29692 * Promise.resolve(36) 29693 * ]); 29694 * 29695 * numbers.then(_.spread(function(x, y) { 29696 * return x + y; 29697 * })); 29698 * // => a Promise of 76 29699 */ 29700 function spread(func, start) { 29701 if (typeof func != 'function') { 29702 throw new TypeError(FUNC_ERROR_TEXT); 29703 } 29704 start = start == null ? 0 : nativeMax(toInteger(start), 0); 29705 return baseRest(function(args) { 29706 var array = args[start], 29707 otherArgs = castSlice(args, 0, start); 29708 29709 if (array) { 29710 arrayPush(otherArgs, array); 29711 } 29712 return apply(func, this, otherArgs); 29713 }); 29714 } 29715 29716 /** 29717 * Creates a throttled function that only invokes `func` at most once per 29718 * every `wait` milliseconds. The throttled function comes with a `cancel` 29719 * method to cancel delayed `func` invocations and a `flush` method to 29720 * immediately invoke them. Provide `options` to indicate whether `func` 29721 * should be invoked on the leading and/or trailing edge of the `wait` 29722 * timeout. The `func` is invoked with the last arguments provided to the 29723 * throttled function. Subsequent calls to the throttled function return the 29724 * result of the last `func` invocation. 29725 * 29726 * **Note:** If `leading` and `trailing` options are `true`, `func` is 29727 * invoked on the trailing edge of the timeout only if the throttled function 29728 * is invoked more than once during the `wait` timeout. 29729 * 29730 * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred 29731 * until to the next tick, similar to `setTimeout` with a timeout of `0`. 29732 * 29733 * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/) 29734 * for details over the differences between `_.throttle` and `_.debounce`. 29735 * 29736 * @static 29737 * @memberOf _ 29738 * @since 0.1.0 29739 * @category Function 29740 * @param {Function} func The function to throttle. 29741 * @param {number} [wait=0] The number of milliseconds to throttle invocations to. 29742 * @param {Object} [options={}] The options object. 29743 * @param {boolean} [options.leading=true] 29744 * Specify invoking on the leading edge of the timeout. 29745 * @param {boolean} [options.trailing=true] 29746 * Specify invoking on the trailing edge of the timeout. 29747 * @returns {Function} Returns the new throttled function. 29748 * @example 29749 * 29750 * // Avoid excessively updating the position while scrolling. 29751 * jQuery(window).on('scroll', _.throttle(updatePosition, 100)); 29752 * 29753 * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes. 29754 * var throttled = _.throttle(renewToken, 300000, { 'trailing': false }); 29755 * jQuery(element).on('click', throttled); 29756 * 29757 * // Cancel the trailing throttled invocation. 29758 * jQuery(window).on('popstate', throttled.cancel); 29759 */ 29760 function throttle(func, wait, options) { 29761 var leading = true, 29762 trailing = true; 29763 29764 if (typeof func != 'function') { 29765 throw new TypeError(FUNC_ERROR_TEXT); 29766 } 29767 if (isObject(options)) { 29768 leading = 'leading' in options ? !!options.leading : leading; 29769 trailing = 'trailing' in options ? !!options.trailing : trailing; 29770 } 29771 return debounce(func, wait, { 29772 'leading': leading, 29773 'maxWait': wait, 29774 'trailing': trailing 29775 }); 29776 } 29777 29778 /** 29779 * Creates a function that accepts up to one argument, ignoring any 29780 * additional arguments. 29781 * 29782 * @static 29783 * @memberOf _ 29784 * @since 4.0.0 29785 * @category Function 29786 * @param {Function} func The function to cap arguments for. 29787 * @returns {Function} Returns the new capped function. 29788 * @example 29789 * 29790 * _.map(['6', '8', '10'], _.unary(parseInt)); 29791 * // => [6, 8, 10] 29792 */ 29793 function unary(func) { 29794 return ary(func, 1); 29795 } 29796 29797 /** 29798 * Creates a function that provides `value` to `wrapper` as its first 29799 * argument. Any additional arguments provided to the function are appended 29800 * to those provided to the `wrapper`. The wrapper is invoked with the `this` 29801 * binding of the created function. 29802 * 29803 * @static 29804 * @memberOf _ 29805 * @since 0.1.0 29806 * @category Function 29807 * @param {*} value The value to wrap. 29808 * @param {Function} [wrapper=identity] The wrapper function. 29809 * @returns {Function} Returns the new function. 29810 * @example 29811 * 29812 * var p = _.wrap(_.escape, function(func, text) { 29813 * return '<p>' + func(text) + '</p>'; 29814 * }); 29815 * 29816 * p('fred, barney, & pebbles'); 29817 * // => '<p>fred, barney, & pebbles</p>' 29818 */ 29819 function wrap(value, wrapper) { 29820 return partial(castFunction(wrapper), value); 29821 } 29822 29823 /*------------------------------------------------------------------------*/ 29824 29825 /** 29826 * Casts `value` as an array if it's not one. 29827 * 29828 * @static 29829 * @memberOf _ 29830 * @since 4.4.0 29831 * @category Lang 29832 * @param {*} value The value to inspect. 29833 * @returns {Array} Returns the cast array. 29834 * @example 29835 * 29836 * _.castArray(1); 29837 * // => [1] 29838 * 29839 * _.castArray({ 'a': 1 }); 29840 * // => [{ 'a': 1 }] 29841 * 29842 * _.castArray('abc'); 29843 * // => ['abc'] 29844 * 29845 * _.castArray(null); 29846 * // => [null] 29847 * 29848 * _.castArray(undefined); 29849 * // => [undefined] 29850 * 29851 * _.castArray(); 29852 * // => [] 29853 * 29854 * var array = [1, 2, 3]; 29855 * console.log(_.castArray(array) === array); 29856 * // => true 29857 */ 29858 function castArray() { 29859 if (!arguments.length) { 29860 return []; 29861 } 29862 var value = arguments[0]; 29863 return isArray(value) ? value : [value]; 29864 } 29865 29866 /** 29867 * Creates a shallow clone of `value`. 29868 * 29869 * **Note:** This method is loosely based on the 29870 * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm) 29871 * and supports cloning arrays, array buffers, booleans, date objects, maps, 29872 * numbers, `Object` objects, regexes, sets, strings, symbols, and typed 29873 * arrays. The own enumerable properties of `arguments` objects are cloned 29874 * as plain objects. An empty object is returned for uncloneable values such 29875 * as error objects, functions, DOM nodes, and WeakMaps. 29876 * 29877 * @static 29878 * @memberOf _ 29879 * @since 0.1.0 29880 * @category Lang 29881 * @param {*} value The value to clone. 29882 * @returns {*} Returns the cloned value. 29883 * @see _.cloneDeep 29884 * @example 29885 * 29886 * var objects = [{ 'a': 1 }, { 'b': 2 }]; 29887 * 29888 * var shallow = _.clone(objects); 29889 * console.log(shallow[0] === objects[0]); 29890 * // => true 29891 */ 29892 function clone(value) { 29893 return baseClone(value, CLONE_SYMBOLS_FLAG); 29894 } 29895 29896 /** 29897 * This method is like `_.clone` except that it accepts `customizer` which 29898 * is invoked to produce the cloned value. If `customizer` returns `undefined`, 29899 * cloning is handled by the method instead. The `customizer` is invoked with 29900 * up to four arguments; (value [, index|key, object, stack]). 29901 * 29902 * @static 29903 * @memberOf _ 29904 * @since 4.0.0 29905 * @category Lang 29906 * @param {*} value The value to clone. 29907 * @param {Function} [customizer] The function to customize cloning. 29908 * @returns {*} Returns the cloned value. 29909 * @see _.cloneDeepWith 29910 * @example 29911 * 29912 * function customizer(value) { 29913 * if (_.isElement(value)) { 29914 * return value.cloneNode(false); 29915 * } 29916 * } 29917 * 29918 * var el = _.cloneWith(document.body, customizer); 29919 * 29920 * console.log(el === document.body); 29921 * // => false 29922 * console.log(el.nodeName); 29923 * // => 'BODY' 29924 * console.log(el.childNodes.length); 29925 * // => 0 29926 */ 29927 function cloneWith(value, customizer) { 29928 customizer = typeof customizer == 'function' ? customizer : undefined; 29929 return baseClone(value, CLONE_SYMBOLS_FLAG, customizer); 29930 } 29931 29932 /** 29933 * This method is like `_.clone` except that it recursively clones `value`. 29934 * 29935 * @static 29936 * @memberOf _ 29937 * @since 1.0.0 29938 * @category Lang 29939 * @param {*} value The value to recursively clone. 29940 * @returns {*} Returns the deep cloned value. 29941 * @see _.clone 29942 * @example 29943 * 29944 * var objects = [{ 'a': 1 }, { 'b': 2 }]; 29945 * 29946 * var deep = _.cloneDeep(objects); 29947 * console.log(deep[0] === objects[0]); 29948 * // => false 29949 */ 29950 function cloneDeep(value) { 29951 return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG); 29952 } 29953 29954 /** 29955 * This method is like `_.cloneWith` except that it recursively clones `value`. 29956 * 29957 * @static 29958 * @memberOf _ 29959 * @since 4.0.0 29960 * @category Lang 29961 * @param {*} value The value to recursively clone. 29962 * @param {Function} [customizer] The function to customize cloning. 29963 * @returns {*} Returns the deep cloned value. 29964 * @see _.cloneWith 29965 * @example 29966 * 29967 * function customizer(value) { 29968 * if (_.isElement(value)) { 29969 * return value.cloneNode(true); 29970 * } 29971 * } 29972 * 29973 * var el = _.cloneDeepWith(document.body, customizer); 29974 * 29975 * console.log(el === document.body); 29976 * // => false 29977 * console.log(el.nodeName); 29978 * // => 'BODY' 29979 * console.log(el.childNodes.length); 29980 * // => 20 29981 */ 29982 function cloneDeepWith(value, customizer) { 29983 customizer = typeof customizer == 'function' ? customizer : undefined; 29984 return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG, customizer); 29985 } 29986 29987 /** 29988 * Checks if `object` conforms to `source` by invoking the predicate 29989 * properties of `source` with the corresponding property values of `object`. 29990 * 29991 * **Note:** This method is equivalent to `_.conforms` when `source` is 29992 * partially applied. 29993 * 29994 * @static 29995 * @memberOf _ 29996 * @since 4.14.0 29997 * @category Lang 29998 * @param {Object} object The object to inspect. 29999 * @param {Object} source The object of property predicates to conform to. 30000 * @returns {boolean} Returns `true` if `object` conforms, else `false`. 30001 * @example 30002 * 30003 * var object = { 'a': 1, 'b': 2 }; 30004 * 30005 * _.conformsTo(object, { 'b': function(n) { return n > 1; } }); 30006 * // => true 30007 * 30008 * _.conformsTo(object, { 'b': function(n) { return n > 2; } }); 30009 * // => false 30010 */ 30011 function conformsTo(object, source) { 30012 return source == null || baseConformsTo(object, source, keys(source)); 30013 } 30014 30015 /** 30016 * Performs a 30017 * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) 30018 * comparison between two values to determine if they are equivalent. 30019 * 30020 * @static 30021 * @memberOf _ 30022 * @since 4.0.0 30023 * @category Lang 30024 * @param {*} value The value to compare. 30025 * @param {*} other The other value to compare. 30026 * @returns {boolean} Returns `true` if the values are equivalent, else `false`. 30027 * @example 30028 * 30029 * var object = { 'a': 1 }; 30030 * var other = { 'a': 1 }; 30031 * 30032 * _.eq(object, object); 30033 * // => true 30034 * 30035 * _.eq(object, other); 30036 * // => false 30037 * 30038 * _.eq('a', 'a'); 30039 * // => true 30040 * 30041 * _.eq('a', Object('a')); 30042 * // => false 30043 * 30044 * _.eq(NaN, NaN); 30045 * // => true 30046 */ 30047 function eq(value, other) { 30048 return value === other || (value !== value && other !== other); 30049 } 30050 30051 /** 30052 * Checks if `value` is greater than `other`. 30053 * 30054 * @static 30055 * @memberOf _ 30056 * @since 3.9.0 30057 * @category Lang 30058 * @param {*} value The value to compare. 30059 * @param {*} other The other value to compare. 30060 * @returns {boolean} Returns `true` if `value` is greater than `other`, 30061 * else `false`. 30062 * @see _.lt 30063 * @example 30064 * 30065 * _.gt(3, 1); 30066 * // => true 30067 * 30068 * _.gt(3, 3); 30069 * // => false 30070 * 30071 * _.gt(1, 3); 30072 * // => false 30073 */ 30074 var gt = createRelationalOperation(baseGt); 30075 30076 /** 30077 * Checks if `value` is greater than or equal to `other`. 30078 * 30079 * @static 30080 * @memberOf _ 30081 * @since 3.9.0 30082 * @category Lang 30083 * @param {*} value The value to compare. 30084 * @param {*} other The other value to compare. 30085 * @returns {boolean} Returns `true` if `value` is greater than or equal to 30086 * `other`, else `false`. 30087 * @see _.lte 30088 * @example 30089 * 30090 * _.gte(3, 1); 30091 * // => true 30092 * 30093 * _.gte(3, 3); 30094 * // => true 30095 * 30096 * _.gte(1, 3); 30097 * // => false 30098 */ 30099 var gte = createRelationalOperation(function(value, other) { 30100 return value >= other; 30101 }); 30102 30103 /** 30104 * Checks if `value` is likely an `arguments` object. 30105 * 30106 * @static 30107 * @memberOf _ 30108 * @since 0.1.0 30109 * @category Lang 30110 * @param {*} value The value to check. 30111 * @returns {boolean} Returns `true` if `value` is an `arguments` object, 30112 * else `false`. 30113 * @example 30114 * 30115 * _.isArguments(function() { return arguments; }()); 30116 * // => true 30117 * 30118 * _.isArguments([1, 2, 3]); 30119 * // => false 30120 */ 30121 var isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) { 30122 return isObjectLike(value) && hasOwnProperty.call(value, 'callee') && 30123 !propertyIsEnumerable.call(value, 'callee'); 30124 }; 30125 30126 /** 30127 * Checks if `value` is classified as an `Array` object. 30128 * 30129 * @static 30130 * @memberOf _ 30131 * @since 0.1.0 30132 * @category Lang 30133 * @param {*} value The value to check. 30134 * @returns {boolean} Returns `true` if `value` is an array, else `false`. 30135 * @example 30136 * 30137 * _.isArray([1, 2, 3]); 30138 * // => true 30139 * 30140 * _.isArray(document.body.children); 30141 * // => false 30142 * 30143 * _.isArray('abc'); 30144 * // => false 30145 * 30146 * _.isArray(_.noop); 30147 * // => false 30148 */ 30149 var isArray = Array.isArray; 30150 30151 /** 30152 * Checks if `value` is classified as an `ArrayBuffer` object. 30153 * 30154 * @static 30155 * @memberOf _ 30156 * @since 4.3.0 30157 * @category Lang 30158 * @param {*} value The value to check. 30159 * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`. 30160 * @example 30161 * 30162 * _.isArrayBuffer(new ArrayBuffer(2)); 30163 * // => true 30164 * 30165 * _.isArrayBuffer(new Array(2)); 30166 * // => false 30167 */ 30168 var isArrayBuffer = nodeIsArrayBuffer ? baseUnary(nodeIsArrayBuffer) : baseIsArrayBuffer; 30169 30170 /** 30171 * Checks if `value` is array-like. A value is considered array-like if it's 30172 * not a function and has a `value.length` that's an integer greater than or 30173 * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`. 30174 * 30175 * @static 30176 * @memberOf _ 30177 * @since 4.0.0 30178 * @category Lang 30179 * @param {*} value The value to check. 30180 * @returns {boolean} Returns `true` if `value` is array-like, else `false`. 30181 * @example 30182 * 30183 * _.isArrayLike([1, 2, 3]); 30184 * // => true 30185 * 30186 * _.isArrayLike(document.body.children); 30187 * // => true 30188 * 30189 * _.isArrayLike('abc'); 30190 * // => true 30191 * 30192 * _.isArrayLike(_.noop); 30193 * // => false 30194 */ 30195 function isArrayLike(value) { 30196 return value != null && isLength(value.length) && !isFunction(value); 30197 } 30198 30199 /** 30200 * This method is like `_.isArrayLike` except that it also checks if `value` 30201 * is an object. 30202 * 30203 * @static 30204 * @memberOf _ 30205 * @since 4.0.0 30206 * @category Lang 30207 * @param {*} value The value to check. 30208 * @returns {boolean} Returns `true` if `value` is an array-like object, 30209 * else `false`. 30210 * @example 30211 * 30212 * _.isArrayLikeObject([1, 2, 3]); 30213 * // => true 30214 * 30215 * _.isArrayLikeObject(document.body.children); 30216 * // => true 30217 * 30218 * _.isArrayLikeObject('abc'); 30219 * // => false 30220 * 30221 * _.isArrayLikeObject(_.noop); 30222 * // => false 30223 */ 30224 function isArrayLikeObject(value) { 30225 return isObjectLike(value) && isArrayLike(value); 30226 } 30227 30228 /** 30229 * Checks if `value` is classified as a boolean primitive or object. 30230 * 30231 * @static 30232 * @memberOf _ 30233 * @since 0.1.0 30234 * @category Lang 30235 * @param {*} value The value to check. 30236 * @returns {boolean} Returns `true` if `value` is a boolean, else `false`. 30237 * @example 30238 * 30239 * _.isBoolean(false); 30240 * // => true 30241 * 30242 * _.isBoolean(null); 30243 * // => false 30244 */ 30245 function isBoolean(value) { 30246 return value === true || value === false || 30247 (isObjectLike(value) && baseGetTag(value) == boolTag); 30248 } 30249 30250 /** 30251 * Checks if `value` is a buffer. 30252 * 30253 * @static 30254 * @memberOf _ 30255 * @since 4.3.0 30256 * @category Lang 30257 * @param {*} value The value to check. 30258 * @returns {boolean} Returns `true` if `value` is a buffer, else `false`. 30259 * @example 30260 * 30261 * _.isBuffer(new Buffer(2)); 30262 * // => true 30263 * 30264 * _.isBuffer(new Uint8Array(2)); 30265 * // => false 30266 */ 30267 var isBuffer = nativeIsBuffer || stubFalse; 30268 30269 /** 30270 * Checks if `value` is classified as a `Date` object. 30271 * 30272 * @static 30273 * @memberOf _ 30274 * @since 0.1.0 30275 * @category Lang 30276 * @param {*} value The value to check. 30277 * @returns {boolean} Returns `true` if `value` is a date object, else `false`. 30278 * @example 30279 * 30280 * _.isDate(new Date); 30281 * // => true 30282 * 30283 * _.isDate('Mon April 23 2012'); 30284 * // => false 30285 */ 30286 var isDate = nodeIsDate ? baseUnary(nodeIsDate) : baseIsDate; 30287 30288 /** 30289 * Checks if `value` is likely a DOM element. 30290 * 30291 * @static 30292 * @memberOf _ 30293 * @since 0.1.0 30294 * @category Lang 30295 * @param {*} value The value to check. 30296 * @returns {boolean} Returns `true` if `value` is a DOM element, else `false`. 30297 * @example 30298 * 30299 * _.isElement(document.body); 30300 * // => true 30301 * 30302 * _.isElement('<body>'); 30303 * // => false 30304 */ 30305 function isElement(value) { 30306 return isObjectLike(value) && value.nodeType === 1 && !isPlainObject(value); 30307 } 30308 30309 /** 30310 * Checks if `value` is an empty object, collection, map, or set. 30311 * 30312 * Objects are considered empty if they have no own enumerable string keyed 30313 * properties. 30314 * 30315 * Array-like values such as `arguments` objects, arrays, buffers, strings, or 30316 * jQuery-like collections are considered empty if they have a `length` of `0`. 30317 * Similarly, maps and sets are considered empty if they have a `size` of `0`. 30318 * 30319 * @static 30320 * @memberOf _ 30321 * @since 0.1.0 30322 * @category Lang 30323 * @param {*} value The value to check. 30324 * @returns {boolean} Returns `true` if `value` is empty, else `false`. 30325 * @example 30326 * 30327 * _.isEmpty(null); 30328 * // => true 30329 * 30330 * _.isEmpty(true); 30331 * // => true 30332 * 30333 * _.isEmpty(1); 30334 * // => true 30335 * 30336 * _.isEmpty([1, 2, 3]); 30337 * // => false 30338 * 30339 * _.isEmpty({ 'a': 1 }); 30340 * // => false 30341 */ 30342 function isEmpty(value) { 30343 if (value == null) { 30344 return true; 30345 } 30346 if (isArrayLike(value) && 30347 (isArray(value) || typeof value == 'string' || typeof value.splice == 'function' || 30348 isBuffer(value) || isTypedArray(value) || isArguments(value))) { 30349 return !value.length; 30350 } 30351 var tag = getTag(value); 30352 if (tag == mapTag || tag == setTag) { 30353 return !value.size; 30354 } 30355 if (isPrototype(value)) { 30356 return !baseKeys(value).length; 30357 } 30358 for (var key in value) { 30359 if (hasOwnProperty.call(value, key)) { 30360 return false; 30361 } 30362 } 30363 return true; 30364 } 30365 30366 /** 30367 * Performs a deep comparison between two values to determine if they are 30368 * equivalent. 30369 * 30370 * **Note:** This method supports comparing arrays, array buffers, booleans, 30371 * date objects, error objects, maps, numbers, `Object` objects, regexes, 30372 * sets, strings, symbols, and typed arrays. `Object` objects are compared 30373 * by their own, not inherited, enumerable properties. Functions and DOM 30374 * nodes are compared by strict equality, i.e. `===`. 30375 * 30376 * @static 30377 * @memberOf _ 30378 * @since 0.1.0 30379 * @category Lang 30380 * @param {*} value The value to compare. 30381 * @param {*} other The other value to compare. 30382 * @returns {boolean} Returns `true` if the values are equivalent, else `false`. 30383 * @example 30384 * 30385 * var object = { 'a': 1 }; 30386 * var other = { 'a': 1 }; 30387 * 30388 * _.isEqual(object, other); 30389 * // => true 30390 * 30391 * object === other; 30392 * // => false 30393 */ 30394 function isEqual(value, other) { 30395 return baseIsEqual(value, other); 30396 } 30397 30398 /** 30399 * This method is like `_.isEqual` except that it accepts `customizer` which 30400 * is invoked to compare values. If `customizer` returns `undefined`, comparisons 30401 * are handled by the method instead. The `customizer` is invoked with up to 30402 * six arguments: (objValue, othValue [, index|key, object, other, stack]). 30403 * 30404 * @static 30405 * @memberOf _ 30406 * @since 4.0.0 30407 * @category Lang 30408 * @param {*} value The value to compare. 30409 * @param {*} other The other value to compare. 30410 * @param {Function} [customizer] The function to customize comparisons. 30411 * @returns {boolean} Returns `true` if the values are equivalent, else `false`. 30412 * @example 30413 * 30414 * function isGreeting(value) { 30415 * return /^h(?:i|ello)$/.test(value); 30416 * } 30417 * 30418 * function customizer(objValue, othValue) { 30419 * if (isGreeting(objValue) && isGreeting(othValue)) { 30420 * return true; 30421 * } 30422 * } 30423 * 30424 * var array = ['hello', 'goodbye']; 30425 * var other = ['hi', 'goodbye']; 30426 * 30427 * _.isEqualWith(array, other, customizer); 30428 * // => true 30429 */ 30430 function isEqualWith(value, other, customizer) { 30431 customizer = typeof customizer == 'function' ? customizer : undefined; 30432 var result = customizer ? customizer(value, other) : undefined; 30433 return result === undefined ? baseIsEqual(value, other, undefined, customizer) : !!result; 30434 } 30435 30436 /** 30437 * Checks if `value` is an `Error`, `EvalError`, `RangeError`, `ReferenceError`, 30438 * `SyntaxError`, `TypeError`, or `URIError` object. 30439 * 30440 * @static 30441 * @memberOf _ 30442 * @since 3.0.0 30443 * @category Lang 30444 * @param {*} value The value to check. 30445 * @returns {boolean} Returns `true` if `value` is an error object, else `false`. 30446 * @example 30447 * 30448 * _.isError(new Error); 30449 * // => true 30450 * 30451 * _.isError(Error); 30452 * // => false 30453 */ 30454 function isError(value) { 30455 if (!isObjectLike(value)) { 30456 return false; 30457 } 30458 var tag = baseGetTag(value); 30459 return tag == errorTag || tag == domExcTag || 30460 (typeof value.message == 'string' && typeof value.name == 'string' && !isPlainObject(value)); 30461 } 30462 30463 /** 30464 * Checks if `value` is a finite primitive number. 30465 * 30466 * **Note:** This method is based on 30467 * [`Number.isFinite`](https://mdn.io/Number/isFinite). 30468 * 30469 * @static 30470 * @memberOf _ 30471 * @since 0.1.0 30472 * @category Lang 30473 * @param {*} value The value to check. 30474 * @returns {boolean} Returns `true` if `value` is a finite number, else `false`. 30475 * @example 30476 * 30477 * _.isFinite(3); 30478 * // => true 30479 * 30480 * _.isFinite(Number.MIN_VALUE); 30481 * // => true 30482 * 30483 * _.isFinite(Infinity); 30484 * // => false 30485 * 30486 * _.isFinite('3'); 30487 * // => false 30488 */ 30489 function isFinite(value) { 30490 return typeof value == 'number' && nativeIsFinite(value); 30491 } 30492 30493 /** 30494 * Checks if `value` is classified as a `Function` object. 30495 * 30496 * @static 30497 * @memberOf _ 30498 * @since 0.1.0 30499 * @category Lang 30500 * @param {*} value The value to check. 30501 * @returns {boolean} Returns `true` if `value` is a function, else `false`. 30502 * @example 30503 * 30504 * _.isFunction(_); 30505 * // => true 30506 * 30507 * _.isFunction(/abc/); 30508 * // => false 30509 */ 30510 function isFunction(value) { 30511 if (!isObject(value)) { 30512 return false; 30513 } 30514 // The use of `Object#toString` avoids issues with the `typeof` operator 30515 // in Safari 9 which returns 'object' for typed arrays and other constructors. 30516 var tag = baseGetTag(value); 30517 return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag; 30518 } 30519 30520 /** 30521 * Checks if `value` is an integer. 30522 * 30523 * **Note:** This method is based on 30524 * [`Number.isInteger`](https://mdn.io/Number/isInteger). 30525 * 30526 * @static 30527 * @memberOf _ 30528 * @since 4.0.0 30529 * @category Lang 30530 * @param {*} value The value to check. 30531 * @returns {boolean} Returns `true` if `value` is an integer, else `false`. 30532 * @example 30533 * 30534 * _.isInteger(3); 30535 * // => true 30536 * 30537 * _.isInteger(Number.MIN_VALUE); 30538 * // => false 30539 * 30540 * _.isInteger(Infinity); 30541 * // => false 30542 * 30543 * _.isInteger('3'); 30544 * // => false 30545 */ 30546 function isInteger(value) { 30547 return typeof value == 'number' && value == toInteger(value); 30548 } 30549 30550 /** 30551 * Checks if `value` is a valid array-like length. 30552 * 30553 * **Note:** This method is loosely based on 30554 * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength). 30555 * 30556 * @static 30557 * @memberOf _ 30558 * @since 4.0.0 30559 * @category Lang 30560 * @param {*} value The value to check. 30561 * @returns {boolean} Returns `true` if `value` is a valid length, else `false`. 30562 * @example 30563 * 30564 * _.isLength(3); 30565 * // => true 30566 * 30567 * _.isLength(Number.MIN_VALUE); 30568 * // => false 30569 * 30570 * _.isLength(Infinity); 30571 * // => false 30572 * 30573 * _.isLength('3'); 30574 * // => false 30575 */ 30576 function isLength(value) { 30577 return typeof value == 'number' && 30578 value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER; 30579 } 30580 30581 /** 30582 * Checks if `value` is the 30583 * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types) 30584 * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) 30585 * 30586 * @static 30587 * @memberOf _ 30588 * @since 0.1.0 30589 * @category Lang 30590 * @param {*} value The value to check. 30591 * @returns {boolean} Returns `true` if `value` is an object, else `false`. 30592 * @example 30593 * 30594 * _.isObject({}); 30595 * // => true 30596 * 30597 * _.isObject([1, 2, 3]); 30598 * // => true 30599 * 30600 * _.isObject(_.noop); 30601 * // => true 30602 * 30603 * _.isObject(null); 30604 * // => false 30605 */ 30606 function isObject(value) { 30607 var type = typeof value; 30608 return value != null && (type == 'object' || type == 'function'); 30609 } 30610 30611 /** 30612 * Checks if `value` is object-like. A value is object-like if it's not `null` 30613 * and has a `typeof` result of "object". 30614 * 30615 * @static 30616 * @memberOf _ 30617 * @since 4.0.0 30618 * @category Lang 30619 * @param {*} value The value to check. 30620 * @returns {boolean} Returns `true` if `value` is object-like, else `false`. 30621 * @example 30622 * 30623 * _.isObjectLike({}); 30624 * // => true 30625 * 30626 * _.isObjectLike([1, 2, 3]); 30627 * // => true 30628 * 30629 * _.isObjectLike(_.noop); 30630 * // => false 30631 * 30632 * _.isObjectLike(null); 30633 * // => false 30634 */ 30635 function isObjectLike(value) { 30636 return value != null && typeof value == 'object'; 30637 } 30638 30639 /** 30640 * Checks if `value` is classified as a `Map` object. 30641 * 30642 * @static 30643 * @memberOf _ 30644 * @since 4.3.0 30645 * @category Lang 30646 * @param {*} value The value to check. 30647 * @returns {boolean} Returns `true` if `value` is a map, else `false`. 30648 * @example 30649 * 30650 * _.isMap(new Map); 30651 * // => true 30652 * 30653 * _.isMap(new WeakMap); 30654 * // => false 30655 */ 30656 var isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap; 30657 30658 /** 30659 * Performs a partial deep comparison between `object` and `source` to 30660 * determine if `object` contains equivalent property values. 30661 * 30662 * **Note:** This method is equivalent to `_.matches` when `source` is 30663 * partially applied. 30664 * 30665 * Partial comparisons will match empty array and empty object `source` 30666 * values against any array or object value, respectively. See `_.isEqual` 30667 * for a list of supported value comparisons. 30668 * 30669 * @static 30670 * @memberOf _ 30671 * @since 3.0.0 30672 * @category Lang 30673 * @param {Object} object The object to inspect. 30674 * @param {Object} source The object of property values to match. 30675 * @returns {boolean} Returns `true` if `object` is a match, else `false`. 30676 * @example 30677 * 30678 * var object = { 'a': 1, 'b': 2 }; 30679 * 30680 * _.isMatch(object, { 'b': 2 }); 30681 * // => true 30682 * 30683 * _.isMatch(object, { 'b': 1 }); 30684 * // => false 30685 */ 30686 function isMatch(object, source) { 30687 return object === source || baseIsMatch(object, source, getMatchData(source)); 30688 } 30689 30690 /** 30691 * This method is like `_.isMatch` except that it accepts `customizer` which 30692 * is invoked to compare values. If `customizer` returns `undefined`, comparisons 30693 * are handled by the method instead. The `customizer` is invoked with five 30694 * arguments: (objValue, srcValue, index|key, object, source). 30695 * 30696 * @static 30697 * @memberOf _ 30698 * @since 4.0.0 30699 * @category Lang 30700 * @param {Object} object The object to inspect. 30701 * @param {Object} source The object of property values to match. 30702 * @param {Function} [customizer] The function to customize comparisons. 30703 * @returns {boolean} Returns `true` if `object` is a match, else `false`. 30704 * @example 30705 * 30706 * function isGreeting(value) { 30707 * return /^h(?:i|ello)$/.test(value); 30708 * } 30709 * 30710 * function customizer(objValue, srcValue) { 30711 * if (isGreeting(objValue) && isGreeting(srcValue)) { 30712 * return true; 30713 * } 30714 * } 30715 * 30716 * var object = { 'greeting': 'hello' }; 30717 * var source = { 'greeting': 'hi' }; 30718 * 30719 * _.isMatchWith(object, source, customizer); 30720 * // => true 30721 */ 30722 function isMatchWith(object, source, customizer) { 30723 customizer = typeof customizer == 'function' ? customizer : undefined; 30724 return baseIsMatch(object, source, getMatchData(source), customizer); 30725 } 30726 30727 /** 30728 * Checks if `value` is `NaN`. 30729 * 30730 * **Note:** This method is based on 30731 * [`Number.isNaN`](https://mdn.io/Number/isNaN) and is not the same as 30732 * global [`isNaN`](https://mdn.io/isNaN) which returns `true` for 30733 * `undefined` and other non-number values. 30734 * 30735 * @static 30736 * @memberOf _ 30737 * @since 0.1.0 30738 * @category Lang 30739 * @param {*} value The value to check. 30740 * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`. 30741 * @example 30742 * 30743 * _.isNaN(NaN); 30744 * // => true 30745 * 30746 * _.isNaN(new Number(NaN)); 30747 * // => true 30748 * 30749 * isNaN(undefined); 30750 * // => true 30751 * 30752 * _.isNaN(undefined); 30753 * // => false 30754 */ 30755 function isNaN(value) { 30756 // An `NaN` primitive is the only value that is not equal to itself. 30757 // Perform the `toStringTag` check first to avoid errors with some 30758 // ActiveX objects in IE. 30759 return isNumber(value) && value != +value; 30760 } 30761 30762 /** 30763 * Checks if `value` is a pristine native function. 30764 * 30765 * **Note:** This method can't reliably detect native functions in the presence 30766 * of the core-js package because core-js circumvents this kind of detection. 30767 * Despite multiple requests, the core-js maintainer has made it clear: any 30768 * attempt to fix the detection will be obstructed. As a result, we're left 30769 * with little choice but to throw an error. Unfortunately, this also affects 30770 * packages, like [babel-polyfill](https://www.npmjs.com/package/babel-polyfill), 30771 * which rely on core-js. 30772 * 30773 * @static 30774 * @memberOf _ 30775 * @since 3.0.0 30776 * @category Lang 30777 * @param {*} value The value to check. 30778 * @returns {boolean} Returns `true` if `value` is a native function, 30779 * else `false`. 30780 * @example 30781 * 30782 * _.isNative(Array.prototype.push); 30783 * // => true 30784 * 30785 * _.isNative(_); 30786 * // => false 30787 */ 30788 function isNative(value) { 30789 if (isMaskable(value)) { 30790 throw new Error(CORE_ERROR_TEXT); 30791 } 30792 return baseIsNative(value); 30793 } 30794 30795 /** 30796 * Checks if `value` is `null`. 30797 * 30798 * @static 30799 * @memberOf _ 30800 * @since 0.1.0 30801 * @category Lang 30802 * @param {*} value The value to check. 30803 * @returns {boolean} Returns `true` if `value` is `null`, else `false`. 30804 * @example 30805 * 30806 * _.isNull(null); 30807 * // => true 30808 * 30809 * _.isNull(void 0); 30810 * // => false 30811 */ 30812 function isNull(value) { 30813 return value === null; 30814 } 30815 30816 /** 30817 * Checks if `value` is `null` or `undefined`. 30818 * 30819 * @static 30820 * @memberOf _ 30821 * @since 4.0.0 30822 * @category Lang 30823 * @param {*} value The value to check. 30824 * @returns {boolean} Returns `true` if `value` is nullish, else `false`. 30825 * @example 30826 * 30827 * _.isNil(null); 30828 * // => true 30829 * 30830 * _.isNil(void 0); 30831 * // => true 30832 * 30833 * _.isNil(NaN); 30834 * // => false 30835 */ 30836 function isNil(value) { 30837 return value == null; 30838 } 30839 30840 /** 30841 * Checks if `value` is classified as a `Number` primitive or object. 30842 * 30843 * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are 30844 * classified as numbers, use the `_.isFinite` method. 30845 * 30846 * @static 30847 * @memberOf _ 30848 * @since 0.1.0 30849 * @category Lang 30850 * @param {*} value The value to check. 30851 * @returns {boolean} Returns `true` if `value` is a number, else `false`. 30852 * @example 30853 * 30854 * _.isNumber(3); 30855 * // => true 30856 * 30857 * _.isNumber(Number.MIN_VALUE); 30858 * // => true 30859 * 30860 * _.isNumber(Infinity); 30861 * // => true 30862 * 30863 * _.isNumber('3'); 30864 * // => false 30865 */ 30866 function isNumber(value) { 30867 return typeof value == 'number' || 30868 (isObjectLike(value) && baseGetTag(value) == numberTag); 30869 } 30870 30871 /** 30872 * Checks if `value` is a plain object, that is, an object created by the 30873 * `Object` constructor or one with a `[[Prototype]]` of `null`. 30874 * 30875 * @static 30876 * @memberOf _ 30877 * @since 0.8.0 30878 * @category Lang 30879 * @param {*} value The value to check. 30880 * @returns {boolean} Returns `true` if `value` is a plain object, else `false`. 30881 * @example 30882 * 30883 * function Foo() { 30884 * this.a = 1; 30885 * } 30886 * 30887 * _.isPlainObject(new Foo); 30888 * // => false 30889 * 30890 * _.isPlainObject([1, 2, 3]); 30891 * // => false 30892 * 30893 * _.isPlainObject({ 'x': 0, 'y': 0 }); 30894 * // => true 30895 * 30896 * _.isPlainObject(Object.create(null)); 30897 * // => true 30898 */ 30899 function isPlainObject(value) { 30900 if (!isObjectLike(value) || baseGetTag(value) != objectTag) { 30901 return false; 30902 } 30903 var proto = getPrototype(value); 30904 if (proto === null) { 30905 return true; 30906 } 30907 var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor; 30908 return typeof Ctor == 'function' && Ctor instanceof Ctor && 30909 funcToString.call(Ctor) == objectCtorString; 30910 } 30911 30912 /** 30913 * Checks if `value` is classified as a `RegExp` object. 30914 * 30915 * @static 30916 * @memberOf _ 30917 * @since 0.1.0 30918 * @category Lang 30919 * @param {*} value The value to check. 30920 * @returns {boolean} Returns `true` if `value` is a regexp, else `false`. 30921 * @example 30922 * 30923 * _.isRegExp(/abc/); 30924 * // => true 30925 * 30926 * _.isRegExp('/abc/'); 30927 * // => false 30928 */ 30929 var isRegExp = nodeIsRegExp ? baseUnary(nodeIsRegExp) : baseIsRegExp; 30930 30931 /** 30932 * Checks if `value` is a safe integer. An integer is safe if it's an IEEE-754 30933 * double precision number which isn't the result of a rounded unsafe integer. 30934 * 30935 * **Note:** This method is based on 30936 * [`Number.isSafeInteger`](https://mdn.io/Number/isSafeInteger). 30937 * 30938 * @static 30939 * @memberOf _ 30940 * @since 4.0.0 30941 * @category Lang 30942 * @param {*} value The value to check. 30943 * @returns {boolean} Returns `true` if `value` is a safe integer, else `false`. 30944 * @example 30945 * 30946 * _.isSafeInteger(3); 30947 * // => true 30948 * 30949 * _.isSafeInteger(Number.MIN_VALUE); 30950 * // => false 30951 * 30952 * _.isSafeInteger(Infinity); 30953 * // => false 30954 * 30955 * _.isSafeInteger('3'); 30956 * // => false 30957 */ 30958 function isSafeInteger(value) { 30959 return isInteger(value) && value >= -MAX_SAFE_INTEGER && value <= MAX_SAFE_INTEGER; 30960 } 30961 30962 /** 30963 * Checks if `value` is classified as a `Set` object. 30964 * 30965 * @static 30966 * @memberOf _ 30967 * @since 4.3.0 30968 * @category Lang 30969 * @param {*} value The value to check. 30970 * @returns {boolean} Returns `true` if `value` is a set, else `false`. 30971 * @example 30972 * 30973 * _.isSet(new Set); 30974 * // => true 30975 * 30976 * _.isSet(new WeakSet); 30977 * // => false 30978 */ 30979 var isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet; 30980 30981 /** 30982 * Checks if `value` is classified as a `String` primitive or object. 30983 * 30984 * @static 30985 * @since 0.1.0 30986 * @memberOf _ 30987 * @category Lang 30988 * @param {*} value The value to check. 30989 * @returns {boolean} Returns `true` if `value` is a string, else `false`. 30990 * @example 30991 * 30992 * _.isString('abc'); 30993 * // => true 30994 * 30995 * _.isString(1); 30996 * // => false 30997 */ 30998 function isString(value) { 30999 return typeof value == 'string' || 31000 (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag); 31001 } 31002 31003 /** 31004 * Checks if `value` is classified as a `Symbol` primitive or object. 31005 * 31006 * @static 31007 * @memberOf _ 31008 * @since 4.0.0 31009 * @category Lang 31010 * @param {*} value The value to check. 31011 * @returns {boolean} Returns `true` if `value` is a symbol, else `false`. 31012 * @example 31013 * 31014 * _.isSymbol(Symbol.iterator); 31015 * // => true 31016 * 31017 * _.isSymbol('abc'); 31018 * // => false 31019 */ 31020 function isSymbol(value) { 31021 return typeof value == 'symbol' || 31022 (isObjectLike(value) && baseGetTag(value) == symbolTag); 31023 } 31024 31025 /** 31026 * Checks if `value` is classified as a typed array. 31027 * 31028 * @static 31029 * @memberOf _ 31030 * @since 3.0.0 31031 * @category Lang 31032 * @param {*} value The value to check. 31033 * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. 31034 * @example 31035 * 31036 * _.isTypedArray(new Uint8Array); 31037 * // => true 31038 * 31039 * _.isTypedArray([]); 31040 * // => false 31041 */ 31042 var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray; 31043 31044 /** 31045 * Checks if `value` is `undefined`. 31046 * 31047 * @static 31048 * @since 0.1.0 31049 * @memberOf _ 31050 * @category Lang 31051 * @param {*} value The value to check. 31052 * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`. 31053 * @example 31054 * 31055 * _.isUndefined(void 0); 31056 * // => true 31057 * 31058 * _.isUndefined(null); 31059 * // => false 31060 */ 31061 function isUndefined(value) { 31062 return value === undefined; 31063 } 31064 31065 /** 31066 * Checks if `value` is classified as a `WeakMap` object. 31067 * 31068 * @static 31069 * @memberOf _ 31070 * @since 4.3.0 31071 * @category Lang 31072 * @param {*} value The value to check. 31073 * @returns {boolean} Returns `true` if `value` is a weak map, else `false`. 31074 * @example 31075 * 31076 * _.isWeakMap(new WeakMap); 31077 * // => true 31078 * 31079 * _.isWeakMap(new Map); 31080 * // => false 31081 */ 31082 function isWeakMap(value) { 31083 return isObjectLike(value) && getTag(value) == weakMapTag; 31084 } 31085 31086 /** 31087 * Checks if `value` is classified as a `WeakSet` object. 31088 * 31089 * @static 31090 * @memberOf _ 31091 * @since 4.3.0 31092 * @category Lang 31093 * @param {*} value The value to check. 31094 * @returns {boolean} Returns `true` if `value` is a weak set, else `false`. 31095 * @example 31096 * 31097 * _.isWeakSet(new WeakSet); 31098 * // => true 31099 * 31100 * _.isWeakSet(new Set); 31101 * // => false 31102 */ 31103 function isWeakSet(value) { 31104 return isObjectLike(value) && baseGetTag(value) == weakSetTag; 31105 } 31106 31107 /** 31108 * Checks if `value` is less than `other`. 31109 * 31110 * @static 31111 * @memberOf _ 31112 * @since 3.9.0 31113 * @category Lang 31114 * @param {*} value The value to compare. 31115 * @param {*} other The other value to compare. 31116 * @returns {boolean} Returns `true` if `value` is less than `other`, 31117 * else `false`. 31118 * @see _.gt 31119 * @example 31120 * 31121 * _.lt(1, 3); 31122 * // => true 31123 * 31124 * _.lt(3, 3); 31125 * // => false 31126 * 31127 * _.lt(3, 1); 31128 * // => false 31129 */ 31130 var lt = createRelationalOperation(baseLt); 31131 31132 /** 31133 * Checks if `value` is less than or equal to `other`. 31134 * 31135 * @static 31136 * @memberOf _ 31137 * @since 3.9.0 31138 * @category Lang 31139 * @param {*} value The value to compare. 31140 * @param {*} other The other value to compare. 31141 * @returns {boolean} Returns `true` if `value` is less than or equal to 31142 * `other`, else `false`. 31143 * @see _.gte 31144 * @example 31145 * 31146 * _.lte(1, 3); 31147 * // => true 31148 * 31149 * _.lte(3, 3); 31150 * // => true 31151 * 31152 * _.lte(3, 1); 31153 * // => false 31154 */ 31155 var lte = createRelationalOperation(function(value, other) { 31156 return value <= other; 31157 }); 31158 31159 /** 31160 * Converts `value` to an array. 31161 * 31162 * @static 31163 * @since 0.1.0 31164 * @memberOf _ 31165 * @category Lang 31166 * @param {*} value The value to convert. 31167 * @returns {Array} Returns the converted array. 31168 * @example 31169 * 31170 * _.toArray({ 'a': 1, 'b': 2 }); 31171 * // => [1, 2] 31172 * 31173 * _.toArray('abc'); 31174 * // => ['a', 'b', 'c'] 31175 * 31176 * _.toArray(1); 31177 * // => [] 31178 * 31179 * _.toArray(null); 31180 * // => [] 31181 */ 31182 function toArray(value) { 31183 if (!value) { 31184 return []; 31185 } 31186 if (isArrayLike(value)) { 31187 return isString(value) ? stringToArray(value) : copyArray(value); 31188 } 31189 if (symIterator && value[symIterator]) { 31190 return iteratorToArray(value[symIterator]()); 31191 } 31192 var tag = getTag(value), 31193 func = tag == mapTag ? mapToArray : (tag == setTag ? setToArray : values); 31194 31195 return func(value); 31196 } 31197 31198 /** 31199 * Converts `value` to a finite number. 31200 * 31201 * @static 31202 * @memberOf _ 31203 * @since 4.12.0 31204 * @category Lang 31205 * @param {*} value The value to convert. 31206 * @returns {number} Returns the converted number. 31207 * @example 31208 * 31209 * _.toFinite(3.2); 31210 * // => 3.2 31211 * 31212 * _.toFinite(Number.MIN_VALUE); 31213 * // => 5e-324 31214 * 31215 * _.toFinite(Infinity); 31216 * // => 1.7976931348623157e+308 31217 * 31218 * _.toFinite('3.2'); 31219 * // => 3.2 31220 */ 31221 function toFinite(value) { 31222 if (!value) { 31223 return value === 0 ? value : 0; 31224 } 31225 value = toNumber(value); 31226 if (value === INFINITY || value === -INFINITY) { 31227 var sign = (value < 0 ? -1 : 1); 31228 return sign * MAX_INTEGER; 31229 } 31230 return value === value ? value : 0; 31231 } 31232 31233 /** 31234 * Converts `value` to an integer. 31235 * 31236 * **Note:** This method is loosely based on 31237 * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger). 31238 * 31239 * @static 31240 * @memberOf _ 31241 * @since 4.0.0 31242 * @category Lang 31243 * @param {*} value The value to convert. 31244 * @returns {number} Returns the converted integer. 31245 * @example 31246 * 31247 * _.toInteger(3.2); 31248 * // => 3 31249 * 31250 * _.toInteger(Number.MIN_VALUE); 31251 * // => 0 31252 * 31253 * _.toInteger(Infinity); 31254 * // => 1.7976931348623157e+308 31255 * 31256 * _.toInteger('3.2'); 31257 * // => 3 31258 */ 31259 function toInteger(value) { 31260 var result = toFinite(value), 31261 remainder = result % 1; 31262 31263 return result === result ? (remainder ? result - remainder : result) : 0; 31264 } 31265 31266 /** 31267 * Converts `value` to an integer suitable for use as the length of an 31268 * array-like object. 31269 * 31270 * **Note:** This method is based on 31271 * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength). 31272 * 31273 * @static 31274 * @memberOf _ 31275 * @since 4.0.0 31276 * @category Lang 31277 * @param {*} value The value to convert. 31278 * @returns {number} Returns the converted integer. 31279 * @example 31280 * 31281 * _.toLength(3.2); 31282 * // => 3 31283 * 31284 * _.toLength(Number.MIN_VALUE); 31285 * // => 0 31286 * 31287 * _.toLength(Infinity); 31288 * // => 4294967295 31289 * 31290 * _.toLength('3.2'); 31291 * // => 3 31292 */ 31293 function toLength(value) { 31294 return value ? baseClamp(toInteger(value), 0, MAX_ARRAY_LENGTH) : 0; 31295 } 31296 31297 /** 31298 * Converts `value` to a number. 31299 * 31300 * @static 31301 * @memberOf _ 31302 * @since 4.0.0 31303 * @category Lang 31304 * @param {*} value The value to process. 31305 * @returns {number} Returns the number. 31306 * @example 31307 * 31308 * _.toNumber(3.2); 31309 * // => 3.2 31310 * 31311 * _.toNumber(Number.MIN_VALUE); 31312 * // => 5e-324 31313 * 31314 * _.toNumber(Infinity); 31315 * // => Infinity 31316 * 31317 * _.toNumber('3.2'); 31318 * // => 3.2 31319 */ 31320 function toNumber(value) { 31321 if (typeof value == 'number') { 31322 return value; 31323 } 31324 if (isSymbol(value)) { 31325 return NAN; 31326 } 31327 if (isObject(value)) { 31328 var other = typeof value.valueOf == 'function' ? value.valueOf() : value; 31329 value = isObject(other) ? (other + '') : other; 31330 } 31331 if (typeof value != 'string') { 31332 return value === 0 ? value : +value; 31333 } 31334 value = baseTrim(value); 31335 var isBinary = reIsBinary.test(value); 31336 return (isBinary || reIsOctal.test(value)) 31337 ? freeParseInt(value.slice(2), isBinary ? 2 : 8) 31338 : (reIsBadHex.test(value) ? NAN : +value); 31339 } 31340 31341 /** 31342 * Converts `value` to a plain object flattening inherited enumerable string 31343 * keyed properties of `value` to own properties of the plain object. 31344 * 31345 * @static 31346 * @memberOf _ 31347 * @since 3.0.0 31348 * @category Lang 31349 * @param {*} value The value to convert. 31350 * @returns {Object} Returns the converted plain object. 31351 * @example 31352 * 31353 * function Foo() { 31354 * this.b = 2; 31355 * } 31356 * 31357 * Foo.prototype.c = 3; 31358 * 31359 * _.assign({ 'a': 1 }, new Foo); 31360 * // => { 'a': 1, 'b': 2 } 31361 * 31362 * _.assign({ 'a': 1 }, _.toPlainObject(new Foo)); 31363 * // => { 'a': 1, 'b': 2, 'c': 3 } 31364 */ 31365 function toPlainObject(value) { 31366 return copyObject(value, keysIn(value)); 31367 } 31368 31369 /** 31370 * Converts `value` to a safe integer. A safe integer can be compared and 31371 * represented correctly. 31372 * 31373 * @static 31374 * @memberOf _ 31375 * @since 4.0.0 31376 * @category Lang 31377 * @param {*} value The value to convert. 31378 * @returns {number} Returns the converted integer. 31379 * @example 31380 * 31381 * _.toSafeInteger(3.2); 31382 * // => 3 31383 * 31384 * _.toSafeInteger(Number.MIN_VALUE); 31385 * // => 0 31386 * 31387 * _.toSafeInteger(Infinity); 31388 * // => 9007199254740991 31389 * 31390 * _.toSafeInteger('3.2'); 31391 * // => 3 31392 */ 31393 function toSafeInteger(value) { 31394 return value 31395 ? baseClamp(toInteger(value), -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER) 31396 : (value === 0 ? value : 0); 31397 } 31398 31399 /** 31400 * Converts `value` to a string. An empty string is returned for `null` 31401 * and `undefined` values. The sign of `-0` is preserved. 31402 * 31403 * @static 31404 * @memberOf _ 31405 * @since 4.0.0 31406 * @category Lang 31407 * @param {*} value The value to convert. 31408 * @returns {string} Returns the converted string. 31409 * @example 31410 * 31411 * _.toString(null); 31412 * // => '' 31413 * 31414 * _.toString(-0); 31415 * // => '-0' 31416 * 31417 * _.toString([1, 2, 3]); 31418 * // => '1,2,3' 31419 */ 31420 function toString(value) { 31421 return value == null ? '' : baseToString(value); 31422 } 31423 31424 /*------------------------------------------------------------------------*/ 31425 31426 /** 31427 * Assigns own enumerable string keyed properties of source objects to the 31428 * destination object. Source objects are applied from left to right. 31429 * Subsequent sources overwrite property assignments of previous sources. 31430 * 31431 * **Note:** This method mutates `object` and is loosely based on 31432 * [`Object.assign`](https://mdn.io/Object/assign). 31433 * 31434 * @static 31435 * @memberOf _ 31436 * @since 0.10.0 31437 * @category Object 31438 * @param {Object} object The destination object. 31439 * @param {...Object} [sources] The source objects. 31440 * @returns {Object} Returns `object`. 31441 * @see _.assignIn 31442 * @example 31443 * 31444 * function Foo() { 31445 * this.a = 1; 31446 * } 31447 * 31448 * function Bar() { 31449 * this.c = 3; 31450 * } 31451 * 31452 * Foo.prototype.b = 2; 31453 * Bar.prototype.d = 4; 31454 * 31455 * _.assign({ 'a': 0 }, new Foo, new Bar); 31456 * // => { 'a': 1, 'c': 3 } 31457 */ 31458 var assign = createAssigner(function(object, source) { 31459 if (isPrototype(source) || isArrayLike(source)) { 31460 copyObject(source, keys(source), object); 31461 return; 31462 } 31463 for (var key in source) { 31464 if (hasOwnProperty.call(source, key)) { 31465 assignValue(object, key, source[key]); 31466 } 31467 } 31468 }); 31469 31470 /** 31471 * This method is like `_.assign` except that it iterates over own and 31472 * inherited source properties. 31473 * 31474 * **Note:** This method mutates `object`. 31475 * 31476 * @static 31477 * @memberOf _ 31478 * @since 4.0.0 31479 * @alias extend 31480 * @category Object 31481 * @param {Object} object The destination object. 31482 * @param {...Object} [sources] The source objects. 31483 * @returns {Object} Returns `object`. 31484 * @see _.assign 31485 * @example 31486 * 31487 * function Foo() { 31488 * this.a = 1; 31489 * } 31490 * 31491 * function Bar() { 31492 * this.c = 3; 31493 * } 31494 * 31495 * Foo.prototype.b = 2; 31496 * Bar.prototype.d = 4; 31497 * 31498 * _.assignIn({ 'a': 0 }, new Foo, new Bar); 31499 * // => { 'a': 1, 'b': 2, 'c': 3, 'd': 4 } 31500 */ 31501 var assignIn = createAssigner(function(object, source) { 31502 copyObject(source, keysIn(source), object); 31503 }); 31504 31505 /** 31506 * This method is like `_.assignIn` except that it accepts `customizer` 31507 * which is invoked to produce the assigned values. If `customizer` returns 31508 * `undefined`, assignment is handled by the method instead. The `customizer` 31509 * is invoked with five arguments: (objValue, srcValue, key, object, source). 31510 * 31511 * **Note:** This method mutates `object`. 31512 * 31513 * @static 31514 * @memberOf _ 31515 * @since 4.0.0 31516 * @alias extendWith 31517 * @category Object 31518 * @param {Object} object The destination object. 31519 * @param {...Object} sources The source objects. 31520 * @param {Function} [customizer] The function to customize assigned values. 31521 * @returns {Object} Returns `object`. 31522 * @see _.assignWith 31523 * @example 31524 * 31525 * function customizer(objValue, srcValue) { 31526 * return _.isUndefined(objValue) ? srcValue : objValue; 31527 * } 31528 * 31529 * var defaults = _.partialRight(_.assignInWith, customizer); 31530 * 31531 * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 }); 31532 * // => { 'a': 1, 'b': 2 } 31533 */ 31534 var assignInWith = createAssigner(function(object, source, srcIndex, customizer) { 31535 copyObject(source, keysIn(source), object, customizer); 31536 }); 31537 31538 /** 31539 * This method is like `_.assign` except that it accepts `customizer` 31540 * which is invoked to produce the assigned values. If `customizer` returns 31541 * `undefined`, assignment is handled by the method instead. The `customizer` 31542 * is invoked with five arguments: (objValue, srcValue, key, object, source). 31543 * 31544 * **Note:** This method mutates `object`. 31545 * 31546 * @static 31547 * @memberOf _ 31548 * @since 4.0.0 31549 * @category Object 31550 * @param {Object} object The destination object. 31551 * @param {...Object} sources The source objects. 31552 * @param {Function} [customizer] The function to customize assigned values. 31553 * @returns {Object} Returns `object`. 31554 * @see _.assignInWith 31555 * @example 31556 * 31557 * function customizer(objValue, srcValue) { 31558 * return _.isUndefined(objValue) ? srcValue : objValue; 31559 * } 31560 * 31561 * var defaults = _.partialRight(_.assignWith, customizer); 31562 * 31563 * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 }); 31564 * // => { 'a': 1, 'b': 2 } 31565 */ 31566 var assignWith = createAssigner(function(object, source, srcIndex, customizer) { 31567 copyObject(source, keys(source), object, customizer); 31568 }); 31569 31570 /** 31571 * Creates an array of values corresponding to `paths` of `object`. 31572 * 31573 * @static 31574 * @memberOf _ 31575 * @since 1.0.0 31576 * @category Object 31577 * @param {Object} object The object to iterate over. 31578 * @param {...(string|string[])} [paths] The property paths to pick. 31579 * @returns {Array} Returns the picked values. 31580 * @example 31581 * 31582 * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] }; 31583 * 31584 * _.at(object, ['a[0].b.c', 'a[1]']); 31585 * // => [3, 4] 31586 */ 31587 var at = flatRest(baseAt); 31588 31589 /** 31590 * Creates an object that inherits from the `prototype` object. If a 31591 * `properties` object is given, its own enumerable string keyed properties 31592 * are assigned to the created object. 31593 * 31594 * @static 31595 * @memberOf _ 31596 * @since 2.3.0 31597 * @category Object 31598 * @param {Object} prototype The object to inherit from. 31599 * @param {Object} [properties] The properties to assign to the object. 31600 * @returns {Object} Returns the new object. 31601 * @example 31602 * 31603 * function Shape() { 31604 * this.x = 0; 31605 * this.y = 0; 31606 * } 31607 * 31608 * function Circle() { 31609 * Shape.call(this); 31610 * } 31611 * 31612 * Circle.prototype = _.create(Shape.prototype, { 31613 * 'constructor': Circle 31614 * }); 31615 * 31616 * var circle = new Circle; 31617 * circle instanceof Circle; 31618 * // => true 31619 * 31620 * circle instanceof Shape; 31621 * // => true 31622 */ 31623 function create(prototype, properties) { 31624 var result = baseCreate(prototype); 31625 return properties == null ? result : baseAssign(result, properties); 31626 } 31627 31628 /** 31629 * Assigns own and inherited enumerable string keyed properties of source 31630 * objects to the destination object for all destination properties that 31631 * resolve to `undefined`. Source objects are applied from left to right. 31632 * Once a property is set, additional values of the same property are ignored. 31633 * 31634 * **Note:** This method mutates `object`. 31635 * 31636 * @static 31637 * @since 0.1.0 31638 * @memberOf _ 31639 * @category Object 31640 * @param {Object} object The destination object. 31641 * @param {...Object} [sources] The source objects. 31642 * @returns {Object} Returns `object`. 31643 * @see _.defaultsDeep 31644 * @example 31645 * 31646 * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 }); 31647 * // => { 'a': 1, 'b': 2 } 31648 */ 31649 var defaults = baseRest(function(object, sources) { 31650 object = Object(object); 31651 31652 var index = -1; 31653 var length = sources.length; 31654 var guard = length > 2 ? sources[2] : undefined; 31655 31656 if (guard && isIterateeCall(sources[0], sources[1], guard)) { 31657 length = 1; 31658 } 31659 31660 while (++index < length) { 31661 var source = sources[index]; 31662 var props = keysIn(source); 31663 var propsIndex = -1; 31664 var propsLength = props.length; 31665 31666 while (++propsIndex < propsLength) { 31667 var key = props[propsIndex]; 31668 var value = object[key]; 31669 31670 if (value === undefined || 31671 (eq(value, objectProto[key]) && !hasOwnProperty.call(object, key))) { 31672 object[key] = source[key]; 31673 } 31674 } 31675 } 31676 31677 return object; 31678 }); 31679 31680 /** 31681 * This method is like `_.defaults` except that it recursively assigns 31682 * default properties. 31683 * 31684 * **Note:** This method mutates `object`. 31685 * 31686 * @static 31687 * @memberOf _ 31688 * @since 3.10.0 31689 * @category Object 31690 * @param {Object} object The destination object. 31691 * @param {...Object} [sources] The source objects. 31692 * @returns {Object} Returns `object`. 31693 * @see _.defaults 31694 * @example 31695 * 31696 * _.defaultsDeep({ 'a': { 'b': 2 } }, { 'a': { 'b': 1, 'c': 3 } }); 31697 * // => { 'a': { 'b': 2, 'c': 3 } } 31698 */ 31699 var defaultsDeep = baseRest(function(args) { 31700 args.push(undefined, customDefaultsMerge); 31701 return apply(mergeWith, undefined, args); 31702 }); 31703 31704 /** 31705 * This method is like `_.find` except that it returns the key of the first 31706 * element `predicate` returns truthy for instead of the element itself. 31707 * 31708 * @static 31709 * @memberOf _ 31710 * @since 1.1.0 31711 * @category Object 31712 * @param {Object} object The object to inspect. 31713 * @param {Function} [predicate=_.identity] The function invoked per iteration. 31714 * @returns {string|undefined} Returns the key of the matched element, 31715 * else `undefined`. 31716 * @example 31717 * 31718 * var users = { 31719 * 'barney': { 'age': 36, 'active': true }, 31720 * 'fred': { 'age': 40, 'active': false }, 31721 * 'pebbles': { 'age': 1, 'active': true } 31722 * }; 31723 * 31724 * _.findKey(users, function(o) { return o.age < 40; }); 31725 * // => 'barney' (iteration order is not guaranteed) 31726 * 31727 * // The `_.matches` iteratee shorthand. 31728 * _.findKey(users, { 'age': 1, 'active': true }); 31729 * // => 'pebbles' 31730 * 31731 * // The `_.matchesProperty` iteratee shorthand. 31732 * _.findKey(users, ['active', false]); 31733 * // => 'fred' 31734 * 31735 * // The `_.property` iteratee shorthand. 31736 * _.findKey(users, 'active'); 31737 * // => 'barney' 31738 */ 31739 function findKey(object, predicate) { 31740 return baseFindKey(object, getIteratee(predicate, 3), baseForOwn); 31741 } 31742 31743 /** 31744 * This method is like `_.findKey` except that it iterates over elements of 31745 * a collection in the opposite order. 31746 * 31747 * @static 31748 * @memberOf _ 31749 * @since 2.0.0 31750 * @category Object 31751 * @param {Object} object The object to inspect. 31752 * @param {Function} [predicate=_.identity] The function invoked per iteration. 31753 * @returns {string|undefined} Returns the key of the matched element, 31754 * else `undefined`. 31755 * @example 31756 * 31757 * var users = { 31758 * 'barney': { 'age': 36, 'active': true }, 31759 * 'fred': { 'age': 40, 'active': false }, 31760 * 'pebbles': { 'age': 1, 'active': true } 31761 * }; 31762 * 31763 * _.findLastKey(users, function(o) { return o.age < 40; }); 31764 * // => returns 'pebbles' assuming `_.findKey` returns 'barney' 31765 * 31766 * // The `_.matches` iteratee shorthand. 31767 * _.findLastKey(users, { 'age': 36, 'active': true }); 31768 * // => 'barney' 31769 * 31770 * // The `_.matchesProperty` iteratee shorthand. 31771 * _.findLastKey(users, ['active', false]); 31772 * // => 'fred' 31773 * 31774 * // The `_.property` iteratee shorthand. 31775 * _.findLastKey(users, 'active'); 31776 * // => 'pebbles' 31777 */ 31778 function findLastKey(object, predicate) { 31779 return baseFindKey(object, getIteratee(predicate, 3), baseForOwnRight); 31780 } 31781 31782 /** 31783 * Iterates over own and inherited enumerable string keyed properties of an 31784 * object and invokes `iteratee` for each property. The iteratee is invoked 31785 * with three arguments: (value, key, object). Iteratee functions may exit 31786 * iteration early by explicitly returning `false`. 31787 * 31788 * @static 31789 * @memberOf _ 31790 * @since 0.3.0 31791 * @category Object 31792 * @param {Object} object The object to iterate over. 31793 * @param {Function} [iteratee=_.identity] The function invoked per iteration. 31794 * @returns {Object} Returns `object`. 31795 * @see _.forInRight 31796 * @example 31797 * 31798 * function Foo() { 31799 * this.a = 1; 31800 * this.b = 2; 31801 * } 31802 * 31803 * Foo.prototype.c = 3; 31804 * 31805 * _.forIn(new Foo, function(value, key) { 31806 * console.log(key); 31807 * }); 31808 * // => Logs 'a', 'b', then 'c' (iteration order is not guaranteed). 31809 */ 31810 function forIn(object, iteratee) { 31811 return object == null 31812 ? object 31813 : baseFor(object, getIteratee(iteratee, 3), keysIn); 31814 } 31815 31816 /** 31817 * This method is like `_.forIn` except that it iterates over properties of 31818 * `object` in the opposite order. 31819 * 31820 * @static 31821 * @memberOf _ 31822 * @since 2.0.0 31823 * @category Object 31824 * @param {Object} object The object to iterate over. 31825 * @param {Function} [iteratee=_.identity] The function invoked per iteration. 31826 * @returns {Object} Returns `object`. 31827 * @see _.forIn 31828 * @example 31829 * 31830 * function Foo() { 31831 * this.a = 1; 31832 * this.b = 2; 31833 * } 31834 * 31835 * Foo.prototype.c = 3; 31836 * 31837 * _.forInRight(new Foo, function(value, key) { 31838 * console.log(key); 31839 * }); 31840 * // => Logs 'c', 'b', then 'a' assuming `_.forIn` logs 'a', 'b', then 'c'. 31841 */ 31842 function forInRight(object, iteratee) { 31843 return object == null 31844 ? object 31845 : baseForRight(object, getIteratee(iteratee, 3), keysIn); 31846 } 31847 31848 /** 31849 * Iterates over own enumerable string keyed properties of an object and 31850 * invokes `iteratee` for each property. The iteratee is invoked with three 31851 * arguments: (value, key, object). Iteratee functions may exit iteration 31852 * early by explicitly returning `false`. 31853 * 31854 * @static 31855 * @memberOf _ 31856 * @since 0.3.0 31857 * @category Object 31858 * @param {Object} object The object to iterate over. 31859 * @param {Function} [iteratee=_.identity] The function invoked per iteration. 31860 * @returns {Object} Returns `object`. 31861 * @see _.forOwnRight 31862 * @example 31863 * 31864 * function Foo() { 31865 * this.a = 1; 31866 * this.b = 2; 31867 * } 31868 * 31869 * Foo.prototype.c = 3; 31870 * 31871 * _.forOwn(new Foo, function(value, key) { 31872 * console.log(key); 31873 * }); 31874 * // => Logs 'a' then 'b' (iteration order is not guaranteed). 31875 */ 31876 function forOwn(object, iteratee) { 31877 return object && baseForOwn(object, getIteratee(iteratee, 3)); 31878 } 31879 31880 /** 31881 * This method is like `_.forOwn` except that it iterates over properties of 31882 * `object` in the opposite order. 31883 * 31884 * @static 31885 * @memberOf _ 31886 * @since 2.0.0 31887 * @category Object 31888 * @param {Object} object The object to iterate over. 31889 * @param {Function} [iteratee=_.identity] The function invoked per iteration. 31890 * @returns {Object} Returns `object`. 31891 * @see _.forOwn 31892 * @example 31893 * 31894 * function Foo() { 31895 * this.a = 1; 31896 * this.b = 2; 31897 * } 31898 * 31899 * Foo.prototype.c = 3; 31900 * 31901 * _.forOwnRight(new Foo, function(value, key) { 31902 * console.log(key); 31903 * }); 31904 * // => Logs 'b' then 'a' assuming `_.forOwn` logs 'a' then 'b'. 31905 */ 31906 function forOwnRight(object, iteratee) { 31907 return object && baseForOwnRight(object, getIteratee(iteratee, 3)); 31908 } 31909 31910 /** 31911 * Creates an array of function property names from own enumerable properties 31912 * of `object`. 31913 * 31914 * @static 31915 * @since 0.1.0 31916 * @memberOf _ 31917 * @category Object 31918 * @param {Object} object The object to inspect. 31919 * @returns {Array} Returns the function names. 31920 * @see _.functionsIn 31921 * @example 31922 * 31923 * function Foo() { 31924 * this.a = _.constant('a'); 31925 * this.b = _.constant('b'); 31926 * } 31927 * 31928 * Foo.prototype.c = _.constant('c'); 31929 * 31930 * _.functions(new Foo); 31931 * // => ['a', 'b'] 31932 */ 31933 function functions(object) { 31934 return object == null ? [] : baseFunctions(object, keys(object)); 31935 } 31936 31937 /** 31938 * Creates an array of function property names from own and inherited 31939 * enumerable properties of `object`. 31940 * 31941 * @static 31942 * @memberOf _ 31943 * @since 4.0.0 31944 * @category Object 31945 * @param {Object} object The object to inspect. 31946 * @returns {Array} Returns the function names. 31947 * @see _.functions 31948 * @example 31949 * 31950 * function Foo() { 31951 * this.a = _.constant('a'); 31952 * this.b = _.constant('b'); 31953 * } 31954 * 31955 * Foo.prototype.c = _.constant('c'); 31956 * 31957 * _.functionsIn(new Foo); 31958 * // => ['a', 'b', 'c'] 31959 */ 31960 function functionsIn(object) { 31961 return object == null ? [] : baseFunctions(object, keysIn(object)); 31962 } 31963 31964 /** 31965 * Gets the value at `path` of `object`. If the resolved value is 31966 * `undefined`, the `defaultValue` is returned in its place. 31967 * 31968 * @static 31969 * @memberOf _ 31970 * @since 3.7.0 31971 * @category Object 31972 * @param {Object} object The object to query. 31973 * @param {Array|string} path The path of the property to get. 31974 * @param {*} [defaultValue] The value returned for `undefined` resolved values. 31975 * @returns {*} Returns the resolved value. 31976 * @example 31977 * 31978 * var object = { 'a': [{ 'b': { 'c': 3 } }] }; 31979 * 31980 * _.get(object, 'a[0].b.c'); 31981 * // => 3 31982 * 31983 * _.get(object, ['a', '0', 'b', 'c']); 31984 * // => 3 31985 * 31986 * _.get(object, 'a.b.c', 'default'); 31987 * // => 'default' 31988 */ 31989 function get(object, path, defaultValue) { 31990 var result = object == null ? undefined : baseGet(object, path); 31991 return result === undefined ? defaultValue : result; 31992 } 31993 31994 /** 31995 * Checks if `path` is a direct property of `object`. 31996 * 31997 * @static 31998 * @since 0.1.0 31999 * @memberOf _ 32000 * @category Object 32001 * @param {Object} object The object to query. 32002 * @param {Array|string} path The path to check. 32003 * @returns {boolean} Returns `true` if `path` exists, else `false`. 32004 * @example 32005 * 32006 * var object = { 'a': { 'b': 2 } }; 32007 * var other = _.create({ 'a': _.create({ 'b': 2 }) }); 32008 * 32009 * _.has(object, 'a'); 32010 * // => true 32011 * 32012 * _.has(object, 'a.b'); 32013 * // => true 32014 * 32015 * _.has(object, ['a', 'b']); 32016 * // => true 32017 * 32018 * _.has(other, 'a'); 32019 * // => false 32020 */ 32021 function has(object, path) { 32022 return object != null && hasPath(object, path, baseHas); 32023 } 32024 32025 /** 32026 * Checks if `path` is a direct or inherited property of `object`. 32027 * 32028 * @static 32029 * @memberOf _ 32030 * @since 4.0.0 32031 * @category Object 32032 * @param {Object} object The object to query. 32033 * @param {Array|string} path The path to check. 32034 * @returns {boolean} Returns `true` if `path` exists, else `false`. 32035 * @example 32036 * 32037 * var object = _.create({ 'a': _.create({ 'b': 2 }) }); 32038 * 32039 * _.hasIn(object, 'a'); 32040 * // => true 32041 * 32042 * _.hasIn(object, 'a.b'); 32043 * // => true 32044 * 32045 * _.hasIn(object, ['a', 'b']); 32046 * // => true 32047 * 32048 * _.hasIn(object, 'b'); 32049 * // => false 32050 */ 32051 function hasIn(object, path) { 32052 return object != null && hasPath(object, path, baseHasIn); 32053 } 32054 32055 /** 32056 * Creates an object composed of the inverted keys and values of `object`. 32057 * If `object` contains duplicate values, subsequent values overwrite 32058 * property assignments of previous values. 32059 * 32060 * @static 32061 * @memberOf _ 32062 * @since 0.7.0 32063 * @category Object 32064 * @param {Object} object The object to invert. 32065 * @returns {Object} Returns the new inverted object. 32066 * @example 32067 * 32068 * var object = { 'a': 1, 'b': 2, 'c': 1 }; 32069 * 32070 * _.invert(object); 32071 * // => { '1': 'c', '2': 'b' } 32072 */ 32073 var invert = createInverter(function(result, value, key) { 32074 if (value != null && 32075 typeof value.toString != 'function') { 32076 value = nativeObjectToString.call(value); 32077 } 32078 32079 result[value] = key; 32080 }, constant(identity)); 32081 32082 /** 32083 * This method is like `_.invert` except that the inverted object is generated 32084 * from the results of running each element of `object` thru `iteratee`. The 32085 * corresponding inverted value of each inverted key is an array of keys 32086 * responsible for generating the inverted value. The iteratee is invoked 32087 * with one argument: (value). 32088 * 32089 * @static 32090 * @memberOf _ 32091 * @since 4.1.0 32092 * @category Object 32093 * @param {Object} object The object to invert. 32094 * @param {Function} [iteratee=_.identity] The iteratee invoked per element. 32095 * @returns {Object} Returns the new inverted object. 32096 * @example 32097 * 32098 * var object = { 'a': 1, 'b': 2, 'c': 1 }; 32099 * 32100 * _.invertBy(object); 32101 * // => { '1': ['a', 'c'], '2': ['b'] } 32102 * 32103 * _.invertBy(object, function(value) { 32104 * return 'group' + value; 32105 * }); 32106 * // => { 'group1': ['a', 'c'], 'group2': ['b'] } 32107 */ 32108 var invertBy = createInverter(function(result, value, key) { 32109 if (value != null && 32110 typeof value.toString != 'function') { 32111 value = nativeObjectToString.call(value); 32112 } 32113 32114 if (hasOwnProperty.call(result, value)) { 32115 result[value].push(key); 32116 } else { 32117 result[value] = [key]; 32118 } 32119 }, getIteratee); 32120 32121 /** 32122 * Invokes the method at `path` of `object`. 32123 * 32124 * @static 32125 * @memberOf _ 32126 * @since 4.0.0 32127 * @category Object 32128 * @param {Object} object The object to query. 32129 * @param {Array|string} path The path of the method to invoke. 32130 * @param {...*} [args] The arguments to invoke the method with. 32131 * @returns {*} Returns the result of the invoked method. 32132 * @example 32133 * 32134 * var object = { 'a': [{ 'b': { 'c': [1, 2, 3, 4] } }] }; 32135 * 32136 * _.invoke(object, 'a[0].b.c.slice', 1, 3); 32137 * // => [2, 3] 32138 */ 32139 var invoke = baseRest(baseInvoke); 32140 32141 /** 32142 * Creates an array of the own enumerable property names of `object`. 32143 * 32144 * **Note:** Non-object values are coerced to objects. See the 32145 * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) 32146 * for more details. 32147 * 32148 * @static 32149 * @since 0.1.0 32150 * @memberOf _ 32151 * @category Object 32152 * @param {Object} object The object to query. 32153 * @returns {Array} Returns the array of property names. 32154 * @example 32155 * 32156 * function Foo() { 32157 * this.a = 1; 32158 * this.b = 2; 32159 * } 32160 * 32161 * Foo.prototype.c = 3; 32162 * 32163 * _.keys(new Foo); 32164 * // => ['a', 'b'] (iteration order is not guaranteed) 32165 * 32166 * _.keys('hi'); 32167 * // => ['0', '1'] 32168 */ 32169 function keys(object) { 32170 return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object); 32171 } 32172 32173 /** 32174 * Creates an array of the own and inherited enumerable property names of `object`. 32175 * 32176 * **Note:** Non-object values are coerced to objects. 32177 * 32178 * @static 32179 * @memberOf _ 32180 * @since 3.0.0 32181 * @category Object 32182 * @param {Object} object The object to query. 32183 * @returns {Array} Returns the array of property names. 32184 * @example 32185 * 32186 * function Foo() { 32187 * this.a = 1; 32188 * this.b = 2; 32189 * } 32190 * 32191 * Foo.prototype.c = 3; 32192 * 32193 * _.keysIn(new Foo); 32194 * // => ['a', 'b', 'c'] (iteration order is not guaranteed) 32195 */ 32196 function keysIn(object) { 32197 return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object); 32198 } 32199 32200 /** 32201 * The opposite of `_.mapValues`; this method creates an object with the 32202 * same values as `object` and keys generated by running each own enumerable 32203 * string keyed property of `object` thru `iteratee`. The iteratee is invoked 32204 * with three arguments: (value, key, object). 32205 * 32206 * @static 32207 * @memberOf _ 32208 * @since 3.8.0 32209 * @category Object 32210 * @param {Object} object The object to iterate over. 32211 * @param {Function} [iteratee=_.identity] The function invoked per iteration. 32212 * @returns {Object} Returns the new mapped object. 32213 * @see _.mapValues 32214 * @example 32215 * 32216 * _.mapKeys({ 'a': 1, 'b': 2 }, function(value, key) { 32217 * return key + value; 32218 * }); 32219 * // => { 'a1': 1, 'b2': 2 } 32220 */ 32221 function mapKeys(object, iteratee) { 32222 var result = {}; 32223 iteratee = getIteratee(iteratee, 3); 32224 32225 baseForOwn(object, function(value, key, object) { 32226 baseAssignValue(result, iteratee(value, key, object), value); 32227 }); 32228 return result; 32229 } 32230 32231 /** 32232 * Creates an object with the same keys as `object` and values generated 32233 * by running each own enumerable string keyed property of `object` thru 32234 * `iteratee`. The iteratee is invoked with three arguments: 32235 * (value, key, object). 32236 * 32237 * @static 32238 * @memberOf _ 32239 * @since 2.4.0 32240 * @category Object 32241 * @param {Object} object The object to iterate over. 32242 * @param {Function} [iteratee=_.identity] The function invoked per iteration. 32243 * @returns {Object} Returns the new mapped object. 32244 * @see _.mapKeys 32245 * @example 32246 * 32247 * var users = { 32248 * 'fred': { 'user': 'fred', 'age': 40 }, 32249 * 'pebbles': { 'user': 'pebbles', 'age': 1 } 32250 * }; 32251 * 32252 * _.mapValues(users, function(o) { return o.age; }); 32253 * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed) 32254 * 32255 * // The `_.property` iteratee shorthand. 32256 * _.mapValues(users, 'age'); 32257 * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed) 32258 */ 32259 function mapValues(object, iteratee) { 32260 var result = {}; 32261 iteratee = getIteratee(iteratee, 3); 32262 32263 baseForOwn(object, function(value, key, object) { 32264 baseAssignValue(result, key, iteratee(value, key, object)); 32265 }); 32266 return result; 32267 } 32268 32269 /** 32270 * This method is like `_.assign` except that it recursively merges own and 32271 * inherited enumerable string keyed properties of source objects into the 32272 * destination object. Source properties that resolve to `undefined` are 32273 * skipped if a destination value exists. Array and plain object properties 32274 * are merged recursively. Other objects and value types are overridden by 32275 * assignment. Source objects are applied from left to right. Subsequent 32276 * sources overwrite property assignments of previous sources. 32277 * 32278 * **Note:** This method mutates `object`. 32279 * 32280 * @static 32281 * @memberOf _ 32282 * @since 0.5.0 32283 * @category Object 32284 * @param {Object} object The destination object. 32285 * @param {...Object} [sources] The source objects. 32286 * @returns {Object} Returns `object`. 32287 * @example 32288 * 32289 * var object = { 32290 * 'a': [{ 'b': 2 }, { 'd': 4 }] 32291 * }; 32292 * 32293 * var other = { 32294 * 'a': [{ 'c': 3 }, { 'e': 5 }] 32295 * }; 32296 * 32297 * _.merge(object, other); 32298 * // => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] } 32299 */ 32300 var merge = createAssigner(function(object, source, srcIndex) { 32301 baseMerge(object, source, srcIndex); 32302 }); 32303 32304 /** 32305 * This method is like `_.merge` except that it accepts `customizer` which 32306 * is invoked to produce the merged values of the destination and source 32307 * properties. If `customizer` returns `undefined`, merging is handled by the 32308 * method instead. The `customizer` is invoked with six arguments: 32309 * (objValue, srcValue, key, object, source, stack). 32310 * 32311 * **Note:** This method mutates `object`. 32312 * 32313 * @static 32314 * @memberOf _ 32315 * @since 4.0.0 32316 * @category Object 32317 * @param {Object} object The destination object. 32318 * @param {...Object} sources The source objects. 32319 * @param {Function} customizer The function to customize assigned values. 32320 * @returns {Object} Returns `object`. 32321 * @example 32322 * 32323 * function customizer(objValue, srcValue) { 32324 * if (_.isArray(objValue)) { 32325 * return objValue.concat(srcValue); 32326 * } 32327 * } 32328 * 32329 * var object = { 'a': [1], 'b': [2] }; 32330 * var other = { 'a': [3], 'b': [4] }; 32331 * 32332 * _.mergeWith(object, other, customizer); 32333 * // => { 'a': [1, 3], 'b': [2, 4] } 32334 */ 32335 var mergeWith = createAssigner(function(object, source, srcIndex, customizer) { 32336 baseMerge(object, source, srcIndex, customizer); 32337 }); 32338 32339 /** 32340 * The opposite of `_.pick`; this method creates an object composed of the 32341 * own and inherited enumerable property paths of `object` that are not omitted. 32342 * 32343 * **Note:** This method is considerably slower than `_.pick`. 32344 * 32345 * @static 32346 * @since 0.1.0 32347 * @memberOf _ 32348 * @category Object 32349 * @param {Object} object The source object. 32350 * @param {...(string|string[])} [paths] The property paths to omit. 32351 * @returns {Object} Returns the new object. 32352 * @example 32353 * 32354 * var object = { 'a': 1, 'b': '2', 'c': 3 }; 32355 * 32356 * _.omit(object, ['a', 'c']); 32357 * // => { 'b': '2' } 32358 */ 32359 var omit = flatRest(function(object, paths) { 32360 var result = {}; 32361 if (object == null) { 32362 return result; 32363 } 32364 var isDeep = false; 32365 paths = arrayMap(paths, function(path) { 32366 path = castPath(path, object); 32367 isDeep || (isDeep = path.length > 1); 32368 return path; 32369 }); 32370 copyObject(object, getAllKeysIn(object), result); 32371 if (isDeep) { 32372 result = baseClone(result, CLONE_DEEP_FLAG | CLONE_FLAT_FLAG | CLONE_SYMBOLS_FLAG, customOmitClone); 32373 } 32374 var length = paths.length; 32375 while (length--) { 32376 baseUnset(result, paths[length]); 32377 } 32378 return result; 32379 }); 32380 32381 /** 32382 * The opposite of `_.pickBy`; this method creates an object composed of 32383 * the own and inherited enumerable string keyed properties of `object` that 32384 * `predicate` doesn't return truthy for. The predicate is invoked with two 32385 * arguments: (value, key). 32386 * 32387 * @static 32388 * @memberOf _ 32389 * @since 4.0.0 32390 * @category Object 32391 * @param {Object} object The source object. 32392 * @param {Function} [predicate=_.identity] The function invoked per property. 32393 * @returns {Object} Returns the new object. 32394 * @example 32395 * 32396 * var object = { 'a': 1, 'b': '2', 'c': 3 }; 32397 * 32398 * _.omitBy(object, _.isNumber); 32399 * // => { 'b': '2' } 32400 */ 32401 function omitBy(object, predicate) { 32402 return pickBy(object, negate(getIteratee(predicate))); 32403 } 32404 32405 /** 32406 * Creates an object composed of the picked `object` properties. 32407 * 32408 * @static 32409 * @since 0.1.0 32410 * @memberOf _ 32411 * @category Object 32412 * @param {Object} object The source object. 32413 * @param {...(string|string[])} [paths] The property paths to pick. 32414 * @returns {Object} Returns the new object. 32415 * @example 32416 * 32417 * var object = { 'a': 1, 'b': '2', 'c': 3 }; 32418 * 32419 * _.pick(object, ['a', 'c']); 32420 * // => { 'a': 1, 'c': 3 } 32421 */ 32422 var pick = flatRest(function(object, paths) { 32423 return object == null ? {} : basePick(object, paths); 32424 }); 32425 32426 /** 32427 * Creates an object composed of the `object` properties `predicate` returns 32428 * truthy for. The predicate is invoked with two arguments: (value, key). 32429 * 32430 * @static 32431 * @memberOf _ 32432 * @since 4.0.0 32433 * @category Object 32434 * @param {Object} object The source object. 32435 * @param {Function} [predicate=_.identity] The function invoked per property. 32436 * @returns {Object} Returns the new object. 32437 * @example 32438 * 32439 * var object = { 'a': 1, 'b': '2', 'c': 3 }; 32440 * 32441 * _.pickBy(object, _.isNumber); 32442 * // => { 'a': 1, 'c': 3 } 32443 */ 32444 function pickBy(object, predicate) { 32445 if (object == null) { 32446 return {}; 32447 } 32448 var props = arrayMap(getAllKeysIn(object), function(prop) { 32449 return [prop]; 32450 }); 32451 predicate = getIteratee(predicate); 32452 return basePickBy(object, props, function(value, path) { 32453 return predicate(value, path[0]); 32454 }); 32455 } 32456 32457 /** 32458 * This method is like `_.get` except that if the resolved value is a 32459 * function it's invoked with the `this` binding of its parent object and 32460 * its result is returned. 32461 * 32462 * @static 32463 * @since 0.1.0 32464 * @memberOf _ 32465 * @category Object 32466 * @param {Object} object The object to query. 32467 * @param {Array|string} path The path of the property to resolve. 32468 * @param {*} [defaultValue] The value returned for `undefined` resolved values. 32469 * @returns {*} Returns the resolved value. 32470 * @example 32471 * 32472 * var object = { 'a': [{ 'b': { 'c1': 3, 'c2': _.constant(4) } }] }; 32473 * 32474 * _.result(object, 'a[0].b.c1'); 32475 * // => 3 32476 * 32477 * _.result(object, 'a[0].b.c2'); 32478 * // => 4 32479 * 32480 * _.result(object, 'a[0].b.c3', 'default'); 32481 * // => 'default' 32482 * 32483 * _.result(object, 'a[0].b.c3', _.constant('default')); 32484 * // => 'default' 32485 */ 32486 function result(object, path, defaultValue) { 32487 path = castPath(path, object); 32488 32489 var index = -1, 32490 length = path.length; 32491 32492 // Ensure the loop is entered when path is empty. 32493 if (!length) { 32494 length = 1; 32495 object = undefined; 32496 } 32497 while (++index < length) { 32498 var value = object == null ? undefined : object[toKey(path[index])]; 32499 if (value === undefined) { 32500 index = length; 32501 value = defaultValue; 32502 } 32503 object = isFunction(value) ? value.call(object) : value; 32504 } 32505 return object; 32506 } 32507 32508 /** 32509 * Sets the value at `path` of `object`. If a portion of `path` doesn't exist, 32510 * it's created. Arrays are created for missing index properties while objects 32511 * are created for all other missing properties. Use `_.setWith` to customize 32512 * `path` creation. 32513 * 32514 * **Note:** This method mutates `object`. 32515 * 32516 * @static 32517 * @memberOf _ 32518 * @since 3.7.0 32519 * @category Object 32520 * @param {Object} object The object to modify. 32521 * @param {Array|string} path The path of the property to set. 32522 * @param {*} value The value to set. 32523 * @returns {Object} Returns `object`. 32524 * @example 32525 * 32526 * var object = { 'a': [{ 'b': { 'c': 3 } }] }; 32527 * 32528 * _.set(object, 'a[0].b.c', 4); 32529 * console.log(object.a[0].b.c); 32530 * // => 4 32531 * 32532 * _.set(object, ['x', '0', 'y', 'z'], 5); 32533 * console.log(object.x[0].y.z); 32534 * // => 5 32535 */ 32536 function set(object, path, value) { 32537 return object == null ? object : baseSet(object, path, value); 32538 } 32539 32540 /** 32541 * This method is like `_.set` except that it accepts `customizer` which is 32542 * invoked to produce the objects of `path`. If `customizer` returns `undefined` 32543 * path creation is handled by the method instead. The `customizer` is invoked 32544 * with three arguments: (nsValue, key, nsObject). 32545 * 32546 * **Note:** This method mutates `object`. 32547 * 32548 * @static 32549 * @memberOf _ 32550 * @since 4.0.0 32551 * @category Object 32552 * @param {Object} object The object to modify. 32553 * @param {Array|string} path The path of the property to set. 32554 * @param {*} value The value to set. 32555 * @param {Function} [customizer] The function to customize assigned values. 32556 * @returns {Object} Returns `object`. 32557 * @example 32558 * 32559 * var object = {}; 32560 * 32561 * _.setWith(object, '[0][1]', 'a', Object); 32562 * // => { '0': { '1': 'a' } } 32563 */ 32564 function setWith(object, path, value, customizer) { 32565 customizer = typeof customizer == 'function' ? customizer : undefined; 32566 return object == null ? object : baseSet(object, path, value, customizer); 32567 } 32568 32569 /** 32570 * Creates an array of own enumerable string keyed-value pairs for `object` 32571 * which can be consumed by `_.fromPairs`. If `object` is a map or set, its 32572 * entries are returned. 32573 * 32574 * @static 32575 * @memberOf _ 32576 * @since 4.0.0 32577 * @alias entries 32578 * @category Object 32579 * @param {Object} object The object to query. 32580 * @returns {Array} Returns the key-value pairs. 32581 * @example 32582 * 32583 * function Foo() { 32584 * this.a = 1; 32585 * this.b = 2; 32586 * } 32587 * 32588 * Foo.prototype.c = 3; 32589 * 32590 * _.toPairs(new Foo); 32591 * // => [['a', 1], ['b', 2]] (iteration order is not guaranteed) 32592 */ 32593 var toPairs = createToPairs(keys); 32594 32595 /** 32596 * Creates an array of own and inherited enumerable string keyed-value pairs 32597 * for `object` which can be consumed by `_.fromPairs`. If `object` is a map 32598 * or set, its entries are returned. 32599 * 32600 * @static 32601 * @memberOf _ 32602 * @since 4.0.0 32603 * @alias entriesIn 32604 * @category Object 32605 * @param {Object} object The object to query. 32606 * @returns {Array} Returns the key-value pairs. 32607 * @example 32608 * 32609 * function Foo() { 32610 * this.a = 1; 32611 * this.b = 2; 32612 * } 32613 * 32614 * Foo.prototype.c = 3; 32615 * 32616 * _.toPairsIn(new Foo); 32617 * // => [['a', 1], ['b', 2], ['c', 3]] (iteration order is not guaranteed) 32618 */ 32619 var toPairsIn = createToPairs(keysIn); 32620 32621 /** 32622 * An alternative to `_.reduce`; this method transforms `object` to a new 32623 * `accumulator` object which is the result of running each of its own 32624 * enumerable string keyed properties thru `iteratee`, with each invocation 32625 * potentially mutating the `accumulator` object. If `accumulator` is not 32626 * provided, a new object with the same `[[Prototype]]` will be used. The 32627 * iteratee is invoked with four arguments: (accumulator, value, key, object). 32628 * Iteratee functions may exit iteration early by explicitly returning `false`. 32629 * 32630 * @static 32631 * @memberOf _ 32632 * @since 1.3.0 32633 * @category Object 32634 * @param {Object} object The object to iterate over. 32635 * @param {Function} [iteratee=_.identity] The function invoked per iteration. 32636 * @param {*} [accumulator] The custom accumulator value. 32637 * @returns {*} Returns the accumulated value. 32638 * @example 32639 * 32640 * _.transform([2, 3, 4], function(result, n) { 32641 * result.push(n *= n); 32642 * return n % 2 == 0; 32643 * }, []); 32644 * // => [4, 9] 32645 * 32646 * _.transform({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) { 32647 * (result[value] || (result[value] = [])).push(key); 32648 * }, {}); 32649 * // => { '1': ['a', 'c'], '2': ['b'] } 32650 */ 32651 function transform(object, iteratee, accumulator) { 32652 var isArr = isArray(object), 32653 isArrLike = isArr || isBuffer(object) || isTypedArray(object); 32654 32655 iteratee = getIteratee(iteratee, 4); 32656 if (accumulator == null) { 32657 var Ctor = object && object.constructor; 32658 if (isArrLike) { 32659 accumulator = isArr ? new Ctor : []; 32660 } 32661 else if (isObject(object)) { 32662 accumulator = isFunction(Ctor) ? baseCreate(getPrototype(object)) : {}; 32663 } 32664 else { 32665 accumulator = {}; 32666 } 32667 } 32668 (isArrLike ? arrayEach : baseForOwn)(object, function(value, index, object) { 32669 return iteratee(accumulator, value, index, object); 32670 }); 32671 return accumulator; 32672 } 32673 32674 /** 32675 * Removes the property at `path` of `object`. 32676 * 32677 * **Note:** This method mutates `object`. 32678 * 32679 * @static 32680 * @memberOf _ 32681 * @since 4.0.0 32682 * @category Object 32683 * @param {Object} object The object to modify. 32684 * @param {Array|string} path The path of the property to unset. 32685 * @returns {boolean} Returns `true` if the property is deleted, else `false`. 32686 * @example 32687 * 32688 * var object = { 'a': [{ 'b': { 'c': 7 } }] }; 32689 * _.unset(object, 'a[0].b.c'); 32690 * // => true 32691 * 32692 * console.log(object); 32693 * // => { 'a': [{ 'b': {} }] }; 32694 * 32695 * _.unset(object, ['a', '0', 'b', 'c']); 32696 * // => true 32697 * 32698 * console.log(object); 32699 * // => { 'a': [{ 'b': {} }] }; 32700 */ 32701 function unset(object, path) { 32702 return object == null ? true : baseUnset(object, path); 32703 } 32704 32705 /** 32706 * This method is like `_.set` except that accepts `updater` to produce the 32707 * value to set. Use `_.updateWith` to customize `path` creation. The `updater` 32708 * is invoked with one argument: (value). 32709 * 32710 * **Note:** This method mutates `object`. 32711 * 32712 * @static 32713 * @memberOf _ 32714 * @since 4.6.0 32715 * @category Object 32716 * @param {Object} object The object to modify. 32717 * @param {Array|string} path The path of the property to set. 32718 * @param {Function} updater The function to produce the updated value. 32719 * @returns {Object} Returns `object`. 32720 * @example 32721 * 32722 * var object = { 'a': [{ 'b': { 'c': 3 } }] }; 32723 * 32724 * _.update(object, 'a[0].b.c', function(n) { return n * n; }); 32725 * console.log(object.a[0].b.c); 32726 * // => 9 32727 * 32728 * _.update(object, 'x[0].y.z', function(n) { return n ? n + 1 : 0; }); 32729 * console.log(object.x[0].y.z); 32730 * // => 0 32731 */ 32732 function update(object, path, updater) { 32733 return object == null ? object : baseUpdate(object, path, castFunction(updater)); 32734 } 32735 32736 /** 32737 * This method is like `_.update` except that it accepts `customizer` which is 32738 * invoked to produce the objects of `path`. If `customizer` returns `undefined` 32739 * path creation is handled by the method instead. The `customizer` is invoked 32740 * with three arguments: (nsValue, key, nsObject). 32741 * 32742 * **Note:** This method mutates `object`. 32743 * 32744 * @static 32745 * @memberOf _ 32746 * @since 4.6.0 32747 * @category Object 32748 * @param {Object} object The object to modify. 32749 * @param {Array|string} path The path of the property to set. 32750 * @param {Function} updater The function to produce the updated value. 32751 * @param {Function} [customizer] The function to customize assigned values. 32752 * @returns {Object} Returns `object`. 32753 * @example 32754 * 32755 * var object = {}; 32756 * 32757 * _.updateWith(object, '[0][1]', _.constant('a'), Object); 32758 * // => { '0': { '1': 'a' } } 32759 */ 32760 function updateWith(object, path, updater, customizer) { 32761 customizer = typeof customizer == 'function' ? customizer : undefined; 32762 return object == null ? object : baseUpdate(object, path, castFunction(updater), customizer); 32763 } 32764 32765 /** 32766 * Creates an array of the own enumerable string keyed property values of `object`. 32767 * 32768 * **Note:** Non-object values are coerced to objects. 32769 * 32770 * @static 32771 * @since 0.1.0 32772 * @memberOf _ 32773 * @category Object 32774 * @param {Object} object The object to query. 32775 * @returns {Array} Returns the array of property values. 32776 * @example 32777 * 32778 * function Foo() { 32779 * this.a = 1; 32780 * this.b = 2; 32781 * } 32782 * 32783 * Foo.prototype.c = 3; 32784 * 32785 * _.values(new Foo); 32786 * // => [1, 2] (iteration order is not guaranteed) 32787 * 32788 * _.values('hi'); 32789 * // => ['h', 'i'] 32790 */ 32791 function values(object) { 32792 return object == null ? [] : baseValues(object, keys(object)); 32793 } 32794 32795 /** 32796 * Creates an array of the own and inherited enumerable string keyed property 32797 * values of `object`. 32798 * 32799 * **Note:** Non-object values are coerced to objects. 32800 * 32801 * @static 32802 * @memberOf _ 32803 * @since 3.0.0 32804 * @category Object 32805 * @param {Object} object The object to query. 32806 * @returns {Array} Returns the array of property values. 32807 * @example 32808 * 32809 * function Foo() { 32810 * this.a = 1; 32811 * this.b = 2; 32812 * } 32813 * 32814 * Foo.prototype.c = 3; 32815 * 32816 * _.valuesIn(new Foo); 32817 * // => [1, 2, 3] (iteration order is not guaranteed) 32818 */ 32819 function valuesIn(object) { 32820 return object == null ? [] : baseValues(object, keysIn(object)); 32821 } 32822 32823 /*------------------------------------------------------------------------*/ 32824 32825 /** 32826 * Clamps `number` within the inclusive `lower` and `upper` bounds. 32827 * 32828 * @static 32829 * @memberOf _ 32830 * @since 4.0.0 32831 * @category Number 32832 * @param {number} number The number to clamp. 32833 * @param {number} [lower] The lower bound. 32834 * @param {number} upper The upper bound. 32835 * @returns {number} Returns the clamped number. 32836 * @example 32837 * 32838 * _.clamp(-10, -5, 5); 32839 * // => -5 32840 * 32841 * _.clamp(10, -5, 5); 32842 * // => 5 32843 */ 32844 function clamp(number, lower, upper) { 32845 if (upper === undefined) { 32846 upper = lower; 32847 lower = undefined; 32848 } 32849 if (upper !== undefined) { 32850 upper = toNumber(upper); 32851 upper = upper === upper ? upper : 0; 32852 } 32853 if (lower !== undefined) { 32854 lower = toNumber(lower); 32855 lower = lower === lower ? lower : 0; 32856 } 32857 return baseClamp(toNumber(number), lower, upper); 32858 } 32859 32860 /** 32861 * Checks if `n` is between `start` and up to, but not including, `end`. If 32862 * `end` is not specified, it's set to `start` with `start` then set to `0`. 32863 * If `start` is greater than `end` the params are swapped to support 32864 * negative ranges. 32865 * 32866 * @static 32867 * @memberOf _ 32868 * @since 3.3.0 32869 * @category Number 32870 * @param {number} number The number to check. 32871 * @param {number} [start=0] The start of the range. 32872 * @param {number} end The end of the range. 32873 * @returns {boolean} Returns `true` if `number` is in the range, else `false`. 32874 * @see _.range, _.rangeRight 32875 * @example 32876 * 32877 * _.inRange(3, 2, 4); 32878 * // => true 32879 * 32880 * _.inRange(4, 8); 32881 * // => true 32882 * 32883 * _.inRange(4, 2); 32884 * // => false 32885 * 32886 * _.inRange(2, 2); 32887 * // => false 32888 * 32889 * _.inRange(1.2, 2); 32890 * // => true 32891 * 32892 * _.inRange(5.2, 4); 32893 * // => false 32894 * 32895 * _.inRange(-3, -2, -6); 32896 * // => true 32897 */ 32898 function inRange(number, start, end) { 32899 start = toFinite(start); 32900 if (end === undefined) { 32901 end = start; 32902 start = 0; 32903 } else { 32904 end = toFinite(end); 32905 } 32906 number = toNumber(number); 32907 return baseInRange(number, start, end); 32908 } 32909 32910 /** 32911 * Produces a random number between the inclusive `lower` and `upper` bounds. 32912 * If only one argument is provided a number between `0` and the given number 32913 * is returned. If `floating` is `true`, or either `lower` or `upper` are 32914 * floats, a floating-point number is returned instead of an integer. 32915 * 32916 * **Note:** JavaScript follows the IEEE-754 standard for resolving 32917 * floating-point values which can produce unexpected results. 32918 * 32919 * @static 32920 * @memberOf _ 32921 * @since 0.7.0 32922 * @category Number 32923 * @param {number} [lower=0] The lower bound. 32924 * @param {number} [upper=1] The upper bound. 32925 * @param {boolean} [floating] Specify returning a floating-point number. 32926 * @returns {number} Returns the random number. 32927 * @example 32928 * 32929 * _.random(0, 5); 32930 * // => an integer between 0 and 5 32931 * 32932 * _.random(5); 32933 * // => also an integer between 0 and 5 32934 * 32935 * _.random(5, true); 32936 * // => a floating-point number between 0 and 5 32937 * 32938 * _.random(1.2, 5.2); 32939 * // => a floating-point number between 1.2 and 5.2 32940 */ 32941 function random(lower, upper, floating) { 32942 if (floating && typeof floating != 'boolean' && isIterateeCall(lower, upper, floating)) { 32943 upper = floating = undefined; 32944 } 32945 if (floating === undefined) { 32946 if (typeof upper == 'boolean') { 32947 floating = upper; 32948 upper = undefined; 32949 } 32950 else if (typeof lower == 'boolean') { 32951 floating = lower; 32952 lower = undefined; 32953 } 32954 } 32955 if (lower === undefined && upper === undefined) { 32956 lower = 0; 32957 upper = 1; 32958 } 32959 else { 32960 lower = toFinite(lower); 32961 if (upper === undefined) { 32962 upper = lower; 32963 lower = 0; 32964 } else { 32965 upper = toFinite(upper); 32966 } 32967 } 32968 if (lower > upper) { 32969 var temp = lower; 32970 lower = upper; 32971 upper = temp; 32972 } 32973 if (floating || lower % 1 || upper % 1) { 32974 var rand = nativeRandom(); 32975 return nativeMin(lower + (rand * (upper - lower + freeParseFloat('1e-' + ((rand + '').length - 1)))), upper); 32976 } 32977 return baseRandom(lower, upper); 32978 } 32979 32980 /*------------------------------------------------------------------------*/ 32981 32982 /** 32983 * Converts `string` to [camel case](https://en.wikipedia.org/wiki/CamelCase). 32984 * 32985 * @static 32986 * @memberOf _ 32987 * @since 3.0.0 32988 * @category String 32989 * @param {string} [string=''] The string to convert. 32990 * @returns {string} Returns the camel cased string. 32991 * @example 32992 * 32993 * _.camelCase('Foo Bar'); 32994 * // => 'fooBar' 32995 * 32996 * _.camelCase('--foo-bar--'); 32997 * // => 'fooBar' 32998 * 32999 * _.camelCase('__FOO_BAR__'); 33000 * // => 'fooBar' 33001 */ 33002 var camelCase = createCompounder(function(result, word, index) { 33003 word = word.toLowerCase(); 33004 return result + (index ? capitalize(word) : word); 33005 }); 33006 33007 /** 33008 * Converts the first character of `string` to upper case and the remaining 33009 * to lower case. 33010 * 33011 * @static 33012 * @memberOf _ 33013 * @since 3.0.0 33014 * @category String 33015 * @param {string} [string=''] The string to capitalize. 33016 * @returns {string} Returns the capitalized string. 33017 * @example 33018 * 33019 * _.capitalize('FRED'); 33020 * // => 'Fred' 33021 */ 33022 function capitalize(string) { 33023 return upperFirst(toString(string).toLowerCase()); 33024 } 33025 33026 /** 33027 * Deburrs `string` by converting 33028 * [Latin-1 Supplement](https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)#Character_table) 33029 * and [Latin Extended-A](https://en.wikipedia.org/wiki/Latin_Extended-A) 33030 * letters to basic Latin letters and removing 33031 * [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks). 33032 * 33033 * @static 33034 * @memberOf _ 33035 * @since 3.0.0 33036 * @category String 33037 * @param {string} [string=''] The string to deburr. 33038 * @returns {string} Returns the deburred string. 33039 * @example 33040 * 33041 * _.deburr('déjà vu'); 33042 * // => 'deja vu' 33043 */ 33044 function deburr(string) { 33045 string = toString(string); 33046 return string && string.replace(reLatin, deburrLetter).replace(reComboMark, ''); 33047 } 33048 33049 /** 33050 * Checks if `string` ends with the given target string. 33051 * 33052 * @static 33053 * @memberOf _ 33054 * @since 3.0.0 33055 * @category String 33056 * @param {string} [string=''] The string to inspect. 33057 * @param {string} [target] The string to search for. 33058 * @param {number} [position=string.length] The position to search up to. 33059 * @returns {boolean} Returns `true` if `string` ends with `target`, 33060 * else `false`. 33061 * @example 33062 * 33063 * _.endsWith('abc', 'c'); 33064 * // => true 33065 * 33066 * _.endsWith('abc', 'b'); 33067 * // => false 33068 * 33069 * _.endsWith('abc', 'b', 2); 33070 * // => true 33071 */ 33072 function endsWith(string, target, position) { 33073 string = toString(string); 33074 target = baseToString(target); 33075 33076 var length = string.length; 33077 position = position === undefined 33078 ? length 33079 : baseClamp(toInteger(position), 0, length); 33080 33081 var end = position; 33082 position -= target.length; 33083 return position >= 0 && string.slice(position, end) == target; 33084 } 33085 33086 /** 33087 * Converts the characters "&", "<", ">", '"', and "'" in `string` to their 33088 * corresponding HTML entities. 33089 * 33090 * **Note:** No other characters are escaped. To escape additional 33091 * characters use a third-party library like [_he_](https://mths.be/he). 33092 * 33093 * Though the ">" character is escaped for symmetry, characters like 33094 * ">" and "/" don't need escaping in HTML and have no special meaning 33095 * unless they're part of a tag or unquoted attribute value. See 33096 * [Mathias Bynens's article](https://mathiasbynens.be/notes/ambiguous-ampersands) 33097 * (under "semi-related fun fact") for more details. 33098 * 33099 * When working with HTML you should always 33100 * [quote attribute values](http://wonko.com/post/html-escaping) to reduce 33101 * XSS vectors. 33102 * 33103 * @static 33104 * @since 0.1.0 33105 * @memberOf _ 33106 * @category String 33107 * @param {string} [string=''] The string to escape. 33108 * @returns {string} Returns the escaped string. 33109 * @example 33110 * 33111 * _.escape('fred, barney, & pebbles'); 33112 * // => 'fred, barney, & pebbles' 33113 */ 33114 function escape(string) { 33115 string = toString(string); 33116 return (string && reHasUnescapedHtml.test(string)) 33117 ? string.replace(reUnescapedHtml, escapeHtmlChar) 33118 : string; 33119 } 33120 33121 /** 33122 * Escapes the `RegExp` special characters "^", "$", "\", ".", "*", "+", 33123 * "?", "(", ")", "[", "]", "{", "}", and "|" in `string`. 33124 * 33125 * @static 33126 * @memberOf _ 33127 * @since 3.0.0 33128 * @category String 33129 * @param {string} [string=''] The string to escape. 33130 * @returns {string} Returns the escaped string. 33131 * @example 33132 * 33133 * _.escapeRegExp('[lodash](https://lodash.com/)'); 33134 * // => '\[lodash\]\(https://lodash\.com/\)' 33135 */ 33136 function escapeRegExp(string) { 33137 string = toString(string); 33138 return (string && reHasRegExpChar.test(string)) 33139 ? string.replace(reRegExpChar, '\\$&') 33140 : string; 33141 } 33142 33143 /** 33144 * Converts `string` to 33145 * [kebab case](https://en.wikipedia.org/wiki/Letter_case#Special_case_styles). 33146 * 33147 * @static 33148 * @memberOf _ 33149 * @since 3.0.0 33150 * @category String 33151 * @param {string} [string=''] The string to convert. 33152 * @returns {string} Returns the kebab cased string. 33153 * @example 33154 * 33155 * _.kebabCase('Foo Bar'); 33156 * // => 'foo-bar' 33157 * 33158 * _.kebabCase('fooBar'); 33159 * // => 'foo-bar' 33160 * 33161 * _.kebabCase('__FOO_BAR__'); 33162 * // => 'foo-bar' 33163 */ 33164 var kebabCase = createCompounder(function(result, word, index) { 33165 return result + (index ? '-' : '') + word.toLowerCase(); 33166 }); 33167 33168 /** 33169 * Converts `string`, as space separated words, to lower case. 33170 * 33171 * @static 33172 * @memberOf _ 33173 * @since 4.0.0 33174 * @category String 33175 * @param {string} [string=''] The string to convert. 33176 * @returns {string} Returns the lower cased string. 33177 * @example 33178 * 33179 * _.lowerCase('--Foo-Bar--'); 33180 * // => 'foo bar' 33181 * 33182 * _.lowerCase('fooBar'); 33183 * // => 'foo bar' 33184 * 33185 * _.lowerCase('__FOO_BAR__'); 33186 * // => 'foo bar' 33187 */ 33188 var lowerCase = createCompounder(function(result, word, index) { 33189 return result + (index ? ' ' : '') + word.toLowerCase(); 33190 }); 33191 33192 /** 33193 * Converts the first character of `string` to lower case. 33194 * 33195 * @static 33196 * @memberOf _ 33197 * @since 4.0.0 33198 * @category String 33199 * @param {string} [string=''] The string to convert. 33200 * @returns {string} Returns the converted string. 33201 * @example 33202 * 33203 * _.lowerFirst('Fred'); 33204 * // => 'fred' 33205 * 33206 * _.lowerFirst('FRED'); 33207 * // => 'fRED' 33208 */ 33209 var lowerFirst = createCaseFirst('toLowerCase'); 33210 33211 /** 33212 * Pads `string` on the left and right sides if it's shorter than `length`. 33213 * Padding characters are truncated if they can't be evenly divided by `length`. 33214 * 33215 * @static 33216 * @memberOf _ 33217 * @since 3.0.0 33218 * @category String 33219 * @param {string} [string=''] The string to pad. 33220 * @param {number} [length=0] The padding length. 33221 * @param {string} [chars=' '] The string used as padding. 33222 * @returns {string} Returns the padded string. 33223 * @example 33224 * 33225 * _.pad('abc', 8); 33226 * // => ' abc ' 33227 * 33228 * _.pad('abc', 8, '_-'); 33229 * // => '_-abc_-_' 33230 * 33231 * _.pad('abc', 3); 33232 * // => 'abc' 33233 */ 33234 function pad(string, length, chars) { 33235 string = toString(string); 33236 length = toInteger(length); 33237 33238 var strLength = length ? stringSize(string) : 0; 33239 if (!length || strLength >= length) { 33240 return string; 33241 } 33242 var mid = (length - strLength) / 2; 33243 return ( 33244 createPadding(nativeFloor(mid), chars) + 33245 string + 33246 createPadding(nativeCeil(mid), chars) 33247 ); 33248 } 33249 33250 /** 33251 * Pads `string` on the right side if it's shorter than `length`. Padding 33252 * characters are truncated if they exceed `length`. 33253 * 33254 * @static 33255 * @memberOf _ 33256 * @since 4.0.0 33257 * @category String 33258 * @param {string} [string=''] The string to pad. 33259 * @param {number} [length=0] The padding length. 33260 * @param {string} [chars=' '] The string used as padding. 33261 * @returns {string} Returns the padded string. 33262 * @example 33263 * 33264 * _.padEnd('abc', 6); 33265 * // => 'abc ' 33266 * 33267 * _.padEnd('abc', 6, '_-'); 33268 * // => 'abc_-_' 33269 * 33270 * _.padEnd('abc', 3); 33271 * // => 'abc' 33272 */ 33273 function padEnd(string, length, chars) { 33274 string = toString(string); 33275 length = toInteger(length); 33276 33277 var strLength = length ? stringSize(string) : 0; 33278 return (length && strLength < length) 33279 ? (string + createPadding(length - strLength, chars)) 33280 : string; 33281 } 33282 33283 /** 33284 * Pads `string` on the left side if it's shorter than `length`. Padding 33285 * characters are truncated if they exceed `length`. 33286 * 33287 * @static 33288 * @memberOf _ 33289 * @since 4.0.0 33290 * @category String 33291 * @param {string} [string=''] The string to pad. 33292 * @param {number} [length=0] The padding length. 33293 * @param {string} [chars=' '] The string used as padding. 33294 * @returns {string} Returns the padded string. 33295 * @example 33296 * 33297 * _.padStart('abc', 6); 33298 * // => ' abc' 33299 * 33300 * _.padStart('abc', 6, '_-'); 33301 * // => '_-_abc' 33302 * 33303 * _.padStart('abc', 3); 33304 * // => 'abc' 33305 */ 33306 function padStart(string, length, chars) { 33307 string = toString(string); 33308 length = toInteger(length); 33309 33310 var strLength = length ? stringSize(string) : 0; 33311 return (length && strLength < length) 33312 ? (createPadding(length - strLength, chars) + string) 33313 : string; 33314 } 33315 33316 /** 33317 * Converts `string` to an integer of the specified radix. If `radix` is 33318 * `undefined` or `0`, a `radix` of `10` is used unless `value` is a 33319 * hexadecimal, in which case a `radix` of `16` is used. 33320 * 33321 * **Note:** This method aligns with the 33322 * [ES5 implementation](https://es5.github.io/#x15.1.2.2) of `parseInt`. 33323 * 33324 * @static 33325 * @memberOf _ 33326 * @since 1.1.0 33327 * @category String 33328 * @param {string} string The string to convert. 33329 * @param {number} [radix=10] The radix to interpret `value` by. 33330 * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. 33331 * @returns {number} Returns the converted integer. 33332 * @example 33333 * 33334 * _.parseInt('08'); 33335 * // => 8 33336 * 33337 * _.map(['6', '08', '10'], _.parseInt); 33338 * // => [6, 8, 10] 33339 */ 33340 function parseInt(string, radix, guard) { 33341 if (guard || radix == null) { 33342 radix = 0; 33343 } else if (radix) { 33344 radix = +radix; 33345 } 33346 return nativeParseInt(toString(string).replace(reTrimStart, ''), radix || 0); 33347 } 33348 33349 /** 33350 * Repeats the given string `n` times. 33351 * 33352 * @static 33353 * @memberOf _ 33354 * @since 3.0.0 33355 * @category String 33356 * @param {string} [string=''] The string to repeat. 33357 * @param {number} [n=1] The number of times to repeat the string. 33358 * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. 33359 * @returns {string} Returns the repeated string. 33360 * @example 33361 * 33362 * _.repeat('*', 3); 33363 * // => '***' 33364 * 33365 * _.repeat('abc', 2); 33366 * // => 'abcabc' 33367 * 33368 * _.repeat('abc', 0); 33369 * // => '' 33370 */ 33371 function repeat(string, n, guard) { 33372 if ((guard ? isIterateeCall(string, n, guard) : n === undefined)) { 33373 n = 1; 33374 } else { 33375 n = toInteger(n); 33376 } 33377 return baseRepeat(toString(string), n); 33378 } 33379 33380 /** 33381 * Replaces matches for `pattern` in `string` with `replacement`. 33382 * 33383 * **Note:** This method is based on 33384 * [`String#replace`](https://mdn.io/String/replace). 33385 * 33386 * @static 33387 * @memberOf _ 33388 * @since 4.0.0 33389 * @category String 33390 * @param {string} [string=''] The string to modify. 33391 * @param {RegExp|string} pattern The pattern to replace. 33392 * @param {Function|string} replacement The match replacement. 33393 * @returns {string} Returns the modified string. 33394 * @example 33395 * 33396 * _.replace('Hi Fred', 'Fred', 'Barney'); 33397 * // => 'Hi Barney' 33398 */ 33399 function replace() { 33400 var args = arguments, 33401 string = toString(args[0]); 33402 33403 return args.length < 3 ? string : string.replace(args[1], args[2]); 33404 } 33405 33406 /** 33407 * Converts `string` to 33408 * [snake case](https://en.wikipedia.org/wiki/Snake_case). 33409 * 33410 * @static 33411 * @memberOf _ 33412 * @since 3.0.0 33413 * @category String 33414 * @param {string} [string=''] The string to convert. 33415 * @returns {string} Returns the snake cased string. 33416 * @example 33417 * 33418 * _.snakeCase('Foo Bar'); 33419 * // => 'foo_bar' 33420 * 33421 * _.snakeCase('fooBar'); 33422 * // => 'foo_bar' 33423 * 33424 * _.snakeCase('--FOO-BAR--'); 33425 * // => 'foo_bar' 33426 */ 33427 var snakeCase = createCompounder(function(result, word, index) { 33428 return result + (index ? '_' : '') + word.toLowerCase(); 33429 }); 33430 33431 /** 33432 * Splits `string` by `separator`. 33433 * 33434 * **Note:** This method is based on 33435 * [`String#split`](https://mdn.io/String/split). 33436 * 33437 * @static 33438 * @memberOf _ 33439 * @since 4.0.0 33440 * @category String 33441 * @param {string} [string=''] The string to split. 33442 * @param {RegExp|string} separator The separator pattern to split by. 33443 * @param {number} [limit] The length to truncate results to. 33444 * @returns {Array} Returns the string segments. 33445 * @example 33446 * 33447 * _.split('a-b-c', '-', 2); 33448 * // => ['a', 'b'] 33449 */ 33450 function split(string, separator, limit) { 33451 if (limit && typeof limit != 'number' && isIterateeCall(string, separator, limit)) { 33452 separator = limit = undefined; 33453 } 33454 limit = limit === undefined ? MAX_ARRAY_LENGTH : limit >>> 0; 33455 if (!limit) { 33456 return []; 33457 } 33458 string = toString(string); 33459 if (string && ( 33460 typeof separator == 'string' || 33461 (separator != null && !isRegExp(separator)) 33462 )) { 33463 separator = baseToString(separator); 33464 if (!separator && hasUnicode(string)) { 33465 return castSlice(stringToArray(string), 0, limit); 33466 } 33467 } 33468 return string.split(separator, limit); 33469 } 33470 33471 /** 33472 * Converts `string` to 33473 * [start case](https://en.wikipedia.org/wiki/Letter_case#Stylistic_or_specialised_usage). 33474 * 33475 * @static 33476 * @memberOf _ 33477 * @since 3.1.0 33478 * @category String 33479 * @param {string} [string=''] The string to convert. 33480 * @returns {string} Returns the start cased string. 33481 * @example 33482 * 33483 * _.startCase('--foo-bar--'); 33484 * // => 'Foo Bar' 33485 * 33486 * _.startCase('fooBar'); 33487 * // => 'Foo Bar' 33488 * 33489 * _.startCase('__FOO_BAR__'); 33490 * // => 'FOO BAR' 33491 */ 33492 var startCase = createCompounder(function(result, word, index) { 33493 return result + (index ? ' ' : '') + upperFirst(word); 33494 }); 33495 33496 /** 33497 * Checks if `string` starts with the given target string. 33498 * 33499 * @static 33500 * @memberOf _ 33501 * @since 3.0.0 33502 * @category String 33503 * @param {string} [string=''] The string to inspect. 33504 * @param {string} [target] The string to search for. 33505 * @param {number} [position=0] The position to search from. 33506 * @returns {boolean} Returns `true` if `string` starts with `target`, 33507 * else `false`. 33508 * @example 33509 * 33510 * _.startsWith('abc', 'a'); 33511 * // => true 33512 * 33513 * _.startsWith('abc', 'b'); 33514 * // => false 33515 * 33516 * _.startsWith('abc', 'b', 1); 33517 * // => true 33518 */ 33519 function startsWith(string, target, position) { 33520 string = toString(string); 33521 position = position == null 33522 ? 0 33523 : baseClamp(toInteger(position), 0, string.length); 33524 33525 target = baseToString(target); 33526 return string.slice(position, position + target.length) == target; 33527 } 33528 33529 /** 33530 * Creates a compiled template function that can interpolate data properties 33531 * in "interpolate" delimiters, HTML-escape interpolated data properties in 33532 * "escape" delimiters, and execute JavaScript in "evaluate" delimiters. Data 33533 * properties may be accessed as free variables in the template. If a setting 33534 * object is given, it takes precedence over `_.templateSettings` values. 33535 * 33536 * **Note:** In the development build `_.template` utilizes 33537 * [sourceURLs](http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/#toc-sourceurl) 33538 * for easier debugging. 33539 * 33540 * For more information on precompiling templates see 33541 * [lodash's custom builds documentation](https://lodash.com/custom-builds). 33542 * 33543 * For more information on Chrome extension sandboxes see 33544 * [Chrome's extensions documentation](https://developer.chrome.com/extensions/sandboxingEval). 33545 * 33546 * @static 33547 * @since 0.1.0 33548 * @memberOf _ 33549 * @category String 33550 * @param {string} [string=''] The template string. 33551 * @param {Object} [options={}] The options object. 33552 * @param {RegExp} [options.escape=_.templateSettings.escape] 33553 * The HTML "escape" delimiter. 33554 * @param {RegExp} [options.evaluate=_.templateSettings.evaluate] 33555 * The "evaluate" delimiter. 33556 * @param {Object} [options.imports=_.templateSettings.imports] 33557 * An object to import into the template as free variables. 33558 * @param {RegExp} [options.interpolate=_.templateSettings.interpolate] 33559 * The "interpolate" delimiter. 33560 * @param {string} [options.sourceURL='lodash.templateSources[n]'] 33561 * The sourceURL of the compiled template. 33562 * @param {string} [options.variable='obj'] 33563 * The data object variable name. 33564 * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. 33565 * @returns {Function} Returns the compiled template function. 33566 * @example 33567 * 33568 * // Use the "interpolate" delimiter to create a compiled template. 33569 * var compiled = _.template('hello <%= user %>!'); 33570 * compiled({ 'user': 'fred' }); 33571 * // => 'hello fred!' 33572 * 33573 * // Use the HTML "escape" delimiter to escape data property values. 33574 * var compiled = _.template('<b><%- value %></b>'); 33575 * compiled({ 'value': '<script>' }); 33576 * // => '<b><script></b>' 33577 * 33578 * // Use the "evaluate" delimiter to execute JavaScript and generate HTML. 33579 * var compiled = _.template('<% _.forEach(users, function(user) { %><li><%- user %></li><% }); %>'); 33580 * compiled({ 'users': ['fred', 'barney'] }); 33581 * // => '<li>fred</li><li>barney</li>' 33582 * 33583 * // Use the internal `print` function in "evaluate" delimiters. 33584 * var compiled = _.template('<% print("hello " + user); %>!'); 33585 * compiled({ 'user': 'barney' }); 33586 * // => 'hello barney!' 33587 * 33588 * // Use the ES template literal delimiter as an "interpolate" delimiter. 33589 * // Disable support by replacing the "interpolate" delimiter. 33590 * var compiled = _.template('hello ${ user }!'); 33591 * compiled({ 'user': 'pebbles' }); 33592 * // => 'hello pebbles!' 33593 * 33594 * // Use backslashes to treat delimiters as plain text. 33595 * var compiled = _.template('<%= "\\<%- value %\\>" %>'); 33596 * compiled({ 'value': 'ignored' }); 33597 * // => '<%- value %>' 33598 * 33599 * // Use the `imports` option to import `jQuery` as `jq`. 33600 * var text = '<% jq.each(users, function(user) { %><li><%- user %></li><% }); %>'; 33601 * var compiled = _.template(text, { 'imports': { 'jq': jQuery } }); 33602 * compiled({ 'users': ['fred', 'barney'] }); 33603 * // => '<li>fred</li><li>barney</li>' 33604 * 33605 * // Use the `sourceURL` option to specify a custom sourceURL for the template. 33606 * var compiled = _.template('hello <%= user %>!', { 'sourceURL': '/basic/greeting.jst' }); 33607 * compiled(data); 33608 * // => Find the source of "greeting.jst" under the Sources tab or Resources panel of the web inspector. 33609 * 33610 * // Use the `variable` option to ensure a with-statement isn't used in the compiled template. 33611 * var compiled = _.template('hi <%= data.user %>!', { 'variable': 'data' }); 33612 * compiled.source; 33613 * // => function(data) { 33614 * // var __t, __p = ''; 33615 * // __p += 'hi ' + ((__t = ( data.user )) == null ? '' : __t) + '!'; 33616 * // return __p; 33617 * // } 33618 * 33619 * // Use custom template delimiters. 33620 * _.templateSettings.interpolate = /{{([\s\S]+?)}}/g; 33621 * var compiled = _.template('hello {{ user }}!'); 33622 * compiled({ 'user': 'mustache' }); 33623 * // => 'hello mustache!' 33624 * 33625 * // Use the `source` property to inline compiled templates for meaningful 33626 * // line numbers in error messages and stack traces. 33627 * fs.writeFileSync(path.join(process.cwd(), 'jst.js'), '\ 33628 * var JST = {\ 33629 * "main": ' + _.template(mainText).source + '\ 33630 * };\ 33631 * '); 33632 */ 33633 function template(string, options, guard) { 33634 // Based on John Resig's `tmpl` implementation 33635 // (http://ejohn.org/blog/javascript-micro-templating/) 33636 // and Laura Doktorova's doT.js (https://github.com/olado/doT). 33637 var settings = lodash.templateSettings; 33638 33639 if (guard && isIterateeCall(string, options, guard)) { 33640 options = undefined; 33641 } 33642 string = toString(string); 33643 options = assignInWith({}, options, settings, customDefaultsAssignIn); 33644 33645 var imports = assignInWith({}, options.imports, settings.imports, customDefaultsAssignIn), 33646 importsKeys = keys(imports), 33647 importsValues = baseValues(imports, importsKeys); 33648 33649 var isEscaping, 33650 isEvaluating, 33651 index = 0, 33652 interpolate = options.interpolate || reNoMatch, 33653 source = "__p += '"; 33654 33655 // Compile the regexp to match each delimiter. 33656 var reDelimiters = RegExp( 33657 (options.escape || reNoMatch).source + '|' + 33658 interpolate.source + '|' + 33659 (interpolate === reInterpolate ? reEsTemplate : reNoMatch).source + '|' + 33660 (options.evaluate || reNoMatch).source + '|$' 33661 , 'g'); 33662 33663 // Use a sourceURL for easier debugging. 33664 // The sourceURL gets injected into the source that's eval-ed, so be careful 33665 // to normalize all kinds of whitespace, so e.g. newlines (and unicode versions of it) can't sneak in 33666 // and escape the comment, thus injecting code that gets evaled. 33667 var sourceURL = '//# sourceURL=' + 33668 (hasOwnProperty.call(options, 'sourceURL') 33669 ? (options.sourceURL + '').replace(/\s/g, ' ') 33670 : ('lodash.templateSources[' + (++templateCounter) + ']') 33671 ) + '\n'; 33672 33673 string.replace(reDelimiters, function(match, escapeValue, interpolateValue, esTemplateValue, evaluateValue, offset) { 33674 interpolateValue || (interpolateValue = esTemplateValue); 33675 33676 // Escape characters that can't be included in string literals. 33677 source += string.slice(index, offset).replace(reUnescapedString, escapeStringChar); 33678 33679 // Replace delimiters with snippets. 33680 if (escapeValue) { 33681 isEscaping = true; 33682 source += "' +\n__e(" + escapeValue + ") +\n'"; 33683 } 33684 if (evaluateValue) { 33685 isEvaluating = true; 33686 source += "';\n" + evaluateValue + ";\n__p += '"; 33687 } 33688 if (interpolateValue) { 33689 source += "' +\n((__t = (" + interpolateValue + ")) == null ? '' : __t) +\n'"; 33690 } 33691 index = offset + match.length; 33692 33693 // The JS engine embedded in Adobe products needs `match` returned in 33694 // order to produce the correct `offset` value. 33695 return match; 33696 }); 33697 33698 source += "';\n"; 33699 33700 // If `variable` is not specified wrap a with-statement around the generated 33701 // code to add the data object to the top of the scope chain. 33702 var variable = hasOwnProperty.call(options, 'variable') && options.variable; 33703 if (!variable) { 33704 source = 'with (obj) {\n' + source + '\n}\n'; 33705 } 33706 // Throw an error if a forbidden character was found in `variable`, to prevent 33707 // potential command injection attacks. 33708 else if (reForbiddenIdentifierChars.test(variable)) { 33709 throw new Error(INVALID_TEMPL_VAR_ERROR_TEXT); 33710 } 33711 33712 // Cleanup code by stripping empty strings. 33713 source = (isEvaluating ? source.replace(reEmptyStringLeading, '') : source) 33714 .replace(reEmptyStringMiddle, '$1') 33715 .replace(reEmptyStringTrailing, '$1;'); 33716 33717 // Frame code as the function body. 33718 source = 'function(' + (variable || 'obj') + ') {\n' + 33719 (variable 33720 ? '' 33721 : 'obj || (obj = {});\n' 33722 ) + 33723 "var __t, __p = ''" + 33724 (isEscaping 33725 ? ', __e = _.escape' 33726 : '' 33727 ) + 33728 (isEvaluating 33729 ? ', __j = Array.prototype.join;\n' + 33730 "function print() { __p += __j.call(arguments, '') }\n" 33731 : ';\n' 33732 ) + 33733 source + 33734 'return __p\n}'; 33735 33736 var result = attempt(function() { 33737 return Function(importsKeys, sourceURL + 'return ' + source) 33738 .apply(undefined, importsValues); 33739 }); 33740 33741 // Provide the compiled function's source by its `toString` method or 33742 // the `source` property as a convenience for inlining compiled templates. 33743 result.source = source; 33744 if (isError(result)) { 33745 throw result; 33746 } 33747 return result; 33748 } 33749 33750 /** 33751 * Converts `string`, as a whole, to lower case just like 33752 * [String#toLowerCase](https://mdn.io/toLowerCase). 33753 * 33754 * @static 33755 * @memberOf _ 33756 * @since 4.0.0 33757 * @category String 33758 * @param {string} [string=''] The string to convert. 33759 * @returns {string} Returns the lower cased string. 33760 * @example 33761 * 33762 * _.toLower('--Foo-Bar--'); 33763 * // => '--foo-bar--' 33764 * 33765 * _.toLower('fooBar'); 33766 * // => 'foobar' 33767 * 33768 * _.toLower('__FOO_BAR__'); 33769 * // => '__foo_bar__' 33770 */ 33771 function toLower(value) { 33772 return toString(value).toLowerCase(); 33773 } 33774 33775 /** 33776 * Converts `string`, as a whole, to upper case just like 33777 * [String#toUpperCase](https://mdn.io/toUpperCase). 33778 * 33779 * @static 33780 * @memberOf _ 33781 * @since 4.0.0 33782 * @category String 33783 * @param {string} [string=''] The string to convert. 33784 * @returns {string} Returns the upper cased string. 33785 * @example 33786 * 33787 * _.toUpper('--foo-bar--'); 33788 * // => '--FOO-BAR--' 33789 * 33790 * _.toUpper('fooBar'); 33791 * // => 'FOOBAR' 33792 * 33793 * _.toUpper('__foo_bar__'); 33794 * // => '__FOO_BAR__' 33795 */ 33796 function toUpper(value) { 33797 return toString(value).toUpperCase(); 33798 } 33799 33800 /** 33801 * Removes leading and trailing whitespace or specified characters from `string`. 33802 * 33803 * @static 33804 * @memberOf _ 33805 * @since 3.0.0 33806 * @category String 33807 * @param {string} [string=''] The string to trim. 33808 * @param {string} [chars=whitespace] The characters to trim. 33809 * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. 33810 * @returns {string} Returns the trimmed string. 33811 * @example 33812 * 33813 * _.trim(' abc '); 33814 * // => 'abc' 33815 * 33816 * _.trim('-_-abc-_-', '_-'); 33817 * // => 'abc' 33818 * 33819 * _.map([' foo ', ' bar '], _.trim); 33820 * // => ['foo', 'bar'] 33821 */ 33822 function trim(string, chars, guard) { 33823 string = toString(string); 33824 if (string && (guard || chars === undefined)) { 33825 return baseTrim(string); 33826 } 33827 if (!string || !(chars = baseToString(chars))) { 33828 return string; 33829 } 33830 var strSymbols = stringToArray(string), 33831 chrSymbols = stringToArray(chars), 33832 start = charsStartIndex(strSymbols, chrSymbols), 33833 end = charsEndIndex(strSymbols, chrSymbols) + 1; 33834 33835 return castSlice(strSymbols, start, end).join(''); 33836 } 33837 33838 /** 33839 * Removes trailing whitespace or specified characters from `string`. 33840 * 33841 * @static 33842 * @memberOf _ 33843 * @since 4.0.0 33844 * @category String 33845 * @param {string} [string=''] The string to trim. 33846 * @param {string} [chars=whitespace] The characters to trim. 33847 * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. 33848 * @returns {string} Returns the trimmed string. 33849 * @example 33850 * 33851 * _.trimEnd(' abc '); 33852 * // => ' abc' 33853 * 33854 * _.trimEnd('-_-abc-_-', '_-'); 33855 * // => '-_-abc' 33856 */ 33857 function trimEnd(string, chars, guard) { 33858 string = toString(string); 33859 if (string && (guard || chars === undefined)) { 33860 return string.slice(0, trimmedEndIndex(string) + 1); 33861 } 33862 if (!string || !(chars = baseToString(chars))) { 33863 return string; 33864 } 33865 var strSymbols = stringToArray(string), 33866 end = charsEndIndex(strSymbols, stringToArray(chars)) + 1; 33867 33868 return castSlice(strSymbols, 0, end).join(''); 33869 } 33870 33871 /** 33872 * Removes leading whitespace or specified characters from `string`. 33873 * 33874 * @static 33875 * @memberOf _ 33876 * @since 4.0.0 33877 * @category String 33878 * @param {string} [string=''] The string to trim. 33879 * @param {string} [chars=whitespace] The characters to trim. 33880 * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. 33881 * @returns {string} Returns the trimmed string. 33882 * @example 33883 * 33884 * _.trimStart(' abc '); 33885 * // => 'abc ' 33886 * 33887 * _.trimStart('-_-abc-_-', '_-'); 33888 * // => 'abc-_-' 33889 */ 33890 function trimStart(string, chars, guard) { 33891 string = toString(string); 33892 if (string && (guard || chars === undefined)) { 33893 return string.replace(reTrimStart, ''); 33894 } 33895 if (!string || !(chars = baseToString(chars))) { 33896 return string; 33897 } 33898 var strSymbols = stringToArray(string), 33899 start = charsStartIndex(strSymbols, stringToArray(chars)); 33900 33901 return castSlice(strSymbols, start).join(''); 33902 } 33903 33904 /** 33905 * Truncates `string` if it's longer than the given maximum string length. 33906 * The last characters of the truncated string are replaced with the omission 33907 * string which defaults to "...". 33908 * 33909 * @static 33910 * @memberOf _ 33911 * @since 4.0.0 33912 * @category String 33913 * @param {string} [string=''] The string to truncate. 33914 * @param {Object} [options={}] The options object. 33915 * @param {number} [options.length=30] The maximum string length. 33916 * @param {string} [options.omission='...'] The string to indicate text is omitted. 33917 * @param {RegExp|string} [options.separator] The separator pattern to truncate to. 33918 * @returns {string} Returns the truncated string. 33919 * @example 33920 * 33921 * _.truncate('hi-diddly-ho there, neighborino'); 33922 * // => 'hi-diddly-ho there, neighbo...' 33923 * 33924 * _.truncate('hi-diddly-ho there, neighborino', { 33925 * 'length': 24, 33926 * 'separator': ' ' 33927 * }); 33928 * // => 'hi-diddly-ho there,...' 33929 * 33930 * _.truncate('hi-diddly-ho there, neighborino', { 33931 * 'length': 24, 33932 * 'separator': /,? +/ 33933 * }); 33934 * // => 'hi-diddly-ho there...' 33935 * 33936 * _.truncate('hi-diddly-ho there, neighborino', { 33937 * 'omission': ' [...]' 33938 * }); 33939 * // => 'hi-diddly-ho there, neig [...]' 33940 */ 33941 function truncate(string, options) { 33942 var length = DEFAULT_TRUNC_LENGTH, 33943 omission = DEFAULT_TRUNC_OMISSION; 33944 33945 if (isObject(options)) { 33946 var separator = 'separator' in options ? options.separator : separator; 33947 length = 'length' in options ? toInteger(options.length) : length; 33948 omission = 'omission' in options ? baseToString(options.omission) : omission; 33949 } 33950 string = toString(string); 33951 33952 var strLength = string.length; 33953 if (hasUnicode(string)) { 33954 var strSymbols = stringToArray(string); 33955 strLength = strSymbols.length; 33956 } 33957 if (length >= strLength) { 33958 return string; 33959 } 33960 var end = length - stringSize(omission); 33961 if (end < 1) { 33962 return omission; 33963 } 33964 var result = strSymbols 33965 ? castSlice(strSymbols, 0, end).join('') 33966 : string.slice(0, end); 33967 33968 if (separator === undefined) { 33969 return result + omission; 33970 } 33971 if (strSymbols) { 33972 end += (result.length - end); 33973 } 33974 if (isRegExp(separator)) { 33975 if (string.slice(end).search(separator)) { 33976 var match, 33977 substring = result; 33978 33979 if (!separator.global) { 33980 separator = RegExp(separator.source, toString(reFlags.exec(separator)) + 'g'); 33981 } 33982 separator.lastIndex = 0; 33983 while ((match = separator.exec(substring))) { 33984 var newEnd = match.index; 33985 } 33986 result = result.slice(0, newEnd === undefined ? end : newEnd); 33987 } 33988 } else if (string.indexOf(baseToString(separator), end) != end) { 33989 var index = result.lastIndexOf(separator); 33990 if (index > -1) { 33991 result = result.slice(0, index); 33992 } 33993 } 33994 return result + omission; 33995 } 33996 33997 /** 33998 * The inverse of `_.escape`; this method converts the HTML entities 33999 * `&`, `<`, `>`, `"`, and `'` in `string` to 34000 * their corresponding characters. 34001 * 34002 * **Note:** No other HTML entities are unescaped. To unescape additional 34003 * HTML entities use a third-party library like [_he_](https://mths.be/he). 34004 * 34005 * @static 34006 * @memberOf _ 34007 * @since 0.6.0 34008 * @category String 34009 * @param {string} [string=''] The string to unescape. 34010 * @returns {string} Returns the unescaped string. 34011 * @example 34012 * 34013 * _.unescape('fred, barney, & pebbles'); 34014 * // => 'fred, barney, & pebbles' 34015 */ 34016 function unescape(string) { 34017 string = toString(string); 34018 return (string && reHasEscapedHtml.test(string)) 34019 ? string.replace(reEscapedHtml, unescapeHtmlChar) 34020 : string; 34021 } 34022 34023 /** 34024 * Converts `string`, as space separated words, to upper case. 34025 * 34026 * @static 34027 * @memberOf _ 34028 * @since 4.0.0 34029 * @category String 34030 * @param {string} [string=''] The string to convert. 34031 * @returns {string} Returns the upper cased string. 34032 * @example 34033 * 34034 * _.upperCase('--foo-bar'); 34035 * // => 'FOO BAR' 34036 * 34037 * _.upperCase('fooBar'); 34038 * // => 'FOO BAR' 34039 * 34040 * _.upperCase('__foo_bar__'); 34041 * // => 'FOO BAR' 34042 */ 34043 var upperCase = createCompounder(function(result, word, index) { 34044 return result + (index ? ' ' : '') + word.toUpperCase(); 34045 }); 34046 34047 /** 34048 * Converts the first character of `string` to upper case. 34049 * 34050 * @static 34051 * @memberOf _ 34052 * @since 4.0.0 34053 * @category String 34054 * @param {string} [string=''] The string to convert. 34055 * @returns {string} Returns the converted string. 34056 * @example 34057 * 34058 * _.upperFirst('fred'); 34059 * // => 'Fred' 34060 * 34061 * _.upperFirst('FRED'); 34062 * // => 'FRED' 34063 */ 34064 var upperFirst = createCaseFirst('toUpperCase'); 34065 34066 /** 34067 * Splits `string` into an array of its words. 34068 * 34069 * @static 34070 * @memberOf _ 34071 * @since 3.0.0 34072 * @category String 34073 * @param {string} [string=''] The string to inspect. 34074 * @param {RegExp|string} [pattern] The pattern to match words. 34075 * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. 34076 * @returns {Array} Returns the words of `string`. 34077 * @example 34078 * 34079 * _.words('fred, barney, & pebbles'); 34080 * // => ['fred', 'barney', 'pebbles'] 34081 * 34082 * _.words('fred, barney, & pebbles', /[^, ]+/g); 34083 * // => ['fred', 'barney', '&', 'pebbles'] 34084 */ 34085 function words(string, pattern, guard) { 34086 string = toString(string); 34087 pattern = guard ? undefined : pattern; 34088 34089 if (pattern === undefined) { 34090 return hasUnicodeWord(string) ? unicodeWords(string) : asciiWords(string); 34091 } 34092 return string.match(pattern) || []; 34093 } 34094 34095 /*------------------------------------------------------------------------*/ 34096 34097 /** 34098 * Attempts to invoke `func`, returning either the result or the caught error 34099 * object. Any additional arguments are provided to `func` when it's invoked. 34100 * 34101 * @static 34102 * @memberOf _ 34103 * @since 3.0.0 34104 * @category Util 34105 * @param {Function} func The function to attempt. 34106 * @param {...*} [args] The arguments to invoke `func` with. 34107 * @returns {*} Returns the `func` result or error object. 34108 * @example 34109 * 34110 * // Avoid throwing errors for invalid selectors. 34111 * var elements = _.attempt(function(selector) { 34112 * return document.querySelectorAll(selector); 34113 * }, '>_>'); 34114 * 34115 * if (_.isError(elements)) { 34116 * elements = []; 34117 * } 34118 */ 34119 var attempt = baseRest(function(func, args) { 34120 try { 34121 return apply(func, undefined, args); 34122 } catch (e) { 34123 return isError(e) ? e : new Error(e); 34124 } 34125 }); 34126 34127 /** 34128 * Binds methods of an object to the object itself, overwriting the existing 34129 * method. 34130 * 34131 * **Note:** This method doesn't set the "length" property of bound functions. 34132 * 34133 * @static 34134 * @since 0.1.0 34135 * @memberOf _ 34136 * @category Util 34137 * @param {Object} object The object to bind and assign the bound methods to. 34138 * @param {...(string|string[])} methodNames The object method names to bind. 34139 * @returns {Object} Returns `object`. 34140 * @example 34141 * 34142 * var view = { 34143 * 'label': 'docs', 34144 * 'click': function() { 34145 * console.log('clicked ' + this.label); 34146 * } 34147 * }; 34148 * 34149 * _.bindAll(view, ['click']); 34150 * jQuery(element).on('click', view.click); 34151 * // => Logs 'clicked docs' when clicked. 34152 */ 34153 var bindAll = flatRest(function(object, methodNames) { 34154 arrayEach(methodNames, function(key) { 34155 key = toKey(key); 34156 baseAssignValue(object, key, bind(object[key], object)); 34157 }); 34158 return object; 34159 }); 34160 34161 /** 34162 * Creates a function that iterates over `pairs` and invokes the corresponding 34163 * function of the first predicate to return truthy. The predicate-function 34164 * pairs are invoked with the `this` binding and arguments of the created 34165 * function. 34166 * 34167 * @static 34168 * @memberOf _ 34169 * @since 4.0.0 34170 * @category Util 34171 * @param {Array} pairs The predicate-function pairs. 34172 * @returns {Function} Returns the new composite function. 34173 * @example 34174 * 34175 * var func = _.cond([ 34176 * [_.matches({ 'a': 1 }), _.constant('matches A')], 34177 * [_.conforms({ 'b': _.isNumber }), _.constant('matches B')], 34178 * [_.stubTrue, _.constant('no match')] 34179 * ]); 34180 * 34181 * func({ 'a': 1, 'b': 2 }); 34182 * // => 'matches A' 34183 * 34184 * func({ 'a': 0, 'b': 1 }); 34185 * // => 'matches B' 34186 * 34187 * func({ 'a': '1', 'b': '2' }); 34188 * // => 'no match' 34189 */ 34190 function cond(pairs) { 34191 var length = pairs == null ? 0 : pairs.length, 34192 toIteratee = getIteratee(); 34193 34194 pairs = !length ? [] : arrayMap(pairs, function(pair) { 34195 if (typeof pair[1] != 'function') { 34196 throw new TypeError(FUNC_ERROR_TEXT); 34197 } 34198 return [toIteratee(pair[0]), pair[1]]; 34199 }); 34200 34201 return baseRest(function(args) { 34202 var index = -1; 34203 while (++index < length) { 34204 var pair = pairs[index]; 34205 if (apply(pair[0], this, args)) { 34206 return apply(pair[1], this, args); 34207 } 34208 } 34209 }); 34210 } 34211 34212 /** 34213 * Creates a function that invokes the predicate properties of `source` with 34214 * the corresponding property values of a given object, returning `true` if 34215 * all predicates return truthy, else `false`. 34216 * 34217 * **Note:** The created function is equivalent to `_.conformsTo` with 34218 * `source` partially applied. 34219 * 34220 * @static 34221 * @memberOf _ 34222 * @since 4.0.0 34223 * @category Util 34224 * @param {Object} source The object of property predicates to conform to. 34225 * @returns {Function} Returns the new spec function. 34226 * @example 34227 * 34228 * var objects = [ 34229 * { 'a': 2, 'b': 1 }, 34230 * { 'a': 1, 'b': 2 } 34231 * ]; 34232 * 34233 * _.filter(objects, _.conforms({ 'b': function(n) { return n > 1; } })); 34234 * // => [{ 'a': 1, 'b': 2 }] 34235 */ 34236 function conforms(source) { 34237 return baseConforms(baseClone(source, CLONE_DEEP_FLAG)); 34238 } 34239 34240 /** 34241 * Creates a function that returns `value`. 34242 * 34243 * @static 34244 * @memberOf _ 34245 * @since 2.4.0 34246 * @category Util 34247 * @param {*} value The value to return from the new function. 34248 * @returns {Function} Returns the new constant function. 34249 * @example 34250 * 34251 * var objects = _.times(2, _.constant({ 'a': 1 })); 34252 * 34253 * console.log(objects); 34254 * // => [{ 'a': 1 }, { 'a': 1 }] 34255 * 34256 * console.log(objects[0] === objects[1]); 34257 * // => true 34258 */ 34259 function constant(value) { 34260 return function() { 34261 return value; 34262 }; 34263 } 34264 34265 /** 34266 * Checks `value` to determine whether a default value should be returned in 34267 * its place. The `defaultValue` is returned if `value` is `NaN`, `null`, 34268 * or `undefined`. 34269 * 34270 * @static 34271 * @memberOf _ 34272 * @since 4.14.0 34273 * @category Util 34274 * @param {*} value The value to check. 34275 * @param {*} defaultValue The default value. 34276 * @returns {*} Returns the resolved value. 34277 * @example 34278 * 34279 * _.defaultTo(1, 10); 34280 * // => 1 34281 * 34282 * _.defaultTo(undefined, 10); 34283 * // => 10 34284 */ 34285 function defaultTo(value, defaultValue) { 34286 return (value == null || value !== value) ? defaultValue : value; 34287 } 34288 34289 /** 34290 * Creates a function that returns the result of invoking the given functions 34291 * with the `this` binding of the created function, where each successive 34292 * invocation is supplied the return value of the previous. 34293 * 34294 * @static 34295 * @memberOf _ 34296 * @since 3.0.0 34297 * @category Util 34298 * @param {...(Function|Function[])} [funcs] The functions to invoke. 34299 * @returns {Function} Returns the new composite function. 34300 * @see _.flowRight 34301 * @example 34302 * 34303 * function square(n) { 34304 * return n * n; 34305 * } 34306 * 34307 * var addSquare = _.flow([_.add, square]); 34308 * addSquare(1, 2); 34309 * // => 9 34310 */ 34311 var flow = createFlow(); 34312 34313 /** 34314 * This method is like `_.flow` except that it creates a function that 34315 * invokes the given functions from right to left. 34316 * 34317 * @static 34318 * @since 3.0.0 34319 * @memberOf _ 34320 * @category Util 34321 * @param {...(Function|Function[])} [funcs] The functions to invoke. 34322 * @returns {Function} Returns the new composite function. 34323 * @see _.flow 34324 * @example 34325 * 34326 * function square(n) { 34327 * return n * n; 34328 * } 34329 * 34330 * var addSquare = _.flowRight([square, _.add]); 34331 * addSquare(1, 2); 34332 * // => 9 34333 */ 34334 var flowRight = createFlow(true); 34335 34336 /** 34337 * This method returns the first argument it receives. 34338 * 34339 * @static 34340 * @since 0.1.0 34341 * @memberOf _ 34342 * @category Util 34343 * @param {*} value Any value. 34344 * @returns {*} Returns `value`. 34345 * @example 34346 * 34347 * var object = { 'a': 1 }; 34348 * 34349 * console.log(_.identity(object) === object); 34350 * // => true 34351 */ 34352 function identity(value) { 34353 return value; 34354 } 34355 34356 /** 34357 * Creates a function that invokes `func` with the arguments of the created 34358 * function. If `func` is a property name, the created function returns the 34359 * property value for a given element. If `func` is an array or object, the 34360 * created function returns `true` for elements that contain the equivalent 34361 * source properties, otherwise it returns `false`. 34362 * 34363 * @static 34364 * @since 4.0.0 34365 * @memberOf _ 34366 * @category Util 34367 * @param {*} [func=_.identity] The value to convert to a callback. 34368 * @returns {Function} Returns the callback. 34369 * @example 34370 * 34371 * var users = [ 34372 * { 'user': 'barney', 'age': 36, 'active': true }, 34373 * { 'user': 'fred', 'age': 40, 'active': false } 34374 * ]; 34375 * 34376 * // The `_.matches` iteratee shorthand. 34377 * _.filter(users, _.iteratee({ 'user': 'barney', 'active': true })); 34378 * // => [{ 'user': 'barney', 'age': 36, 'active': true }] 34379 * 34380 * // The `_.matchesProperty` iteratee shorthand. 34381 * _.filter(users, _.iteratee(['user', 'fred'])); 34382 * // => [{ 'user': 'fred', 'age': 40 }] 34383 * 34384 * // The `_.property` iteratee shorthand. 34385 * _.map(users, _.iteratee('user')); 34386 * // => ['barney', 'fred'] 34387 * 34388 * // Create custom iteratee shorthands. 34389 * _.iteratee = _.wrap(_.iteratee, function(iteratee, func) { 34390 * return !_.isRegExp(func) ? iteratee(func) : function(string) { 34391 * return func.test(string); 34392 * }; 34393 * }); 34394 * 34395 * _.filter(['abc', 'def'], /ef/); 34396 * // => ['def'] 34397 */ 34398 function iteratee(func) { 34399 return baseIteratee(typeof func == 'function' ? func : baseClone(func, CLONE_DEEP_FLAG)); 34400 } 34401 34402 /** 34403 * Creates a function that performs a partial deep comparison between a given 34404 * object and `source`, returning `true` if the given object has equivalent 34405 * property values, else `false`. 34406 * 34407 * **Note:** The created function is equivalent to `_.isMatch` with `source` 34408 * partially applied. 34409 * 34410 * Partial comparisons will match empty array and empty object `source` 34411 * values against any array or object value, respectively. See `_.isEqual` 34412 * for a list of supported value comparisons. 34413 * 34414 * **Note:** Multiple values can be checked by combining several matchers 34415 * using `_.overSome` 34416 * 34417 * @static 34418 * @memberOf _ 34419 * @since 3.0.0 34420 * @category Util 34421 * @param {Object} source The object of property values to match. 34422 * @returns {Function} Returns the new spec function. 34423 * @example 34424 * 34425 * var objects = [ 34426 * { 'a': 1, 'b': 2, 'c': 3 }, 34427 * { 'a': 4, 'b': 5, 'c': 6 } 34428 * ]; 34429 * 34430 * _.filter(objects, _.matches({ 'a': 4, 'c': 6 })); 34431 * // => [{ 'a': 4, 'b': 5, 'c': 6 }] 34432 * 34433 * // Checking for several possible values 34434 * _.filter(objects, _.overSome([_.matches({ 'a': 1 }), _.matches({ 'a': 4 })])); 34435 * // => [{ 'a': 1, 'b': 2, 'c': 3 }, { 'a': 4, 'b': 5, 'c': 6 }] 34436 */ 34437 function matches(source) { 34438 return baseMatches(baseClone(source, CLONE_DEEP_FLAG)); 34439 } 34440 34441 /** 34442 * Creates a function that performs a partial deep comparison between the 34443 * value at `path` of a given object to `srcValue`, returning `true` if the 34444 * object value is equivalent, else `false`. 34445 * 34446 * **Note:** Partial comparisons will match empty array and empty object 34447 * `srcValue` values against any array or object value, respectively. See 34448 * `_.isEqual` for a list of supported value comparisons. 34449 * 34450 * **Note:** Multiple values can be checked by combining several matchers 34451 * using `_.overSome` 34452 * 34453 * @static 34454 * @memberOf _ 34455 * @since 3.2.0 34456 * @category Util 34457 * @param {Array|string} path The path of the property to get. 34458 * @param {*} srcValue The value to match. 34459 * @returns {Function} Returns the new spec function. 34460 * @example 34461 * 34462 * var objects = [ 34463 * { 'a': 1, 'b': 2, 'c': 3 }, 34464 * { 'a': 4, 'b': 5, 'c': 6 } 34465 * ]; 34466 * 34467 * _.find(objects, _.matchesProperty('a', 4)); 34468 * // => { 'a': 4, 'b': 5, 'c': 6 } 34469 * 34470 * // Checking for several possible values 34471 * _.filter(objects, _.overSome([_.matchesProperty('a', 1), _.matchesProperty('a', 4)])); 34472 * // => [{ 'a': 1, 'b': 2, 'c': 3 }, { 'a': 4, 'b': 5, 'c': 6 }] 34473 */ 34474 function matchesProperty(path, srcValue) { 34475 return baseMatchesProperty(path, baseClone(srcValue, CLONE_DEEP_FLAG)); 34476 } 34477 34478 /** 34479 * Creates a function that invokes the method at `path` of a given object. 34480 * Any additional arguments are provided to the invoked method. 34481 * 34482 * @static 34483 * @memberOf _ 34484 * @since 3.7.0 34485 * @category Util 34486 * @param {Array|string} path The path of the method to invoke. 34487 * @param {...*} [args] The arguments to invoke the method with. 34488 * @returns {Function} Returns the new invoker function. 34489 * @example 34490 * 34491 * var objects = [ 34492 * { 'a': { 'b': _.constant(2) } }, 34493 * { 'a': { 'b': _.constant(1) } } 34494 * ]; 34495 * 34496 * _.map(objects, _.method('a.b')); 34497 * // => [2, 1] 34498 * 34499 * _.map(objects, _.method(['a', 'b'])); 34500 * // => [2, 1] 34501 */ 34502 var method = baseRest(function(path, args) { 34503 return function(object) { 34504 return baseInvoke(object, path, args); 34505 }; 34506 }); 34507 34508 /** 34509 * The opposite of `_.method`; this method creates a function that invokes 34510 * the method at a given path of `object`. Any additional arguments are 34511 * provided to the invoked method. 34512 * 34513 * @static 34514 * @memberOf _ 34515 * @since 3.7.0 34516 * @category Util 34517 * @param {Object} object The object to query. 34518 * @param {...*} [args] The arguments to invoke the method with. 34519 * @returns {Function} Returns the new invoker function. 34520 * @example 34521 * 34522 * var array = _.times(3, _.constant), 34523 * object = { 'a': array, 'b': array, 'c': array }; 34524 * 34525 * _.map(['a[2]', 'c[0]'], _.methodOf(object)); 34526 * // => [2, 0] 34527 * 34528 * _.map([['a', '2'], ['c', '0']], _.methodOf(object)); 34529 * // => [2, 0] 34530 */ 34531 var methodOf = baseRest(function(object, args) { 34532 return function(path) { 34533 return baseInvoke(object, path, args); 34534 }; 34535 }); 34536 34537 /** 34538 * Adds all own enumerable string keyed function properties of a source 34539 * object to the destination object. If `object` is a function, then methods 34540 * are added to its prototype as well. 34541 * 34542 * **Note:** Use `_.runInContext` to create a pristine `lodash` function to 34543 * avoid conflicts caused by modifying the original. 34544 * 34545 * @static 34546 * @since 0.1.0 34547 * @memberOf _ 34548 * @category Util 34549 * @param {Function|Object} [object=lodash] The destination object. 34550 * @param {Object} source The object of functions to add. 34551 * @param {Object} [options={}] The options object. 34552 * @param {boolean} [options.chain=true] Specify whether mixins are chainable. 34553 * @returns {Function|Object} Returns `object`. 34554 * @example 34555 * 34556 * function vowels(string) { 34557 * return _.filter(string, function(v) { 34558 * return /[aeiou]/i.test(v); 34559 * }); 34560 * } 34561 * 34562 * _.mixin({ 'vowels': vowels }); 34563 * _.vowels('fred'); 34564 * // => ['e'] 34565 * 34566 * _('fred').vowels().value(); 34567 * // => ['e'] 34568 * 34569 * _.mixin({ 'vowels': vowels }, { 'chain': false }); 34570 * _('fred').vowels(); 34571 * // => ['e'] 34572 */ 34573 function mixin(object, source, options) { 34574 var props = keys(source), 34575 methodNames = baseFunctions(source, props); 34576 34577 if (options == null && 34578 !(isObject(source) && (methodNames.length || !props.length))) { 34579 options = source; 34580 source = object; 34581 object = this; 34582 methodNames = baseFunctions(source, keys(source)); 34583 } 34584 var chain = !(isObject(options) && 'chain' in options) || !!options.chain, 34585 isFunc = isFunction(object); 34586 34587 arrayEach(methodNames, function(methodName) { 34588 var func = source[methodName]; 34589 object[methodName] = func; 34590 if (isFunc) { 34591 object.prototype[methodName] = function() { 34592 var chainAll = this.__chain__; 34593 if (chain || chainAll) { 34594 var result = object(this.__wrapped__), 34595 actions = result.__actions__ = copyArray(this.__actions__); 34596 34597 actions.push({ 'func': func, 'args': arguments, 'thisArg': object }); 34598 result.__chain__ = chainAll; 34599 return result; 34600 } 34601 return func.apply(object, arrayPush([this.value()], arguments)); 34602 }; 34603 } 34604 }); 34605 34606 return object; 34607 } 34608 34609 /** 34610 * Reverts the `_` variable to its previous value and returns a reference to 34611 * the `lodash` function. 34612 * 34613 * @static 34614 * @since 0.1.0 34615 * @memberOf _ 34616 * @category Util 34617 * @returns {Function} Returns the `lodash` function. 34618 * @example 34619 * 34620 * var lodash = _.noConflict(); 34621 */ 34622 function noConflict() { 34623 if (root._ === this) { 34624 root._ = oldDash; 34625 } 34626 return this; 34627 } 34628 34629 /** 34630 * This method returns `undefined`. 34631 * 34632 * @static 34633 * @memberOf _ 34634 * @since 2.3.0 34635 * @category Util 34636 * @example 34637 * 34638 * _.times(2, _.noop); 34639 * // => [undefined, undefined] 34640 */ 34641 function noop() { 34642 // No operation performed. 34643 } 34644 34645 /** 34646 * Creates a function that gets the argument at index `n`. If `n` is negative, 34647 * the nth argument from the end is returned. 34648 * 34649 * @static 34650 * @memberOf _ 34651 * @since 4.0.0 34652 * @category Util 34653 * @param {number} [n=0] The index of the argument to return. 34654 * @returns {Function} Returns the new pass-thru function. 34655 * @example 34656 * 34657 * var func = _.nthArg(1); 34658 * func('a', 'b', 'c', 'd'); 34659 * // => 'b' 34660 * 34661 * var func = _.nthArg(-2); 34662 * func('a', 'b', 'c', 'd'); 34663 * // => 'c' 34664 */ 34665 function nthArg(n) { 34666 n = toInteger(n); 34667 return baseRest(function(args) { 34668 return baseNth(args, n); 34669 }); 34670 } 34671 34672 /** 34673 * Creates a function that invokes `iteratees` with the arguments it receives 34674 * and returns their results. 34675 * 34676 * @static 34677 * @memberOf _ 34678 * @since 4.0.0 34679 * @category Util 34680 * @param {...(Function|Function[])} [iteratees=[_.identity]] 34681 * The iteratees to invoke. 34682 * @returns {Function} Returns the new function. 34683 * @example 34684 * 34685 * var func = _.over([Math.max, Math.min]); 34686 * 34687 * func(1, 2, 3, 4); 34688 * // => [4, 1] 34689 */ 34690 var over = createOver(arrayMap); 34691 34692 /** 34693 * Creates a function that checks if **all** of the `predicates` return 34694 * truthy when invoked with the arguments it receives. 34695 * 34696 * Following shorthands are possible for providing predicates. 34697 * Pass an `Object` and it will be used as an parameter for `_.matches` to create the predicate. 34698 * Pass an `Array` of parameters for `_.matchesProperty` and the predicate will be created using them. 34699 * 34700 * @static 34701 * @memberOf _ 34702 * @since 4.0.0 34703 * @category Util 34704 * @param {...(Function|Function[])} [predicates=[_.identity]] 34705 * The predicates to check. 34706 * @returns {Function} Returns the new function. 34707 * @example 34708 * 34709 * var func = _.overEvery([Boolean, isFinite]); 34710 * 34711 * func('1'); 34712 * // => true 34713 * 34714 * func(null); 34715 * // => false 34716 * 34717 * func(NaN); 34718 * // => false 34719 */ 34720 var overEvery = createOver(arrayEvery); 34721 34722 /** 34723 * Creates a function that checks if **any** of the `predicates` return 34724 * truthy when invoked with the arguments it receives. 34725 * 34726 * Following shorthands are possible for providing predicates. 34727 * Pass an `Object` and it will be used as an parameter for `_.matches` to create the predicate. 34728 * Pass an `Array` of parameters for `_.matchesProperty` and the predicate will be created using them. 34729 * 34730 * @static 34731 * @memberOf _ 34732 * @since 4.0.0 34733 * @category Util 34734 * @param {...(Function|Function[])} [predicates=[_.identity]] 34735 * The predicates to check. 34736 * @returns {Function} Returns the new function. 34737 * @example 34738 * 34739 * var func = _.overSome([Boolean, isFinite]); 34740 * 34741 * func('1'); 34742 * // => true 34743 * 34744 * func(null); 34745 * // => true 34746 * 34747 * func(NaN); 34748 * // => false 34749 * 34750 * var matchesFunc = _.overSome([{ 'a': 1 }, { 'a': 2 }]) 34751 * var matchesPropertyFunc = _.overSome([['a', 1], ['a', 2]]) 34752 */ 34753 var overSome = createOver(arraySome); 34754 34755 /** 34756 * Creates a function that returns the value at `path` of a given object. 34757 * 34758 * @static 34759 * @memberOf _ 34760 * @since 2.4.0 34761 * @category Util 34762 * @param {Array|string} path The path of the property to get. 34763 * @returns {Function} Returns the new accessor function. 34764 * @example 34765 * 34766 * var objects = [ 34767 * { 'a': { 'b': 2 } }, 34768 * { 'a': { 'b': 1 } } 34769 * ]; 34770 * 34771 * _.map(objects, _.property('a.b')); 34772 * // => [2, 1] 34773 * 34774 * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b'); 34775 * // => [1, 2] 34776 */ 34777 function property(path) { 34778 return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path); 34779 } 34780 34781 /** 34782 * The opposite of `_.property`; this method creates a function that returns 34783 * the value at a given path of `object`. 34784 * 34785 * @static 34786 * @memberOf _ 34787 * @since 3.0.0 34788 * @category Util 34789 * @param {Object} object The object to query. 34790 * @returns {Function} Returns the new accessor function. 34791 * @example 34792 * 34793 * var array = [0, 1, 2], 34794 * object = { 'a': array, 'b': array, 'c': array }; 34795 * 34796 * _.map(['a[2]', 'c[0]'], _.propertyOf(object)); 34797 * // => [2, 0] 34798 * 34799 * _.map([['a', '2'], ['c', '0']], _.propertyOf(object)); 34800 * // => [2, 0] 34801 */ 34802 function propertyOf(object) { 34803 return function(path) { 34804 return object == null ? undefined : baseGet(object, path); 34805 }; 34806 } 34807 34808 /** 34809 * Creates an array of numbers (positive and/or negative) progressing from 34810 * `start` up to, but not including, `end`. A step of `-1` is used if a negative 34811 * `start` is specified without an `end` or `step`. If `end` is not specified, 34812 * it's set to `start` with `start` then set to `0`. 34813 * 34814 * **Note:** JavaScript follows the IEEE-754 standard for resolving 34815 * floating-point values which can produce unexpected results. 34816 * 34817 * @static 34818 * @since 0.1.0 34819 * @memberOf _ 34820 * @category Util 34821 * @param {number} [start=0] The start of the range. 34822 * @param {number} end The end of the range. 34823 * @param {number} [step=1] The value to increment or decrement by. 34824 * @returns {Array} Returns the range of numbers. 34825 * @see _.inRange, _.rangeRight 34826 * @example 34827 * 34828 * _.range(4); 34829 * // => [0, 1, 2, 3] 34830 * 34831 * _.range(-4); 34832 * // => [0, -1, -2, -3] 34833 * 34834 * _.range(1, 5); 34835 * // => [1, 2, 3, 4] 34836 * 34837 * _.range(0, 20, 5); 34838 * // => [0, 5, 10, 15] 34839 * 34840 * _.range(0, -4, -1); 34841 * // => [0, -1, -2, -3] 34842 * 34843 * _.range(1, 4, 0); 34844 * // => [1, 1, 1] 34845 * 34846 * _.range(0); 34847 * // => [] 34848 */ 34849 var range = createRange(); 34850 34851 /** 34852 * This method is like `_.range` except that it populates values in 34853 * descending order. 34854 * 34855 * @static 34856 * @memberOf _ 34857 * @since 4.0.0 34858 * @category Util 34859 * @param {number} [start=0] The start of the range. 34860 * @param {number} end The end of the range. 34861 * @param {number} [step=1] The value to increment or decrement by. 34862 * @returns {Array} Returns the range of numbers. 34863 * @see _.inRange, _.range 34864 * @example 34865 * 34866 * _.rangeRight(4); 34867 * // => [3, 2, 1, 0] 34868 * 34869 * _.rangeRight(-4); 34870 * // => [-3, -2, -1, 0] 34871 * 34872 * _.rangeRight(1, 5); 34873 * // => [4, 3, 2, 1] 34874 * 34875 * _.rangeRight(0, 20, 5); 34876 * // => [15, 10, 5, 0] 34877 * 34878 * _.rangeRight(0, -4, -1); 34879 * // => [-3, -2, -1, 0] 34880 * 34881 * _.rangeRight(1, 4, 0); 34882 * // => [1, 1, 1] 34883 * 34884 * _.rangeRight(0); 34885 * // => [] 34886 */ 34887 var rangeRight = createRange(true); 34888 34889 /** 34890 * This method returns a new empty array. 34891 * 34892 * @static 34893 * @memberOf _ 34894 * @since 4.13.0 34895 * @category Util 34896 * @returns {Array} Returns the new empty array. 34897 * @example 34898 * 34899 * var arrays = _.times(2, _.stubArray); 34900 * 34901 * console.log(arrays); 34902 * // => [[], []] 34903 * 34904 * console.log(arrays[0] === arrays[1]); 34905 * // => false 34906 */ 34907 function stubArray() { 34908 return []; 34909 } 34910 34911 /** 34912 * This method returns `false`. 34913 * 34914 * @static 34915 * @memberOf _ 34916 * @since 4.13.0 34917 * @category Util 34918 * @returns {boolean} Returns `false`. 34919 * @example 34920 * 34921 * _.times(2, _.stubFalse); 34922 * // => [false, false] 34923 */ 34924 function stubFalse() { 34925 return false; 34926 } 34927 34928 /** 34929 * This method returns a new empty object. 34930 * 34931 * @static 34932 * @memberOf _ 34933 * @since 4.13.0 34934 * @category Util 34935 * @returns {Object} Returns the new empty object. 34936 * @example 34937 * 34938 * var objects = _.times(2, _.stubObject); 34939 * 34940 * console.log(objects); 34941 * // => [{}, {}] 34942 * 34943 * console.log(objects[0] === objects[1]); 34944 * // => false 34945 */ 34946 function stubObject() { 34947 return {}; 34948 } 34949 34950 /** 34951 * This method returns an empty string. 34952 * 34953 * @static 34954 * @memberOf _ 34955 * @since 4.13.0 34956 * @category Util 34957 * @returns {string} Returns the empty string. 34958 * @example 34959 * 34960 * _.times(2, _.stubString); 34961 * // => ['', ''] 34962 */ 34963 function stubString() { 34964 return ''; 34965 } 34966 34967 /** 34968 * This method returns `true`. 34969 * 34970 * @static 34971 * @memberOf _ 34972 * @since 4.13.0 34973 * @category Util 34974 * @returns {boolean} Returns `true`. 34975 * @example 34976 * 34977 * _.times(2, _.stubTrue); 34978 * // => [true, true] 34979 */ 34980 function stubTrue() { 34981 return true; 34982 } 34983 34984 /** 34985 * Invokes the iteratee `n` times, returning an array of the results of 34986 * each invocation. The iteratee is invoked with one argument; (index). 34987 * 34988 * @static 34989 * @since 0.1.0 34990 * @memberOf _ 34991 * @category Util 34992 * @param {number} n The number of times to invoke `iteratee`. 34993 * @param {Function} [iteratee=_.identity] The function invoked per iteration. 34994 * @returns {Array} Returns the array of results. 34995 * @example 34996 * 34997 * _.times(3, String); 34998 * // => ['0', '1', '2'] 34999 * 35000 * _.times(4, _.constant(0)); 35001 * // => [0, 0, 0, 0] 35002 */ 35003 function times(n, iteratee) { 35004 n = toInteger(n); 35005 if (n < 1 || n > MAX_SAFE_INTEGER) { 35006 return []; 35007 } 35008 var index = MAX_ARRAY_LENGTH, 35009 length = nativeMin(n, MAX_ARRAY_LENGTH); 35010 35011 iteratee = getIteratee(iteratee); 35012 n -= MAX_ARRAY_LENGTH; 35013 35014 var result = baseTimes(length, iteratee); 35015 while (++index < n) { 35016 iteratee(index); 35017 } 35018 return result; 35019 } 35020 35021 /** 35022 * Converts `value` to a property path array. 35023 * 35024 * @static 35025 * @memberOf _ 35026 * @since 4.0.0 35027 * @category Util 35028 * @param {*} value The value to convert. 35029 * @returns {Array} Returns the new property path array. 35030 * @example 35031 * 35032 * _.toPath('a.b.c'); 35033 * // => ['a', 'b', 'c'] 35034 * 35035 * _.toPath('a[0].b.c'); 35036 * // => ['a', '0', 'b', 'c'] 35037 */ 35038 function toPath(value) { 35039 if (isArray(value)) { 35040 return arrayMap(value, toKey); 35041 } 35042 return isSymbol(value) ? [value] : copyArray(stringToPath(toString(value))); 35043 } 35044 35045 /** 35046 * Generates a unique ID. If `prefix` is given, the ID is appended to it. 35047 * 35048 * @static 35049 * @since 0.1.0 35050 * @memberOf _ 35051 * @category Util 35052 * @param {string} [prefix=''] The value to prefix the ID with. 35053 * @returns {string} Returns the unique ID. 35054 * @example 35055 * 35056 * _.uniqueId('contact_'); 35057 * // => 'contact_104' 35058 * 35059 * _.uniqueId(); 35060 * // => '105' 35061 */ 35062 function uniqueId(prefix) { 35063 var id = ++idCounter; 35064 return toString(prefix) + id; 35065 } 35066 35067 /*------------------------------------------------------------------------*/ 35068 35069 /** 35070 * Adds two numbers. 35071 * 35072 * @static 35073 * @memberOf _ 35074 * @since 3.4.0 35075 * @category Math 35076 * @param {number} augend The first number in an addition. 35077 * @param {number} addend The second number in an addition. 35078 * @returns {number} Returns the total. 35079 * @example 35080 * 35081 * _.add(6, 4); 35082 * // => 10 35083 */ 35084 var add = createMathOperation(function(augend, addend) { 35085 return augend + addend; 35086 }, 0); 35087 35088 /** 35089 * Computes `number` rounded up to `precision`. 35090 * 35091 * @static 35092 * @memberOf _ 35093 * @since 3.10.0 35094 * @category Math 35095 * @param {number} number The number to round up. 35096 * @param {number} [precision=0] The precision to round up to. 35097 * @returns {number} Returns the rounded up number. 35098 * @example 35099 * 35100 * _.ceil(4.006); 35101 * // => 5 35102 * 35103 * _.ceil(6.004, 2); 35104 * // => 6.01 35105 * 35106 * _.ceil(6040, -2); 35107 * // => 6100 35108 */ 35109 var ceil = createRound('ceil'); 35110 35111 /** 35112 * Divide two numbers. 35113 * 35114 * @static 35115 * @memberOf _ 35116 * @since 4.7.0 35117 * @category Math 35118 * @param {number} dividend The first number in a division. 35119 * @param {number} divisor The second number in a division. 35120 * @returns {number} Returns the quotient. 35121 * @example 35122 * 35123 * _.divide(6, 4); 35124 * // => 1.5 35125 */ 35126 var divide = createMathOperation(function(dividend, divisor) { 35127 return dividend / divisor; 35128 }, 1); 35129 35130 /** 35131 * Computes `number` rounded down to `precision`. 35132 * 35133 * @static 35134 * @memberOf _ 35135 * @since 3.10.0 35136 * @category Math 35137 * @param {number} number The number to round down. 35138 * @param {number} [precision=0] The precision to round down to. 35139 * @returns {number} Returns the rounded down number. 35140 * @example 35141 * 35142 * _.floor(4.006); 35143 * // => 4 35144 * 35145 * _.floor(0.046, 2); 35146 * // => 0.04 35147 * 35148 * _.floor(4060, -2); 35149 * // => 4000 35150 */ 35151 var floor = createRound('floor'); 35152 35153 /** 35154 * Computes the maximum value of `array`. If `array` is empty or falsey, 35155 * `undefined` is returned. 35156 * 35157 * @static 35158 * @since 0.1.0 35159 * @memberOf _ 35160 * @category Math 35161 * @param {Array} array The array to iterate over. 35162 * @returns {*} Returns the maximum value. 35163 * @example 35164 * 35165 * _.max([4, 2, 8, 6]); 35166 * // => 8 35167 * 35168 * _.max([]); 35169 * // => undefined 35170 */ 35171 function max(array) { 35172 return (array && array.length) 35173 ? baseExtremum(array, identity, baseGt) 35174 : undefined; 35175 } 35176 35177 /** 35178 * This method is like `_.max` except that it accepts `iteratee` which is 35179 * invoked for each element in `array` to generate the criterion by which 35180 * the value is ranked. The iteratee is invoked with one argument: (value). 35181 * 35182 * @static 35183 * @memberOf _ 35184 * @since 4.0.0 35185 * @category Math 35186 * @param {Array} array The array to iterate over. 35187 * @param {Function} [iteratee=_.identity] The iteratee invoked per element. 35188 * @returns {*} Returns the maximum value. 35189 * @example 35190 * 35191 * var objects = [{ 'n': 1 }, { 'n': 2 }]; 35192 * 35193 * _.maxBy(objects, function(o) { return o.n; }); 35194 * // => { 'n': 2 } 35195 * 35196 * // The `_.property` iteratee shorthand. 35197 * _.maxBy(objects, 'n'); 35198 * // => { 'n': 2 } 35199 */ 35200 function maxBy(array, iteratee) { 35201 return (array && array.length) 35202 ? baseExtremum(array, getIteratee(iteratee, 2), baseGt) 35203 : undefined; 35204 } 35205 35206 /** 35207 * Computes the mean of the values in `array`. 35208 * 35209 * @static 35210 * @memberOf _ 35211 * @since 4.0.0 35212 * @category Math 35213 * @param {Array} array The array to iterate over. 35214 * @returns {number} Returns the mean. 35215 * @example 35216 * 35217 * _.mean([4, 2, 8, 6]); 35218 * // => 5 35219 */ 35220 function mean(array) { 35221 return baseMean(array, identity); 35222 } 35223 35224 /** 35225 * This method is like `_.mean` except that it accepts `iteratee` which is 35226 * invoked for each element in `array` to generate the value to be averaged. 35227 * The iteratee is invoked with one argument: (value). 35228 * 35229 * @static 35230 * @memberOf _ 35231 * @since 4.7.0 35232 * @category Math 35233 * @param {Array} array The array to iterate over. 35234 * @param {Function} [iteratee=_.identity] The iteratee invoked per element. 35235 * @returns {number} Returns the mean. 35236 * @example 35237 * 35238 * var objects = [{ 'n': 4 }, { 'n': 2 }, { 'n': 8 }, { 'n': 6 }]; 35239 * 35240 * _.meanBy(objects, function(o) { return o.n; }); 35241 * // => 5 35242 * 35243 * // The `_.property` iteratee shorthand. 35244 * _.meanBy(objects, 'n'); 35245 * // => 5 35246 */ 35247 function meanBy(array, iteratee) { 35248 return baseMean(array, getIteratee(iteratee, 2)); 35249 } 35250 35251 /** 35252 * Computes the minimum value of `array`. If `array` is empty or falsey, 35253 * `undefined` is returned. 35254 * 35255 * @static 35256 * @since 0.1.0 35257 * @memberOf _ 35258 * @category Math 35259 * @param {Array} array The array to iterate over. 35260 * @returns {*} Returns the minimum value. 35261 * @example 35262 * 35263 * _.min([4, 2, 8, 6]); 35264 * // => 2 35265 * 35266 * _.min([]); 35267 * // => undefined 35268 */ 35269 function min(array) { 35270 return (array && array.length) 35271 ? baseExtremum(array, identity, baseLt) 35272 : undefined; 35273 } 35274 35275 /** 35276 * This method is like `_.min` except that it accepts `iteratee` which is 35277 * invoked for each element in `array` to generate the criterion by which 35278 * the value is ranked. The iteratee is invoked with one argument: (value). 35279 * 35280 * @static 35281 * @memberOf _ 35282 * @since 4.0.0 35283 * @category Math 35284 * @param {Array} array The array to iterate over. 35285 * @param {Function} [iteratee=_.identity] The iteratee invoked per element. 35286 * @returns {*} Returns the minimum value. 35287 * @example 35288 * 35289 * var objects = [{ 'n': 1 }, { 'n': 2 }]; 35290 * 35291 * _.minBy(objects, function(o) { return o.n; }); 35292 * // => { 'n': 1 } 35293 * 35294 * // The `_.property` iteratee shorthand. 35295 * _.minBy(objects, 'n'); 35296 * // => { 'n': 1 } 35297 */ 35298 function minBy(array, iteratee) { 35299 return (array && array.length) 35300 ? baseExtremum(array, getIteratee(iteratee, 2), baseLt) 35301 : undefined; 35302 } 35303 35304 /** 35305 * Multiply two numbers. 35306 * 35307 * @static 35308 * @memberOf _ 35309 * @since 4.7.0 35310 * @category Math 35311 * @param {number} multiplier The first number in a multiplication. 35312 * @param {number} multiplicand The second number in a multiplication. 35313 * @returns {number} Returns the product. 35314 * @example 35315 * 35316 * _.multiply(6, 4); 35317 * // => 24 35318 */ 35319 var multiply = createMathOperation(function(multiplier, multiplicand) { 35320 return multiplier * multiplicand; 35321 }, 1); 35322 35323 /** 35324 * Computes `number` rounded to `precision`. 35325 * 35326 * @static 35327 * @memberOf _ 35328 * @since 3.10.0 35329 * @category Math 35330 * @param {number} number The number to round. 35331 * @param {number} [precision=0] The precision to round to. 35332 * @returns {number} Returns the rounded number. 35333 * @example 35334 * 35335 * _.round(4.006); 35336 * // => 4 35337 * 35338 * _.round(4.006, 2); 35339 * // => 4.01 35340 * 35341 * _.round(4060, -2); 35342 * // => 4100 35343 */ 35344 var round = createRound('round'); 35345 35346 /** 35347 * Subtract two numbers. 35348 * 35349 * @static 35350 * @memberOf _ 35351 * @since 4.0.0 35352 * @category Math 35353 * @param {number} minuend The first number in a subtraction. 35354 * @param {number} subtrahend The second number in a subtraction. 35355 * @returns {number} Returns the difference. 35356 * @example 35357 * 35358 * _.subtract(6, 4); 35359 * // => 2 35360 */ 35361 var subtract = createMathOperation(function(minuend, subtrahend) { 35362 return minuend - subtrahend; 35363 }, 0); 35364 35365 /** 35366 * Computes the sum of the values in `array`. 35367 * 35368 * @static 35369 * @memberOf _ 35370 * @since 3.4.0 35371 * @category Math 35372 * @param {Array} array The array to iterate over. 35373 * @returns {number} Returns the sum. 35374 * @example 35375 * 35376 * _.sum([4, 2, 8, 6]); 35377 * // => 20 35378 */ 35379 function sum(array) { 35380 return (array && array.length) 35381 ? baseSum(array, identity) 35382 : 0; 35383 } 35384 35385 /** 35386 * This method is like `_.sum` except that it accepts `iteratee` which is 35387 * invoked for each element in `array` to generate the value to be summed. 35388 * The iteratee is invoked with one argument: (value). 35389 * 35390 * @static 35391 * @memberOf _ 35392 * @since 4.0.0 35393 * @category Math 35394 * @param {Array} array The array to iterate over. 35395 * @param {Function} [iteratee=_.identity] The iteratee invoked per element. 35396 * @returns {number} Returns the sum. 35397 * @example 35398 * 35399 * var objects = [{ 'n': 4 }, { 'n': 2 }, { 'n': 8 }, { 'n': 6 }]; 35400 * 35401 * _.sumBy(objects, function(o) { return o.n; }); 35402 * // => 20 35403 * 35404 * // The `_.property` iteratee shorthand. 35405 * _.sumBy(objects, 'n'); 35406 * // => 20 35407 */ 35408 function sumBy(array, iteratee) { 35409 return (array && array.length) 35410 ? baseSum(array, getIteratee(iteratee, 2)) 35411 : 0; 35412 } 35413 35414 /*------------------------------------------------------------------------*/ 35415 35416 // Add methods that return wrapped values in chain sequences. 35417 lodash.after = after; 35418 lodash.ary = ary; 35419 lodash.assign = assign; 35420 lodash.assignIn = assignIn; 35421 lodash.assignInWith = assignInWith; 35422 lodash.assignWith = assignWith; 35423 lodash.at = at; 35424 lodash.before = before; 35425 lodash.bind = bind; 35426 lodash.bindAll = bindAll; 35427 lodash.bindKey = bindKey; 35428 lodash.castArray = castArray; 35429 lodash.chain = chain; 35430 lodash.chunk = chunk; 35431 lodash.compact = compact; 35432 lodash.concat = concat; 35433 lodash.cond = cond; 35434 lodash.conforms = conforms; 35435 lodash.constant = constant; 35436 lodash.countBy = countBy; 35437 lodash.create = create; 35438 lodash.curry = curry; 35439 lodash.curryRight = curryRight; 35440 lodash.debounce = debounce; 35441 lodash.defaults = defaults; 35442 lodash.defaultsDeep = defaultsDeep; 35443 lodash.defer = defer; 35444 lodash.delay = delay; 35445 lodash.difference = difference; 35446 lodash.differenceBy = differenceBy; 35447 lodash.differenceWith = differenceWith; 35448 lodash.drop = drop; 35449 lodash.dropRight = dropRight; 35450 lodash.dropRightWhile = dropRightWhile; 35451 lodash.dropWhile = dropWhile; 35452 lodash.fill = fill; 35453 lodash.filter = filter; 35454 lodash.flatMap = flatMap; 35455 lodash.flatMapDeep = flatMapDeep; 35456 lodash.flatMapDepth = flatMapDepth; 35457 lodash.flatten = flatten; 35458 lodash.flattenDeep = flattenDeep; 35459 lodash.flattenDepth = flattenDepth; 35460 lodash.flip = flip; 35461 lodash.flow = flow; 35462 lodash.flowRight = flowRight; 35463 lodash.fromPairs = fromPairs; 35464 lodash.functions = functions; 35465 lodash.functionsIn = functionsIn; 35466 lodash.groupBy = groupBy; 35467 lodash.initial = initial; 35468 lodash.intersection = intersection; 35469 lodash.intersectionBy = intersectionBy; 35470 lodash.intersectionWith = intersectionWith; 35471 lodash.invert = invert; 35472 lodash.invertBy = invertBy; 35473 lodash.invokeMap = invokeMap; 35474 lodash.iteratee = iteratee; 35475 lodash.keyBy = keyBy; 35476 lodash.keys = keys; 35477 lodash.keysIn = keysIn; 35478 lodash.map = map; 35479 lodash.mapKeys = mapKeys; 35480 lodash.mapValues = mapValues; 35481 lodash.matches = matches; 35482 lodash.matchesProperty = matchesProperty; 35483 lodash.memoize = memoize; 35484 lodash.merge = merge; 35485 lodash.mergeWith = mergeWith; 35486 lodash.method = method; 35487 lodash.methodOf = methodOf; 35488 lodash.mixin = mixin; 35489 lodash.negate = negate; 35490 lodash.nthArg = nthArg; 35491 lodash.omit = omit; 35492 lodash.omitBy = omitBy; 35493 lodash.once = once; 35494 lodash.orderBy = orderBy; 35495 lodash.over = over; 35496 lodash.overArgs = overArgs; 35497 lodash.overEvery = overEvery; 35498 lodash.overSome = overSome; 35499 lodash.partial = partial; 35500 lodash.partialRight = partialRight; 35501 lodash.partition = partition; 35502 lodash.pick = pick; 35503 lodash.pickBy = pickBy; 35504 lodash.property = property; 35505 lodash.propertyOf = propertyOf; 35506 lodash.pull = pull; 35507 lodash.pullAll = pullAll; 35508 lodash.pullAllBy = pullAllBy; 35509 lodash.pullAllWith = pullAllWith; 35510 lodash.pullAt = pullAt; 35511 lodash.range = range; 35512 lodash.rangeRight = rangeRight; 35513 lodash.rearg = rearg; 35514 lodash.reject = reject; 35515 lodash.remove = remove; 35516 lodash.rest = rest; 35517 lodash.reverse = reverse; 35518 lodash.sampleSize = sampleSize; 35519 lodash.set = set; 35520 lodash.setWith = setWith; 35521 lodash.shuffle = shuffle; 35522 lodash.slice = slice; 35523 lodash.sortBy = sortBy; 35524 lodash.sortedUniq = sortedUniq; 35525 lodash.sortedUniqBy = sortedUniqBy; 35526 lodash.split = split; 35527 lodash.spread = spread; 35528 lodash.tail = tail; 35529 lodash.take = take; 35530 lodash.takeRight = takeRight; 35531 lodash.takeRightWhile = takeRightWhile; 35532 lodash.takeWhile = takeWhile; 35533 lodash.tap = tap; 35534 lodash.throttle = throttle; 35535 lodash.thru = thru; 35536 lodash.toArray = toArray; 35537 lodash.toPairs = toPairs; 35538 lodash.toPairsIn = toPairsIn; 35539 lodash.toPath = toPath; 35540 lodash.toPlainObject = toPlainObject; 35541 lodash.transform = transform; 35542 lodash.unary = unary; 35543 lodash.union = union; 35544 lodash.unionBy = unionBy; 35545 lodash.unionWith = unionWith; 35546 lodash.uniq = uniq; 35547 lodash.uniqBy = uniqBy; 35548 lodash.uniqWith = uniqWith; 35549 lodash.unset = unset; 35550 lodash.unzip = unzip; 35551 lodash.unzipWith = unzipWith; 35552 lodash.update = update; 35553 lodash.updateWith = updateWith; 35554 lodash.values = values; 35555 lodash.valuesIn = valuesIn; 35556 lodash.without = without; 35557 lodash.words = words; 35558 lodash.wrap = wrap; 35559 lodash.xor = xor; 35560 lodash.xorBy = xorBy; 35561 lodash.xorWith = xorWith; 35562 lodash.zip = zip; 35563 lodash.zipObject = zipObject; 35564 lodash.zipObjectDeep = zipObjectDeep; 35565 lodash.zipWith = zipWith; 35566 35567 // Add aliases. 35568 lodash.entries = toPairs; 35569 lodash.entriesIn = toPairsIn; 35570 lodash.extend = assignIn; 35571 lodash.extendWith = assignInWith; 35572 35573 // Add methods to `lodash.prototype`. 35574 mixin(lodash, lodash); 35575 35576 /*------------------------------------------------------------------------*/ 35577 35578 // Add methods that return unwrapped values in chain sequences. 35579 lodash.add = add; 35580 lodash.attempt = attempt; 35581 lodash.camelCase = camelCase; 35582 lodash.capitalize = capitalize; 35583 lodash.ceil = ceil; 35584 lodash.clamp = clamp; 35585 lodash.clone = clone; 35586 lodash.cloneDeep = cloneDeep; 35587 lodash.cloneDeepWith = cloneDeepWith; 35588 lodash.cloneWith = cloneWith; 35589 lodash.conformsTo = conformsTo; 35590 lodash.deburr = deburr; 35591 lodash.defaultTo = defaultTo; 35592 lodash.divide = divide; 35593 lodash.endsWith = endsWith; 35594 lodash.eq = eq; 35595 lodash.escape = escape; 35596 lodash.escapeRegExp = escapeRegExp; 35597 lodash.every = every; 35598 lodash.find = find; 35599 lodash.findIndex = findIndex; 35600 lodash.findKey = findKey; 35601 lodash.findLast = findLast; 35602 lodash.findLastIndex = findLastIndex; 35603 lodash.findLastKey = findLastKey; 35604 lodash.floor = floor; 35605 lodash.forEach = forEach; 35606 lodash.forEachRight = forEachRight; 35607 lodash.forIn = forIn; 35608 lodash.forInRight = forInRight; 35609 lodash.forOwn = forOwn; 35610 lodash.forOwnRight = forOwnRight; 35611 lodash.get = get; 35612 lodash.gt = gt; 35613 lodash.gte = gte; 35614 lodash.has = has; 35615 lodash.hasIn = hasIn; 35616 lodash.head = head; 35617 lodash.identity = identity; 35618 lodash.includes = includes; 35619 lodash.indexOf = indexOf; 35620 lodash.inRange = inRange; 35621 lodash.invoke = invoke; 35622 lodash.isArguments = isArguments; 35623 lodash.isArray = isArray; 35624 lodash.isArrayBuffer = isArrayBuffer; 35625 lodash.isArrayLike = isArrayLike; 35626 lodash.isArrayLikeObject = isArrayLikeObject; 35627 lodash.isBoolean = isBoolean; 35628 lodash.isBuffer = isBuffer; 35629 lodash.isDate = isDate; 35630 lodash.isElement = isElement; 35631 lodash.isEmpty = isEmpty; 35632 lodash.isEqual = isEqual; 35633 lodash.isEqualWith = isEqualWith; 35634 lodash.isError = isError; 35635 lodash.isFinite = isFinite; 35636 lodash.isFunction = isFunction; 35637 lodash.isInteger = isInteger; 35638 lodash.isLength = isLength; 35639 lodash.isMap = isMap; 35640 lodash.isMatch = isMatch; 35641 lodash.isMatchWith = isMatchWith; 35642 lodash.isNaN = isNaN; 35643 lodash.isNative = isNative; 35644 lodash.isNil = isNil; 35645 lodash.isNull = isNull; 35646 lodash.isNumber = isNumber; 35647 lodash.isObject = isObject; 35648 lodash.isObjectLike = isObjectLike; 35649 lodash.isPlainObject = isPlainObject; 35650 lodash.isRegExp = isRegExp; 35651 lodash.isSafeInteger = isSafeInteger; 35652 lodash.isSet = isSet; 35653 lodash.isString = isString; 35654 lodash.isSymbol = isSymbol; 35655 lodash.isTypedArray = isTypedArray; 35656 lodash.isUndefined = isUndefined; 35657 lodash.isWeakMap = isWeakMap; 35658 lodash.isWeakSet = isWeakSet; 35659 lodash.join = join; 35660 lodash.kebabCase = kebabCase; 35661 lodash.last = last; 35662 lodash.lastIndexOf = lastIndexOf; 35663 lodash.lowerCase = lowerCase; 35664 lodash.lowerFirst = lowerFirst; 35665 lodash.lt = lt; 35666 lodash.lte = lte; 35667 lodash.max = max; 35668 lodash.maxBy = maxBy; 35669 lodash.mean = mean; 35670 lodash.meanBy = meanBy; 35671 lodash.min = min; 35672 lodash.minBy = minBy; 35673 lodash.stubArray = stubArray; 35674 lodash.stubFalse = stubFalse; 35675 lodash.stubObject = stubObject; 35676 lodash.stubString = stubString; 35677 lodash.stubTrue = stubTrue; 35678 lodash.multiply = multiply; 35679 lodash.nth = nth; 35680 lodash.noConflict = noConflict; 35681 lodash.noop = noop; 35682 lodash.now = now; 35683 lodash.pad = pad; 35684 lodash.padEnd = padEnd; 35685 lodash.padStart = padStart; 35686 lodash.parseInt = parseInt; 35687 lodash.random = random; 35688 lodash.reduce = reduce; 35689 lodash.reduceRight = reduceRight; 35690 lodash.repeat = repeat; 35691 lodash.replace = replace; 35692 lodash.result = result; 35693 lodash.round = round; 35694 lodash.runInContext = runInContext; 35695 lodash.sample = sample; 35696 lodash.size = size; 35697 lodash.snakeCase = snakeCase; 35698 lodash.some = some; 35699 lodash.sortedIndex = sortedIndex; 35700 lodash.sortedIndexBy = sortedIndexBy; 35701 lodash.sortedIndexOf = sortedIndexOf; 35702 lodash.sortedLastIndex = sortedLastIndex; 35703 lodash.sortedLastIndexBy = sortedLastIndexBy; 35704 lodash.sortedLastIndexOf = sortedLastIndexOf; 35705 lodash.startCase = startCase; 35706 lodash.startsWith = startsWith; 35707 lodash.subtract = subtract; 35708 lodash.sum = sum; 35709 lodash.sumBy = sumBy; 35710 lodash.template = template; 35711 lodash.times = times; 35712 lodash.toFinite = toFinite; 35713 lodash.toInteger = toInteger; 35714 lodash.toLength = toLength; 35715 lodash.toLower = toLower; 35716 lodash.toNumber = toNumber; 35717 lodash.toSafeInteger = toSafeInteger; 35718 lodash.toString = toString; 35719 lodash.toUpper = toUpper; 35720 lodash.trim = trim; 35721 lodash.trimEnd = trimEnd; 35722 lodash.trimStart = trimStart; 35723 lodash.truncate = truncate; 35724 lodash.unescape = unescape; 35725 lodash.uniqueId = uniqueId; 35726 lodash.upperCase = upperCase; 35727 lodash.upperFirst = upperFirst; 35728 35729 // Add aliases. 35730 lodash.each = forEach; 35731 lodash.eachRight = forEachRight; 35732 lodash.first = head; 35733 35734 mixin(lodash, (function() { 35735 var source = {}; 35736 baseForOwn(lodash, function(func, methodName) { 35737 if (!hasOwnProperty.call(lodash.prototype, methodName)) { 35738 source[methodName] = func; 35739 } 35740 }); 35741 return source; 35742 }()), { 'chain': false }); 35743 35744 /*------------------------------------------------------------------------*/ 35745 35746 /** 35747 * The semantic version number. 35748 * 35749 * @static 35750 * @memberOf _ 35751 * @type {string} 35752 */ 35753 lodash.VERSION = VERSION; 35754 35755 // Assign default placeholders. 35756 arrayEach(['bind', 'bindKey', 'curry', 'curryRight', 'partial', 'partialRight'], function(methodName) { 35757 lodash[methodName].placeholder = lodash; 35758 }); 35759 35760 // Add `LazyWrapper` methods for `_.drop` and `_.take` variants. 35761 arrayEach(['drop', 'take'], function(methodName, index) { 35762 LazyWrapper.prototype[methodName] = function(n) { 35763 n = n === undefined ? 1 : nativeMax(toInteger(n), 0); 35764 35765 var result = (this.__filtered__ && !index) 35766 ? new LazyWrapper(this) 35767 : this.clone(); 35768 35769 if (result.__filtered__) { 35770 result.__takeCount__ = nativeMin(n, result.__takeCount__); 35771 } else { 35772 result.__views__.push({ 35773 'size': nativeMin(n, MAX_ARRAY_LENGTH), 35774 'type': methodName + (result.__dir__ < 0 ? 'Right' : '') 35775 }); 35776 } 35777 return result; 35778 }; 35779 35780 LazyWrapper.prototype[methodName + 'Right'] = function(n) { 35781 return this.reverse()[methodName](n).reverse(); 35782 }; 35783 }); 35784 35785 // Add `LazyWrapper` methods that accept an `iteratee` value. 35786 arrayEach(['filter', 'map', 'takeWhile'], function(methodName, index) { 35787 var type = index + 1, 35788 isFilter = type == LAZY_FILTER_FLAG || type == LAZY_WHILE_FLAG; 35789 35790 LazyWrapper.prototype[methodName] = function(iteratee) { 35791 var result = this.clone(); 35792 result.__iteratees__.push({ 35793 'iteratee': getIteratee(iteratee, 3), 35794 'type': type 35795 }); 35796 result.__filtered__ = result.__filtered__ || isFilter; 35797 return result; 35798 }; 35799 }); 35800 35801 // Add `LazyWrapper` methods for `_.head` and `_.last`. 35802 arrayEach(['head', 'last'], function(methodName, index) { 35803 var takeName = 'take' + (index ? 'Right' : ''); 35804 35805 LazyWrapper.prototype[methodName] = function() { 35806 return this[takeName](1).value()[0]; 35807 }; 35808 }); 35809 35810 // Add `LazyWrapper` methods for `_.initial` and `_.tail`. 35811 arrayEach(['initial', 'tail'], function(methodName, index) { 35812 var dropName = 'drop' + (index ? '' : 'Right'); 35813 35814 LazyWrapper.prototype[methodName] = function() { 35815 return this.__filtered__ ? new LazyWrapper(this) : this[dropName](1); 35816 }; 35817 }); 35818 35819 LazyWrapper.prototype.compact = function() { 35820 return this.filter(identity); 35821 }; 35822 35823 LazyWrapper.prototype.find = function(predicate) { 35824 return this.filter(predicate).head(); 35825 }; 35826 35827 LazyWrapper.prototype.findLast = function(predicate) { 35828 return this.reverse().find(predicate); 35829 }; 35830 35831 LazyWrapper.prototype.invokeMap = baseRest(function(path, args) { 35832 if (typeof path == 'function') { 35833 return new LazyWrapper(this); 35834 } 35835 return this.map(function(value) { 35836 return baseInvoke(value, path, args); 35837 }); 35838 }); 35839 35840 LazyWrapper.prototype.reject = function(predicate) { 35841 return this.filter(negate(getIteratee(predicate))); 35842 }; 35843 35844 LazyWrapper.prototype.slice = function(start, end) { 35845 start = toInteger(start); 35846 35847 var result = this; 35848 if (result.__filtered__ && (start > 0 || end < 0)) { 35849 return new LazyWrapper(result); 35850 } 35851 if (start < 0) { 35852 result = result.takeRight(-start); 35853 } else if (start) { 35854 result = result.drop(start); 35855 } 35856 if (end !== undefined) { 35857 end = toInteger(end); 35858 result = end < 0 ? result.dropRight(-end) : result.take(end - start); 35859 } 35860 return result; 35861 }; 35862 35863 LazyWrapper.prototype.takeRightWhile = function(predicate) { 35864 return this.reverse().takeWhile(predicate).reverse(); 35865 }; 35866 35867 LazyWrapper.prototype.toArray = function() { 35868 return this.take(MAX_ARRAY_LENGTH); 35869 }; 35870 35871 // Add `LazyWrapper` methods to `lodash.prototype`. 35872 baseForOwn(LazyWrapper.prototype, function(func, methodName) { 35873 var checkIteratee = /^(?:filter|find|map|reject)|While$/.test(methodName), 35874 isTaker = /^(?:head|last)$/.test(methodName), 35875 lodashFunc = lodash[isTaker ? ('take' + (methodName == 'last' ? 'Right' : '')) : methodName], 35876 retUnwrapped = isTaker || /^find/.test(methodName); 35877 35878 if (!lodashFunc) { 35879 return; 35880 } 35881 lodash.prototype[methodName] = function() { 35882 var value = this.__wrapped__, 35883 args = isTaker ? [1] : arguments, 35884 isLazy = value instanceof LazyWrapper, 35885 iteratee = args[0], 35886 useLazy = isLazy || isArray(value); 35887 35888 var interceptor = function(value) { 35889 var result = lodashFunc.apply(lodash, arrayPush([value], args)); 35890 return (isTaker && chainAll) ? result[0] : result; 35891 }; 35892 35893 if (useLazy && checkIteratee && typeof iteratee == 'function' && iteratee.length != 1) { 35894 // Avoid lazy use if the iteratee has a "length" value other than `1`. 35895 isLazy = useLazy = false; 35896 } 35897 var chainAll = this.__chain__, 35898 isHybrid = !!this.__actions__.length, 35899 isUnwrapped = retUnwrapped && !chainAll, 35900 onlyLazy = isLazy && !isHybrid; 35901 35902 if (!retUnwrapped && useLazy) { 35903 value = onlyLazy ? value : new LazyWrapper(this); 35904 var result = func.apply(value, args); 35905 result.__actions__.push({ 'func': thru, 'args': [interceptor], 'thisArg': undefined }); 35906 return new LodashWrapper(result, chainAll); 35907 } 35908 if (isUnwrapped && onlyLazy) { 35909 return func.apply(this, args); 35910 } 35911 result = this.thru(interceptor); 35912 return isUnwrapped ? (isTaker ? result.value()[0] : result.value()) : result; 35913 }; 35914 }); 35915 35916 // Add `Array` methods to `lodash.prototype`. 35917 arrayEach(['pop', 'push', 'shift', 'sort', 'splice', 'unshift'], function(methodName) { 35918 var func = arrayProto[methodName], 35919 chainName = /^(?:push|sort|unshift)$/.test(methodName) ? 'tap' : 'thru', 35920 retUnwrapped = /^(?:pop|shift)$/.test(methodName); 35921 35922 lodash.prototype[methodName] = function() { 35923 var args = arguments; 35924 if (retUnwrapped && !this.__chain__) { 35925 var value = this.value(); 35926 return func.apply(isArray(value) ? value : [], args); 35927 } 35928 return this[chainName](function(value) { 35929 return func.apply(isArray(value) ? value : [], args); 35930 }); 35931 }; 35932 }); 35933 35934 // Map minified method names to their real names. 35935 baseForOwn(LazyWrapper.prototype, function(func, methodName) { 35936 var lodashFunc = lodash[methodName]; 35937 if (lodashFunc) { 35938 var key = lodashFunc.name + ''; 35939 if (!hasOwnProperty.call(realNames, key)) { 35940 realNames[key] = []; 35941 } 35942 realNames[key].push({ 'name': methodName, 'func': lodashFunc }); 35943 } 35944 }); 35945 35946 realNames[createHybrid(undefined, WRAP_BIND_KEY_FLAG).name] = [{ 35947 'name': 'wrapper', 35948 'func': undefined 35949 }]; 35950 35951 // Add methods to `LazyWrapper`. 35952 LazyWrapper.prototype.clone = lazyClone; 35953 LazyWrapper.prototype.reverse = lazyReverse; 35954 LazyWrapper.prototype.value = lazyValue; 35955 35956 // Add chain sequence methods to the `lodash` wrapper. 35957 lodash.prototype.at = wrapperAt; 35958 lodash.prototype.chain = wrapperChain; 35959 lodash.prototype.commit = wrapperCommit; 35960 lodash.prototype.next = wrapperNext; 35961 lodash.prototype.plant = wrapperPlant; 35962 lodash.prototype.reverse = wrapperReverse; 35963 lodash.prototype.toJSON = lodash.prototype.valueOf = lodash.prototype.value = wrapperValue; 35964 35965 // Add lazy aliases. 35966 lodash.prototype.first = lodash.prototype.head; 35967 35968 if (symIterator) { 35969 lodash.prototype[symIterator] = wrapperToIterator; 35970 } 35971 return lodash; 35972 }); 35973 35974 /*--------------------------------------------------------------------------*/ 35975 35976 // Export lodash. 35977 var _ = runInContext(); 35978 35979 // Some AMD build optimizers, like r.js, check for condition patterns like: 35980 if (true) { 35981 // Expose Lodash on the global object to prevent errors when Lodash is 35982 // loaded by a script tag in the presence of an AMD loader. 35983 // See http://requirejs.org/docs/errors.html#mismatch for more details. 35984 // Use `_.noConflict` to remove Lodash from the global object. 35985 root._ = _; 35986 35987 // Define as an anonymous module so, through path mapping, it can be 35988 // referenced as the "underscore" module. 35989 !(__WEBPACK_AMD_DEFINE_RESULT__ = (function() { 35990 return _; 35991 }).call(exports, __webpack_require__, exports, module), 35992 __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); 35993 } 35994 // Check for `exports` after `define` in case a build optimizer adds it. 35995 else {} 35996}.call(this)); 35997 35998/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../webpack/buildin/global.js */ "./node_modules/webpack/buildin/global.js"), __webpack_require__(/*! ./../webpack/buildin/module.js */ "./node_modules/webpack/buildin/module.js")(module))) 35999 36000/***/ }), 36001 36002/***/ "./node_modules/moment/locale sync recursive ^\\.\\/.*$": 36003/*!**************************************************!*\ 36004 !*** ./node_modules/moment/locale sync ^\.\/.*$ ***! 36005 \**************************************************/ 36006/*! no static exports found */ 36007/***/ (function(module, exports, __webpack_require__) { 36008 36009var map = { 36010 "./af": "./node_modules/moment/locale/af.js", 36011 "./af.js": "./node_modules/moment/locale/af.js", 36012 "./ar": "./node_modules/moment/locale/ar.js", 36013 "./ar-dz": "./node_modules/moment/locale/ar-dz.js", 36014 "./ar-dz.js": "./node_modules/moment/locale/ar-dz.js", 36015 "./ar-kw": "./node_modules/moment/locale/ar-kw.js", 36016 "./ar-kw.js": "./node_modules/moment/locale/ar-kw.js", 36017 "./ar-ly": "./node_modules/moment/locale/ar-ly.js", 36018 "./ar-ly.js": "./node_modules/moment/locale/ar-ly.js", 36019 "./ar-ma": "./node_modules/moment/locale/ar-ma.js", 36020 "./ar-ma.js": "./node_modules/moment/locale/ar-ma.js", 36021 "./ar-ps": "./node_modules/moment/locale/ar-ps.js", 36022 "./ar-ps.js": "./node_modules/moment/locale/ar-ps.js", 36023 "./ar-sa": "./node_modules/moment/locale/ar-sa.js", 36024 "./ar-sa.js": "./node_modules/moment/locale/ar-sa.js", 36025 "./ar-tn": "./node_modules/moment/locale/ar-tn.js", 36026 "./ar-tn.js": "./node_modules/moment/locale/ar-tn.js", 36027 "./ar.js": "./node_modules/moment/locale/ar.js", 36028 "./az": "./node_modules/moment/locale/az.js", 36029 "./az.js": "./node_modules/moment/locale/az.js", 36030 "./be": "./node_modules/moment/locale/be.js", 36031 "./be.js": "./node_modules/moment/locale/be.js", 36032 "./bg": "./node_modules/moment/locale/bg.js", 36033 "./bg.js": "./node_modules/moment/locale/bg.js", 36034 "./bm": "./node_modules/moment/locale/bm.js", 36035 "./bm.js": "./node_modules/moment/locale/bm.js", 36036 "./bn": "./node_modules/moment/locale/bn.js", 36037 "./bn-bd": "./node_modules/moment/locale/bn-bd.js", 36038 "./bn-bd.js": "./node_modules/moment/locale/bn-bd.js", 36039 "./bn.js": "./node_modules/moment/locale/bn.js", 36040 "./bo": "./node_modules/moment/locale/bo.js", 36041 "./bo.js": "./node_modules/moment/locale/bo.js", 36042 "./br": "./node_modules/moment/locale/br.js", 36043 "./br.js": "./node_modules/moment/locale/br.js", 36044 "./bs": "./node_modules/moment/locale/bs.js", 36045 "./bs.js": "./node_modules/moment/locale/bs.js", 36046 "./ca": "./node_modules/moment/locale/ca.js", 36047 "./ca.js": "./node_modules/moment/locale/ca.js", 36048 "./cs": "./node_modules/moment/locale/cs.js", 36049 "./cs.js": "./node_modules/moment/locale/cs.js", 36050 "./cv": "./node_modules/moment/locale/cv.js", 36051 "./cv.js": "./node_modules/moment/locale/cv.js", 36052 "./cy": "./node_modules/moment/locale/cy.js", 36053 "./cy.js": "./node_modules/moment/locale/cy.js", 36054 "./da": "./node_modules/moment/locale/da.js", 36055 "./da.js": "./node_modules/moment/locale/da.js", 36056 "./de": "./node_modules/moment/locale/de.js", 36057 "./de-at": "./node_modules/moment/locale/de-at.js", 36058 "./de-at.js": "./node_modules/moment/locale/de-at.js", 36059 "./de-ch": "./node_modules/moment/locale/de-ch.js", 36060 "./de-ch.js": "./node_modules/moment/locale/de-ch.js", 36061 "./de.js": "./node_modules/moment/locale/de.js", 36062 "./dv": "./node_modules/moment/locale/dv.js", 36063 "./dv.js": "./node_modules/moment/locale/dv.js", 36064 "./el": "./node_modules/moment/locale/el.js", 36065 "./el.js": "./node_modules/moment/locale/el.js", 36066 "./en-au": "./node_modules/moment/locale/en-au.js", 36067 "./en-au.js": "./node_modules/moment/locale/en-au.js", 36068 "./en-ca": "./node_modules/moment/locale/en-ca.js", 36069 "./en-ca.js": "./node_modules/moment/locale/en-ca.js", 36070 "./en-gb": "./node_modules/moment/locale/en-gb.js", 36071 "./en-gb.js": "./node_modules/moment/locale/en-gb.js", 36072 "./en-ie": "./node_modules/moment/locale/en-ie.js", 36073 "./en-ie.js": "./node_modules/moment/locale/en-ie.js", 36074 "./en-il": "./node_modules/moment/locale/en-il.js", 36075 "./en-il.js": "./node_modules/moment/locale/en-il.js", 36076 "./en-in": "./node_modules/moment/locale/en-in.js", 36077 "./en-in.js": "./node_modules/moment/locale/en-in.js", 36078 "./en-nz": "./node_modules/moment/locale/en-nz.js", 36079 "./en-nz.js": "./node_modules/moment/locale/en-nz.js", 36080 "./en-sg": "./node_modules/moment/locale/en-sg.js", 36081 "./en-sg.js": "./node_modules/moment/locale/en-sg.js", 36082 "./eo": "./node_modules/moment/locale/eo.js", 36083 "./eo.js": "./node_modules/moment/locale/eo.js", 36084 "./es": "./node_modules/moment/locale/es.js", 36085 "./es-do": "./node_modules/moment/locale/es-do.js", 36086 "./es-do.js": "./node_modules/moment/locale/es-do.js", 36087 "./es-mx": "./node_modules/moment/locale/es-mx.js", 36088 "./es-mx.js": "./node_modules/moment/locale/es-mx.js", 36089 "./es-us": "./node_modules/moment/locale/es-us.js", 36090 "./es-us.js": "./node_modules/moment/locale/es-us.js", 36091 "./es.js": "./node_modules/moment/locale/es.js", 36092 "./et": "./node_modules/moment/locale/et.js", 36093 "./et.js": "./node_modules/moment/locale/et.js", 36094 "./eu": "./node_modules/moment/locale/eu.js", 36095 "./eu.js": "./node_modules/moment/locale/eu.js", 36096 "./fa": "./node_modules/moment/locale/fa.js", 36097 "./fa.js": "./node_modules/moment/locale/fa.js", 36098 "./fi": "./node_modules/moment/locale/fi.js", 36099 "./fi.js": "./node_modules/moment/locale/fi.js", 36100 "./fil": "./node_modules/moment/locale/fil.js", 36101 "./fil.js": "./node_modules/moment/locale/fil.js", 36102 "./fo": "./node_modules/moment/locale/fo.js", 36103 "./fo.js": "./node_modules/moment/locale/fo.js", 36104 "./fr": "./node_modules/moment/locale/fr.js", 36105 "./fr-ca": "./node_modules/moment/locale/fr-ca.js", 36106 "./fr-ca.js": "./node_modules/moment/locale/fr-ca.js", 36107 "./fr-ch": "./node_modules/moment/locale/fr-ch.js", 36108 "./fr-ch.js": "./node_modules/moment/locale/fr-ch.js", 36109 "./fr.js": "./node_modules/moment/locale/fr.js", 36110 "./fy": "./node_modules/moment/locale/fy.js", 36111 "./fy.js": "./node_modules/moment/locale/fy.js", 36112 "./ga": "./node_modules/moment/locale/ga.js", 36113 "./ga.js": "./node_modules/moment/locale/ga.js", 36114 "./gd": "./node_modules/moment/locale/gd.js", 36115 "./gd.js": "./node_modules/moment/locale/gd.js", 36116 "./gl": "./node_modules/moment/locale/gl.js", 36117 "./gl.js": "./node_modules/moment/locale/gl.js", 36118 "./gom-deva": "./node_modules/moment/locale/gom-deva.js", 36119 "./gom-deva.js": "./node_modules/moment/locale/gom-deva.js", 36120 "./gom-latn": "./node_modules/moment/locale/gom-latn.js", 36121 "./gom-latn.js": "./node_modules/moment/locale/gom-latn.js", 36122 "./gu": "./node_modules/moment/locale/gu.js", 36123 "./gu.js": "./node_modules/moment/locale/gu.js", 36124 "./he": "./node_modules/moment/locale/he.js", 36125 "./he.js": "./node_modules/moment/locale/he.js", 36126 "./hi": "./node_modules/moment/locale/hi.js", 36127 "./hi.js": "./node_modules/moment/locale/hi.js", 36128 "./hr": "./node_modules/moment/locale/hr.js", 36129 "./hr.js": "./node_modules/moment/locale/hr.js", 36130 "./hu": "./node_modules/moment/locale/hu.js", 36131 "./hu.js": "./node_modules/moment/locale/hu.js", 36132 "./hy-am": "./node_modules/moment/locale/hy-am.js", 36133 "./hy-am.js": "./node_modules/moment/locale/hy-am.js", 36134 "./id": "./node_modules/moment/locale/id.js", 36135 "./id.js": "./node_modules/moment/locale/id.js", 36136 "./is": "./node_modules/moment/locale/is.js", 36137 "./is.js": "./node_modules/moment/locale/is.js", 36138 "./it": "./node_modules/moment/locale/it.js", 36139 "./it-ch": "./node_modules/moment/locale/it-ch.js", 36140 "./it-ch.js": "./node_modules/moment/locale/it-ch.js", 36141 "./it.js": "./node_modules/moment/locale/it.js", 36142 "./ja": "./node_modules/moment/locale/ja.js", 36143 "./ja.js": "./node_modules/moment/locale/ja.js", 36144 "./jv": "./node_modules/moment/locale/jv.js", 36145 "./jv.js": "./node_modules/moment/locale/jv.js", 36146 "./ka": "./node_modules/moment/locale/ka.js", 36147 "./ka.js": "./node_modules/moment/locale/ka.js", 36148 "./kk": "./node_modules/moment/locale/kk.js", 36149 "./kk.js": "./node_modules/moment/locale/kk.js", 36150 "./km": "./node_modules/moment/locale/km.js", 36151 "./km.js": "./node_modules/moment/locale/km.js", 36152 "./kn": "./node_modules/moment/locale/kn.js", 36153 "./kn.js": "./node_modules/moment/locale/kn.js", 36154 "./ko": "./node_modules/moment/locale/ko.js", 36155 "./ko.js": "./node_modules/moment/locale/ko.js", 36156 "./ku": "./node_modules/moment/locale/ku.js", 36157 "./ku-kmr": "./node_modules/moment/locale/ku-kmr.js", 36158 "./ku-kmr.js": "./node_modules/moment/locale/ku-kmr.js", 36159 "./ku.js": "./node_modules/moment/locale/ku.js", 36160 "./ky": "./node_modules/moment/locale/ky.js", 36161 "./ky.js": "./node_modules/moment/locale/ky.js", 36162 "./lb": "./node_modules/moment/locale/lb.js", 36163 "./lb.js": "./node_modules/moment/locale/lb.js", 36164 "./lo": "./node_modules/moment/locale/lo.js", 36165 "./lo.js": "./node_modules/moment/locale/lo.js", 36166 "./lt": "./node_modules/moment/locale/lt.js", 36167 "./lt.js": "./node_modules/moment/locale/lt.js", 36168 "./lv": "./node_modules/moment/locale/lv.js", 36169 "./lv.js": "./node_modules/moment/locale/lv.js", 36170 "./me": "./node_modules/moment/locale/me.js", 36171 "./me.js": "./node_modules/moment/locale/me.js", 36172 "./mi": "./node_modules/moment/locale/mi.js", 36173 "./mi.js": "./node_modules/moment/locale/mi.js", 36174 "./mk": "./node_modules/moment/locale/mk.js", 36175 "./mk.js": "./node_modules/moment/locale/mk.js", 36176 "./ml": "./node_modules/moment/locale/ml.js", 36177 "./ml.js": "./node_modules/moment/locale/ml.js", 36178 "./mn": "./node_modules/moment/locale/mn.js", 36179 "./mn.js": "./node_modules/moment/locale/mn.js", 36180 "./mr": "./node_modules/moment/locale/mr.js", 36181 "./mr.js": "./node_modules/moment/locale/mr.js", 36182 "./ms": "./node_modules/moment/locale/ms.js", 36183 "./ms-my": "./node_modules/moment/locale/ms-my.js", 36184 "./ms-my.js": "./node_modules/moment/locale/ms-my.js", 36185 "./ms.js": "./node_modules/moment/locale/ms.js", 36186 "./mt": "./node_modules/moment/locale/mt.js", 36187 "./mt.js": "./node_modules/moment/locale/mt.js", 36188 "./my": "./node_modules/moment/locale/my.js", 36189 "./my.js": "./node_modules/moment/locale/my.js", 36190 "./nb": "./node_modules/moment/locale/nb.js", 36191 "./nb.js": "./node_modules/moment/locale/nb.js", 36192 "./ne": "./node_modules/moment/locale/ne.js", 36193 "./ne.js": "./node_modules/moment/locale/ne.js", 36194 "./nl": "./node_modules/moment/locale/nl.js", 36195 "./nl-be": "./node_modules/moment/locale/nl-be.js", 36196 "./nl-be.js": "./node_modules/moment/locale/nl-be.js", 36197 "./nl.js": "./node_modules/moment/locale/nl.js", 36198 "./nn": "./node_modules/moment/locale/nn.js", 36199 "./nn.js": "./node_modules/moment/locale/nn.js", 36200 "./oc-lnc": "./node_modules/moment/locale/oc-lnc.js", 36201 "./oc-lnc.js": "./node_modules/moment/locale/oc-lnc.js", 36202 "./pa-in": "./node_modules/moment/locale/pa-in.js", 36203 "./pa-in.js": "./node_modules/moment/locale/pa-in.js", 36204 "./pl": "./node_modules/moment/locale/pl.js", 36205 "./pl.js": "./node_modules/moment/locale/pl.js", 36206 "./pt": "./node_modules/moment/locale/pt.js", 36207 "./pt-br": "./node_modules/moment/locale/pt-br.js", 36208 "./pt-br.js": "./node_modules/moment/locale/pt-br.js", 36209 "./pt.js": "./node_modules/moment/locale/pt.js", 36210 "./ro": "./node_modules/moment/locale/ro.js", 36211 "./ro.js": "./node_modules/moment/locale/ro.js", 36212 "./ru": "./node_modules/moment/locale/ru.js", 36213 "./ru.js": "./node_modules/moment/locale/ru.js", 36214 "./sd": "./node_modules/moment/locale/sd.js", 36215 "./sd.js": "./node_modules/moment/locale/sd.js", 36216 "./se": "./node_modules/moment/locale/se.js", 36217 "./se.js": "./node_modules/moment/locale/se.js", 36218 "./si": "./node_modules/moment/locale/si.js", 36219 "./si.js": "./node_modules/moment/locale/si.js", 36220 "./sk": "./node_modules/moment/locale/sk.js", 36221 "./sk.js": "./node_modules/moment/locale/sk.js", 36222 "./sl": "./node_modules/moment/locale/sl.js", 36223 "./sl.js": "./node_modules/moment/locale/sl.js", 36224 "./sq": "./node_modules/moment/locale/sq.js", 36225 "./sq.js": "./node_modules/moment/locale/sq.js", 36226 "./sr": "./node_modules/moment/locale/sr.js", 36227 "./sr-cyrl": "./node_modules/moment/locale/sr-cyrl.js", 36228 "./sr-cyrl.js": "./node_modules/moment/locale/sr-cyrl.js", 36229 "./sr.js": "./node_modules/moment/locale/sr.js", 36230 "./ss": "./node_modules/moment/locale/ss.js", 36231 "./ss.js": "./node_modules/moment/locale/ss.js", 36232 "./sv": "./node_modules/moment/locale/sv.js", 36233 "./sv.js": "./node_modules/moment/locale/sv.js", 36234 "./sw": "./node_modules/moment/locale/sw.js", 36235 "./sw.js": "./node_modules/moment/locale/sw.js", 36236 "./ta": "./node_modules/moment/locale/ta.js", 36237 "./ta.js": "./node_modules/moment/locale/ta.js", 36238 "./te": "./node_modules/moment/locale/te.js", 36239 "./te.js": "./node_modules/moment/locale/te.js", 36240 "./tet": "./node_modules/moment/locale/tet.js", 36241 "./tet.js": "./node_modules/moment/locale/tet.js", 36242 "./tg": "./node_modules/moment/locale/tg.js", 36243 "./tg.js": "./node_modules/moment/locale/tg.js", 36244 "./th": "./node_modules/moment/locale/th.js", 36245 "./th.js": "./node_modules/moment/locale/th.js", 36246 "./tk": "./node_modules/moment/locale/tk.js", 36247 "./tk.js": "./node_modules/moment/locale/tk.js", 36248 "./tl-ph": "./node_modules/moment/locale/tl-ph.js", 36249 "./tl-ph.js": "./node_modules/moment/locale/tl-ph.js", 36250 "./tlh": "./node_modules/moment/locale/tlh.js", 36251 "./tlh.js": "./node_modules/moment/locale/tlh.js", 36252 "./tr": "./node_modules/moment/locale/tr.js", 36253 "./tr.js": "./node_modules/moment/locale/tr.js", 36254 "./tzl": "./node_modules/moment/locale/tzl.js", 36255 "./tzl.js": "./node_modules/moment/locale/tzl.js", 36256 "./tzm": "./node_modules/moment/locale/tzm.js", 36257 "./tzm-latn": "./node_modules/moment/locale/tzm-latn.js", 36258 "./tzm-latn.js": "./node_modules/moment/locale/tzm-latn.js", 36259 "./tzm.js": "./node_modules/moment/locale/tzm.js", 36260 "./ug-cn": "./node_modules/moment/locale/ug-cn.js", 36261 "./ug-cn.js": "./node_modules/moment/locale/ug-cn.js", 36262 "./uk": "./node_modules/moment/locale/uk.js", 36263 "./uk.js": "./node_modules/moment/locale/uk.js", 36264 "./ur": "./node_modules/moment/locale/ur.js", 36265 "./ur.js": "./node_modules/moment/locale/ur.js", 36266 "./uz": "./node_modules/moment/locale/uz.js", 36267 "./uz-latn": "./node_modules/moment/locale/uz-latn.js", 36268 "./uz-latn.js": "./node_modules/moment/locale/uz-latn.js", 36269 "./uz.js": "./node_modules/moment/locale/uz.js", 36270 "./vi": "./node_modules/moment/locale/vi.js", 36271 "./vi.js": "./node_modules/moment/locale/vi.js", 36272 "./x-pseudo": "./node_modules/moment/locale/x-pseudo.js", 36273 "./x-pseudo.js": "./node_modules/moment/locale/x-pseudo.js", 36274 "./yo": "./node_modules/moment/locale/yo.js", 36275 "./yo.js": "./node_modules/moment/locale/yo.js", 36276 "./zh-cn": "./node_modules/moment/locale/zh-cn.js", 36277 "./zh-cn.js": "./node_modules/moment/locale/zh-cn.js", 36278 "./zh-hk": "./node_modules/moment/locale/zh-hk.js", 36279 "./zh-hk.js": "./node_modules/moment/locale/zh-hk.js", 36280 "./zh-mo": "./node_modules/moment/locale/zh-mo.js", 36281 "./zh-mo.js": "./node_modules/moment/locale/zh-mo.js", 36282 "./zh-tw": "./node_modules/moment/locale/zh-tw.js", 36283 "./zh-tw.js": "./node_modules/moment/locale/zh-tw.js" 36284}; 36285 36286 36287function webpackContext(req) { 36288 var id = webpackContextResolve(req); 36289 return __webpack_require__(id); 36290} 36291function webpackContextResolve(req) { 36292 if(!__webpack_require__.o(map, req)) { 36293 var e = new Error("Cannot find module '" + req + "'"); 36294 e.code = 'MODULE_NOT_FOUND'; 36295 throw e; 36296 } 36297 return map[req]; 36298} 36299webpackContext.keys = function webpackContextKeys() { 36300 return Object.keys(map); 36301}; 36302webpackContext.resolve = webpackContextResolve; 36303module.exports = webpackContext; 36304webpackContext.id = "./node_modules/moment/locale sync recursive ^\\.\\/.*$"; 36305 36306/***/ }), 36307
vendor: 2,903 bytes, lines 36308-36398
36308/***/ "./node_modules/moment/locale/af.js": 36309/*!******************************************!*\ 36310 !*** ./node_modules/moment/locale/af.js ***! 36311 \******************************************/ 36312/*! no static exports found */ 36313/***/ (function(module, exports, __webpack_require__) { 36314 36315//! moment.js locale configuration 36316//! locale : Afrikaans [af] 36317//! author : Werner Mollentze : https://github.com/wernerm 36318 36319;(function (global, factory) { 36320 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : 36321 undefined 36322}(this, (function (moment) { 'use strict'; 36323 36324 //! moment.js locale configuration 36325 36326 var af = moment.defineLocale('af', { 36327 months: 'Januarie_Februarie_Maart_April_Mei_Junie_Julie_Augustus_September_Oktober_November_Desember'.split( 36328 '_' 36329 ), 36330 monthsShort: 'Jan_Feb_Mrt_Apr_Mei_Jun_Jul_Aug_Sep_Okt_Nov_Des'.split('_'), 36331 weekdays: 'Sondag_Maandag_Dinsdag_Woensdag_Donderdag_Vrydag_Saterdag'.split( 36332 '_' 36333 ), 36334 weekdaysShort: 'Son_Maa_Din_Woe_Don_Vry_Sat'.split('_'), 36335 weekdaysMin: 'So_Ma_Di_Wo_Do_Vr_Sa'.split('_'), 36336 meridiemParse: /vm|nm/i, 36337 isPM: function (input) { 36338 return /^nm$/i.test(input); 36339 }, 36340 meridiem: function (hours, minutes, isLower) { 36341 if (hours < 12) { 36342 return isLower ? 'vm' : 'VM'; 36343 } else { 36344 return isLower ? 'nm' : 'NM'; 36345 } 36346 }, 36347 longDateFormat: { 36348 LT: 'HH:mm', 36349 LTS: 'HH:mm:ss', 36350 L: 'DD/MM/YYYY', 36351 LL: 'D MMMM YYYY', 36352 LLL: 'D MMMM YYYY HH:mm', 36353 LLLL: 'dddd, D MMMM YYYY HH:mm', 36354 }, 36355 calendar: { 36356 sameDay: '[Vandag om] LT', 36357 nextDay: '[Môre om] LT', 36358 nextWeek: 'dddd [om] LT', 36359 lastDay: '[Gister om] LT', 36360 lastWeek: '[Laas] dddd [om] LT', 36361 sameElse: 'L', 36362 }, 36363 relativeTime: { 36364 future: 'oor %s', 36365 past: '%s gelede', 36366 s: "'n paar sekondes", 36367 ss: '%d sekondes', 36368 m: "'n minuut", 36369 mm: '%d minute', 36370 h: "'n uur", 36371 hh: '%d ure', 36372 d: "'n dag", 36373 dd: '%d dae', 36374 M: "'n maand", 36375 MM: '%d maande', 36376 y: "'n jaar", 36377 yy: '%d jaar', 36378 }, 36379 dayOfMonthOrdinalParse: /\d{1,2}(ste|de)/, 36380 ordinal: function (number) { 36381 return ( 36382 number + 36383 (number === 1 || number === 8 || number >= 20 ? 'ste' : 'de') 36384 ); // Thanks to Joris Röling : https://github.com/jjupiter 36385 }, 36386 week: { 36387 dow: 1, // Maandag is die eerste dag van die week. 36388 doy: 4, // Die week wat die 4de Januarie bevat is die eerste week van die jaar. 36389 }, 36390 }); 36391 36392 return af; 36393 36394}))); 36395 36396 36397/***/ }), 36398
vendor: 5,579 bytes, lines 36399-36574
36399/***/ "./node_modules/moment/locale/ar-dz.js": 36400/*!*********************************************!*\ 36401 !*** ./node_modules/moment/locale/ar-dz.js ***! 36402 \*********************************************/ 36403/*! no static exports found */ 36404/***/ (function(module, exports, __webpack_require__) { 36405 36406//! moment.js locale configuration 36407//! locale : Arabic (Algeria) [ar-dz] 36408//! author : Amine Roukh: https://github.com/Amine27 36409//! author : Abdel Said: https://github.com/abdelsaid 36410//! author : Ahmed Elkhatib 36411//! author : forabi https://github.com/forabi 36412//! author : Noureddine LOUAHEDJ : https://github.com/noureddinem 36413 36414;(function (global, factory) { 36415 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : 36416 undefined 36417}(this, (function (moment) { 'use strict'; 36418 36419 //! moment.js locale configuration 36420 36421 var pluralForm = function (n) { 36422 return n === 0 36423 ? 0 36424 : n === 1 36425 ? 1 36426 : n === 2 36427 ? 2 36428 : n % 100 >= 3 && n % 100 <= 10 36429 ? 3 36430 : n % 100 >= 11 36431 ? 4 36432 : 5; 36433 }, 36434 plurals = { 36435 s: [ 36436 'Ø£Ù٠٠٠ثاÙÙØ©', 36437 'ثاÙÙØ© ÙØ§ØØ¯Ø©', 36438 ['ثاÙÙØªØ§Ù', 'ثاÙÙØªÙÙ'], 36439 '%d Ø«ÙØ§Ù', 36440 '%d ثاÙÙØ©', 36441 '%d ثاÙÙØ©', 36442 ], 36443 m: [ 36444 'Ø£Ù٠٠٠دÙÙÙØ©', 36445 'دÙÙÙØ© ÙØ§ØØ¯Ø©', 36446 ['دÙÙÙØªØ§Ù', 'دÙÙÙØªÙÙ'], 36447 '%d Ø¯ÙØ§Ø¦Ù', 36448 '%d دÙÙÙØ©', 36449 '%d دÙÙÙØ©', 36450 ], 36451 h: [ 36452 'Ø£Ù٠٠٠ساعة', 36453 'ساعة ÙØ§ØØ¯Ø©', 36454 ['ساعتاÙ', 'ساعتÙÙ'], 36455 '%d ساعات', 36456 '%d ساعة', 36457 '%d ساعة', 36458 ], 36459 d: [ 36460 'Ø£ÙÙ Ù Ù ÙÙÙ ', 36461 'ÙÙÙ ÙØ§ØØ¯', 36462 ['ÙÙ٠اÙ', 'ÙÙÙ ÙÙ'], 36463 '%d Ø£ÙØ§Ù ', 36464 '%d ÙÙÙ ÙØ§', 36465 '%d ÙÙÙ ', 36466 ], 36467 M: [ 36468 'Ø£ÙÙ Ù Ù Ø´ÙØ±', 36469 'Ø´ÙØ± ÙØ§ØØ¯', 36470 ['Ø´ÙØ±Ø§Ù', 'Ø´ÙØ±ÙÙ'], 36471 '%d Ø£Ø´ÙØ±', 36472 '%d Ø´ÙØ±Ø§', 36473 '%d Ø´ÙØ±', 36474 ], 36475 y: [ 36476 'Ø£Ù٠٠٠عا٠', 36477 'Ø¹Ø§Ù ÙØ§ØØ¯', 36478 ['عا٠اÙ', 'عا٠ÙÙ'], 36479 '%d Ø£Ø¹ÙØ§Ù ', 36480 '%d Ø¹Ø§Ù ÙØ§', 36481 '%d عا٠', 36482 ], 36483 }, 36484 pluralize = function (u) { 36485 return function (number, withoutSuffix, string, isFuture) { 36486 var f = pluralForm(number), 36487 str = plurals[u][pluralForm(number)]; 36488 if (f === 2) { 36489 str = str[withoutSuffix ? 0 : 1]; 36490 } 36491 return str.replace(/%d/i, number); 36492 }; 36493 }, 36494 months = [ 36495 'جاÙÙÙ', 36496 'ÙÙÙØ±Ù', 36497 '٠ارس', 36498 'Ø£ÙØ±ÙÙ', 36499 '٠اÙ', 36500 'Ø¬ÙØ§Ù', 36501 'جÙÙÙÙØ©', 36502 'Ø£ÙØª', 36503 'سبت٠بر', 36504 'Ø£ÙØªÙبر', 36505 'ÙÙÙ٠بر', 36506 'Ø¯ÙØ³Ù بر', 36507 ]; 36508 36509 var arDz = moment.defineLocale('ar-dz', { 36510 months: months, 36511 monthsShort: months, 36512 weekdays: 'Ø§ÙØ£ØØ¯_Ø§ÙØ¥Ø«ÙÙÙ_Ø§ÙØ«Ùاثاء_Ø§ÙØ£Ø±Ø¨Ø¹Ø§Ø¡_Ø§ÙØ®Ù ÙØ³_Ø§ÙØ¬Ù عة_Ø§ÙØ³Ø¨Øª'.split('_'), 36513 weekdaysShort: 'Ø£ØØ¯_إثÙÙÙ_Ø«ÙØ§Ø«Ø§Ø¡_أربعاء_Ø®Ù ÙØ³_ج٠عة_سبت'.split('_'), 36514 weekdaysMin: 'Ø_Ù_Ø«_ر_Ø®_ج_س'.split('_'), 36515 weekdaysParseExact: true, 36516 longDateFormat: { 36517 LT: 'HH:mm', 36518 LTS: 'HH:mm:ss', 36519 L: 'D/\u200FM/\u200FYYYY', 36520 LL: 'D MMMM YYYY', 36521 LLL: 'D MMMM YYYY HH:mm', 36522 LLLL: 'dddd D MMMM YYYY HH:mm', 36523 }, 36524 meridiemParse: /ص|Ù /, 36525 isPM: function (input) { 36526 return 'Ù ' === input; 36527 }, 36528 meridiem: function (hour, minute, isLower) { 36529 if (hour < 12) { 36530 return 'ص'; 36531 } else { 36532 return 'Ù '; 36533 } 36534 }, 36535 calendar: { 36536 sameDay: '[اÙÙÙÙ Ø¹ÙØ¯ Ø§ÙØ³Ø§Ø¹Ø©] LT', 36537 nextDay: '[ØºØ¯ÙØ§ Ø¹ÙØ¯ Ø§ÙØ³Ø§Ø¹Ø©] LT', 36538 nextWeek: 'dddd [Ø¹ÙØ¯ Ø§ÙØ³Ø§Ø¹Ø©] LT', 36539 lastDay: '[أ٠س Ø¹ÙØ¯ Ø§ÙØ³Ø§Ø¹Ø©] LT', 36540 lastWeek: 'dddd [Ø¹ÙØ¯ Ø§ÙØ³Ø§Ø¹Ø©] LT', 36541 sameElse: 'L', 36542 }, 36543 relativeTime: { 36544 future: 'بعد %s', 36545 past: 'Ù ÙØ° %s', 36546 s: pluralize('s'), 36547 ss: pluralize('s'), 36548 m: pluralize('m'), 36549 mm: pluralize('m'), 36550 h: pluralize('h'), 36551 hh: pluralize('h'), 36552 d: pluralize('d'), 36553 dd: pluralize('d'), 36554 M: pluralize('M'), 36555 MM: pluralize('M'), 36556 y: pluralize('y'), 36557 yy: pluralize('y'), 36558 }, 36559 postformat: function (string) { 36560 return string.replace(/,/g, 'Ø'); 36561 }, 36562 week: { 36563 dow: 0, // Sunday is the first day of the week. 36564 doy: 4, // The week that contains Jan 4th is the first week of the year. 36565 }, 36566 }); 36567 36568 return arDz; 36569 36570}))); 36571 36572 36573/***/ }), 36574
vendor: 2,640 bytes, lines 36575-36649
36575/***/ "./node_modules/moment/locale/ar-kw.js": 36576/*!*********************************************!*\ 36577 !*** ./node_modules/moment/locale/ar-kw.js ***! 36578 \*********************************************/ 36579/*! no static exports found */ 36580/***/ (function(module, exports, __webpack_require__) { 36581 36582//! moment.js locale configuration 36583//! locale : Arabic (Kuwait) [ar-kw] 36584//! author : Nusret Parlak: https://github.com/nusretparlak 36585 36586;(function (global, factory) { 36587 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : 36588 undefined 36589}(this, (function (moment) { 'use strict'; 36590 36591 //! moment.js locale configuration 36592 36593 var arKw = moment.defineLocale('ar-kw', { 36594 months: 'ÙÙØ§Ùر_ÙØ¨Ø±Ø§Ùر_٠ارس_أبرÙÙ_٠اÙ_ÙÙÙÙÙ_ÙÙÙÙÙØ²_غشت_Ø´ØªÙØ¨Ø±_Ø£ÙØªÙبر_ÙÙÙØ¨Ø±_Ø¯Ø¬ÙØ¨Ø±'.split( 36595 '_' 36596 ), 36597 monthsShort: 36598 'ÙÙØ§Ùر_ÙØ¨Ø±Ø§Ùر_٠ارس_أبرÙÙ_٠اÙ_ÙÙÙÙÙ_ÙÙÙÙÙØ²_غشت_Ø´ØªÙØ¨Ø±_Ø£ÙØªÙبر_ÙÙÙØ¨Ø±_Ø¯Ø¬ÙØ¨Ø±'.split( 36599 '_' 36600 ), 36601 weekdays: 'Ø§ÙØ£ØØ¯_Ø§ÙØ¥ØªÙÙÙ_Ø§ÙØ«Ùاثاء_Ø§ÙØ£Ø±Ø¨Ø¹Ø§Ø¡_Ø§ÙØ®Ù ÙØ³_Ø§ÙØ¬Ù عة_Ø§ÙØ³Ø¨Øª'.split('_'), 36602 weekdaysShort: 'Ø§ØØ¯_اتÙÙÙ_Ø«ÙØ§Ø«Ø§Ø¡_اربعاء_Ø®Ù ÙØ³_ج٠عة_سبت'.split('_'), 36603 weekdaysMin: 'Ø_Ù_Ø«_ر_Ø®_ج_س'.split('_'), 36604 weekdaysParseExact: true, 36605 longDateFormat: { 36606 LT: 'HH:mm', 36607 LTS: 'HH:mm:ss', 36608 L: 'DD/MM/YYYY', 36609 LL: 'D MMMM YYYY', 36610 LLL: 'D MMMM YYYY HH:mm', 36611 LLLL: 'dddd D MMMM YYYY HH:mm', 36612 }, 36613 calendar: { 36614 sameDay: '[اÙÙÙ٠عÙÙ Ø§ÙØ³Ø§Ø¹Ø©] LT', 36615 nextDay: '[غدا عÙÙ Ø§ÙØ³Ø§Ø¹Ø©] LT', 36616 nextWeek: 'dddd [عÙÙ Ø§ÙØ³Ø§Ø¹Ø©] LT', 36617 lastDay: '[أ٠س عÙÙ Ø§ÙØ³Ø§Ø¹Ø©] LT', 36618 lastWeek: 'dddd [عÙÙ Ø§ÙØ³Ø§Ø¹Ø©] LT', 36619 sameElse: 'L', 36620 }, 36621 relativeTime: { 36622 future: 'ÙÙ %s', 36623 past: 'Ù ÙØ° %s', 36624 s: 'Ø«ÙØ§Ù', 36625 ss: '%d ثاÙÙØ©', 36626 m: 'دÙÙÙØ©', 36627 mm: '%d Ø¯ÙØ§Ø¦Ù', 36628 h: 'ساعة', 36629 hh: '%d ساعات', 36630 d: 'ÙÙÙ ', 36631 dd: '%d Ø£ÙØ§Ù ', 36632 M: 'Ø´ÙØ±', 36633 MM: '%d Ø£Ø´ÙØ±', 36634 y: 'Ø³ÙØ©', 36635 yy: '%d سÙÙØ§Øª', 36636 }, 36637 week: { 36638 dow: 0, // Sunday is the first day of the week. 36639 doy: 12, // The week that contains Jan 12th is the first week of the year. 36640 }, 36641 }); 36642 36643 return arKw; 36644 36645}))); 36646 36647 36648/***/ }), 36649
vendor: 5,854 bytes, lines 36650-36840
36650/***/ "./node_modules/moment/locale/ar-ly.js": 36651/*!*********************************************!*\ 36652 !*** ./node_modules/moment/locale/ar-ly.js ***! 36653 \*********************************************/ 36654/*! no static exports found */ 36655/***/ (function(module, exports, __webpack_require__) { 36656 36657//! moment.js locale configuration 36658//! locale : Arabic (Libya) [ar-ly] 36659//! author : Ali Hmer: https://github.com/kikoanis 36660 36661;(function (global, factory) { 36662 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : 36663 undefined 36664}(this, (function (moment) { 'use strict'; 36665 36666 //! moment.js locale configuration 36667 36668 var symbolMap = { 36669 1: '1', 36670 2: '2', 36671 3: '3', 36672 4: '4', 36673 5: '5', 36674 6: '6', 36675 7: '7', 36676 8: '8', 36677 9: '9', 36678 0: '0', 36679 }, 36680 pluralForm = function (n) { 36681 return n === 0 36682 ? 0 36683 : n === 1 36684 ? 1 36685 : n === 2 36686 ? 2 36687 : n % 100 >= 3 && n % 100 <= 10 36688 ? 3 36689 : n % 100 >= 11 36690 ? 4 36691 : 5; 36692 }, 36693 plurals = { 36694 s: [ 36695 'Ø£Ù٠٠٠ثاÙÙØ©', 36696 'ثاÙÙØ© ÙØ§ØØ¯Ø©', 36697 ['ثاÙÙØªØ§Ù', 'ثاÙÙØªÙÙ'], 36698 '%d Ø«ÙØ§Ù', 36699 '%d ثاÙÙØ©', 36700 '%d ثاÙÙØ©', 36701 ], 36702 m: [ 36703 'Ø£Ù٠٠٠دÙÙÙØ©', 36704 'دÙÙÙØ© ÙØ§ØØ¯Ø©', 36705 ['دÙÙÙØªØ§Ù', 'دÙÙÙØªÙÙ'], 36706 '%d Ø¯ÙØ§Ø¦Ù', 36707 '%d دÙÙÙØ©', 36708 '%d دÙÙÙØ©', 36709 ], 36710 h: [ 36711 'Ø£Ù٠٠٠ساعة', 36712 'ساعة ÙØ§ØØ¯Ø©', 36713 ['ساعتاÙ', 'ساعتÙÙ'], 36714 '%d ساعات', 36715 '%d ساعة', 36716 '%d ساعة', 36717 ], 36718 d: [ 36719 'Ø£ÙÙ Ù Ù ÙÙÙ ', 36720 'ÙÙÙ ÙØ§ØØ¯', 36721 ['ÙÙ٠اÙ', 'ÙÙÙ ÙÙ'], 36722 '%d Ø£ÙØ§Ù ', 36723 '%d ÙÙÙ ÙØ§', 36724 '%d ÙÙÙ ', 36725 ], 36726 M: [ 36727 'Ø£ÙÙ Ù Ù Ø´ÙØ±', 36728 'Ø´ÙØ± ÙØ§ØØ¯', 36729 ['Ø´ÙØ±Ø§Ù', 'Ø´ÙØ±ÙÙ'], 36730 '%d Ø£Ø´ÙØ±', 36731 '%d Ø´ÙØ±Ø§', 36732 '%d Ø´ÙØ±', 36733 ], 36734 y: [ 36735 'Ø£Ù٠٠٠عا٠', 36736 'Ø¹Ø§Ù ÙØ§ØØ¯', 36737 ['عا٠اÙ', 'عا٠ÙÙ'], 36738 '%d Ø£Ø¹ÙØ§Ù ', 36739 '%d Ø¹Ø§Ù ÙØ§', 36740 '%d عا٠', 36741 ], 36742 }, 36743 pluralize = function (u) { 36744 return function (number, withoutSuffix, string, isFuture) { 36745 var f = pluralForm(number), 36746 str = plurals[u][pluralForm(number)]; 36747 if (f === 2) { 36748 str = str[withoutSuffix ? 0 : 1]; 36749 } 36750 return str.replace(/%d/i, number); 36751 }; 36752 }, 36753 months = [ 36754 'ÙÙØ§Ùر', 36755 'ÙØ¨Ø±Ø§Ùر', 36756 '٠ارس', 36757 'أبرÙÙ', 36758 '٠اÙÙ', 36759 'ÙÙÙÙÙ', 36760 'ÙÙÙÙÙ', 36761 'أغسطس', 36762 'سبت٠بر', 36763 'Ø£ÙØªÙبر', 36764 'ÙÙÙ٠بر', 36765 'Ø¯ÙØ³Ù بر', 36766 ]; 36767 36768 var arLy = moment.defineLocale('ar-ly', { 36769 months: months, 36770 monthsShort: months, 36771 weekdays: 'Ø§ÙØ£ØØ¯_Ø§ÙØ¥Ø«ÙÙÙ_Ø§ÙØ«Ùاثاء_Ø§ÙØ£Ø±Ø¨Ø¹Ø§Ø¡_Ø§ÙØ®Ù ÙØ³_Ø§ÙØ¬Ù عة_Ø§ÙØ³Ø¨Øª'.split('_'), 36772 weekdaysShort: 'Ø£ØØ¯_إثÙÙÙ_Ø«ÙØ§Ø«Ø§Ø¡_أربعاء_Ø®Ù ÙØ³_ج٠عة_سبت'.split('_'), 36773 weekdaysMin: 'Ø_Ù_Ø«_ر_Ø®_ج_س'.split('_'), 36774 weekdaysParseExact: true, 36775 longDateFormat: { 36776 LT: 'HH:mm', 36777 LTS: 'HH:mm:ss', 36778 L: 'D/\u200FM/\u200FYYYY', 36779 LL: 'D MMMM YYYY', 36780 LLL: 'D MMMM YYYY HH:mm', 36781 LLLL: 'dddd D MMMM YYYY HH:mm', 36782 }, 36783 meridiemParse: /ص|Ù /, 36784 isPM: function (input) { 36785 return 'Ù ' === input; 36786 }, 36787 meridiem: function (hour, minute, isLower) { 36788 if (hour < 12) { 36789 return 'ص'; 36790 } else { 36791 return 'Ù '; 36792 } 36793 }, 36794 calendar: { 36795 sameDay: '[اÙÙÙÙ Ø¹ÙØ¯ Ø§ÙØ³Ø§Ø¹Ø©] LT', 36796 nextDay: '[ØºØ¯ÙØ§ Ø¹ÙØ¯ Ø§ÙØ³Ø§Ø¹Ø©] LT', 36797 nextWeek: 'dddd [Ø¹ÙØ¯ Ø§ÙØ³Ø§Ø¹Ø©] LT', 36798 lastDay: '[أ٠س Ø¹ÙØ¯ Ø§ÙØ³Ø§Ø¹Ø©] LT', 36799 lastWeek: 'dddd [Ø¹ÙØ¯ Ø§ÙØ³Ø§Ø¹Ø©] LT', 36800 sameElse: 'L', 36801 }, 36802 relativeTime: { 36803 future: 'بعد %s', 36804 past: 'Ù ÙØ° %s', 36805 s: pluralize('s'), 36806 ss: pluralize('s'), 36807 m: pluralize('m'), 36808 mm: pluralize('m'), 36809 h: pluralize('h'), 36810 hh: pluralize('h'), 36811 d: pluralize('d'), 36812 dd: pluralize('d'), 36813 M: pluralize('M'), 36814 MM: pluralize('M'), 36815 y: pluralize('y'), 36816 yy: pluralize('y'), 36817 }, 36818 preparse: function (string) { 36819 return string.replace(/Ø/g, ','); 36820 }, 36821 postformat: function (string) { 36822 return string 36823 .replace(/\d/g, function (match) { 36824 return symbolMap[match]; 36825 }) 36826 .replace(/,/g, 'Ø'); 36827 }, 36828 week: { 36829 dow: 6, // Saturday is the first day of the week. 36830 doy: 12, // The week that contains Jan 12th is the first week of the year. 36831 }, 36832 }); 36833 36834 return arLy; 36835 36836}))); 36837 36838 36839/***/ }), 36840
vendor: 2,695 bytes, lines 36841-36916
36841/***/ "./node_modules/moment/locale/ar-ma.js": 36842/*!*********************************************!*\ 36843 !*** ./node_modules/moment/locale/ar-ma.js ***! 36844 \*********************************************/ 36845/*! no static exports found */ 36846/***/ (function(module, exports, __webpack_require__) { 36847 36848//! moment.js locale configuration 36849//! locale : Arabic (Morocco) [ar-ma] 36850//! author : ElFadili Yassine : https://github.com/ElFadiliY 36851//! author : Abdel Said : https://github.com/abdelsaid 36852 36853;(function (global, factory) { 36854 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : 36855 undefined 36856}(this, (function (moment) { 'use strict'; 36857 36858 //! moment.js locale configuration 36859 36860 var arMa = moment.defineLocale('ar-ma', { 36861 months: 'ÙÙØ§Ùر_ÙØ¨Ø±Ø§Ùر_٠ارس_أبرÙÙ_٠اÙ_ÙÙÙÙÙ_ÙÙÙÙÙØ²_غشت_Ø´ØªÙØ¨Ø±_Ø£ÙØªÙبر_ÙÙÙØ¨Ø±_Ø¯Ø¬ÙØ¨Ø±'.split( 36862 '_' 36863 ), 36864 monthsShort: 36865 'ÙÙØ§Ùر_ÙØ¨Ø±Ø§Ùر_٠ارس_أبرÙÙ_٠اÙ_ÙÙÙÙÙ_ÙÙÙÙÙØ²_غشت_Ø´ØªÙØ¨Ø±_Ø£ÙØªÙبر_ÙÙÙØ¨Ø±_Ø¯Ø¬ÙØ¨Ø±'.split( 36866 '_' 36867 ), 36868 weekdays: 'Ø§ÙØ£ØØ¯_Ø§ÙØ¥Ø«ÙÙÙ_Ø§ÙØ«Ùاثاء_Ø§ÙØ£Ø±Ø¨Ø¹Ø§Ø¡_Ø§ÙØ®Ù ÙØ³_Ø§ÙØ¬Ù عة_Ø§ÙØ³Ø¨Øª'.split('_'), 36869 weekdaysShort: 'Ø§ØØ¯_اثÙÙÙ_Ø«ÙØ§Ø«Ø§Ø¡_اربعاء_Ø®Ù ÙØ³_ج٠عة_سبت'.split('_'), 36870 weekdaysMin: 'Ø_Ù_Ø«_ر_Ø®_ج_س'.split('_'), 36871 weekdaysParseExact: true, 36872 longDateFormat: { 36873 LT: 'HH:mm', 36874 LTS: 'HH:mm:ss', 36875 L: 'DD/MM/YYYY', 36876 LL: 'D MMMM YYYY', 36877 LLL: 'D MMMM YYYY HH:mm', 36878 LLLL: 'dddd D MMMM YYYY HH:mm', 36879 }, 36880 calendar: { 36881 sameDay: '[اÙÙÙ٠عÙÙ Ø§ÙØ³Ø§Ø¹Ø©] LT', 36882 nextDay: '[غدا عÙÙ Ø§ÙØ³Ø§Ø¹Ø©] LT', 36883 nextWeek: 'dddd [عÙÙ Ø§ÙØ³Ø§Ø¹Ø©] LT', 36884 lastDay: '[أ٠س عÙÙ Ø§ÙØ³Ø§Ø¹Ø©] LT', 36885 lastWeek: 'dddd [عÙÙ Ø§ÙØ³Ø§Ø¹Ø©] LT', 36886 sameElse: 'L', 36887 }, 36888 relativeTime: { 36889 future: 'ÙÙ %s', 36890 past: 'Ù ÙØ° %s', 36891 s: 'Ø«ÙØ§Ù', 36892 ss: '%d ثاÙÙØ©', 36893 m: 'دÙÙÙØ©', 36894 mm: '%d Ø¯ÙØ§Ø¦Ù', 36895 h: 'ساعة', 36896 hh: '%d ساعات', 36897 d: 'ÙÙÙ ', 36898 dd: '%d Ø£ÙØ§Ù ', 36899 M: 'Ø´ÙØ±', 36900 MM: '%d Ø£Ø´ÙØ±', 36901 y: 'Ø³ÙØ©', 36902 yy: '%d سÙÙØ§Øª', 36903 }, 36904 week: { 36905 dow: 1, // Monday is the first day of the week. 36906 doy: 4, // The week that contains Jan 4th is the first week of the year. 36907 }, 36908 }); 36909 36910 return arMa; 36911 36912}))); 36913 36914 36915/***/ }), 36916
vendor: 4,264 bytes, lines 36917-37048
36917/***/ "./node_modules/moment/locale/ar-ps.js": 36918/*!*********************************************!*\ 36919 !*** ./node_modules/moment/locale/ar-ps.js ***! 36920 \*********************************************/ 36921/*! no static exports found */ 36922/***/ (function(module, exports, __webpack_require__) { 36923 36924//! moment.js locale configuration 36925//! locale : Arabic (Palestine) [ar-ps] 36926//! author : Majd Al-Shihabi : https://github.com/majdal 36927 36928;(function (global, factory) { 36929 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : 36930 undefined 36931}(this, (function (moment) { 'use strict'; 36932 36933 //! moment.js locale configuration 36934 36935 var symbolMap = { 36936 1: 'Ù¡', 36937 2: 'Ù¢', 36938 3: 'Ù£', 36939 4: 'Ù¤', 36940 5: 'Ù¥', 36941 6: 'Ù¦', 36942 7: 'Ù§', 36943 8: 'Ù¨', 36944 9: 'Ù©', 36945 0: 'Ù ', 36946 }, 36947 numberMap = { 36948 'Ù¡': '1', 36949 'Ù¢': '2', 36950 'Ù£': '3', 36951 'Ù¤': '4', 36952 'Ù¥': '5', 36953 'Ù¦': '6', 36954 'Ù§': '7', 36955 'Ù¨': '8', 36956 'Ù©': '9', 36957 'Ù ': '0', 36958 }; 36959 36960 var arPs = moment.defineLocale('ar-ps', { 36961 months: 'ÙØ§ÙÙÙ Ø§ÙØ«Ø§ÙÙ_شباط_آذار_ÙÙØ³Ø§Ù_Ø£ÙÙØ§Ø±_ØØ²ÙراÙ_ت٠ÙÙØ²_آب_Ø£ÙÙÙÙ_ØªØ´Ø±Ù Ø§ÙØ£ÙÙÙ_تشرÙÙ Ø§ÙØ«Ø§ÙÙ_ÙØ§ÙÙÙ Ø§ÙØ£ÙÙÙ'.split( 36962 '_' 36963 ), 36964 monthsShort: 36965 'ÙÙ¢_شباط_آذار_ÙÙØ³Ø§Ù_Ø£ÙÙØ§Ø±_ØØ²ÙراÙ_ت٠ÙÙØ²_آب_Ø£ÙÙÙÙ_ت١_ت٢_ÙÙ¡'.split('_'), 36966 weekdays: 'Ø§ÙØ£ØØ¯_Ø§ÙØ¥Ø«ÙÙÙ_Ø§ÙØ«Ùاثاء_Ø§ÙØ£Ø±Ø¨Ø¹Ø§Ø¡_Ø§ÙØ®Ù ÙØ³_Ø§ÙØ¬Ù عة_Ø§ÙØ³Ø¨Øª'.split('_'), 36967 weekdaysShort: 'Ø£ØØ¯_إثÙÙÙ_Ø«ÙØ§Ø«Ø§Ø¡_أربعاء_Ø®Ù ÙØ³_ج٠عة_سبت'.split('_'), 36968 weekdaysMin: 'Ø_Ù_Ø«_ر_Ø®_ج_س'.split('_'), 36969 weekdaysParseExact: true, 36970 longDateFormat: { 36971 LT: 'HH:mm', 36972 LTS: 'HH:mm:ss', 36973 L: 'DD/MM/YYYY', 36974 LL: 'D MMMM YYYY', 36975 LLL: 'D MMMM YYYY HH:mm', 36976 LLLL: 'dddd D MMMM YYYY HH:mm', 36977 }, 36978 meridiemParse: /ص|Ù /, 36979 isPM: function (input) { 36980 return 'Ù ' === input; 36981 }, 36982 meridiem: function (hour, minute, isLower) { 36983 if (hour < 12) { 36984 return 'ص'; 36985 } else { 36986 return 'Ù '; 36987 } 36988 }, 36989 calendar: { 36990 sameDay: '[اÙÙÙ٠عÙÙ Ø§ÙØ³Ø§Ø¹Ø©] LT', 36991 nextDay: '[غدا عÙÙ Ø§ÙØ³Ø§Ø¹Ø©] LT', 36992 nextWeek: 'dddd [عÙÙ Ø§ÙØ³Ø§Ø¹Ø©] LT', 36993 lastDay: '[أ٠س عÙÙ Ø§ÙØ³Ø§Ø¹Ø©] LT', 36994 lastWeek: 'dddd [عÙÙ Ø§ÙØ³Ø§Ø¹Ø©] LT', 36995 sameElse: 'L', 36996 }, 36997 relativeTime: { 36998 future: 'ÙÙ %s', 36999 past: 'Ù ÙØ° %s', 37000 s: 'Ø«ÙØ§Ù', 37001 ss: '%d ثاÙÙØ©', 37002 m: 'دÙÙÙØ©', 37003 mm: '%d Ø¯ÙØ§Ø¦Ù', 37004 h: 'ساعة', 37005 hh: '%d ساعات', 37006 d: 'ÙÙÙ ', 37007 dd: '%d Ø£ÙØ§Ù ', 37008 M: 'Ø´ÙØ±', 37009 MM: '%d Ø£Ø´ÙØ±', 37010 y: 'Ø³ÙØ©', 37011 yy: '%d سÙÙØ§Øª', 37012 }, 37013 preparse: function (string) { 37014 return string 37015 .replace(/[٣٤٥٦٧٨٩٠]/g, function (match) { 37016 return numberMap[match]; 37017 }) 37018 .split('') // reversed since negative lookbehind not supported everywhere 37019 .reverse() 37020 .join('') 37021 .replace(/[١٢](?![\u062a\u0643])/g, function (match) { 37022 return numberMap[match]; 37023 }) 37024 .split('') 37025 .reverse() 37026 .join('') 37027 .replace(/Ø/g, ','); 37028 }, 37029 postformat: function (string) { 37030 return string 37031 .replace(/\d/g, function (match) { 37032 return symbolMap[match]; 37033 }) 37034 .replace(/,/g, 'Ø'); 37035 }, 37036 week: { 37037 dow: 0, // Sunday is the first day of the week. 37038 doy: 6, // The week that contains Jan 6th is the first week of the year. 37039 }, 37040 }); 37041 37042 return arPs; 37043 37044}))); 37045 37046 37047/***/ }), 37048
vendor: 3,944 bytes, lines 37049-37173
37049/***/ "./node_modules/moment/locale/ar-sa.js": 37050/*!*********************************************!*\ 37051 !*** ./node_modules/moment/locale/ar-sa.js ***! 37052 \*********************************************/ 37053/*! no static exports found */ 37054/***/ (function(module, exports, __webpack_require__) { 37055 37056//! moment.js locale configuration 37057//! locale : Arabic (Saudi Arabia) [ar-sa] 37058//! author : Suhail Alkowaileet : https://github.com/xsoh 37059 37060;(function (global, factory) { 37061 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : 37062 undefined 37063}(this, (function (moment) { 'use strict'; 37064 37065 //! moment.js locale configuration 37066 37067 var symbolMap = { 37068 1: 'Ù¡', 37069 2: 'Ù¢', 37070 3: 'Ù£', 37071 4: 'Ù¤', 37072 5: 'Ù¥', 37073 6: 'Ù¦', 37074 7: 'Ù§', 37075 8: 'Ù¨', 37076 9: 'Ù©', 37077 0: 'Ù ', 37078 }, 37079 numberMap = { 37080 'Ù¡': '1', 37081 'Ù¢': '2', 37082 'Ù£': '3', 37083 'Ù¤': '4', 37084 'Ù¥': '5', 37085 'Ù¦': '6', 37086 'Ù§': '7', 37087 'Ù¨': '8', 37088 'Ù©': '9', 37089 'Ù ': '0', 37090 }; 37091 37092 var arSa = moment.defineLocale('ar-sa', { 37093 months: 'ÙÙØ§Ùر_ÙØ¨Ø±Ø§Ùر_٠ارس_أبرÙÙ_٠اÙÙ_ÙÙÙÙÙ_ÙÙÙÙÙ_أغسطس_سبت٠بر_Ø£ÙØªÙبر_ÙÙÙ٠بر_Ø¯ÙØ³Ù بر'.split( 37094 '_' 37095 ), 37096 monthsShort: 37097 'ÙÙØ§Ùر_ÙØ¨Ø±Ø§Ùر_٠ارس_أبرÙÙ_٠اÙÙ_ÙÙÙÙÙ_ÙÙÙÙÙ_أغسطس_سبت٠بر_Ø£ÙØªÙبر_ÙÙÙ٠بر_Ø¯ÙØ³Ù بر'.split( 37098 '_' 37099 ), 37100 weekdays: 'Ø§ÙØ£ØØ¯_Ø§ÙØ¥Ø«ÙÙÙ_Ø§ÙØ«Ùاثاء_Ø§ÙØ£Ø±Ø¨Ø¹Ø§Ø¡_Ø§ÙØ®Ù ÙØ³_Ø§ÙØ¬Ù عة_Ø§ÙØ³Ø¨Øª'.split('_'), 37101 weekdaysShort: 'Ø£ØØ¯_إثÙÙÙ_Ø«ÙØ§Ø«Ø§Ø¡_أربعاء_Ø®Ù ÙØ³_ج٠عة_سبت'.split('_'), 37102 weekdaysMin: 'Ø_Ù_Ø«_ر_Ø®_ج_س'.split('_'), 37103 weekdaysParseExact: true, 37104 longDateFormat: { 37105 LT: 'HH:mm', 37106 LTS: 'HH:mm:ss', 37107 L: 'DD/MM/YYYY', 37108 LL: 'D MMMM YYYY', 37109 LLL: 'D MMMM YYYY HH:mm', 37110 LLLL: 'dddd D MMMM YYYY HH:mm', 37111 }, 37112 meridiemParse: /ص|Ù /, 37113 isPM: function (input) { 37114 return 'Ù ' === input; 37115 }, 37116 meridiem: function (hour, minute, isLower) { 37117 if (hour < 12) { 37118 return 'ص'; 37119 } else { 37120 return 'Ù '; 37121 } 37122 }, 37123 calendar: { 37124 sameDay: '[اÙÙÙ٠عÙÙ Ø§ÙØ³Ø§Ø¹Ø©] LT', 37125 nextDay: '[غدا عÙÙ Ø§ÙØ³Ø§Ø¹Ø©] LT', 37126 nextWeek: 'dddd [عÙÙ Ø§ÙØ³Ø§Ø¹Ø©] LT', 37127 lastDay: '[أ٠س عÙÙ Ø§ÙØ³Ø§Ø¹Ø©] LT', 37128 lastWeek: 'dddd [عÙÙ Ø§ÙØ³Ø§Ø¹Ø©] LT', 37129 sameElse: 'L', 37130 }, 37131 relativeTime: { 37132 future: 'ÙÙ %s', 37133 past: 'Ù ÙØ° %s', 37134 s: 'Ø«ÙØ§Ù', 37135 ss: '%d ثاÙÙØ©', 37136 m: 'دÙÙÙØ©', 37137 mm: '%d Ø¯ÙØ§Ø¦Ù', 37138 h: 'ساعة', 37139 hh: '%d ساعات', 37140 d: 'ÙÙÙ ', 37141 dd: '%d Ø£ÙØ§Ù ', 37142 M: 'Ø´ÙØ±', 37143 MM: '%d Ø£Ø´ÙØ±', 37144 y: 'Ø³ÙØ©', 37145 yy: '%d سÙÙØ§Øª', 37146 }, 37147 preparse: function (string) { 37148 return string 37149 .replace(/[١٢٣٤٥٦٧٨٩٠]/g, function (match) { 37150 return numberMap[match]; 37151 }) 37152 .replace(/Ø/g, ','); 37153 }, 37154 postformat: function (string) { 37155 return string 37156 .replace(/\d/g, function (match) { 37157 return symbolMap[match]; 37158 }) 37159 .replace(/,/g, 'Ø'); 37160 }, 37161 week: { 37162 dow: 0, // Sunday is the first day of the week. 37163 doy: 6, // The week that contains Jan 6th is the first week of the year. 37164 }, 37165 }); 37166 37167 return arSa; 37168 37169}))); 37170 37171 37172/***/ }), 37173
vendor: 2,642 bytes, lines 37174-37248
37174/***/ "./node_modules/moment/locale/ar-tn.js": 37175/*!*********************************************!*\ 37176 !*** ./node_modules/moment/locale/ar-tn.js ***! 37177 \*********************************************/ 37178/*! no static exports found */ 37179/***/ (function(module, exports, __webpack_require__) { 37180 37181//! moment.js locale configuration 37182//! locale : Arabic (Tunisia) [ar-tn] 37183//! author : Nader Toukabri : https://github.com/naderio 37184 37185;(function (global, factory) { 37186 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : 37187 undefined 37188}(this, (function (moment) { 'use strict'; 37189 37190 //! moment.js locale configuration 37191 37192 var arTn = moment.defineLocale('ar-tn', { 37193 months: 'جاÙÙÙ_ÙÙÙØ±Ù_٠ارس_Ø£ÙØ±ÙÙ_٠اÙ_Ø¬ÙØ§Ù_جÙÙÙÙØ©_Ø£ÙØª_سبت٠بر_Ø£ÙØªÙبر_ÙÙÙ٠بر_Ø¯ÙØ³Ù بر'.split( 37194 '_' 37195 ), 37196 monthsShort: 37197 'جاÙÙÙ_ÙÙÙØ±Ù_٠ارس_Ø£ÙØ±ÙÙ_٠اÙ_Ø¬ÙØ§Ù_جÙÙÙÙØ©_Ø£ÙØª_سبت٠بر_Ø£ÙØªÙبر_ÙÙÙ٠بر_Ø¯ÙØ³Ù بر'.split( 37198 '_' 37199 ), 37200 weekdays: 'Ø§ÙØ£ØØ¯_Ø§ÙØ¥Ø«ÙÙÙ_Ø§ÙØ«Ùاثاء_Ø§ÙØ£Ø±Ø¨Ø¹Ø§Ø¡_Ø§ÙØ®Ù ÙØ³_Ø§ÙØ¬Ù عة_Ø§ÙØ³Ø¨Øª'.split('_'), 37201 weekdaysShort: 'Ø£ØØ¯_إثÙÙÙ_Ø«ÙØ§Ø«Ø§Ø¡_أربعاء_Ø®Ù ÙØ³_ج٠عة_سبت'.split('_'), 37202 weekdaysMin: 'Ø_Ù_Ø«_ر_Ø®_ج_س'.split('_'), 37203 weekdaysParseExact: true, 37204 longDateFormat: { 37205 LT: 'HH:mm', 37206 LTS: 'HH:mm:ss', 37207 L: 'DD/MM/YYYY', 37208 LL: 'D MMMM YYYY', 37209 LLL: 'D MMMM YYYY HH:mm', 37210 LLLL: 'dddd D MMMM YYYY HH:mm', 37211 }, 37212 calendar: { 37213 sameDay: '[اÙÙÙ٠عÙÙ Ø§ÙØ³Ø§Ø¹Ø©] LT', 37214 nextDay: '[غدا عÙÙ Ø§ÙØ³Ø§Ø¹Ø©] LT', 37215 nextWeek: 'dddd [عÙÙ Ø§ÙØ³Ø§Ø¹Ø©] LT', 37216 lastDay: '[أ٠س عÙÙ Ø§ÙØ³Ø§Ø¹Ø©] LT', 37217 lastWeek: 'dddd [عÙÙ Ø§ÙØ³Ø§Ø¹Ø©] LT', 37218 sameElse: 'L', 37219 }, 37220 relativeTime: { 37221 future: 'ÙÙ %s', 37222 past: 'Ù ÙØ° %s', 37223 s: 'Ø«ÙØ§Ù', 37224 ss: '%d ثاÙÙØ©', 37225 m: 'دÙÙÙØ©', 37226 mm: '%d Ø¯ÙØ§Ø¦Ù', 37227 h: 'ساعة', 37228 hh: '%d ساعات', 37229 d: 'ÙÙÙ ', 37230 dd: '%d Ø£ÙØ§Ù ', 37231 M: 'Ø´ÙØ±', 37232 MM: '%d Ø£Ø´ÙØ±', 37233 y: 'Ø³ÙØ©', 37234 yy: '%d سÙÙØ§Øª', 37235 }, 37236 week: { 37237 dow: 1, // Monday is the first day of the week. 37238 doy: 4, // The week that contains Jan 4th is the first week of the year. 37239 }, 37240 }); 37241 37242 return arTn; 37243 37244}))); 37245 37246 37247/***/ }), 37248
vendor: 6,326 bytes, lines 37249-37457
37249/***/ "./node_modules/moment/locale/ar.js": 37250/*!******************************************!*\ 37251 !*** ./node_modules/moment/locale/ar.js ***! 37252 \******************************************/ 37253/*! no static exports found */ 37254/***/ (function(module, exports, __webpack_require__) { 37255 37256//! moment.js locale configuration 37257//! locale : Arabic [ar] 37258//! author : Abdel Said: https://github.com/abdelsaid 37259//! author : Ahmed Elkhatib 37260//! author : forabi https://github.com/forabi 37261 37262;(function (global, factory) { 37263 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : 37264 undefined 37265}(this, (function (moment) { 'use strict'; 37266 37267 //! moment.js locale configuration 37268 37269 var symbolMap = { 37270 1: 'Ù¡', 37271 2: 'Ù¢', 37272 3: 'Ù£', 37273 4: 'Ù¤', 37274 5: 'Ù¥', 37275 6: 'Ù¦', 37276 7: 'Ù§', 37277 8: 'Ù¨', 37278 9: 'Ù©', 37279 0: 'Ù ', 37280 }, 37281 numberMap = { 37282 'Ù¡': '1', 37283 'Ù¢': '2', 37284 'Ù£': '3', 37285 'Ù¤': '4', 37286 'Ù¥': '5', 37287 'Ù¦': '6', 37288 'Ù§': '7', 37289 'Ù¨': '8', 37290 'Ù©': '9', 37291 'Ù ': '0', 37292 }, 37293 pluralForm = function (n) { 37294 return n === 0 37295 ? 0 37296 : n === 1 37297 ? 1 37298 : n === 2 37299 ? 2 37300 : n % 100 >= 3 && n % 100 <= 10 37301 ? 3 37302 : n % 100 >= 11 37303 ? 4 37304 : 5; 37305 }, 37306 plurals = { 37307 s: [ 37308 'Ø£Ù٠٠٠ثاÙÙØ©', 37309 'ثاÙÙØ© ÙØ§ØØ¯Ø©', 37310 ['ثاÙÙØªØ§Ù', 'ثاÙÙØªÙÙ'], 37311 '%d Ø«ÙØ§Ù', 37312 '%d ثاÙÙØ©', 37313 '%d ثاÙÙØ©', 37314 ], 37315 m: [ 37316 'Ø£Ù٠٠٠دÙÙÙØ©', 37317 'دÙÙÙØ© ÙØ§ØØ¯Ø©', 37318 ['دÙÙÙØªØ§Ù', 'دÙÙÙØªÙÙ'], 37319 '%d Ø¯ÙØ§Ø¦Ù', 37320 '%d دÙÙÙØ©', 37321 '%d دÙÙÙØ©', 37322 ], 37323 h: [ 37324 'Ø£Ù٠٠٠ساعة', 37325 'ساعة ÙØ§ØØ¯Ø©', 37326 ['ساعتاÙ', 'ساعتÙÙ'], 37327 '%d ساعات', 37328 '%d ساعة', 37329 '%d ساعة', 37330 ], 37331 d: [ 37332 'Ø£ÙÙ Ù Ù ÙÙÙ ', 37333 'ÙÙÙ ÙØ§ØØ¯', 37334 ['ÙÙ٠اÙ', 'ÙÙÙ ÙÙ'], 37335 '%d Ø£ÙØ§Ù ', 37336 '%d ÙÙÙ ÙØ§', 37337 '%d ÙÙÙ ', 37338 ], 37339 M: [ 37340 'Ø£ÙÙ Ù Ù Ø´ÙØ±', 37341 'Ø´ÙØ± ÙØ§ØØ¯', 37342 ['Ø´ÙØ±Ø§Ù', 'Ø´ÙØ±ÙÙ'], 37343 '%d Ø£Ø´ÙØ±', 37344 '%d Ø´ÙØ±Ø§', 37345 '%d Ø´ÙØ±', 37346 ], 37347 y: [ 37348 'Ø£Ù٠٠٠عا٠', 37349 'Ø¹Ø§Ù ÙØ§ØØ¯', 37350 ['عا٠اÙ', 'عا٠ÙÙ'], 37351 '%d Ø£Ø¹ÙØ§Ù ', 37352 '%d Ø¹Ø§Ù ÙØ§', 37353 '%d عا٠', 37354 ], 37355 }, 37356 pluralize = function (u) { 37357 return function (number, withoutSuffix, string, isFuture) { 37358 var f = pluralForm(number), 37359 str = plurals[u][pluralForm(number)]; 37360 if (f === 2) { 37361 str = str[withoutSuffix ? 0 : 1]; 37362 } 37363 return str.replace(/%d/i, number); 37364 }; 37365 }, 37366 months = [ 37367 'ÙÙØ§Ùر', 37368 'ÙØ¨Ø±Ø§Ùر', 37369 '٠ارس', 37370 'أبرÙÙ', 37371 '٠اÙÙ', 37372 'ÙÙÙÙÙ', 37373 'ÙÙÙÙÙ', 37374 'أغسطس', 37375 'سبت٠بر', 37376 'Ø£ÙØªÙبر', 37377 'ÙÙÙ٠بر', 37378 'Ø¯ÙØ³Ù بر', 37379 ]; 37380 37381 var ar = moment.defineLocale('ar', { 37382 months: months, 37383 monthsShort: months, 37384 weekdays: 'Ø§ÙØ£ØØ¯_Ø§ÙØ¥Ø«ÙÙÙ_Ø§ÙØ«Ùاثاء_Ø§ÙØ£Ø±Ø¨Ø¹Ø§Ø¡_Ø§ÙØ®Ù ÙØ³_Ø§ÙØ¬Ù عة_Ø§ÙØ³Ø¨Øª'.split('_'), 37385 weekdaysShort: 'Ø£ØØ¯_إثÙÙÙ_Ø«ÙØ§Ø«Ø§Ø¡_أربعاء_Ø®Ù ÙØ³_ج٠عة_سبت'.split('_'), 37386 weekdaysMin: 'Ø_Ù_Ø«_ر_Ø®_ج_س'.split('_'), 37387 weekdaysParseExact: true, 37388 longDateFormat: { 37389 LT: 'HH:mm', 37390 LTS: 'HH:mm:ss', 37391 L: 'D/\u200FM/\u200FYYYY', 37392 LL: 'D MMMM YYYY', 37393 LLL: 'D MMMM YYYY HH:mm', 37394 LLLL: 'dddd D MMMM YYYY HH:mm', 37395 }, 37396 meridiemParse: /ص|Ù /, 37397 isPM: function (input) { 37398 return 'Ù ' === input; 37399 }, 37400 meridiem: function (hour, minute, isLower) { 37401 if (hour < 12) { 37402 return 'ص'; 37403 } else { 37404 return 'Ù '; 37405 } 37406 }, 37407 calendar: { 37408 sameDay: '[اÙÙÙÙ Ø¹ÙØ¯ Ø§ÙØ³Ø§Ø¹Ø©] LT', 37409 nextDay: '[ØºØ¯ÙØ§ Ø¹ÙØ¯ Ø§ÙØ³Ø§Ø¹Ø©] LT', 37410 nextWeek: 'dddd [Ø¹ÙØ¯ Ø§ÙØ³Ø§Ø¹Ø©] LT', 37411 lastDay: '[أ٠س Ø¹ÙØ¯ Ø§ÙØ³Ø§Ø¹Ø©] LT', 37412 lastWeek: 'dddd [Ø¹ÙØ¯ Ø§ÙØ³Ø§Ø¹Ø©] LT', 37413 sameElse: 'L', 37414 }, 37415 relativeTime: { 37416 future: 'بعد %s', 37417 past: 'Ù ÙØ° %s', 37418 s: pluralize('s'), 37419 ss: pluralize('s'), 37420 m: pluralize('m'), 37421 mm: pluralize('m'), 37422 h: pluralize('h'), 37423 hh: pluralize('h'), 37424 d: pluralize('d'), 37425 dd: pluralize('d'), 37426 M: pluralize('M'), 37427 MM: pluralize('M'), 37428 y: pluralize('y'), 37429 yy: pluralize('y'), 37430 }, 37431 preparse: function (string) { 37432 return string 37433 .replace(/[١٢٣٤٥٦٧٨٩٠]/g, function (match) { 37434 return numberMap[match]; 37435 }) 37436 .replace(/Ø/g, ','); 37437 }, 37438 postformat: function (string) { 37439 return string 37440 .replace(/\d/g, function (match) { 37441 return symbolMap[match]; 37442 }) 37443 .replace(/,/g, 'Ø'); 37444 }, 37445 week: { 37446 dow: 6, // Saturday is the first day of the week. 37447 doy: 12, // The week that contains Jan 12th is the first week of the year. 37448 }, 37449 }); 37450 37451 return ar; 37452 37453}))); 37454 37455 37456/***/ }), 37457
vendor: 3,720 bytes, lines 37458-37579
37458/***/ "./node_modules/moment/locale/az.js": 37459/*!******************************************!*\ 37460 !*** ./node_modules/moment/locale/az.js ***! 37461 \******************************************/ 37462/*! no static exports found */ 37463/***/ (function(module, exports, __webpack_require__) { 37464 37465//! moment.js locale configuration 37466//! locale : Azerbaijani [az] 37467//! author : topchiyev : https://github.com/topchiyev 37468 37469;(function (global, factory) { 37470 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : 37471 undefined 37472}(this, (function (moment) { 'use strict'; 37473 37474 //! moment.js locale configuration 37475 37476 var suffixes = { 37477 1: '-inci', 37478 5: '-inci', 37479 8: '-inci', 37480 70: '-inci', 37481 80: '-inci', 37482 2: '-nci', 37483 7: '-nci', 37484 20: '-nci', 37485 50: '-nci', 37486 3: '-üncü', 37487 4: '-üncü', 37488 100: '-üncü', 37489 6: '-ncı', 37490 9: '-uncu', 37491 10: '-uncu', 37492 30: '-uncu', 37493 60: '-ıncı', 37494 90: '-ıncı', 37495 }; 37496 37497 var az = moment.defineLocale('az', { 37498 months: 'yanvar_fevral_mart_aprel_may_iyun_iyul_avqust_sentyabr_oktyabr_noyabr_dekabr'.split( 37499 '_' 37500 ), 37501 monthsShort: 'yan_fev_mar_apr_may_iyn_iyl_avq_sen_okt_noy_dek'.split('_'), 37502 weekdays: 37503 'Bazar_Bazar ertÉsi_ÃÉrÅÉnbÉ axÅamı_ÃÉrÅÉnbÉ_CümÉ axÅamı_CümÉ_ÅÉnbÉ'.split( 37504 '_' 37505 ), 37506 weekdaysShort: 'Baz_BzE_ÃAx_ÃÉr_CAx_Cüm_ÅÉn'.split('_'), 37507 weekdaysMin: 'Bz_BE_ÃA_ÃÉ_CA_Cü_ÅÉ'.split('_'), 37508 weekdaysParseExact: true, 37509 longDateFormat: { 37510 LT: 'HH:mm', 37511 LTS: 'HH:mm:ss', 37512 L: 'DD.MM.YYYY', 37513 LL: 'D MMMM YYYY', 37514 LLL: 'D MMMM YYYY HH:mm', 37515 LLLL: 'dddd, D MMMM YYYY HH:mm', 37516 }, 37517 calendar: { 37518 sameDay: '[bugün saat] LT', 37519 nextDay: '[sabah saat] LT', 37520 nextWeek: '[gÉlÉn hÉftÉ] dddd [saat] LT', 37521 lastDay: '[dünÉn] LT', 37522 lastWeek: '[keçÉn hÉftÉ] dddd [saat] LT', 37523 sameElse: 'L', 37524 }, 37525 relativeTime: { 37526 future: '%s sonra', 37527 past: '%s ÉvvÉl', 37528 s: 'bir neÃ§É saniyÉ', 37529 ss: '%d saniyÉ', 37530 m: 'bir dÉqiqÉ', 37531 mm: '%d dÉqiqÉ', 37532 h: 'bir saat', 37533 hh: '%d saat', 37534 d: 'bir gün', 37535 dd: '%d gün', 37536 M: 'bir ay', 37537 MM: '%d ay', 37538 y: 'bir il', 37539 yy: '%d il', 37540 }, 37541 meridiemParse: /gecÉ|sÉhÉr|gündüz|axÅam/, 37542 isPM: function (input) { 37543 return /^(gündüz|axÅam)$/.test(input); 37544 }, 37545 meridiem: function (hour, minute, isLower) { 37546 if (hour < 4) { 37547 return 'gecÉ'; 37548 } else if (hour < 12) { 37549 return 'sÉhÉr'; 37550 } else if (hour < 17) { 37551 return 'gündüz'; 37552 } else { 37553 return 'axÅam'; 37554 } 37555 }, 37556 dayOfMonthOrdinalParse: /\d{1,2}-(ıncı|inci|nci|üncü|ncı|uncu)/, 37557 ordinal: function (number) { 37558 if (number === 0) { 37559 // special case for zero 37560 return number + '-ıncı'; 37561 } 37562 var a = number % 10, 37563 b = (number % 100) - a, 37564 c = number >= 100 ? 100 : null; 37565 return number + (suffixes[a] || suffixes[b] || suffixes[c]); 37566 }, 37567 week: { 37568 dow: 1, // Monday is the first day of the week. 37569 doy: 7, // The week that contains Jan 7th is the first week of the year. 37570 }, 37571 }); 37572 37573 return az; 37574 37575}))); 37576 37577 37578/***/ }), 37579
vendor: 6,184 bytes, lines 37580-37741
37580/***/ "./node_modules/moment/locale/be.js": 37581/*!******************************************!*\ 37582 !*** ./node_modules/moment/locale/be.js ***! 37583 \******************************************/ 37584/*! no static exports found */ 37585/***/ (function(module, exports, __webpack_require__) { 37586 37587//! moment.js locale configuration 37588//! locale : Belarusian [be] 37589//! author : Dmitry Demidov : https://github.com/demidov91 37590//! author: Praleska: http://praleska.pro/ 37591//! Author : Menelion Elensúle : https://github.com/Oire 37592 37593;(function (global, factory) { 37594 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : 37595 undefined 37596}(this, (function (moment) { 'use strict'; 37597 37598 //! moment.js locale configuration 37599 37600 function plural(word, num) { 37601 var forms = word.split('_'); 37602 return num % 10 === 1 && num % 100 !== 11 37603 ? forms[0] 37604 : num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20) 37605 ? forms[1] 37606 : forms[2]; 37607 } 37608 function relativeTimeWithPlural(number, withoutSuffix, key) { 37609 var format = { 37610 ss: withoutSuffix ? 'ÑекÑнда_ÑекÑндÑ_ÑекÑнд' : 'ÑекÑндÑ_ÑекÑндÑ_ÑекÑнд', 37611 mm: withoutSuffix ? 'Ñ Ð²ÑлÑна_Ñ Ð²ÑлÑнÑ_Ñ Ð²ÑлÑн' : 'Ñ Ð²ÑлÑнÑ_Ñ Ð²ÑлÑнÑ_Ñ Ð²ÑлÑн', 37612 hh: withoutSuffix ? 'гадзÑна_гадзÑнÑ_гадзÑн' : 'гадзÑнÑ_гадзÑнÑ_гадзÑн', 37613 dd: 'дзенÑ_днÑ_дзÑн', 37614 MM: 'меÑÑÑ_меÑÑÑÑ_меÑÑÑаÑ', 37615 yy: 'год_гадÑ_гадоÑ', 37616 }; 37617 if (key === 'm') { 37618 return withoutSuffix ? 'Ñ Ð²ÑлÑна' : 'Ñ Ð²ÑлÑнÑ'; 37619 } else if (key === 'h') { 37620 return withoutSuffix ? 'гадзÑна' : 'гадзÑнÑ'; 37621 } else { 37622 return number + ' ' + plural(format[key], +number); 37623 } 37624 } 37625 37626 var be = moment.defineLocale('be', { 37627 months: { 37628 format: 'ÑÑÑдзенÑ_лÑÑага_ÑакавÑка_кÑаÑавÑка_ÑÑаÑнÑ_ÑÑÑвенÑ_лÑпенÑ_жнÑÑнÑ_веÑаÑнÑ_каÑÑÑÑÑнÑка_лÑÑÑапада_ÑнежнÑ'.split( 37629 '_' 37630 ), 37631 standalone: 37632 'ÑÑÑдзенÑ_лÑÑÑ_ÑакавÑк_кÑаÑавÑк_ÑÑавенÑ_ÑÑÑвенÑ_лÑпенÑ_жнÑвенÑ_веÑаÑенÑ_каÑÑÑÑÑнÑк_лÑÑÑапад_ÑнежанÑ'.split( 37633 '_' 37634 ), 37635 }, 37636 monthsShort: 37637 'ÑÑÑд_лÑÑ_Ñак_кÑаÑ_ÑÑав_ÑÑÑв_лÑп_жнÑв_веÑ_каÑÑ_лÑÑÑ_Ñнеж'.split('_'), 37638 weekdays: { 37639 format: 'нÑдзелÑ_панÑдзелак_аÑÑоÑак_ÑеÑадÑ_ÑаÑвеÑ_пÑÑнÑÑÑ_ÑÑбоÑÑ'.split( 37640 '_' 37641 ), 37642 standalone: 37643 'нÑдзелÑ_панÑдзелак_аÑÑоÑак_ÑеÑада_ÑаÑвеÑ_пÑÑнÑÑа_ÑÑбоÑа'.split( 37644 '_' 37645 ), 37646 isFormat: /\[ ?[УÑÑ] ?(?:мÑнÑлÑÑ|наÑÑÑпнÑÑ)? ?\] ?dddd/, 37647 }, 37648 weekdaysShort: 'нд_пн_аÑ_ÑÑ_ÑÑ_пÑ_Ñб'.split('_'), 37649 weekdaysMin: 'нд_пн_аÑ_ÑÑ_ÑÑ_пÑ_Ñб'.split('_'), 37650 longDateFormat: { 37651 LT: 'HH:mm', 37652 LTS: 'HH:mm:ss', 37653 L: 'DD.MM.YYYY', 37654 LL: 'D MMMM YYYY г.', 37655 LLL: 'D MMMM YYYY г., HH:mm', 37656 LLLL: 'dddd, D MMMM YYYY г., HH:mm', 37657 }, 37658 calendar: { 37659 sameDay: '[СÑÐ½Ð½Ñ Ñ] LT', 37660 nextDay: '[ÐаÑÑÑа Ñ] LT', 37661 lastDay: '[УÑоÑа Ñ] LT', 37662 nextWeek: function () { 37663 return '[У] dddd [Ñ] LT'; 37664 }, 37665 lastWeek: function () { 37666 switch (this.day()) { 37667 case 0: 37668 case 3: 37669 case 5: 37670 case 6: 37671 return '[У мÑнÑлÑÑ] dddd [Ñ] LT'; 37672 case 1: 37673 case 2: 37674 case 4: 37675 return '[У мÑнÑлÑ] dddd [Ñ] LT'; 37676 } 37677 }, 37678 sameElse: 'L', 37679 }, 37680 relativeTime: { 37681 future: 'пÑаз %s', 37682 past: '%s ÑамÑ', 37683 s: 'некалÑÐºÑ ÑекÑнд', 37684 m: relativeTimeWithPlural, 37685 mm: relativeTimeWithPlural, 37686 h: relativeTimeWithPlural, 37687 hh: relativeTimeWithPlural, 37688 d: 'дзенÑ', 37689 dd: relativeTimeWithPlural, 37690 M: 'меÑÑÑ', 37691 MM: relativeTimeWithPlural, 37692 y: 'год', 37693 yy: relativeTimeWithPlural, 37694 }, 37695 meridiemParse: /ноÑÑ|ÑанÑÑÑ|днÑ|веÑаÑа/, 37696 isPM: function (input) { 37697 return /^(днÑ|веÑаÑа)$/.test(input); 37698 }, 37699 meridiem: function (hour, minute, isLower) { 37700 if (hour < 4) { 37701 return 'ноÑÑ'; 37702 } else if (hour < 12) { 37703 return 'ÑанÑÑÑ'; 37704 } else if (hour < 17) { 37705 return 'днÑ'; 37706 } else { 37707 return 'веÑаÑа'; 37708 } 37709 }, 37710 dayOfMonthOrdinalParse: /\d{1,2}-(Ñ|Ñ|га)/, 37711 ordinal: function (number, period) { 37712 switch (period) { 37713 case 'M': 37714 case 'd': 37715 case 'DDD': 37716 case 'w': 37717 case 'W': 37718 return (number % 10 === 2 || number % 10 === 3) && 37719 number % 100 !== 12 && 37720 number % 100 !== 13 37721 ? number + '-Ñ' 37722 : number + '-Ñ'; 37723 case 'D': 37724 return number + '-га'; 37725 default: 37726 return number; 37727 } 37728 }, 37729 week: { 37730 dow: 1, // Monday is the first day of the week. 37731 doy: 7, // The week that contains Jan 7th is the first week of the year. 37732 }, 37733 }); 37734 37735 return be; 37736 37737}))); 37738 37739 37740/***/ }), 37741
vendor: 3,773 bytes, lines 37742-37848
37742/***/ "./node_modules/moment/locale/bg.js": 37743/*!******************************************!*\ 37744 !*** ./node_modules/moment/locale/bg.js ***! 37745 \******************************************/ 37746/*! no static exports found */ 37747/***/ (function(module, exports, __webpack_require__) { 37748 37749//! moment.js locale configuration 37750//! locale : Bulgarian [bg] 37751//! author : Krasen Borisov : https://github.com/kraz 37752 37753;(function (global, factory) { 37754 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : 37755 undefined 37756}(this, (function (moment) { 'use strict'; 37757 37758 //! moment.js locale configuration 37759 37760 var bg = moment.defineLocale('bg', { 37761 months: 'ÑнÑаÑи_ÑевÑÑаÑи_маÑÑ_апÑил_май_Ñни_Ñли_авгÑÑÑ_ÑепÑемвÑи_окÑомвÑи_ноемвÑи_декемвÑи'.split( 37762 '_' 37763 ), 37764 monthsShort: 'ÑнÑ_Ñев_маÑ_апÑ_май_Ñни_Ñли_авг_Ñеп_окÑ_ное_дек'.split('_'), 37765 weekdays: 'неделÑ_понеделник_вÑоÑник_ÑÑÑда_ÑеÑвÑÑÑÑк_пеÑÑк_ÑÑбоÑа'.split( 37766 '_' 37767 ), 37768 weekdaysShort: 'нед_пон_вÑо_ÑÑÑ_ÑеÑ_пеÑ_ÑÑб'.split('_'), 37769 weekdaysMin: 'нд_пн_вÑ_ÑÑ_ÑÑ_пÑ_Ñб'.split('_'), 37770 longDateFormat: { 37771 LT: 'H:mm', 37772 LTS: 'H:mm:ss', 37773 L: 'D.MM.YYYY', 37774 LL: 'D MMMM YYYY', 37775 LLL: 'D MMMM YYYY H:mm', 37776 LLLL: 'dddd, D MMMM YYYY H:mm', 37777 }, 37778 calendar: { 37779 sameDay: '[ÐÐ½ÐµÑ Ð²] LT', 37780 nextDay: '[УÑÑе в] LT', 37781 nextWeek: 'dddd [в] LT', 37782 lastDay: '[ÐÑеÑа в] LT', 37783 lastWeek: function () { 37784 switch (this.day()) { 37785 case 0: 37786 case 3: 37787 case 6: 37788 return '[ÐиналаÑа] dddd [в] LT'; 37789 case 1: 37790 case 2: 37791 case 4: 37792 case 5: 37793 return '[ÐиналиÑ] dddd [в] LT'; 37794 } 37795 }, 37796 sameElse: 'L', 37797 }, 37798 relativeTime: { 37799 future: 'Ñлед %s', 37800 past: 'пÑеди %s', 37801 s: 'нÑколко ÑекÑнди', 37802 ss: '%d ÑекÑнди', 37803 m: 'минÑÑа', 37804 mm: '%d минÑÑи', 37805 h: 'ÑаÑ', 37806 hh: '%d ÑаÑа', 37807 d: 'ден', 37808 dd: '%d дена', 37809 w: 'ÑедмиÑа', 37810 ww: '%d ÑедмиÑи', 37811 M: 'меÑеÑ', 37812 MM: '%d меÑеÑа', 37813 y: 'година', 37814 yy: '%d години', 37815 }, 37816 dayOfMonthOrdinalParse: /\d{1,2}-(ев|ен|Ñи|ви|Ñи|ми)/, 37817 ordinal: function (number) { 37818 var lastDigit = number % 10, 37819 last2Digits = number % 100; 37820 if (number === 0) { 37821 return number + '-ев'; 37822 } else if (last2Digits === 0) { 37823 return number + '-ен'; 37824 } else if (last2Digits > 10 && last2Digits < 20) { 37825 return number + '-Ñи'; 37826 } else if (lastDigit === 1) { 37827 return number + '-ви'; 37828 } else if (lastDigit === 2) { 37829 return number + '-Ñи'; 37830 } else if (lastDigit === 7 || lastDigit === 8) { 37831 return number + '-ми'; 37832 } else { 37833 return number + '-Ñи'; 37834 } 37835 }, 37836 week: { 37837 dow: 1, // Monday is the first day of the week. 37838 doy: 7, // The week that contains Jan 7th is the first week of the year. 37839 }, 37840 }); 37841 37842 return bg; 37843 37844}))); 37845 37846 37847/***/ }), 37848
vendor: 2,383 bytes, lines 37849-37919
37849/***/ "./node_modules/moment/locale/bm.js": 37850/*!******************************************!*\ 37851 !*** ./node_modules/moment/locale/bm.js ***! 37852 \******************************************/ 37853/*! no static exports found */ 37854/***/ (function(module, exports, __webpack_require__) { 37855 37856//! moment.js locale configuration 37857//! locale : Bambara [bm] 37858//! author : Estelle Comment : https://github.com/estellecomment 37859 37860;(function (global, factory) { 37861 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : 37862 undefined 37863}(this, (function (moment) { 'use strict'; 37864 37865 //! moment.js locale configuration 37866 37867 var bm = moment.defineLocale('bm', { 37868 months: 'Zanwuyekalo_Fewuruyekalo_Marisikalo_Awirilikalo_MÉkalo_ZuwÉnkalo_Zuluyekalo_Utikalo_SÉtanburukalo_ÉkutÉburukalo_Nowanburukalo_Desanburukalo'.split( 37869 '_' 37870 ), 37871 monthsShort: 'Zan_Few_Mar_Awi_MÉ_Zuw_Zul_Uti_SÉt_Éku_Now_Des'.split('_'), 37872 weekdays: 'Kari_NtÉnÉn_Tarata_Araba_Alamisa_Juma_Sibiri'.split('_'), 37873 weekdaysShort: 'Kar_NtÉ_Tar_Ara_Ala_Jum_Sib'.split('_'), 37874 weekdaysMin: 'Ka_Nt_Ta_Ar_Al_Ju_Si'.split('_'), 37875 longDateFormat: { 37876 LT: 'HH:mm', 37877 LTS: 'HH:mm:ss', 37878 L: 'DD/MM/YYYY', 37879 LL: 'MMMM [tile] D [san] YYYY', 37880 LLL: 'MMMM [tile] D [san] YYYY [lÉrÉ] HH:mm', 37881 LLLL: 'dddd MMMM [tile] D [san] YYYY [lÉrÉ] HH:mm', 37882 }, 37883 calendar: { 37884 sameDay: '[Bi lÉrÉ] LT', 37885 nextDay: '[Sini lÉrÉ] LT', 37886 nextWeek: 'dddd [don lÉrÉ] LT', 37887 lastDay: '[Kunu lÉrÉ] LT', 37888 lastWeek: 'dddd [tÉmÉnen lÉrÉ] LT', 37889 sameElse: 'L', 37890 }, 37891 relativeTime: { 37892 future: '%s kÉnÉ', 37893 past: 'a bÉ %s bÉ', 37894 s: 'sanga dama dama', 37895 ss: 'sekondi %d', 37896 m: 'miniti kelen', 37897 mm: 'miniti %d', 37898 h: 'lÉrÉ kelen', 37899 hh: 'lÉrÉ %d', 37900 d: 'tile kelen', 37901 dd: 'tile %d', 37902 M: 'kalo kelen', 37903 MM: 'kalo %d', 37904 y: 'san kelen', 37905 yy: 'san %d', 37906 }, 37907 week: { 37908 dow: 1, // Monday is the first day of the week. 37909 doy: 4, // The week that contains Jan 4th is the first week of the year. 37910 }, 37911 }); 37912 37913 return bm; 37914 37915}))); 37916 37917 37918/***/ }), 37919
vendor: 5,339 bytes, lines 37920-38068
37920/***/ "./node_modules/moment/locale/bn-bd.js": 37921/*!*********************************************!*\ 37922 !*** ./node_modules/moment/locale/bn-bd.js ***! 37923 \*********************************************/ 37924/*! no static exports found */ 37925/***/ (function(module, exports, __webpack_require__) { 37926 37927//! moment.js locale configuration 37928//! locale : Bengali (Bangladesh) [bn-bd] 37929//! author : Asraf Hossain Patoary : https://github.com/ashwoolford 37930 37931;(function (global, factory) { 37932 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : 37933 undefined 37934}(this, (function (moment) { 'use strict'; 37935 37936 //! moment.js locale configuration 37937 37938 var symbolMap = { 37939 1: 'à§§', 37940 2: '২', 37941 3: 'à§©', 37942 4: '৪', 37943 5: 'à§«', 37944 6: '৬', 37945 7: 'à§', 37946 8: 'à§®', 37947 9: '৯', 37948 0: '০', 37949 }, 37950 numberMap = { 37951 'à§§': '1', 37952 '২': '2', 37953 'à§©': '3', 37954 '৪': '4', 37955 'à§«': '5', 37956 '৬': '6', 37957 'à§': '7', 37958 'à§®': '8', 37959 '৯': '9', 37960 '০': '0', 37961 }; 37962 37963 var bnBd = moment.defineLocale('bn-bd', { 37964 months: 'à¦à¦¾à¦¨à§à§à¦¾à¦°à¦¿_ফà§à¦¬à§à¦°à§à§à¦¾à¦°à¦¿_মারà§à¦_à¦à¦ªà§à¦°à¦¿à¦²_মà§_à¦à§à¦¨_à¦à§à¦²à¦¾à¦_à¦à¦à¦¸à§à¦_সà§à¦ªà§à¦à§à¦®à§à¦¬à¦°_ঠà¦à§à¦à§à¦¬à¦°_নà¦à§à¦®à§à¦¬à¦°_ডিসà§à¦®à§à¦¬à¦°'.split( 37965 '_' 37966 ), 37967 monthsShort: 37968 'à¦à¦¾à¦¨à§_ফà§à¦¬à§à¦°à§_মারà§à¦_à¦à¦ªà§à¦°à¦¿à¦²_মà§_à¦à§à¦¨_à¦à§à¦²à¦¾à¦_à¦à¦à¦¸à§à¦_সà§à¦ªà§à¦_ঠà¦à§à¦à§_নà¦à§_ডিসà§'.split( 37969 '_' 37970 ), 37971 weekdays: 'রবিবার_সà§à¦®à¦¬à¦¾à¦°_মà¦à§à¦à¦²à¦¬à¦¾à¦°_বà§à¦§à¦¬à¦¾à¦°_বà§à¦¹à¦¸à§à¦ªà¦¤à¦¿à¦¬à¦¾à¦°_শà§à¦à§à¦°à¦¬à¦¾à¦°_শনিবার'.split( 37972 '_' 37973 ), 37974 weekdaysShort: 'রবি_সà§à¦®_মà¦à§à¦à¦²_বà§à¦§_বà§à¦¹à¦¸à§à¦ªà¦¤à¦¿_শà§à¦à§à¦°_শনি'.split('_'), 37975 weekdaysMin: 'রবি_সà§à¦®_মà¦à§à¦à¦²_বà§à¦§_বà§à¦¹_শà§à¦à§à¦°_শনি'.split('_'), 37976 longDateFormat: { 37977 LT: 'A h:mm সমà§', 37978 LTS: 'A h:mm:ss সমà§', 37979 L: 'DD/MM/YYYY', 37980 LL: 'D MMMM YYYY', 37981 LLL: 'D MMMM YYYY, A h:mm সমà§', 37982 LLLL: 'dddd, D MMMM YYYY, A h:mm সমà§', 37983 }, 37984 calendar: { 37985 sameDay: '[à¦à¦] LT', 37986 nextDay: '[à¦à¦à¦¾à¦®à§à¦à¦¾à¦²] LT', 37987 nextWeek: 'dddd, LT', 37988 lastDay: '[à¦à¦¤à¦à¦¾à¦²] LT', 37989 lastWeek: '[à¦à¦¤] dddd, LT', 37990 sameElse: 'L', 37991 }, 37992 relativeTime: { 37993 future: '%s পরà§', 37994 past: '%s à¦à¦à§', 37995 s: 'à¦à§à§à¦ সà§à¦à§à¦¨à§à¦¡', 37996 ss: '%d সà§à¦à§à¦¨à§à¦¡', 37997 m: 'à¦à¦ মিনিà¦', 37998 mm: '%d মিনিà¦', 37999 h: 'à¦à¦ à¦à¦¨à§à¦à¦¾', 38000 hh: '%d à¦à¦¨à§à¦à¦¾', 38001 d: 'à¦à¦ দিন', 38002 dd: '%d দিন', 38003 M: 'à¦à¦ মাস', 38004 MM: '%d মাস', 38005 y: 'à¦à¦ বà¦à¦°', 38006 yy: '%d বà¦à¦°', 38007 }, 38008 preparse: function (string) { 38009 return string.replace(/[১২৩৪৫৬à§à§®à§¯à§¦]/g, function (match) { 38010 return numberMap[match]; 38011 }); 38012 }, 38013 postformat: function (string) { 38014 return string.replace(/\d/g, function (match) { 38015 return symbolMap[match]; 38016 }); 38017 }, 38018 38019 meridiemParse: /রাত|à¦à§à¦°|সà¦à¦¾à¦²|দà§à¦ªà§à¦°|বিà¦à¦¾à¦²|সনà§à¦§à§à¦¯à¦¾|রাত/, 38020 meridiemHour: function (hour, meridiem) { 38021 if (hour === 12) { 38022 hour = 0; 38023 } 38024 if (meridiem === 'রাত') { 38025 return hour < 4 ? hour : hour + 12; 38026 } else if (meridiem === 'à¦à§à¦°') { 38027 return hour; 38028 } else if (meridiem === 'সà¦à¦¾à¦²') { 38029 return hour; 38030 } else if (meridiem === 'দà§à¦ªà§à¦°') { 38031 return hour >= 3 ? hour : hour + 12; 38032 } else if (meridiem === 'বিà¦à¦¾à¦²') { 38033 return hour + 12; 38034 } else if (meridiem === 'সনà§à¦§à§à¦¯à¦¾') { 38035 return hour + 12; 38036 } 38037 }, 38038 38039 meridiem: function (hour, minute, isLower) { 38040 if (hour < 4) { 38041 return 'রাত'; 38042 } else if (hour < 6) { 38043 return 'à¦à§à¦°'; 38044 } else if (hour < 12) { 38045 return 'সà¦à¦¾à¦²'; 38046 } else if (hour < 15) { 38047 return 'দà§à¦ªà§à¦°'; 38048 } else if (hour < 18) { 38049 return 'বিà¦à¦¾à¦²'; 38050 } else if (hour < 20) { 38051 return 'সনà§à¦§à§à¦¯à¦¾'; 38052 } else { 38053 return 'রাত'; 38054 } 38055 }, 38056 week: { 38057 dow: 0, // Sunday is the first day of the week. 38058 doy: 6, // The week that contains Jan 6th is the first week of the year. 38059 }, 38060 }); 38061 38062 return bnBd; 38063 38064}))); 38065 38066 38067/***/ }), 38068
vendor: 4,840 bytes, lines 38069-38207
38069/***/ "./node_modules/moment/locale/bn.js": 38070/*!******************************************!*\ 38071 !*** ./node_modules/moment/locale/bn.js ***! 38072 \******************************************/ 38073/*! no static exports found */ 38074/***/ (function(module, exports, __webpack_require__) { 38075 38076//! moment.js locale configuration 38077//! locale : Bengali [bn] 38078//! author : Kaushik Gandhi : https://github.com/kaushikgandhi 38079 38080;(function (global, factory) { 38081 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : 38082 undefined 38083}(this, (function (moment) { 'use strict'; 38084 38085 //! moment.js locale configuration 38086 38087 var symbolMap = { 38088 1: 'à§§', 38089 2: '২', 38090 3: 'à§©', 38091 4: '৪', 38092 5: 'à§«', 38093 6: '৬', 38094 7: 'à§', 38095 8: 'à§®', 38096 9: '৯', 38097 0: '০', 38098 }, 38099 numberMap = { 38100 'à§§': '1', 38101 '২': '2', 38102 'à§©': '3', 38103 '৪': '4', 38104 'à§«': '5', 38105 '৬': '6', 38106 'à§': '7', 38107 'à§®': '8', 38108 '৯': '9', 38109 '০': '0', 38110 }; 38111 38112 var bn = moment.defineLocale('bn', { 38113 months: 'à¦à¦¾à¦¨à§à§à¦¾à¦°à¦¿_ফà§à¦¬à§à¦°à§à§à¦¾à¦°à¦¿_মারà§à¦_à¦à¦ªà§à¦°à¦¿à¦²_মà§_à¦à§à¦¨_à¦à§à¦²à¦¾à¦_à¦à¦à¦¸à§à¦_সà§à¦ªà§à¦à§à¦®à§à¦¬à¦°_ঠà¦à§à¦à§à¦¬à¦°_নà¦à§à¦®à§à¦¬à¦°_ডিসà§à¦®à§à¦¬à¦°'.split( 38114 '_' 38115 ), 38116 monthsShort: 38117 'à¦à¦¾à¦¨à§_ফà§à¦¬à§à¦°à§_মারà§à¦_à¦à¦ªà§à¦°à¦¿à¦²_মà§_à¦à§à¦¨_à¦à§à¦²à¦¾à¦_à¦à¦à¦¸à§à¦_সà§à¦ªà§à¦_ঠà¦à§à¦à§_নà¦à§_ডিসà§'.split( 38118 '_' 38119 ), 38120 weekdays: 'রবিবার_সà§à¦®à¦¬à¦¾à¦°_মà¦à§à¦à¦²à¦¬à¦¾à¦°_বà§à¦§à¦¬à¦¾à¦°_বà§à¦¹à¦¸à§à¦ªà¦¤à¦¿à¦¬à¦¾à¦°_শà§à¦à§à¦°à¦¬à¦¾à¦°_শনিবার'.split( 38121 '_' 38122 ), 38123 weekdaysShort: 'রবি_সà§à¦®_মà¦à§à¦à¦²_বà§à¦§_বà§à¦¹à¦¸à§à¦ªà¦¤à¦¿_শà§à¦à§à¦°_শনি'.split('_'), 38124 weekdaysMin: 'রবি_সà§à¦®_মà¦à§à¦à¦²_বà§à¦§_বà§à¦¹_শà§à¦à§à¦°_শনি'.split('_'), 38125 longDateFormat: { 38126 LT: 'A h:mm সমà§', 38127 LTS: 'A h:mm:ss সমà§', 38128 L: 'DD/MM/YYYY', 38129 LL: 'D MMMM YYYY', 38130 LLL: 'D MMMM YYYY, A h:mm সমà§', 38131 LLLL: 'dddd, D MMMM YYYY, A h:mm সমà§', 38132 }, 38133 calendar: { 38134 sameDay: '[à¦à¦] LT', 38135 nextDay: '[à¦à¦à¦¾à¦®à§à¦à¦¾à¦²] LT', 38136 nextWeek: 'dddd, LT', 38137 lastDay: '[à¦à¦¤à¦à¦¾à¦²] LT', 38138 lastWeek: '[à¦à¦¤] dddd, LT', 38139 sameElse: 'L', 38140 }, 38141 relativeTime: { 38142 future: '%s পরà§', 38143 past: '%s à¦à¦à§', 38144 s: 'à¦à§à§à¦ সà§à¦à§à¦¨à§à¦¡', 38145 ss: '%d সà§à¦à§à¦¨à§à¦¡', 38146 m: 'à¦à¦ মিনিà¦', 38147 mm: '%d মিনিà¦', 38148 h: 'à¦à¦ à¦à¦¨à§à¦à¦¾', 38149 hh: '%d à¦à¦¨à§à¦à¦¾', 38150 d: 'à¦à¦ দিন', 38151 dd: '%d দিন', 38152 M: 'à¦à¦ মাস', 38153 MM: '%d মাস', 38154 y: 'à¦à¦ বà¦à¦°', 38155 yy: '%d বà¦à¦°', 38156 }, 38157 preparse: function (string) { 38158 return string.replace(/[১২৩৪৫৬à§à§®à§¯à§¦]/g, function (match) { 38159 return numberMap[match]; 38160 }); 38161 }, 38162 postformat: function (string) { 38163 return string.replace(/\d/g, function (match) { 38164 return symbolMap[match]; 38165 }); 38166 }, 38167 meridiemParse: /রাত|সà¦à¦¾à¦²|দà§à¦ªà§à¦°|বিà¦à¦¾à¦²|রাত/, 38168 meridiemHour: function (hour, meridiem) { 38169 if (hour === 12) { 38170 hour = 0; 38171 } 38172 if ( 38173 (meridiem === 'রাত' && hour >= 4) || 38174 (meridiem === 'দà§à¦ªà§à¦°' && hour < 5) || 38175 meridiem === 'বিà¦à¦¾à¦²' 38176 ) { 38177 return hour + 12; 38178 } else { 38179 return hour; 38180 } 38181 }, 38182 meridiem: function (hour, minute, isLower) { 38183 if (hour < 4) { 38184 return 'রাত'; 38185 } else if (hour < 10) { 38186 return 'সà¦à¦¾à¦²'; 38187 } else if (hour < 17) { 38188 return 'দà§à¦ªà§à¦°'; 38189 } else if (hour < 20) { 38190 return 'বিà¦à¦¾à¦²'; 38191 } else { 38192 return 'রাত'; 38193 } 38194 }, 38195 week: { 38196 dow: 0, // Sunday is the first day of the week. 38197 doy: 6, // The week that contains Jan 6th is the first week of the year. 38198 }, 38199 }); 38200 38201 return bn; 38202 38203}))); 38204 38205 38206/***/ }), 38207
vendor: 5,361 bytes, lines 38208-38351
38208/***/ "./node_modules/moment/locale/bo.js": 38209/*!******************************************!*\ 38210 !*** ./node_modules/moment/locale/bo.js ***! 38211 \******************************************/ 38212/*! no static exports found */ 38213/***/ (function(module, exports, __webpack_require__) { 38214 38215//! moment.js locale configuration 38216//! locale : Tibetan [bo] 38217//! author : Thupten N. Chakrishar : https://github.com/vajradog 38218 38219;(function (global, factory) { 38220 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : 38221 undefined 38222}(this, (function (moment) { 'use strict'; 38223 38224 //! moment.js locale configuration 38225 38226 var symbolMap = { 38227 1: '༡', 38228 2: '༢', 38229 3: '༣', 38230 4: '༤', 38231 5: '༥', 38232 6: '༦', 38233 7: '༧', 38234 8: '༨', 38235 9: '༩', 38236 0: '༠', 38237 }, 38238 numberMap = { 38239 '༡': '1', 38240 '༢': '2', 38241 '༣': '3', 38242 '༤': '4', 38243 '༥': '5', 38244 '༦': '6', 38245 '༧': '7', 38246 '༨': '8', 38247 '༩': '9', 38248 '༠': '0', 38249 }; 38250 38251 var bo = moment.defineLocale('bo', { 38252 months: 'à½à¾³à¼à½à¼à½à½à¼à½à½¼_à½à¾³à¼à½à¼à½à½à½²à½¦à¼à½_à½à¾³à¼à½à¼à½à½¦à½´à½à¼à½_à½à¾³à¼à½à¼à½à½à½²à¼à½_à½à¾³à¼à½à¼à½£à¾à¼à½_à½à¾³à¼à½à¼à½à¾²à½´à½à¼à½_à½à¾³à¼à½à¼à½à½à½´à½à¼à½_à½à¾³à¼à½à¼à½à½¢à¾à¾±à½à¼à½_à½à¾³à¼à½à¼à½à½à½´à¼à½_à½à¾³à¼à½à¼à½à½ ུà¼à½_à½à¾³à¼à½à¼à½à½ ུà¼à½à½ ིà½à¼à½_à½à¾³à¼à½à¼à½à½ ུà¼à½à½à½²à½¦à¼à½'.split( 38253 '_' 38254 ), 38255 monthsShort: 38256 'à½à¾³à¼1_à½à¾³à¼2_à½à¾³à¼3_à½à¾³à¼4_à½à¾³à¼5_à½à¾³à¼6_à½à¾³à¼7_à½à¾³à¼8_à½à¾³à¼9_à½à¾³à¼10_à½à¾³à¼11_à½à¾³à¼12'.split( 38257 '_' 38258 ), 38259 monthsShortRegex: /^(à½à¾³à¼\d{1,2})/, 38260 monthsParseExact: true, 38261 weekdays: 38262 'à½à½à½ à¼à½à½²à¼à½à¼_à½à½à½ à¼à½à¾³à¼à½à¼_à½à½à½ à¼à½à½²à½à¼à½à½à½¢à¼_à½à½à½ à¼à½£à¾·à½à¼à½à¼_à½à½à½ à¼à½à½´à½¢à¼à½à½´_à½à½à½ à¼à½à¼à½¦à½à½¦à¼_à½à½à½ à¼à½¦à¾¤à½ºà½à¼à½à¼'.split( 38263 '_' 38264 ), 38265 weekdaysShort: 'à½à½²à¼à½à¼_à½à¾³à¼à½à¼_à½à½²à½à¼à½à½à½¢à¼_ལྷà½à¼à½à¼_à½à½´à½¢à¼à½à½´_à½à¼à½¦à½à½¦à¼_སྤེà½à¼à½à¼'.split( 38266 '_' 38267 ), 38268 weekdaysMin: 'à½à½²_à½à¾³_à½à½²à½_ལྷà½_à½à½´à½¢_སà½à½¦_སྤེà½'.split('_'), 38269 longDateFormat: { 38270 LT: 'A h:mm', 38271 LTS: 'A h:mm:ss', 38272 L: 'DD/MM/YYYY', 38273 LL: 'D MMMM YYYY', 38274 LLL: 'D MMMM YYYY, A h:mm', 38275 LLLL: 'dddd, D MMMM YYYY, A h:mm', 38276 }, 38277 calendar: { 38278 sameDay: '[à½à½²à¼à½¢à½²à½] LT', 38279 nextDay: '[སà½à¼à½à½²à½] LT', 38280 nextWeek: '[à½à½à½´à½à¼à½à¾²à½à¼à½¢à¾à½ºà½¦à¼à½], LT', 38281 lastDay: '[à½à¼à½¦à½] LT', 38282 lastWeek: '[à½à½à½´à½à¼à½à¾²à½à¼à½à½à½ à¼à½] dddd, LT', 38283 sameElse: 'L', 38284 }, 38285 relativeTime: { 38286 future: '%s ལà¼', 38287 past: '%s སà¾à½à¼à½£', 38288 s: 'ལà½à¼à½¦à½', 38289 ss: '%d སà¾à½¢à¼à½à¼', 38290 m: 'སà¾à½¢à¼à½à¼à½à½ ིà½', 38291 mm: '%d སà¾à½¢à¼à½', 38292 h: 'à½à½´à¼à½à½¼à½à¼à½à½ ིà½', 38293 hh: '%d à½à½´à¼à½à½¼à½', 38294 d: 'à½à½²à½à¼à½à½ ིà½', 38295 dd: '%d à½à½²à½à¼', 38296 M: 'à½à¾³à¼à½à¼à½à½ ིà½', 38297 MM: '%d à½à¾³à¼à½', 38298 y: 'ལོà¼à½à½ ིà½', 38299 yy: '%d ལོ', 38300 }, 38301 preparse: function (string) { 38302 return string.replace(/[༡༢༣༤༥༦༧༨༩༠]/g, function (match) { 38303 return numberMap[match]; 38304 }); 38305 }, 38306 postformat: function (string) { 38307 return string.replace(/\d/g, function (match) { 38308 return symbolMap[match]; 38309 }); 38310 }, 38311 meridiemParse: /à½à½à½à¼à½à½¼|à½à½¼à½à½¦à¼à½à½¦|à½à½²à½à¼à½à½´à½|à½à½à½¼à½à¼à½à½|à½à½à½à¼à½à½¼/, 38312 meridiemHour: function (hour, meridiem) { 38313 if (hour === 12) { 38314 hour = 0; 38315 } 38316 if ( 38317 (meridiem === 'à½à½à½à¼à½à½¼' && hour >= 4) || 38318 (meridiem === 'à½à½²à½à¼à½à½´à½' && hour < 5) || 38319 meridiem === 'à½à½à½¼à½à¼à½à½' 38320 ) { 38321 return hour + 12; 38322 } else { 38323 return hour; 38324 } 38325 }, 38326 meridiem: function (hour, minute, isLower) { 38327 if (hour < 4) { 38328 return 'à½à½à½à¼à½à½¼'; 38329 } else if (hour < 10) { 38330 return 'à½à½¼à½à½¦à¼à½à½¦'; 38331 } else if (hour < 17) { 38332 return 'à½à½²à½à¼à½à½´à½'; 38333 } else if (hour < 20) { 38334 return 'à½à½à½¼à½à¼à½à½'; 38335 } else { 38336 return 'à½à½à½à¼à½à½¼'; 38337 } 38338 }, 38339 week: { 38340 dow: 0, // Sunday is the first day of the week. 38341 doy: 6, // The week that contains Jan 6th is the first week of the year. 38342 }, 38343 }); 38344 38345 return bo; 38346 38347}))); 38348 38349 38350/***/ }), 38351
vendor: 5,670 bytes, lines 38352-38539
38352/***/ "./node_modules/moment/locale/br.js": 38353/*!******************************************!*\ 38354 !*** ./node_modules/moment/locale/br.js ***! 38355 \******************************************/ 38356/*! no static exports found */ 38357/***/ (function(module, exports, __webpack_require__) { 38358 38359//! moment.js locale configuration 38360//! locale : Breton [br] 38361//! author : Jean-Baptiste Le Duigou : https://github.com/jbleduigou 38362 38363;(function (global, factory) { 38364 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : 38365 undefined 38366}(this, (function (moment) { 'use strict'; 38367 38368 //! moment.js locale configuration 38369 38370 function relativeTimeWithMutation(number, withoutSuffix, key) { 38371 var format = { 38372 mm: 'munutenn', 38373 MM: 'miz', 38374 dd: 'devezh', 38375 }; 38376 return number + ' ' + mutation(format[key], number); 38377 } 38378 function specialMutationForYears(number) { 38379 switch (lastNumber(number)) { 38380 case 1: 38381 case 3: 38382 case 4: 38383 case 5: 38384 case 9: 38385 return number + ' bloaz'; 38386 default: 38387 return number + ' vloaz'; 38388 } 38389 } 38390 function lastNumber(number) { 38391 if (number > 9) { 38392 return lastNumber(number % 10); 38393 } 38394 return number; 38395 } 38396 function mutation(text, number) { 38397 if (number === 2) { 38398 return softMutation(text); 38399 } 38400 return text; 38401 } 38402 function softMutation(text) { 38403 var mutationTable = { 38404 m: 'v', 38405 b: 'v', 38406 d: 'z', 38407 }; 38408 if (mutationTable[text.charAt(0)] === undefined) { 38409 return text; 38410 } 38411 return mutationTable[text.charAt(0)] + text.substring(1); 38412 } 38413 38414 var monthsParse = [ 38415 /^gen/i, 38416 /^c[ʼ\']hwe/i, 38417 /^meu/i, 38418 /^ebr/i, 38419 /^mae/i, 38420 /^(mez|eve)/i, 38421 /^gou/i, 38422 /^eos/i, 38423 /^gwe/i, 38424 /^her/i, 38425 /^du/i, 38426 /^ker/i, 38427 ], 38428 monthsRegex = 38429 /^(genver|c[ʼ\']hwevrer|meurzh|ebrel|mae|mezheven|gouere|eost|gwengolo|here|du|kerzu|gen|c[ʼ\']hwe|meu|ebr|mae|eve|gou|eos|gwe|her|du|ker)/i, 38430 monthsStrictRegex = 38431 /^(genver|c[ʼ\']hwevrer|meurzh|ebrel|mae|mezheven|gouere|eost|gwengolo|here|du|kerzu)/i, 38432 monthsShortStrictRegex = 38433 /^(gen|c[ʼ\']hwe|meu|ebr|mae|eve|gou|eos|gwe|her|du|ker)/i, 38434 fullWeekdaysParse = [ 38435 /^sul/i, 38436 /^lun/i, 38437 /^meurzh/i, 38438 /^merc[ʼ\']her/i, 38439 /^yaou/i, 38440 /^gwener/i, 38441 /^sadorn/i, 38442 ], 38443 shortWeekdaysParse = [ 38444 /^Sul/i, 38445 /^Lun/i, 38446 /^Meu/i, 38447 /^Mer/i, 38448 /^Yao/i, 38449 /^Gwe/i, 38450 /^Sad/i, 38451 ], 38452 minWeekdaysParse = [ 38453 /^Su/i, 38454 /^Lu/i, 38455 /^Me([^r]|$)/i, 38456 /^Mer/i, 38457 /^Ya/i, 38458 /^Gw/i, 38459 /^Sa/i, 38460 ]; 38461 38462 var br = moment.defineLocale('br', { 38463 months: 'Genver_Cʼhwevrer_Meurzh_Ebrel_Mae_Mezheven_Gouere_Eost_Gwengolo_Here_Du_Kerzu'.split( 38464 '_' 38465 ), 38466 monthsShort: 'Gen_Cʼhwe_Meu_Ebr_Mae_Eve_Gou_Eos_Gwe_Her_Du_Ker'.split('_'), 38467 weekdays: 'Sul_Lun_Meurzh_Mercʼher_Yaou_Gwener_Sadorn'.split('_'), 38468 weekdaysShort: 'Sul_Lun_Meu_Mer_Yao_Gwe_Sad'.split('_'), 38469 weekdaysMin: 'Su_Lu_Me_Mer_Ya_Gw_Sa'.split('_'), 38470 weekdaysParse: minWeekdaysParse, 38471 fullWeekdaysParse: fullWeekdaysParse, 38472 shortWeekdaysParse: shortWeekdaysParse, 38473 minWeekdaysParse: minWeekdaysParse, 38474 38475 monthsRegex: monthsRegex, 38476 monthsShortRegex: monthsRegex, 38477 monthsStrictRegex: monthsStrictRegex, 38478 monthsShortStrictRegex: monthsShortStrictRegex, 38479 monthsParse: monthsParse, 38480 longMonthsParse: monthsParse, 38481 shortMonthsParse: monthsParse, 38482 38483 longDateFormat: { 38484 LT: 'HH:mm', 38485 LTS: 'HH:mm:ss', 38486 L: 'DD/MM/YYYY', 38487 LL: 'D [a viz] MMMM YYYY', 38488 LLL: 'D [a viz] MMMM YYYY HH:mm', 38489 LLLL: 'dddd, D [a viz] MMMM YYYY HH:mm', 38490 }, 38491 calendar: { 38492 sameDay: '[Hiziv da] LT', 38493 nextDay: '[Warcʼhoazh da] LT', 38494 nextWeek: 'dddd [da] LT', 38495 lastDay: '[Decʼh da] LT', 38496 lastWeek: 'dddd [paset da] LT', 38497 sameElse: 'L', 38498 }, 38499 relativeTime: { 38500 future: 'a-benn %s', 38501 past: '%s ʼzo', 38502 s: 'un nebeud segondennoù', 38503 ss: '%d eilenn', 38504 m: 'ur vunutenn', 38505 mm: relativeTimeWithMutation, 38506 h: 'un eur', 38507 hh: '%d eur', 38508 d: 'un devezh', 38509 dd: relativeTimeWithMutation, 38510 M: 'ur miz', 38511 MM: relativeTimeWithMutation, 38512 y: 'ur bloaz', 38513 yy: specialMutationForYears, 38514 }, 38515 dayOfMonthOrdinalParse: /\d{1,2}(añ|vet)/, 38516 ordinal: function (number) { 38517 var output = number === 1 ? 'añ' : 'vet'; 38518 return number + output; 38519 }, 38520 week: { 38521 dow: 1, // Monday is the first day of the week. 38522 doy: 4, // The week that contains Jan 4th is the first week of the year. 38523 }, 38524 meridiemParse: /a.m.|g.m./, // goude merenn | a-raok merenn 38525 isPM: function (token) { 38526 return token === 'g.m.'; 38527 }, 38528 meridiem: function (hour, minute, isLower) { 38529 return hour < 12 ? 'a.m.' : 'g.m.'; 38530 }, 38531 }); 38532 38533 return br; 38534 38535}))); 38536 38537 38538/***/ }), 38539
vendor: 5,825 bytes, lines 38540-38719
38540/***/ "./node_modules/moment/locale/bs.js": 38541/*!******************************************!*\ 38542 !*** ./node_modules/moment/locale/bs.js ***! 38543 \******************************************/ 38544/*! no static exports found */ 38545/***/ (function(module, exports, __webpack_require__) { 38546 38547//! moment.js locale configuration 38548//! locale : Bosnian [bs] 38549//! author : Nedim Cholich : https://github.com/frontyard 38550//! author : Rasid Redzic : https://github.com/rasidre 38551//! based on (hr) translation by Bojan MarkoviÄ 38552 38553;(function (global, factory) { 38554 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : 38555 undefined 38556}(this, (function (moment) { 'use strict'; 38557 38558 //! moment.js locale configuration 38559 38560 function processRelativeTime(number, withoutSuffix, key, isFuture) { 38561 switch (key) { 38562 case 'm': 38563 return withoutSuffix 38564 ? 'jedna minuta' 38565 : isFuture 38566 ? 'jednu minutu' 38567 : 'jedne minute'; 38568 } 38569 } 38570 38571 function translate(number, withoutSuffix, key) { 38572 var result = number + ' '; 38573 switch (key) { 38574 case 'ss': 38575 if (number === 1) { 38576 result += 'sekunda'; 38577 } else if (number === 2 || number === 3 || number === 4) { 38578 result += 'sekunde'; 38579 } else { 38580 result += 'sekundi'; 38581 } 38582 return result; 38583 case 'mm': 38584 if (number === 1) { 38585 result += 'minuta'; 38586 } else if (number === 2 || number === 3 || number === 4) { 38587 result += 'minute'; 38588 } else { 38589 result += 'minuta'; 38590 } 38591 return result; 38592 case 'h': 38593 return withoutSuffix ? 'jedan sat' : 'jedan sat'; 38594 case 'hh': 38595 if (number === 1) { 38596 result += 'sat'; 38597 } else if (number === 2 || number === 3 || number === 4) { 38598 result += 'sata'; 38599 } else { 38600 result += 'sati'; 38601 } 38602 return result; 38603 case 'dd': 38604 if (number === 1) { 38605 result += 'dan'; 38606 } else { 38607 result += 'dana'; 38608 } 38609 return result; 38610 case 'MM': 38611 if (number === 1) { 38612 result += 'mjesec'; 38613 } else if (number === 2 || number === 3 || number === 4) { 38614 result += 'mjeseca'; 38615 } else { 38616 result += 'mjeseci'; 38617 } 38618 return result; 38619 case 'yy': 38620 if (number === 1) { 38621 result += 'godina'; 38622 } else if (number === 2 || number === 3 || number === 4) { 38623 result += 'godine'; 38624 } else { 38625 result += 'godina'; 38626 } 38627 return result; 38628 } 38629 } 38630 38631 var bs = moment.defineLocale('bs', { 38632 months: 'januar_februar_mart_april_maj_juni_juli_august_septembar_oktobar_novembar_decembar'.split( 38633 '_' 38634 ), 38635 monthsShort: 38636 'jan._feb._mar._apr._maj._jun._jul._aug._sep._okt._nov._dec.'.split( 38637 '_' 38638 ), 38639 monthsParseExact: true, 38640 weekdays: 'nedjelja_ponedjeljak_utorak_srijeda_Äetvrtak_petak_subota'.split( 38641 '_' 38642 ), 38643 weekdaysShort: 'ned._pon._uto._sri._Äet._pet._sub.'.split('_'), 38644 weekdaysMin: 'ne_po_ut_sr_Äe_pe_su'.split('_'), 38645 weekdaysParseExact: true, 38646 longDateFormat: { 38647 LT: 'H:mm', 38648 LTS: 'H:mm:ss', 38649 L: 'DD.MM.YYYY', 38650 LL: 'D. MMMM YYYY', 38651 LLL: 'D. MMMM YYYY H:mm', 38652 LLLL: 'dddd, D. MMMM YYYY H:mm', 38653 }, 38654 calendar: { 38655 sameDay: '[danas u] LT', 38656 nextDay: '[sutra u] LT', 38657 nextWeek: function () { 38658 switch (this.day()) { 38659 case 0: 38660 return '[u] [nedjelju] [u] LT'; 38661 case 3: 38662 return '[u] [srijedu] [u] LT'; 38663 case 6: 38664 return '[u] [subotu] [u] LT'; 38665 case 1: 38666 case 2: 38667 case 4: 38668 case 5: 38669 return '[u] dddd [u] LT'; 38670 } 38671 }, 38672 lastDay: '[juÄer u] LT', 38673 lastWeek: function () { 38674 switch (this.day()) { 38675 case 0: 38676 case 3: 38677 return '[proÅ¡lu] dddd [u] LT'; 38678 case 6: 38679 return '[proÅ¡le] [subote] [u] LT'; 38680 case 1: 38681 case 2: 38682 case 4: 38683 case 5: 38684 return '[proÅ¡li] dddd [u] LT'; 38685 } 38686 }, 38687 sameElse: 'L', 38688 }, 38689 relativeTime: { 38690 future: 'za %s', 38691 past: 'prije %s', 38692 s: 'par sekundi', 38693 ss: translate, 38694 m: processRelativeTime, 38695 mm: translate, 38696 h: translate, 38697 hh: translate, 38698 d: 'dan', 38699 dd: translate, 38700 M: 'mjesec', 38701 MM: translate, 38702 y: 'godinu', 38703 yy: translate, 38704 }, 38705 dayOfMonthOrdinalParse: /\d{1,2}\./, 38706 ordinal: '%d.', 38707 week: { 38708 dow: 1, // Monday is the first day of the week. 38709 doy: 7, // The week that contains Jan 7th is the first week of the year. 38710 }, 38711 }); 38712 38713 return bs; 38714 38715}))); 38716 38717 38718/***/ }), 38719
vendor: 3,925 bytes, lines 38720-38839
38720/***/ "./node_modules/moment/locale/ca.js": 38721/*!******************************************!*\ 38722 !*** ./node_modules/moment/locale/ca.js ***! 38723 \******************************************/ 38724/*! no static exports found */ 38725/***/ (function(module, exports, __webpack_require__) { 38726 38727//! moment.js locale configuration 38728//! locale : Catalan [ca] 38729//! author : Juan G. Hurtado : https://github.com/juanghurtado 38730 38731;(function (global, factory) { 38732 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : 38733 undefined 38734}(this, (function (moment) { 'use strict'; 38735 38736 //! moment.js locale configuration 38737 38738 var ca = moment.defineLocale('ca', { 38739 months: { 38740 standalone: 38741 'gener_febrer_març_abril_maig_juny_juliol_agost_setembre_octubre_novembre_desembre'.split( 38742 '_' 38743 ), 38744 format: "de gener_de febrer_de març_d'abril_de maig_de juny_de juliol_d'agost_de setembre_d'octubre_de novembre_de desembre".split( 38745 '_' 38746 ), 38747 isFormat: /D[oD]?(\s)+MMMM/, 38748 }, 38749 monthsShort: 38750 'gen._febr._març_abr._maig_juny_jul._ag._set._oct._nov._des.'.split( 38751 '_' 38752 ), 38753 monthsParseExact: true, 38754 weekdays: 38755 'diumenge_dilluns_dimarts_dimecres_dijous_divendres_dissabte'.split( 38756 '_' 38757 ), 38758 weekdaysShort: 'dg._dl._dt._dc._dj._dv._ds.'.split('_'), 38759 weekdaysMin: 'dg_dl_dt_dc_dj_dv_ds'.split('_'), 38760 weekdaysParseExact: true, 38761 longDateFormat: { 38762 LT: 'H:mm', 38763 LTS: 'H:mm:ss', 38764 L: 'DD/MM/YYYY', 38765 LL: 'D MMMM [de] YYYY', 38766 ll: 'D MMM YYYY', 38767 LLL: 'D MMMM [de] YYYY [a les] H:mm', 38768 lll: 'D MMM YYYY, H:mm', 38769 LLLL: 'dddd D MMMM [de] YYYY [a les] H:mm', 38770 llll: 'ddd D MMM YYYY, H:mm', 38771 }, 38772 calendar: { 38773 sameDay: function () { 38774 return '[avui a ' + (this.hours() !== 1 ? 'les' : 'la') + '] LT'; 38775 }, 38776 nextDay: function () { 38777 return '[demà a ' + (this.hours() !== 1 ? 'les' : 'la') + '] LT'; 38778 }, 38779 nextWeek: function () { 38780 return 'dddd [a ' + (this.hours() !== 1 ? 'les' : 'la') + '] LT'; 38781 }, 38782 lastDay: function () { 38783 return '[ahir a ' + (this.hours() !== 1 ? 'les' : 'la') + '] LT'; 38784 }, 38785 lastWeek: function () { 38786 return ( 38787 '[el] dddd [passat a ' + 38788 (this.hours() !== 1 ? 'les' : 'la') + 38789 '] LT' 38790 ); 38791 }, 38792 sameElse: 'L', 38793 }, 38794 relativeTime: { 38795 future: "d'aquà %s", 38796 past: 'fa %s', 38797 s: 'uns segons', 38798 ss: '%d segons', 38799 m: 'un minut', 38800 mm: '%d minuts', 38801 h: 'una hora', 38802 hh: '%d hores', 38803 d: 'un dia', 38804 dd: '%d dies', 38805 M: 'un mes', 38806 MM: '%d mesos', 38807 y: 'un any', 38808 yy: '%d anys', 38809 }, 38810 dayOfMonthOrdinalParse: /\d{1,2}(r|n|t|è|a)/, 38811 ordinal: function (number, period) { 38812 var output = 38813 number === 1 38814 ? 'r' 38815 : number === 2 38816 ? 'n' 38817 : number === 3 38818 ? 'r' 38819 : number === 4 38820 ? 't' 38821 : 'è'; 38822 if (period === 'w' || period === 'W') { 38823 output = 'a'; 38824 } 38825 return number + output; 38826 }, 38827 week: { 38828 dow: 1, // Monday is the first day of the week. 38829 doy: 4, // The week that contains Jan 4th is the first week of the year. 38830 }, 38831 }); 38832 38833 return ca; 38834 38835}))); 38836 38837 38838/***/ }), 38839
vendor: 7,956 bytes, lines 38840-39040
38840/***/ "./node_modules/moment/locale/cs.js": 38841/*!******************************************!*\ 38842 !*** ./node_modules/moment/locale/cs.js ***! 38843 \******************************************/ 38844/*! no static exports found */ 38845/***/ (function(module, exports, __webpack_require__) { 38846 38847//! moment.js locale configuration 38848//! locale : Czech [cs] 38849//! author : petrbela : https://github.com/petrbela 38850 38851;(function (global, factory) { 38852 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : 38853 undefined 38854}(this, (function (moment) { 'use strict'; 38855 38856 //! moment.js locale configuration 38857 38858 var months = { 38859 standalone: 38860 'leden_únor_bÅezen_duben_kvÄten_Äerven_Äervenec_srpen_záÅÃ_ÅÃjen_listopad_prosinec'.split( 38861 '_' 38862 ), 38863 format: 'ledna_února_bÅezna_dubna_kvÄtna_Äervna_Äervence_srpna_záÅÃ_ÅÃjna_listopadu_prosince'.split( 38864 '_' 38865 ), 38866 isFormat: /DD?[o.]?(\[[^\[\]]*\]|\s)+MMMM/, 38867 }, 38868 monthsShort = 'led_úno_bÅe_dub_kvÄ_Ävn_Ävc_srp_záÅ_ÅÃj_lis_pro'.split('_'), 38869 monthsParse = [ 38870 /^led/i, 38871 /^úno/i, 38872 /^bÅe/i, 38873 /^dub/i, 38874 /^kvÄ/i, 38875 /^(Ävn|Äerven$|Äervna)/i, 38876 /^(Ävc|Äervenec|Äervence)/i, 38877 /^srp/i, 38878 /^záÅ/i, 38879 /^ÅÃj/i, 38880 /^lis/i, 38881 /^pro/i, 38882 ], 38883 // NOTE: 'Äerven' is substring of 'Äervenec'; therefore 'Äervenec' must precede 'Äerven' in the regex to be fully matched. 38884 // Otherwise parser matches '1. Äervenec' as '1. Äerven' + 'ec'. 38885 monthsRegex = 38886 /^(leden|únor|bÅezen|duben|kvÄten|Äervenec|Äervence|Äerven|Äervna|srpen|záÅÃ|ÅÃjen|listopad|prosinec|led|úno|bÅe|dub|kvÄ|Ävn|Ävc|srp|záÅ|ÅÃj|lis|pro)/i; 38887 38888 function plural(n) { 38889 return n > 1 && n < 5 && ~~(n / 10) !== 1; 38890 } 38891 function translate(number, withoutSuffix, key, isFuture) { 38892 var result = number + ' '; 38893 switch (key) { 38894 case 's': // a few seconds / in a few seconds / a few seconds ago 38895 return withoutSuffix || isFuture ? 'pár sekund' : 'pár sekundami'; 38896 case 'ss': // 9 seconds / in 9 seconds / 9 seconds ago 38897 if (withoutSuffix || isFuture) { 38898 return result + (plural(number) ? 'sekundy' : 'sekund'); 38899 } else { 38900 return result + 'sekundami'; 38901 } 38902 case 'm': // a minute / in a minute / a minute ago 38903 return withoutSuffix ? 'minuta' : isFuture ? 'minutu' : 'minutou'; 38904 case 'mm': // 9 minutes / in 9 minutes / 9 minutes ago 38905 if (withoutSuffix || isFuture) { 38906 return result + (plural(number) ? 'minuty' : 'minut'); 38907 } else { 38908 return result + 'minutami'; 38909 } 38910 case 'h': // an hour / in an hour / an hour ago 38911 return withoutSuffix ? 'hodina' : isFuture ? 'hodinu' : 'hodinou'; 38912 case 'hh': // 9 hours / in 9 hours / 9 hours ago 38913 if (withoutSuffix || isFuture) { 38914 return result + (plural(number) ? 'hodiny' : 'hodin'); 38915 } else { 38916 return result + 'hodinami'; 38917 } 38918 case 'd': // a day / in a day / a day ago 38919 return withoutSuffix || isFuture ? 'den' : 'dnem'; 38920 case 'dd': // 9 days / in 9 days / 9 days ago 38921 if (withoutSuffix || isFuture) { 38922 return result + (plural(number) ? 'dny' : 'dnÃ'); 38923 } else { 38924 return result + 'dny'; 38925 } 38926 case 'M': // a month / in a month / a month ago 38927 return withoutSuffix || isFuture ? 'mÄsÃc' : 'mÄsÃcem'; 38928 case 'MM': // 9 months / in 9 months / 9 months ago 38929 if (withoutSuffix || isFuture) { 38930 return result + (plural(number) ? 'mÄsÃce' : 'mÄsÃců'); 38931 } else { 38932 return result + 'mÄsÃci'; 38933 } 38934 case 'y': // a year / in a year / a year ago 38935 return withoutSuffix || isFuture ? 'rok' : 'rokem'; 38936 case 'yy': // 9 years / in 9 years / 9 years ago 38937 if (withoutSuffix || isFuture) { 38938 return result + (plural(number) ? 'roky' : 'let'); 38939 } else { 38940 return result + 'lety'; 38941 } 38942 } 38943 } 38944 38945 var cs = moment.defineLocale('cs', { 38946 months: months, 38947 monthsShort: monthsShort, 38948 monthsRegex: monthsRegex, 38949 monthsShortRegex: monthsRegex, 38950 // NOTE: 'Äerven' is substring of 'Äervenec'; therefore 'Äervenec' must precede 'Äerven' in the regex to be fully matched. 38951 // Otherwise parser matches '1. Äervenec' as '1. Äerven' + 'ec'. 38952 monthsStrictRegex: 38953 /^(leden|ledna|února|únor|bÅezen|bÅezna|duben|dubna|kvÄten|kvÄtna|Äervenec|Äervence|Äerven|Äervna|srpen|srpna|záÅÃ|ÅÃjen|ÅÃjna|listopadu|listopad|prosinec|prosince)/i, 38954 monthsShortStrictRegex: 38955 /^(led|úno|bÅe|dub|kvÄ|Ävn|Ävc|srp|záÅ|ÅÃj|lis|pro)/i, 38956 monthsParse: monthsParse, 38957 longMonthsParse: monthsParse, 38958 shortMonthsParse: monthsParse, 38959 weekdays: 'nedÄle_pondÄlÃ_úterý_stÅeda_Ätvrtek_pátek_sobota'.split('_'), 38960 weekdaysShort: 'ne_po_út_st_Ät_pá_so'.split('_'), 38961 weekdaysMin: 'ne_po_út_st_Ät_pá_so'.split('_'), 38962 longDateFormat: { 38963 LT: 'H:mm', 38964 LTS: 'H:mm:ss', 38965 L: 'DD.MM.YYYY', 38966 LL: 'D. MMMM YYYY', 38967 LLL: 'D. MMMM YYYY H:mm', 38968 LLLL: 'dddd D. MMMM YYYY H:mm', 38969 l: 'D. M. YYYY', 38970 }, 38971 calendar: { 38972 sameDay: '[dnes v] LT', 38973 nextDay: '[zÃtra v] LT', 38974 nextWeek: function () { 38975 switch (this.day()) { 38976 case 0: 38977 return '[v nedÄli v] LT'; 38978 case 1: 38979 case 2: 38980 return '[v] dddd [v] LT'; 38981 case 3: 38982 return '[ve stÅedu v] LT'; 38983 case 4: 38984 return '[ve Ätvrtek v] LT'; 38985 case 5: 38986 return '[v pátek v] LT'; 38987 case 6: 38988 return '[v sobotu v] LT'; 38989 } 38990 }, 38991 lastDay: '[vÄera v] LT', 38992 lastWeek: function () { 38993 switch (this.day()) { 38994 case 0: 38995 return '[minulou nedÄli v] LT'; 38996 case 1: 38997 case 2: 38998 return '[minulé] dddd [v] LT'; 38999 case 3: 39000 return '[minulou stÅedu v] LT'; 39001 case 4: 39002 case 5: 39003 return '[minulý] dddd [v] LT'; 39004 case 6: 39005 return '[minulou sobotu v] LT'; 39006 } 39007 }, 39008 sameElse: 'L', 39009 }, 39010 relativeTime: { 39011 future: 'za %s', 39012 past: 'pÅed %s', 39013 s: translate, 39014 ss: translate, 39015 m: translate, 39016 mm: translate, 39017 h: translate, 39018 hh: translate, 39019 d: translate, 39020 dd: translate, 39021 M: translate, 39022 MM: translate, 39023 y: translate, 39024 yy: translate, 39025 }, 39026 dayOfMonthOrdinalParse: /\d{1,2}\./, 39027 ordinal: '%d.', 39028 week: { 39029 dow: 1, // Monday is the first day of the week. 39030 doy: 4, // The week that contains Jan 4th is the first week of the year. 39031 }, 39032 }); 39033 39034 return cs; 39035 39036}))); 39037 39038 39039/***/ }), 39040
vendor: 3,067 bytes, lines 39041-39123
39041/***/ "./node_modules/moment/locale/cv.js": 39042/*!******************************************!*\ 39043 !*** ./node_modules/moment/locale/cv.js ***! 39044 \******************************************/ 39045/*! no static exports found */ 39046/***/ (function(module, exports, __webpack_require__) { 39047 39048//! moment.js locale configuration 39049//! locale : Chuvash [cv] 39050//! author : Anatoly Mironov : https://github.com/mirontoli 39051 39052;(function (global, factory) { 39053 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : 39054 undefined 39055}(this, (function (moment) { 'use strict'; 39056 39057 //! moment.js locale configuration 39058 39059 var cv = moment.defineLocale('cv', { 39060 months: 'кÓÑлаÑ_наÑÓÑ_пÑÑ_ака_май_Ò«ÓÑÑме_ÑÑÓ_Ò«ÑÑла_авÓн_Ñпа_Ñӳк_ÑаÑÑав'.split( 39061 '_' 39062 ), 39063 monthsShort: 'кÓÑ_наÑ_пÑÑ_ака_май_Ò«ÓÑ_ÑÑÓ_Ò«ÑÑ_авн_Ñпа_Ñӳк_ÑаÑ'.split('_'), 39064 weekdays: 39065 'вÑÑÑаÑникÑн_ÑÑнÑикÑн_ÑÑлаÑикÑн_ÑнкÑн_кÓҫнеÑникÑн_ÑÑнекÑн_ÑÓмаÑкÑн'.split( 39066 '_' 39067 ), 39068 weekdaysShort: 'вÑÑ_ÑÑн_ÑÑл_Ñн_кÓÒ«_ÑÑн_ÑÓм'.split('_'), 39069 weekdaysMin: 'вÑ_Ñн_ÑÑ_Ñн_кҫ_ÑÑ_Ñм'.split('_'), 39070 longDateFormat: { 39071 LT: 'HH:mm', 39072 LTS: 'HH:mm:ss', 39073 L: 'DD-MM-YYYY', 39074 LL: 'YYYY [Ò«ÑÐ»Ñ Ð¸] MMMM [ÑйÓÑ Óн] D[-мÓÑÓ]', 39075 LLL: 'YYYY [Ò«ÑÐ»Ñ Ð¸] MMMM [ÑйÓÑ Óн] D[-мÓÑÓ], HH:mm', 39076 LLLL: 'dddd, YYYY [Ò«ÑÐ»Ñ Ð¸] MMMM [ÑйÓÑ Óн] D[-мÓÑÓ], HH:mm', 39077 }, 39078 calendar: { 39079 sameDay: '[ÐаÑн] LT [ÑÐµÑ ÐµÑÑе]', 39080 nextDay: '[ЫÑан] LT [ÑÐµÑ ÐµÑÑе]', 39081 lastDay: '[ÓнеÑ] LT [ÑÐµÑ ÐµÑÑе]', 39082 nextWeek: '[ҪиÑеÑ] dddd LT [ÑÐµÑ ÐµÑÑе]', 39083 lastWeek: '[ÐÑÑнÓ] dddd LT [ÑÐµÑ ÐµÑÑе]', 39084 sameElse: 'L', 39085 }, 39086 relativeTime: { 39087 future: function (output) { 39088 var affix = /ÑÐµÑ ÐµÑ$/i.exec(output) 39089 ? 'Ñен' 39090 : /Ò«Ñл$/i.exec(output) 39091 ? 'Ñан' 39092 : 'Ñан'; 39093 return output + affix; 39094 }, 39095 past: '%s каÑлла', 39096 s: 'пÓÑ-ик ҫеккÑнÑ', 39097 ss: '%d ҫеккÑнÑ', 39098 m: 'пÓÑ Ð¼Ð¸Ð½ÑÑ', 39099 mm: '%d минÑÑ', 39100 h: 'пÓÑ ÑÐµÑ ÐµÑ', 39101 hh: '%d ÑÐµÑ ÐµÑ', 39102 d: 'пÓÑ ÐºÑн', 39103 dd: '%d кÑн', 39104 M: 'пÓÑ ÑйÓÑ ', 39105 MM: '%d ÑйÓÑ ', 39106 y: 'пÓÑ Ò«Ñл', 39107 yy: '%d Ò«Ñл', 39108 }, 39109 dayOfMonthOrdinalParse: /\d{1,2}-мÓÑ/, 39110 ordinal: '%d-мÓÑ', 39111 week: { 39112 dow: 1, // Monday is the first day of the week. 39113 doy: 7, // The week that contains Jan 7th is the first week of the year. 39114 }, 39115 }); 39116 39117 return cv; 39118 39119}))); 39120 39121 39122/***/ }), 39123
vendor: 3,692 bytes, lines 39124-39241
39124/***/ "./node_modules/moment/locale/cy.js": 39125/*!******************************************!*\ 39126 !*** ./node_modules/moment/locale/cy.js ***! 39127 \******************************************/ 39128/*! no static exports found */ 39129/***/ (function(module, exports, __webpack_require__) { 39130 39131//! moment.js locale configuration 39132//! locale : Welsh [cy] 39133//! author : Robert Allen : https://github.com/robgallen 39134//! author : https://github.com/ryangreaves 39135 39136;(function (global, factory) { 39137 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : 39138 undefined 39139}(this, (function (moment) { 'use strict'; 39140 39141 //! moment.js locale configuration 39142 39143 var cy = moment.defineLocale('cy', { 39144 months: 'Ionawr_Chwefror_Mawrth_Ebrill_Mai_Mehefin_Gorffennaf_Awst_Medi_Hydref_Tachwedd_Rhagfyr'.split( 39145 '_' 39146 ), 39147 monthsShort: 'Ion_Chwe_Maw_Ebr_Mai_Meh_Gor_Aws_Med_Hyd_Tach_Rhag'.split( 39148 '_' 39149 ), 39150 weekdays: 39151 'Dydd Sul_Dydd Llun_Dydd Mawrth_Dydd Mercher_Dydd Iau_Dydd Gwener_Dydd Sadwrn'.split( 39152 '_' 39153 ), 39154 weekdaysShort: 'Sul_Llun_Maw_Mer_Iau_Gwe_Sad'.split('_'), 39155 weekdaysMin: 'Su_Ll_Ma_Me_Ia_Gw_Sa'.split('_'), 39156 weekdaysParseExact: true, 39157 // time formats are the same as en-gb 39158 longDateFormat: { 39159 LT: 'HH:mm', 39160 LTS: 'HH:mm:ss', 39161 L: 'DD/MM/YYYY', 39162 LL: 'D MMMM YYYY', 39163 LLL: 'D MMMM YYYY HH:mm', 39164 LLLL: 'dddd, D MMMM YYYY HH:mm', 39165 }, 39166 calendar: { 39167 sameDay: '[Heddiw am] LT', 39168 nextDay: '[Yfory am] LT', 39169 nextWeek: 'dddd [am] LT', 39170 lastDay: '[Ddoe am] LT', 39171 lastWeek: 'dddd [diwethaf am] LT', 39172 sameElse: 'L', 39173 }, 39174 relativeTime: { 39175 future: 'mewn %s', 39176 past: '%s yn ôl', 39177 s: 'ychydig eiliadau', 39178 ss: '%d eiliad', 39179 m: 'munud', 39180 mm: '%d munud', 39181 h: 'awr', 39182 hh: '%d awr', 39183 d: 'diwrnod', 39184 dd: '%d diwrnod', 39185 M: 'mis', 39186 MM: '%d mis', 39187 y: 'blwyddyn', 39188 yy: '%d flynedd', 39189 }, 39190 dayOfMonthOrdinalParse: /\d{1,2}(fed|ain|af|il|ydd|ed|eg)/, 39191 // traditional ordinal numbers above 31 are not commonly used in colloquial Welsh 39192 ordinal: function (number) { 39193 var b = number, 39194 output = '', 39195 lookup = [ 39196 '', 39197 'af', 39198 'il', 39199 'ydd', 39200 'ydd', 39201 'ed', 39202 'ed', 39203 'ed', 39204 'fed', 39205 'fed', 39206 'fed', // 1af to 10fed 39207 'eg', 39208 'fed', 39209 'eg', 39210 'eg', 39211 'fed', 39212 'eg', 39213 'eg', 39214 'fed', 39215 'eg', 39216 'fed', // 11eg to 20fed 39217 ]; 39218 if (b > 20) { 39219 if (b === 40 || b === 50 || b === 60 || b === 80 || b === 100) { 39220 output = 'fed'; // not 30ain, 70ain or 90ain 39221 } else { 39222 output = 'ain'; 39223 } 39224 } else if (b > 0) { 39225 output = lookup[b]; 39226 } 39227 return number + output; 39228 }, 39229 week: { 39230 dow: 1, // Monday is the first day of the week. 39231 doy: 4, // The week that contains Jan 4th is the first week of the year. 39232 }, 39233 }); 39234 39235 return cy; 39236 39237}))); 39238 39239 39240/***/ }), 39241
vendor: 2,311 bytes, lines 39242-39314
39242/***/ "./node_modules/moment/locale/da.js": 39243/*!******************************************!*\ 39244 !*** ./node_modules/moment/locale/da.js ***! 39245 \******************************************/ 39246/*! no static exports found */ 39247/***/ (function(module, exports, __webpack_require__) { 39248 39249//! moment.js locale configuration 39250//! locale : Danish [da] 39251//! author : Ulrik Nielsen : https://github.com/mrbase 39252 39253;(function (global, factory) { 39254 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : 39255 undefined 39256}(this, (function (moment) { 'use strict'; 39257 39258 //! moment.js locale configuration 39259 39260 var da = moment.defineLocale('da', { 39261 months: 'januar_februar_marts_april_maj_juni_juli_august_september_oktober_november_december'.split( 39262 '_' 39263 ), 39264 monthsShort: 'jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec'.split('_'), 39265 weekdays: 'søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag'.split('_'), 39266 weekdaysShort: 'søn_man_tir_ons_tor_fre_lør'.split('_'), 39267 weekdaysMin: 'sø_ma_ti_on_to_fr_lø'.split('_'), 39268 longDateFormat: { 39269 LT: 'HH:mm', 39270 LTS: 'HH:mm:ss', 39271 L: 'DD.MM.YYYY', 39272 LL: 'D. MMMM YYYY', 39273 LLL: 'D. MMMM YYYY HH:mm', 39274 LLLL: 'dddd [d.] D. MMMM YYYY [kl.] HH:mm', 39275 }, 39276 calendar: { 39277 sameDay: '[i dag kl.] LT', 39278 nextDay: '[i morgen kl.] LT', 39279 nextWeek: 'på dddd [kl.] LT', 39280 lastDay: '[i går kl.] LT', 39281 lastWeek: '[i] dddd[s kl.] LT', 39282 sameElse: 'L', 39283 }, 39284 relativeTime: { 39285 future: 'om %s', 39286 past: '%s siden', 39287 s: 'få sekunder', 39288 ss: '%d sekunder', 39289 m: 'et minut', 39290 mm: '%d minutter', 39291 h: 'en time', 39292 hh: '%d timer', 39293 d: 'en dag', 39294 dd: '%d dage', 39295 M: 'en måned', 39296 MM: '%d måneder', 39297 y: 'et år', 39298 yy: '%d år', 39299 }, 39300 dayOfMonthOrdinalParse: /\d{1,2}\./, 39301 ordinal: '%d.', 39302 week: { 39303 dow: 1, // Monday is the first day of the week. 39304 doy: 4, // The week that contains Jan 4th is the first week of the year. 39305 }, 39306 }); 39307 39308 return da; 39309 39310}))); 39311 39312 39313/***/ }), 39314
vendor: 3,421 bytes, lines 39315-39413
39315/***/ "./node_modules/moment/locale/de-at.js": 39316/*!*********************************************!*\ 39317 !*** ./node_modules/moment/locale/de-at.js ***! 39318 \*********************************************/ 39319/*! no static exports found */ 39320/***/ (function(module, exports, __webpack_require__) { 39321 39322//! moment.js locale configuration 39323//! locale : German (Austria) [de-at] 39324//! author : lluchs : https://github.com/lluchs 39325//! author: Menelion Elensúle: https://github.com/Oire 39326//! author : Martin Groller : https://github.com/MadMG 39327//! author : Mikolaj Dadela : https://github.com/mik01aj 39328 39329;(function (global, factory) { 39330 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : 39331 undefined 39332}(this, (function (moment) { 'use strict'; 39333 39334 //! moment.js locale configuration 39335 39336 function processRelativeTime(number, withoutSuffix, key, isFuture) { 39337 var format = { 39338 m: ['eine Minute', 'einer Minute'], 39339 h: ['eine Stunde', 'einer Stunde'], 39340 d: ['ein Tag', 'einem Tag'], 39341 dd: [number + ' Tage', number + ' Tagen'], 39342 w: ['eine Woche', 'einer Woche'], 39343 M: ['ein Monat', 'einem Monat'], 39344 MM: [number + ' Monate', number + ' Monaten'], 39345 y: ['ein Jahr', 'einem Jahr'], 39346 yy: [number + ' Jahre', number + ' Jahren'], 39347 }; 39348 return withoutSuffix ? format[key][0] : format[key][1]; 39349 } 39350 39351 var deAt = moment.defineLocale('de-at', { 39352 months: 'Jänner_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split( 39353 '_' 39354 ), 39355 monthsShort: 39356 'Jän._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.'.split('_'), 39357 monthsParseExact: true, 39358 weekdays: 39359 'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split( 39360 '_' 39361 ), 39362 weekdaysShort: 'So._Mo._Di._Mi._Do._Fr._Sa.'.split('_'), 39363 weekdaysMin: 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'), 39364 weekdaysParseExact: true, 39365 longDateFormat: { 39366 LT: 'HH:mm', 39367 LTS: 'HH:mm:ss', 39368 L: 'DD.MM.YYYY', 39369 LL: 'D. MMMM YYYY', 39370 LLL: 'D. MMMM YYYY HH:mm', 39371 LLLL: 'dddd, D. MMMM YYYY HH:mm', 39372 }, 39373 calendar: { 39374 sameDay: '[heute um] LT [Uhr]', 39375 sameElse: 'L', 39376 nextDay: '[morgen um] LT [Uhr]', 39377 nextWeek: 'dddd [um] LT [Uhr]', 39378 lastDay: '[gestern um] LT [Uhr]', 39379 lastWeek: '[letzten] dddd [um] LT [Uhr]', 39380 }, 39381 relativeTime: { 39382 future: 'in %s', 39383 past: 'vor %s', 39384 s: 'ein paar Sekunden', 39385 ss: '%d Sekunden', 39386 m: processRelativeTime, 39387 mm: '%d Minuten', 39388 h: processRelativeTime, 39389 hh: '%d Stunden', 39390 d: processRelativeTime, 39391 dd: processRelativeTime, 39392 w: processRelativeTime, 39393 ww: '%d Wochen', 39394 M: processRelativeTime, 39395 MM: processRelativeTime, 39396 y: processRelativeTime, 39397 yy: processRelativeTime, 39398 }, 39399 dayOfMonthOrdinalParse: /\d{1,2}\./, 39400 ordinal: '%d.', 39401 week: { 39402 dow: 1, // Monday is the first day of the week. 39403 doy: 4, // The week that contains Jan 4th is the first week of the year. 39404 }, 39405 }); 39406 39407 return deAt; 39408 39409}))); 39410 39411 39412/***/ }), 39413
vendor: 3,256 bytes, lines 39414-39509
39414/***/ "./node_modules/moment/locale/de-ch.js": 39415/*!*********************************************!*\ 39416 !*** ./node_modules/moment/locale/de-ch.js ***! 39417 \*********************************************/ 39418/*! no static exports found */ 39419/***/ (function(module, exports, __webpack_require__) { 39420 39421//! moment.js locale configuration 39422//! locale : German (Switzerland) [de-ch] 39423//! author : sschueller : https://github.com/sschueller 39424 39425;(function (global, factory) { 39426 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : 39427 undefined 39428}(this, (function (moment) { 'use strict'; 39429 39430 //! moment.js locale configuration 39431 39432 function processRelativeTime(number, withoutSuffix, key, isFuture) { 39433 var format = { 39434 m: ['eine Minute', 'einer Minute'], 39435 h: ['eine Stunde', 'einer Stunde'], 39436 d: ['ein Tag', 'einem Tag'], 39437 dd: [number + ' Tage', number + ' Tagen'], 39438 w: ['eine Woche', 'einer Woche'], 39439 M: ['ein Monat', 'einem Monat'], 39440 MM: [number + ' Monate', number + ' Monaten'], 39441 y: ['ein Jahr', 'einem Jahr'], 39442 yy: [number + ' Jahre', number + ' Jahren'], 39443 }; 39444 return withoutSuffix ? format[key][0] : format[key][1]; 39445 } 39446 39447 var deCh = moment.defineLocale('de-ch', { 39448 months: 'Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split( 39449 '_' 39450 ), 39451 monthsShort: 39452 'Jan._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.'.split('_'), 39453 monthsParseExact: true, 39454 weekdays: 39455 'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split( 39456 '_' 39457 ), 39458 weekdaysShort: 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'), 39459 weekdaysMin: 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'), 39460 weekdaysParseExact: true, 39461 longDateFormat: { 39462 LT: 'HH:mm', 39463 LTS: 'HH:mm:ss', 39464 L: 'DD.MM.YYYY', 39465 LL: 'D. MMMM YYYY', 39466 LLL: 'D. MMMM YYYY HH:mm', 39467 LLLL: 'dddd, D. MMMM YYYY HH:mm', 39468 }, 39469 calendar: { 39470 sameDay: '[heute um] LT [Uhr]', 39471 sameElse: 'L', 39472 nextDay: '[morgen um] LT [Uhr]', 39473 nextWeek: 'dddd [um] LT [Uhr]', 39474 lastDay: '[gestern um] LT [Uhr]', 39475 lastWeek: '[letzten] dddd [um] LT [Uhr]', 39476 }, 39477 relativeTime: { 39478 future: 'in %s', 39479 past: 'vor %s', 39480 s: 'ein paar Sekunden', 39481 ss: '%d Sekunden', 39482 m: processRelativeTime, 39483 mm: '%d Minuten', 39484 h: processRelativeTime, 39485 hh: '%d Stunden', 39486 d: processRelativeTime, 39487 dd: processRelativeTime, 39488 w: processRelativeTime, 39489 ww: '%d Wochen', 39490 M: processRelativeTime, 39491 MM: processRelativeTime, 39492 y: processRelativeTime, 39493 yy: processRelativeTime, 39494 }, 39495 dayOfMonthOrdinalParse: /\d{1,2}\./, 39496 ordinal: '%d.', 39497 week: { 39498 dow: 1, // Monday is the first day of the week. 39499 doy: 4, // The week that contains Jan 4th is the first week of the year. 39500 }, 39501 }); 39502 39503 return deCh; 39504 39505}))); 39506 39507 39508/***/ }), 39509
vendor: 3,332 bytes, lines 39510-39607
39510/***/ "./node_modules/moment/locale/de.js": 39511/*!******************************************!*\ 39512 !*** ./node_modules/moment/locale/de.js ***! 39513 \******************************************/ 39514/*! no static exports found */ 39515/***/ (function(module, exports, __webpack_require__) { 39516 39517//! moment.js locale configuration 39518//! locale : German [de] 39519//! author : lluchs : https://github.com/lluchs 39520//! author: Menelion Elensúle: https://github.com/Oire 39521//! author : Mikolaj Dadela : https://github.com/mik01aj 39522 39523;(function (global, factory) { 39524 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : 39525 undefined 39526}(this, (function (moment) { 'use strict'; 39527 39528 //! moment.js locale configuration 39529 39530 function processRelativeTime(number, withoutSuffix, key, isFuture) { 39531 var format = { 39532 m: ['eine Minute', 'einer Minute'], 39533 h: ['eine Stunde', 'einer Stunde'], 39534 d: ['ein Tag', 'einem Tag'], 39535 dd: [number + ' Tage', number + ' Tagen'], 39536 w: ['eine Woche', 'einer Woche'], 39537 M: ['ein Monat', 'einem Monat'], 39538 MM: [number + ' Monate', number + ' Monaten'], 39539 y: ['ein Jahr', 'einem Jahr'], 39540 yy: [number + ' Jahre', number + ' Jahren'], 39541 }; 39542 return withoutSuffix ? format[key][0] : format[key][1]; 39543 } 39544 39545 var de = moment.defineLocale('de', { 39546 months: 'Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split( 39547 '_' 39548 ), 39549 monthsShort: 39550 'Jan._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.'.split('_'), 39551 monthsParseExact: true, 39552 weekdays: 39553 'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split( 39554 '_' 39555 ), 39556 weekdaysShort: 'So._Mo._Di._Mi._Do._Fr._Sa.'.split('_'), 39557 weekdaysMin: 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'), 39558 weekdaysParseExact: true, 39559 longDateFormat: { 39560 LT: 'HH:mm', 39561 LTS: 'HH:mm:ss', 39562 L: 'DD.MM.YYYY', 39563 LL: 'D. MMMM YYYY', 39564 LLL: 'D. MMMM YYYY HH:mm', 39565 LLLL: 'dddd, D. MMMM YYYY HH:mm', 39566 }, 39567 calendar: { 39568 sameDay: '[heute um] LT [Uhr]', 39569 sameElse: 'L', 39570 nextDay: '[morgen um] LT [Uhr]', 39571 nextWeek: 'dddd [um] LT [Uhr]', 39572 lastDay: '[gestern um] LT [Uhr]', 39573 lastWeek: '[letzten] dddd [um] LT [Uhr]', 39574 }, 39575 relativeTime: { 39576 future: 'in %s', 39577 past: 'vor %s', 39578 s: 'ein paar Sekunden', 39579 ss: '%d Sekunden', 39580 m: processRelativeTime, 39581 mm: '%d Minuten', 39582 h: processRelativeTime, 39583 hh: '%d Stunden', 39584 d: processRelativeTime, 39585 dd: processRelativeTime, 39586 w: processRelativeTime, 39587 ww: '%d Wochen', 39588 M: processRelativeTime, 39589 MM: processRelativeTime, 39590 y: processRelativeTime, 39591 yy: processRelativeTime, 39592 }, 39593 dayOfMonthOrdinalParse: /\d{1,2}\./, 39594 ordinal: '%d.', 39595 week: { 39596 dow: 1, // Monday is the first day of the week. 39597 doy: 4, // The week that contains Jan 4th is the first week of the year. 39598 }, 39599 }); 39600 39601 return de; 39602 39603}))); 39604 39605 39606/***/ }), 39607
vendor: 3,290 bytes, lines 39608-39717
39608/***/ "./node_modules/moment/locale/dv.js": 39609/*!******************************************!*\ 39610 !*** ./node_modules/moment/locale/dv.js ***! 39611 \******************************************/ 39612/*! no static exports found */ 39613/***/ (function(module, exports, __webpack_require__) { 39614 39615//! moment.js locale configuration 39616//! locale : Maldivian [dv] 39617//! author : Jawish Hameed : https://github.com/jawish 39618 39619;(function (global, factory) { 39620 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : 39621 undefined 39622}(this, (function (moment) { 'use strict'; 39623 39624 //! moment.js locale configuration 39625 39626 var months = [ 39627 'ÞÞ¬ÞÞªÞÞ¦ÞÞ©', 39628 'ÞÞ¬ÞÞ°ÞÞªÞÞ¦ÞÞ©', 39629 'ÞÞ§ÞÞ¨ÞÞª', 39630 'ÞÞÞÞ°ÞÞ©ÞÞª', 39631 'ÞÞ', 39632 'ÞÞ«ÞÞ°', 39633 'ÞÞªÞÞ¦ÞÞ¨', 39634 'ÞÞ¯ÞÞ¦ÞÞ°ÞÞª', 39635 'ÞÞ¬ÞÞ°ÞÞ¬ÞÞ°ÞÞ¦ÞÞª', 39636 'ÞÞ®ÞÞ°ÞÞ¯ÞÞ¦ÞÞª', 39637 'ÞÞ®ÞÞ¬ÞÞ°ÞÞ¦ÞÞª', 39638 'ÞÞ¨ÞÞ¬ÞÞ°ÞÞ¦ÞÞª', 39639 ], 39640 weekdays = [ 39641 'ÞÞ§ÞÞ¨ÞÞ°ÞÞ¦', 39642 'ÞÞ¯ÞÞ¦', 39643 'ÞÞ¦ÞÞ°ÞÞ§ÞÞ¦', 39644 'ÞÞªÞÞ¦', 39645 'ÞÞªÞÞ§ÞÞ°ÞÞ¦ÞÞ¨', 39646 'ÞÞªÞÞªÞÞª', 39647 'ÞÞ®ÞÞ¨ÞÞ¨ÞÞª', 39648 ]; 39649 39650 var dv = moment.defineLocale('dv', { 39651 months: months, 39652 monthsShort: months, 39653 weekdays: weekdays, 39654 weekdaysShort: weekdays, 39655 weekdaysMin: 'ÞÞ§ÞÞ¨_ÞÞ¯ÞÞ¦_ÞÞ¦ÞÞ°_ÞÞªÞÞ¦_ÞÞªÞÞ§_ÞÞªÞÞª_ÞÞ®ÞÞ¨'.split('_'), 39656 longDateFormat: { 39657 LT: 'HH:mm', 39658 LTS: 'HH:mm:ss', 39659 L: 'D/M/YYYY', 39660 LL: 'D MMMM YYYY', 39661 LLL: 'D MMMM YYYY HH:mm', 39662 LLLL: 'dddd D MMMM YYYY HH:mm', 39663 }, 39664 meridiemParse: /ÞÞ|ÞÞ/, 39665 isPM: function (input) { 39666 return 'ÞÞ' === input; 39667 }, 39668 meridiem: function (hour, minute, isLower) { 39669 if (hour < 12) { 39670 return 'ÞÞ'; 39671 } else { 39672 return 'ÞÞ'; 39673 } 39674 }, 39675 calendar: { 39676 sameDay: '[ÞÞ¨ÞÞ¦ÞÞª] LT', 39677 nextDay: '[ÞÞ§ÞÞ¦ÞÞ§] LT', 39678 nextWeek: 'dddd LT', 39679 lastDay: '[ÞÞ¨ÞÞ°ÞÞ¬] LT', 39680 lastWeek: '[ÞÞ§ÞÞ¨ÞÞªÞÞ¨] dddd LT', 39681 sameElse: 'L', 39682 }, 39683 relativeTime: { 39684 future: 'ÞÞ¬ÞÞÞÞ¦ÞÞ¨ %s', 39685 past: 'ÞÞªÞÞ¨ÞÞ° %s', 39686 s: 'ÞÞ¨ÞÞªÞÞ°ÞÞªÞÞ®Þ Þ¬ÞÞ°', 39687 ss: 'd% ÞÞ¨ÞÞªÞÞ°ÞÞª', 39688 m: 'ÞÞ¨ÞÞ¨ÞÞ¬ÞÞ°', 39689 mm: 'ÞÞ¨ÞÞ¨ÞÞª %d', 39690 h: 'ÞÞ¦ÞÞ¨ÞÞ¨ÞÞ¬ÞÞ°', 39691 hh: 'ÞÞ¦ÞÞ¨ÞÞ¨ÞÞª %d', 39692 d: 'ÞÞªÞÞ¦ÞÞ¬ÞÞ°', 39693 dd: 'ÞÞªÞÞ¦ÞÞ° %d', 39694 M: 'ÞÞ¦ÞÞ¬ÞÞ°', 39695 MM: 'ÞÞ¦ÞÞ° %d', 39696 y: 'ÞÞ¦ÞÞ¦ÞÞ¬ÞÞ°', 39697 yy: 'ÞÞ¦ÞÞ¦ÞÞª %d', 39698 }, 39699 preparse: function (string) { 39700 return string.replace(/Ø/g, ','); 39701 }, 39702 postformat: function (string) { 39703 return string.replace(/,/g, 'Ø'); 39704 }, 39705 week: { 39706 dow: 7, // Sunday is the first day of the week. 39707 doy: 12, // The week that contains Jan 12th is the first week of the year. 39708 }, 39709 }); 39710 39711 return dv; 39712 39713}))); 39714 39715 39716/***/ }), 39717
vendor: 4,767 bytes, lines 39718-39843
39718/***/ "./node_modules/moment/locale/el.js": 39719/*!******************************************!*\ 39720 !*** ./node_modules/moment/locale/el.js ***! 39721 \******************************************/ 39722/*! no static exports found */ 39723/***/ (function(module, exports, __webpack_require__) { 39724 39725//! moment.js locale configuration 39726//! locale : Greek [el] 39727//! author : Aggelos Karalias : https://github.com/mehiel 39728 39729;(function (global, factory) { 39730 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : 39731 undefined 39732}(this, (function (moment) { 'use strict'; 39733 39734 //! moment.js locale configuration 39735 39736 function isFunction(input) { 39737 return ( 39738 (typeof Function !== 'undefined' && input instanceof Function) || 39739 Object.prototype.toString.call(input) === '[object Function]' 39740 ); 39741 } 39742 39743 var el = moment.defineLocale('el', { 39744 monthsNominativeEl: 39745 'ÎÎ±Î½Î¿Ï Î¬ÏιοÏ_ΦεβÏÎ¿Ï Î¬ÏιοÏ_ÎάÏÏιοÏ_ÎÏÏίλιοÏ_ÎάιοÏ_ÎοÏνιοÏ_ÎοÏλιοÏ_ÎÏÎ³Î¿Ï ÏÏοÏ_ΣεÏÏÎμβÏιοÏ_ÎκÏÏβÏιοÏ_ÎοÎμβÏιοÏ_ÎεκÎμβÏιοÏ'.split( 39746 '_' 39747 ), 39748 monthsGenitiveEl: 39749 'ÎÎ±Î½Î¿Ï Î±ÏÎ¯Î¿Ï _ΦεβÏÎ¿Ï Î±ÏÎ¯Î¿Ï _ÎαÏÏÎ¯Î¿Ï _ÎÏÏÎ¹Î»Î¯Î¿Ï _ÎαÎÎ¿Ï _ÎÎ¿Ï Î½Î¯Î¿Ï _ÎÎ¿Ï Î»Î¯Î¿Ï _ÎÏ Î³Î¿ÏÏÏÎ¿Ï _ΣεÏÏεμβÏÎ¯Î¿Ï _ÎκÏÏβÏÎ¯Î¿Ï _ÎοεμβÏÎ¯Î¿Ï _ÎεκεμβÏÎ¯Î¿Ï '.split( 39750 '_' 39751 ), 39752 months: function (momentToFormat, format) { 39753 if (!momentToFormat) { 39754 return this._monthsNominativeEl; 39755 } else if ( 39756 typeof format === 'string' && 39757 /D/.test(format.substring(0, format.indexOf('MMMM'))) 39758 ) { 39759 // if there is a day number before 'MMMM' 39760 return this._monthsGenitiveEl[momentToFormat.month()]; 39761 } else { 39762 return this._monthsNominativeEl[momentToFormat.month()]; 39763 } 39764 }, 39765 monthsShort: 'Îαν_Φεβ_ÎαÏ_ÎÏÏ_ÎαÏ_ÎÎ¿Ï Î½_ÎÎ¿Ï Î»_ÎÏ Î³_ΣεÏ_ÎκÏ_Îοε_Îεκ'.split('_'), 39766 weekdays: 'ÎÏ Ïιακή_ÎÎµÏ ÏÎÏα_ΤÏίÏη_ΤεÏάÏÏη_Î ÎμÏÏη_ΠαÏαÏÎºÎµÏ Î®_ΣάββαÏο'.split( 39767 '_' 39768 ), 39769 weekdaysShort: 'ÎÏ Ï_ÎÎµÏ _ΤÏι_ΤεÏ_Πεμ_ΠαÏ_Σαβ'.split('_'), 39770 weekdaysMin: 'ÎÏ _Îε_ΤÏ_Τε_Πε_Πα_Σα'.split('_'), 39771 meridiem: function (hours, minutes, isLower) { 39772 if (hours > 11) { 39773 return isLower ? 'μμ' : 'ÎÎ'; 39774 } else { 39775 return isLower ? 'Ïμ' : 'Î Î'; 39776 } 39777 }, 39778 isPM: function (input) { 39779 return (input + '').toLowerCase()[0] === 'μ'; 39780 }, 39781 meridiemParse: /[Î Î]\.?Î?\.?/i, 39782 longDateFormat: { 39783 LT: 'h:mm A', 39784 LTS: 'h:mm:ss A', 39785 L: 'DD/MM/YYYY', 39786 LL: 'D MMMM YYYY', 39787 LLL: 'D MMMM YYYY h:mm A', 39788 LLLL: 'dddd, D MMMM YYYY h:mm A', 39789 }, 39790 calendarEl: { 39791 sameDay: '[ΣήμεÏα {}] LT', 39792 nextDay: '[ÎÏÏιο {}] LT', 39793 nextWeek: 'dddd [{}] LT', 39794 lastDay: '[Î§Î¸ÎµÏ {}] LT', 39795 lastWeek: function () { 39796 switch (this.day()) { 39797 case 6: 39798 return '[Ïο ÏÏοηγοÏμενο] dddd [{}] LT'; 39799 default: 39800 return '[Ïην ÏÏοηγοÏμενη] dddd [{}] LT'; 39801 } 39802 }, 39803 sameElse: 'L', 39804 }, 39805 calendar: function (key, mom) { 39806 var output = this._calendarEl[key], 39807 hours = mom && mom.hours(); 39808 if (isFunction(output)) { 39809 output = output.apply(mom); 39810 } 39811 return output.replace('{}', hours % 12 === 1 ? 'ÏÏη' : 'ÏÏιÏ'); 39812 }, 39813 relativeTime: { 39814 future: 'Ïε %s', 39815 past: '%s ÏÏιν', 39816 s: 'λίγα Î´ÎµÏ ÏεÏÏλεÏÏα', 39817 ss: '%d Î´ÎµÏ ÏεÏÏλεÏÏα', 39818 m: 'Îνα λεÏÏÏ', 39819 mm: '%d λεÏÏά', 39820 h: 'μία ÏÏα', 39821 hh: '%d ÏÏεÏ', 39822 d: 'μία μÎÏα', 39823 dd: '%d μÎÏεÏ', 39824 M: 'ÎÎ½Î±Ï Î¼Î®Î½Î±Ï', 39825 MM: '%d μήνεÏ', 39826 y: 'ÎÎ½Î±Ï ÏÏÏνοÏ', 39827 yy: '%d ÏÏÏνια', 39828 }, 39829 dayOfMonthOrdinalParse: /\d{1,2}η/, 39830 ordinal: '%dη', 39831 week: { 39832 dow: 1, // Monday is the first day of the week. 39833 doy: 4, // The week that contains Jan 4st is the first week of the year. 39834 }, 39835 }); 39836 39837 return el; 39838 39839}))); 39840 39841 39842/***/ }), 39843
vendor: 2,811 bytes, lines 39844-39931
39844/***/ "./node_modules/moment/locale/en-au.js": 39845/*!*********************************************!*\ 39846 !*** ./node_modules/moment/locale/en-au.js ***! 39847 \*********************************************/ 39848/*! no static exports found */ 39849/***/ (function(module, exports, __webpack_require__) { 39850 39851//! moment.js locale configuration 39852//! locale : English (Australia) [en-au] 39853//! author : Jared Morse : https://github.com/jarcoal 39854 39855;(function (global, factory) { 39856 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : 39857 undefined 39858}(this, (function (moment) { 'use strict'; 39859 39860 //! moment.js locale configuration 39861 39862 var enAu = moment.defineLocale('en-au', { 39863 months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split( 39864 '_' 39865 ), 39866 monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'), 39867 weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split( 39868 '_' 39869 ), 39870 weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'), 39871 weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'), 39872 longDateFormat: { 39873 LT: 'h:mm A', 39874 LTS: 'h:mm:ss A', 39875 L: 'DD/MM/YYYY', 39876 LL: 'D MMMM YYYY', 39877 LLL: 'D MMMM YYYY h:mm A', 39878 LLLL: 'dddd, D MMMM YYYY h:mm A', 39879 }, 39880 calendar: { 39881 sameDay: '[Today at] LT', 39882 nextDay: '[Tomorrow at] LT', 39883 nextWeek: 'dddd [at] LT', 39884 lastDay: '[Yesterday at] LT', 39885 lastWeek: '[Last] dddd [at] LT', 39886 sameElse: 'L', 39887 }, 39888 relativeTime: { 39889 future: 'in %s', 39890 past: '%s ago', 39891 s: 'a few seconds', 39892 ss: '%d seconds', 39893 m: 'a minute', 39894 mm: '%d minutes', 39895 h: 'an hour', 39896 hh: '%d hours', 39897 d: 'a day', 39898 dd: '%d days', 39899 M: 'a month', 39900 MM: '%d months', 39901 y: 'a year', 39902 yy: '%d years', 39903 }, 39904 dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/, 39905 ordinal: function (number) { 39906 var b = number % 10, 39907 output = 39908 ~~((number % 100) / 10) === 1 39909 ? 'th' 39910 : b === 1 39911 ? 'st' 39912 : b === 2 39913 ? 'nd' 39914 : b === 3 39915 ? 'rd' 39916 : 'th'; 39917 return number + output; 39918 }, 39919 week: { 39920 dow: 0, // Sunday is the first day of the week. 39921 doy: 4, // The week that contains Jan 4th is the first week of the year. 39922 }, 39923 }); 39924 39925 return enAu; 39926 39927}))); 39928 39929 39930/***/ }), 39931
vendor: 2,644 bytes, lines 39932-40015
39932/***/ "./node_modules/moment/locale/en-ca.js": 39933/*!*********************************************!*\ 39934 !*** ./node_modules/moment/locale/en-ca.js ***! 39935 \*********************************************/ 39936/*! no static exports found */ 39937/***/ (function(module, exports, __webpack_require__) { 39938 39939//! moment.js locale configuration 39940//! locale : English (Canada) [en-ca] 39941//! author : Jonathan Abourbih : https://github.com/jonbca 39942 39943;(function (global, factory) { 39944 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : 39945 undefined 39946}(this, (function (moment) { 'use strict'; 39947 39948 //! moment.js locale configuration 39949 39950 var enCa = moment.defineLocale('en-ca', { 39951 months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split( 39952 '_' 39953 ), 39954 monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'), 39955 weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split( 39956 '_' 39957 ), 39958 weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'), 39959 weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'), 39960 longDateFormat: { 39961 LT: 'h:mm A', 39962 LTS: 'h:mm:ss A', 39963 L: 'YYYY-MM-DD', 39964 LL: 'MMMM D, YYYY', 39965 LLL: 'MMMM D, YYYY h:mm A', 39966 LLLL: 'dddd, MMMM D, YYYY h:mm A', 39967 }, 39968 calendar: { 39969 sameDay: '[Today at] LT', 39970 nextDay: '[Tomorrow at] LT', 39971 nextWeek: 'dddd [at] LT', 39972 lastDay: '[Yesterday at] LT', 39973 lastWeek: '[Last] dddd [at] LT', 39974 sameElse: 'L', 39975 }, 39976 relativeTime: { 39977 future: 'in %s', 39978 past: '%s ago', 39979 s: 'a few seconds', 39980 ss: '%d seconds', 39981 m: 'a minute', 39982 mm: '%d minutes', 39983 h: 'an hour', 39984 hh: '%d hours', 39985 d: 'a day', 39986 dd: '%d days', 39987 M: 'a month', 39988 MM: '%d months', 39989 y: 'a year', 39990 yy: '%d years', 39991 }, 39992 dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/, 39993 ordinal: function (number) { 39994 var b = number % 10, 39995 output = 39996 ~~((number % 100) / 10) === 1 39997 ? 'th' 39998 : b === 1 39999 ? 'st' 40000 : b === 2 40001 ? 'nd' 40002 : b === 3 40003 ? 'rd' 40004 : 'th'; 40005 return number + output; 40006 }, 40007 }); 40008 40009 return enCa; 40010 40011}))); 40012 40013 40014/***/ }), 40015
vendor: 2,817 bytes, lines 40016-40103
40016/***/ "./node_modules/moment/locale/en-gb.js": 40017/*!*********************************************!*\ 40018 !*** ./node_modules/moment/locale/en-gb.js ***! 40019 \*********************************************/ 40020/*! no static exports found */ 40021/***/ (function(module, exports, __webpack_require__) { 40022 40023//! moment.js locale configuration 40024//! locale : English (United Kingdom) [en-gb] 40025//! author : Chris Gedrim : https://github.com/chrisgedrim 40026 40027;(function (global, factory) { 40028 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : 40029 undefined 40030}(this, (function (moment) { 'use strict'; 40031 40032 //! moment.js locale configuration 40033 40034 var enGb = moment.defineLocale('en-gb', { 40035 months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split( 40036 '_' 40037 ), 40038 monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'), 40039 weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split( 40040 '_' 40041 ), 40042 weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'), 40043 weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'), 40044 longDateFormat: { 40045 LT: 'HH:mm', 40046 LTS: 'HH:mm:ss', 40047 L: 'DD/MM/YYYY', 40048 LL: 'D MMMM YYYY', 40049 LLL: 'D MMMM YYYY HH:mm', 40050 LLLL: 'dddd, D MMMM YYYY HH:mm', 40051 }, 40052 calendar: { 40053 sameDay: '[Today at] LT', 40054 nextDay: '[Tomorrow at] LT', 40055 nextWeek: 'dddd [at] LT', 40056 lastDay: '[Yesterday at] LT', 40057 lastWeek: '[Last] dddd [at] LT', 40058 sameElse: 'L', 40059 }, 40060 relativeTime: { 40061 future: 'in %s', 40062 past: '%s ago', 40063 s: 'a few seconds', 40064 ss: '%d seconds', 40065 m: 'a minute', 40066 mm: '%d minutes', 40067 h: 'an hour', 40068 hh: '%d hours', 40069 d: 'a day', 40070 dd: '%d days', 40071 M: 'a month', 40072 MM: '%d months', 40073 y: 'a year', 40074 yy: '%d years', 40075 }, 40076 dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/, 40077 ordinal: function (number) { 40078 var b = number % 10, 40079 output = 40080 ~~((number % 100) / 10) === 1 40081 ? 'th' 40082 : b === 1 40083 ? 'st' 40084 : b === 2 40085 ? 'nd' 40086 : b === 3 40087 ? 'rd' 40088 : 'th'; 40089 return number + output; 40090 }, 40091 week: { 40092 dow: 1, // Monday is the first day of the week. 40093 doy: 4, // The week that contains Jan 4th is the first week of the year. 40094 }, 40095 }); 40096 40097 return enGb; 40098 40099}))); 40100 40101 40102/***/ }), 40103
vendor: 2,815 bytes, lines 40104-40191
40104/***/ "./node_modules/moment/locale/en-ie.js": 40105/*!*********************************************!*\ 40106 !*** ./node_modules/moment/locale/en-ie.js ***! 40107 \*********************************************/ 40108/*! no static exports found */ 40109/***/ (function(module, exports, __webpack_require__) { 40110 40111//! moment.js locale configuration 40112//! locale : English (Ireland) [en-ie] 40113//! author : Chris Cartlidge : https://github.com/chriscartlidge 40114 40115;(function (global, factory) { 40116 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : 40117 undefined 40118}(this, (function (moment) { 'use strict'; 40119 40120 //! moment.js locale configuration 40121 40122 var enIe = moment.defineLocale('en-ie', { 40123 months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split( 40124 '_' 40125 ), 40126 monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'), 40127 weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split( 40128 '_' 40129 ), 40130 weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'), 40131 weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'), 40132 longDateFormat: { 40133 LT: 'HH:mm', 40134 LTS: 'HH:mm:ss', 40135 L: 'DD/MM/YYYY', 40136 LL: 'D MMMM YYYY', 40137 LLL: 'D MMMM YYYY HH:mm', 40138 LLLL: 'dddd D MMMM YYYY HH:mm', 40139 }, 40140 calendar: { 40141 sameDay: '[Today at] LT', 40142 nextDay: '[Tomorrow at] LT', 40143 nextWeek: 'dddd [at] LT', 40144 lastDay: '[Yesterday at] LT', 40145 lastWeek: '[Last] dddd [at] LT', 40146 sameElse: 'L', 40147 }, 40148 relativeTime: { 40149 future: 'in %s', 40150 past: '%s ago', 40151 s: 'a few seconds', 40152 ss: '%d seconds', 40153 m: 'a minute', 40154 mm: '%d minutes', 40155 h: 'an hour', 40156 hh: '%d hours', 40157 d: 'a day', 40158 dd: '%d days', 40159 M: 'a month', 40160 MM: '%d months', 40161 y: 'a year', 40162 yy: '%d years', 40163 }, 40164 dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/, 40165 ordinal: function (number) { 40166 var b = number % 10, 40167 output = 40168 ~~((number % 100) / 10) === 1 40169 ? 'th' 40170 : b === 1 40171 ? 'st' 40172 : b === 2 40173 ? 'nd' 40174 : b === 3 40175 ? 'rd' 40176 : 'th'; 40177 return number + output; 40178 }, 40179 week: { 40180 dow: 1, // Monday is the first day of the week. 40181 doy: 4, // The week that contains Jan 4th is the first week of the year. 40182 }, 40183 }); 40184 40185 return enIe; 40186 40187}))); 40188 40189 40190/***/ }), 40191
vendor: 2,637 bytes, lines 40192-40275
40192/***/ "./node_modules/moment/locale/en-il.js": 40193/*!*********************************************!*\ 40194 !*** ./node_modules/moment/locale/en-il.js ***! 40195 \*********************************************/ 40196/*! no static exports found */ 40197/***/ (function(module, exports, __webpack_require__) { 40198 40199//! moment.js locale configuration 40200//! locale : English (Israel) [en-il] 40201//! author : Chris Gedrim : https://github.com/chrisgedrim 40202 40203;(function (global, factory) { 40204 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : 40205 undefined 40206}(this, (function (moment) { 'use strict'; 40207 40208 //! moment.js locale configuration 40209 40210 var enIl = moment.defineLocale('en-il', { 40211 months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split( 40212 '_' 40213 ), 40214 monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'), 40215 weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split( 40216 '_' 40217 ), 40218 weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'), 40219 weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'), 40220 longDateFormat: { 40221 LT: 'HH:mm', 40222 LTS: 'HH:mm:ss', 40223 L: 'DD/MM/YYYY', 40224 LL: 'D MMMM YYYY', 40225 LLL: 'D MMMM YYYY HH:mm', 40226 LLLL: 'dddd, D MMMM YYYY HH:mm', 40227 }, 40228 calendar: { 40229 sameDay: '[Today at] LT', 40230 nextDay: '[Tomorrow at] LT', 40231 nextWeek: 'dddd [at] LT', 40232 lastDay: '[Yesterday at] LT', 40233 lastWeek: '[Last] dddd [at] LT', 40234 sameElse: 'L', 40235 }, 40236 relativeTime: { 40237 future: 'in %s', 40238 past: '%s ago', 40239 s: 'a few seconds', 40240 ss: '%d seconds', 40241 m: 'a minute', 40242 mm: '%d minutes', 40243 h: 'an hour', 40244 hh: '%d hours', 40245 d: 'a day', 40246 dd: '%d days', 40247 M: 'a month', 40248 MM: '%d months', 40249 y: 'a year', 40250 yy: '%d years', 40251 }, 40252 dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/, 40253 ordinal: function (number) { 40254 var b = number % 10, 40255 output = 40256 ~~((number % 100) / 10) === 1 40257 ? 'th' 40258 : b === 1 40259 ? 'st' 40260 : b === 2 40261 ? 'nd' 40262 : b === 3 40263 ? 'rd' 40264 : 'th'; 40265 return number + output; 40266 }, 40267 }); 40268 40269 return enIl; 40270 40271}))); 40272 40273 40274/***/ }), 40275
vendor: 2,811 bytes, lines 40276-40363
40276/***/ "./node_modules/moment/locale/en-in.js": 40277/*!*********************************************!*\ 40278 !*** ./node_modules/moment/locale/en-in.js ***! 40279 \*********************************************/ 40280/*! no static exports found */ 40281/***/ (function(module, exports, __webpack_require__) { 40282 40283//! moment.js locale configuration 40284//! locale : English (India) [en-in] 40285//! author : Jatin Agrawal : https://github.com/jatinag22 40286 40287;(function (global, factory) { 40288 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : 40289 undefined 40290}(this, (function (moment) { 'use strict'; 40291 40292 //! moment.js locale configuration 40293 40294 var enIn = moment.defineLocale('en-in', { 40295 months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split( 40296 '_' 40297 ), 40298 monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'), 40299 weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split( 40300 '_' 40301 ), 40302 weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'), 40303 weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'), 40304 longDateFormat: { 40305 LT: 'h:mm A', 40306 LTS: 'h:mm:ss A', 40307 L: 'DD/MM/YYYY', 40308 LL: 'D MMMM YYYY', 40309 LLL: 'D MMMM YYYY h:mm A', 40310 LLLL: 'dddd, D MMMM YYYY h:mm A', 40311 }, 40312 calendar: { 40313 sameDay: '[Today at] LT', 40314 nextDay: '[Tomorrow at] LT', 40315 nextWeek: 'dddd [at] LT', 40316 lastDay: '[Yesterday at] LT', 40317 lastWeek: '[Last] dddd [at] LT', 40318 sameElse: 'L', 40319 }, 40320 relativeTime: { 40321 future: 'in %s', 40322 past: '%s ago', 40323 s: 'a few seconds', 40324 ss: '%d seconds', 40325 m: 'a minute', 40326 mm: '%d minutes', 40327 h: 'an hour', 40328 hh: '%d hours', 40329 d: 'a day', 40330 dd: '%d days', 40331 M: 'a month', 40332 MM: '%d months', 40333 y: 'a year', 40334 yy: '%d years', 40335 }, 40336 dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/, 40337 ordinal: function (number) { 40338 var b = number % 10, 40339 output = 40340 ~~((number % 100) / 10) === 1 40341 ? 'th' 40342 : b === 1 40343 ? 'st' 40344 : b === 2 40345 ? 'nd' 40346 : b === 3 40347 ? 'rd' 40348 : 'th'; 40349 return number + output; 40350 }, 40351 week: { 40352 dow: 0, // Sunday is the first day of the week. 40353 doy: 6, // The week that contains Jan 1st is the first week of the year. 40354 }, 40355 }); 40356 40357 return enIn; 40358 40359}))); 40360 40361 40362/***/ }), 40363
vendor: 2,820 bytes, lines 40364-40451
40364/***/ "./node_modules/moment/locale/en-nz.js": 40365/*!*********************************************!*\ 40366 !*** ./node_modules/moment/locale/en-nz.js ***! 40367 \*********************************************/ 40368/*! no static exports found */ 40369/***/ (function(module, exports, __webpack_require__) { 40370 40371//! moment.js locale configuration 40372//! locale : English (New Zealand) [en-nz] 40373//! author : Luke McGregor : https://github.com/lukemcgregor 40374 40375;(function (global, factory) { 40376 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : 40377 undefined 40378}(this, (function (moment) { 'use strict'; 40379 40380 //! moment.js locale configuration 40381 40382 var enNz = moment.defineLocale('en-nz', { 40383 months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split( 40384 '_' 40385 ), 40386 monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'), 40387 weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split( 40388 '_' 40389 ), 40390 weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'), 40391 weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'), 40392 longDateFormat: { 40393 LT: 'h:mm A', 40394 LTS: 'h:mm:ss A', 40395 L: 'DD/MM/YYYY', 40396 LL: 'D MMMM YYYY', 40397 LLL: 'D MMMM YYYY h:mm A', 40398 LLLL: 'dddd, D MMMM YYYY h:mm A', 40399 }, 40400 calendar: { 40401 sameDay: '[Today at] LT', 40402 nextDay: '[Tomorrow at] LT', 40403 nextWeek: 'dddd [at] LT', 40404 lastDay: '[Yesterday at] LT', 40405 lastWeek: '[Last] dddd [at] LT', 40406 sameElse: 'L', 40407 }, 40408 relativeTime: { 40409 future: 'in %s', 40410 past: '%s ago', 40411 s: 'a few seconds', 40412 ss: '%d seconds', 40413 m: 'a minute', 40414 mm: '%d minutes', 40415 h: 'an hour', 40416 hh: '%d hours', 40417 d: 'a day', 40418 dd: '%d days', 40419 M: 'a month', 40420 MM: '%d months', 40421 y: 'a year', 40422 yy: '%d years', 40423 }, 40424 dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/, 40425 ordinal: function (number) { 40426 var b = number % 10, 40427 output = 40428 ~~((number % 100) / 10) === 1 40429 ? 'th' 40430 : b === 1 40431 ? 'st' 40432 : b === 2 40433 ? 'nd' 40434 : b === 3 40435 ? 'rd' 40436 : 'th'; 40437 return number + output; 40438 }, 40439 week: { 40440 dow: 1, // Monday is the first day of the week. 40441 doy: 4, // The week that contains Jan 4th is the first week of the year. 40442 }, 40443 }); 40444 40445 return enNz; 40446 40447}))); 40448 40449 40450/***/ }), 40451
vendor: 2,829 bytes, lines 40452-40539
40452/***/ "./node_modules/moment/locale/en-sg.js": 40453/*!*********************************************!*\ 40454 !*** ./node_modules/moment/locale/en-sg.js ***! 40455 \*********************************************/ 40456/*! no static exports found */ 40457/***/ (function(module, exports, __webpack_require__) { 40458 40459//! moment.js locale configuration 40460//! locale : English (Singapore) [en-sg] 40461//! author : Matthew Castrillon-Madrigal : https://github.com/techdimension 40462 40463;(function (global, factory) { 40464 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : 40465 undefined 40466}(this, (function (moment) { 'use strict'; 40467 40468 //! moment.js locale configuration 40469 40470 var enSg = moment.defineLocale('en-sg', { 40471 months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split( 40472 '_' 40473 ), 40474 monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'), 40475 weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split( 40476 '_' 40477 ), 40478 weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'), 40479 weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'), 40480 longDateFormat: { 40481 LT: 'HH:mm', 40482 LTS: 'HH:mm:ss', 40483 L: 'DD/MM/YYYY', 40484 LL: 'D MMMM YYYY', 40485 LLL: 'D MMMM YYYY HH:mm', 40486 LLLL: 'dddd, D MMMM YYYY HH:mm', 40487 }, 40488 calendar: { 40489 sameDay: '[Today at] LT', 40490 nextDay: '[Tomorrow at] LT', 40491 nextWeek: 'dddd [at] LT', 40492 lastDay: '[Yesterday at] LT', 40493 lastWeek: '[Last] dddd [at] LT', 40494 sameElse: 'L', 40495 }, 40496 relativeTime: { 40497 future: 'in %s', 40498 past: '%s ago', 40499 s: 'a few seconds', 40500 ss: '%d seconds', 40501 m: 'a minute', 40502 mm: '%d minutes', 40503 h: 'an hour', 40504 hh: '%d hours', 40505 d: 'a day', 40506 dd: '%d days', 40507 M: 'a month', 40508 MM: '%d months', 40509 y: 'a year', 40510 yy: '%d years', 40511 }, 40512 dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/, 40513 ordinal: function (number) { 40514 var b = number % 10, 40515 output = 40516 ~~((number % 100) / 10) === 1 40517 ? 'th' 40518 : b === 1 40519 ? 'st' 40520 : b === 2 40521 ? 'nd' 40522 : b === 3 40523 ? 'rd' 40524 : 'th'; 40525 return number + output; 40526 }, 40527 week: { 40528 dow: 1, // Monday is the first day of the week. 40529 doy: 4, // The week that contains Jan 4th is the first week of the year. 40530 }, 40531 }); 40532 40533 return enSg; 40534 40535}))); 40536 40537 40538/***/ }), 40539
vendor: 3,068 bytes, lines 40540-40627
40540/***/ "./node_modules/moment/locale/eo.js": 40541/*!******************************************!*\ 40542 !*** ./node_modules/moment/locale/eo.js ***! 40543 \******************************************/ 40544/*! no static exports found */ 40545/***/ (function(module, exports, __webpack_require__) { 40546 40547//! moment.js locale configuration 40548//! locale : Esperanto [eo] 40549//! author : Colin Dean : https://github.com/colindean 40550//! author : Mia Nordentoft Imperatori : https://github.com/miestasmia 40551//! comment : miestasmia corrected the translation by colindean 40552//! comment : Vivakvo corrected the translation by colindean and miestasmia 40553 40554;(function (global, factory) { 40555 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : 40556 undefined 40557}(this, (function (moment) { 'use strict'; 40558 40559 //! moment.js locale configuration 40560 40561 var eo = moment.defineLocale('eo', { 40562 months: 'januaro_februaro_marto_aprilo_majo_junio_julio_aÅgusto_septembro_oktobro_novembro_decembro'.split( 40563 '_' 40564 ), 40565 monthsShort: 'jan_feb_mart_apr_maj_jun_jul_aÅg_sept_okt_nov_dec'.split('_'), 40566 weekdays: 'dimanÄo_lundo_mardo_merkredo_ĵaÅdo_vendredo_sabato'.split('_'), 40567 weekdaysShort: 'dim_lun_mard_merk_ĵaÅ_ven_sab'.split('_'), 40568 weekdaysMin: 'di_lu_ma_me_ĵa_ve_sa'.split('_'), 40569 longDateFormat: { 40570 LT: 'HH:mm', 40571 LTS: 'HH:mm:ss', 40572 L: 'YYYY-MM-DD', 40573 LL: '[la] D[-an de] MMMM, YYYY', 40574 LLL: '[la] D[-an de] MMMM, YYYY HH:mm', 40575 LLLL: 'dddd[n], [la] D[-an de] MMMM, YYYY HH:mm', 40576 llll: 'ddd, [la] D[-an de] MMM, YYYY HH:mm', 40577 }, 40578 meridiemParse: /[ap]\.t\.m/i, 40579 isPM: function (input) { 40580 return input.charAt(0).toLowerCase() === 'p'; 40581 }, 40582 meridiem: function (hours, minutes, isLower) { 40583 if (hours > 11) { 40584 return isLower ? 'p.t.m.' : 'P.T.M.'; 40585 } else { 40586 return isLower ? 'a.t.m.' : 'A.T.M.'; 40587 } 40588 }, 40589 calendar: { 40590 sameDay: '[HodiaÅ je] LT', 40591 nextDay: '[MorgaÅ je] LT', 40592 nextWeek: 'dddd[n je] LT', 40593 lastDay: '[HieraÅ je] LT', 40594 lastWeek: '[pasintan] dddd[n je] LT', 40595 sameElse: 'L', 40596 }, 40597 relativeTime: { 40598 future: 'post %s', 40599 past: 'antaÅ %s', 40600 s: 'kelkaj sekundoj', 40601 ss: '%d sekundoj', 40602 m: 'unu minuto', 40603 mm: '%d minutoj', 40604 h: 'unu horo', 40605 hh: '%d horoj', 40606 d: 'unu tago', //ne 'diurno', Äar estas uzita por proksimumo 40607 dd: '%d tagoj', 40608 M: 'unu monato', 40609 MM: '%d monatoj', 40610 y: 'unu jaro', 40611 yy: '%d jaroj', 40612 }, 40613 dayOfMonthOrdinalParse: /\d{1,2}a/, 40614 ordinal: '%da', 40615 week: { 40616 dow: 1, // Monday is the first day of the week. 40617 doy: 7, // The week that contains Jan 7th is the first week of the year. 40618 }, 40619 }); 40620 40621 return eo; 40622 40623}))); 40624 40625 40626/***/ }), 40627
vendor: 4,359 bytes, lines 40628-40755
40628/***/ "./node_modules/moment/locale/es-do.js": 40629/*!*********************************************!*\ 40630 !*** ./node_modules/moment/locale/es-do.js ***! 40631 \*********************************************/ 40632/*! no static exports found */ 40633/***/ (function(module, exports, __webpack_require__) { 40634 40635//! moment.js locale configuration 40636//! locale : Spanish (Dominican Republic) [es-do] 40637 40638;(function (global, factory) { 40639 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : 40640 undefined 40641}(this, (function (moment) { 'use strict'; 40642 40643 //! moment.js locale configuration 40644 40645 var monthsShortDot = 40646 'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split( 40647 '_' 40648 ), 40649 monthsShort = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_'), 40650 monthsParse = [ 40651 /^ene/i, 40652 /^feb/i, 40653 /^mar/i, 40654 /^abr/i, 40655 /^may/i, 40656 /^jun/i, 40657 /^jul/i, 40658 /^ago/i, 40659 /^sep/i, 40660 /^oct/i, 40661 /^nov/i, 40662 /^dic/i, 40663 ], 40664 monthsRegex = 40665 /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i; 40666 40667 var esDo = moment.defineLocale('es-do', { 40668 months: 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split( 40669 '_' 40670 ), 40671 monthsShort: function (m, format) { 40672 if (!m) { 40673 return monthsShortDot; 40674 } else if (/-MMM-/.test(format)) { 40675 return monthsShort[m.month()]; 40676 } else { 40677 return monthsShortDot[m.month()]; 40678 } 40679 }, 40680 monthsRegex: monthsRegex, 40681 monthsShortRegex: monthsRegex, 40682 monthsStrictRegex: 40683 /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i, 40684 monthsShortStrictRegex: 40685 /^(ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i, 40686 monthsParse: monthsParse, 40687 longMonthsParse: monthsParse, 40688 shortMonthsParse: monthsParse, 40689 weekdays: 'domingo_lunes_martes_miércoles_jueves_viernes_sábado'.split('_'), 40690 weekdaysShort: 'dom._lun._mar._mié._jue._vie._sáb.'.split('_'), 40691 weekdaysMin: 'do_lu_ma_mi_ju_vi_sá'.split('_'), 40692 weekdaysParseExact: true, 40693 longDateFormat: { 40694 LT: 'h:mm A', 40695 LTS: 'h:mm:ss A', 40696 L: 'DD/MM/YYYY', 40697 LL: 'D [de] MMMM [de] YYYY', 40698 LLL: 'D [de] MMMM [de] YYYY h:mm A', 40699 LLLL: 'dddd, D [de] MMMM [de] YYYY h:mm A', 40700 }, 40701 calendar: { 40702 sameDay: function () { 40703 return '[hoy a la' + (this.hours() !== 1 ? 's' : '') + '] LT'; 40704 }, 40705 nextDay: function () { 40706 return '[mañana a la' + (this.hours() !== 1 ? 's' : '') + '] LT'; 40707 }, 40708 nextWeek: function () { 40709 return 'dddd [a la' + (this.hours() !== 1 ? 's' : '') + '] LT'; 40710 }, 40711 lastDay: function () { 40712 return '[ayer a la' + (this.hours() !== 1 ? 's' : '') + '] LT'; 40713 }, 40714 lastWeek: function () { 40715 return ( 40716 '[el] dddd [pasado a la' + 40717 (this.hours() !== 1 ? 's' : '') + 40718 '] LT' 40719 ); 40720 }, 40721 sameElse: 'L', 40722 }, 40723 relativeTime: { 40724 future: 'en %s', 40725 past: 'hace %s', 40726 s: 'unos segundos', 40727 ss: '%d segundos', 40728 m: 'un minuto', 40729 mm: '%d minutos', 40730 h: 'una hora', 40731 hh: '%d horas', 40732 d: 'un dÃa', 40733 dd: '%d dÃas', 40734 w: 'una semana', 40735 ww: '%d semanas', 40736 M: 'un mes', 40737 MM: '%d meses', 40738 y: 'un año', 40739 yy: '%d años', 40740 }, 40741 dayOfMonthOrdinalParse: /\d{1,2}º/, 40742 ordinal: '%dº', 40743 week: { 40744 dow: 1, // Monday is the first day of the week. 40745 doy: 4, // The week that contains Jan 4th is the first week of the year. 40746 }, 40747 }); 40748 40749 return esDo; 40750 40751}))); 40752 40753 40754/***/ }), 40755
vendor: 4,432 bytes, lines 40756-40885
40756/***/ "./node_modules/moment/locale/es-mx.js": 40757/*!*********************************************!*\ 40758 !*** ./node_modules/moment/locale/es-mx.js ***! 40759 \*********************************************/ 40760/*! no static exports found */ 40761/***/ (function(module, exports, __webpack_require__) { 40762 40763//! moment.js locale configuration 40764//! locale : Spanish (Mexico) [es-mx] 40765//! author : JC Franco : https://github.com/jcfranco 40766 40767;(function (global, factory) { 40768 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : 40769 undefined 40770}(this, (function (moment) { 'use strict'; 40771 40772 //! moment.js locale configuration 40773 40774 var monthsShortDot = 40775 'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split( 40776 '_' 40777 ), 40778 monthsShort = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_'), 40779 monthsParse = [ 40780 /^ene/i, 40781 /^feb/i, 40782 /^mar/i, 40783 /^abr/i, 40784 /^may/i, 40785 /^jun/i, 40786 /^jul/i, 40787 /^ago/i, 40788 /^sep/i, 40789 /^oct/i, 40790 /^nov/i, 40791 /^dic/i, 40792 ], 40793 monthsRegex = 40794 /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i; 40795 40796 var esMx = moment.defineLocale('es-mx', { 40797 months: 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split( 40798 '_' 40799 ), 40800 monthsShort: function (m, format) { 40801 if (!m) { 40802 return monthsShortDot; 40803 } else if (/-MMM-/.test(format)) { 40804 return monthsShort[m.month()]; 40805 } else { 40806 return monthsShortDot[m.month()]; 40807 } 40808 }, 40809 monthsRegex: monthsRegex, 40810 monthsShortRegex: monthsRegex, 40811 monthsStrictRegex: 40812 /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i, 40813 monthsShortStrictRegex: 40814 /^(ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i, 40815 monthsParse: monthsParse, 40816 longMonthsParse: monthsParse, 40817 shortMonthsParse: monthsParse, 40818 weekdays: 'domingo_lunes_martes_miércoles_jueves_viernes_sábado'.split('_'), 40819 weekdaysShort: 'dom._lun._mar._mié._jue._vie._sáb.'.split('_'), 40820 weekdaysMin: 'do_lu_ma_mi_ju_vi_sá'.split('_'), 40821 weekdaysParseExact: true, 40822 longDateFormat: { 40823 LT: 'H:mm', 40824 LTS: 'H:mm:ss', 40825 L: 'DD/MM/YYYY', 40826 LL: 'D [de] MMMM [de] YYYY', 40827 LLL: 'D [de] MMMM [de] YYYY H:mm', 40828 LLLL: 'dddd, D [de] MMMM [de] YYYY H:mm', 40829 }, 40830 calendar: { 40831 sameDay: function () { 40832 return '[hoy a la' + (this.hours() !== 1 ? 's' : '') + '] LT'; 40833 }, 40834 nextDay: function () { 40835 return '[mañana a la' + (this.hours() !== 1 ? 's' : '') + '] LT'; 40836 }, 40837 nextWeek: function () { 40838 return 'dddd [a la' + (this.hours() !== 1 ? 's' : '') + '] LT'; 40839 }, 40840 lastDay: function () { 40841 return '[ayer a la' + (this.hours() !== 1 ? 's' : '') + '] LT'; 40842 }, 40843 lastWeek: function () { 40844 return ( 40845 '[el] dddd [pasado a la' + 40846 (this.hours() !== 1 ? 's' : '') + 40847 '] LT' 40848 ); 40849 }, 40850 sameElse: 'L', 40851 }, 40852 relativeTime: { 40853 future: 'en %s', 40854 past: 'hace %s', 40855 s: 'unos segundos', 40856 ss: '%d segundos', 40857 m: 'un minuto', 40858 mm: '%d minutos', 40859 h: 'una hora', 40860 hh: '%d horas', 40861 d: 'un dÃa', 40862 dd: '%d dÃas', 40863 w: 'una semana', 40864 ww: '%d semanas', 40865 M: 'un mes', 40866 MM: '%d meses', 40867 y: 'un año', 40868 yy: '%d años', 40869 }, 40870 dayOfMonthOrdinalParse: /\d{1,2}º/, 40871 ordinal: '%dº', 40872 week: { 40873 dow: 0, // Sunday is the first day of the week. 40874 doy: 4, // The week that contains Jan 4th is the first week of the year. 40875 }, 40876 invalidDate: 'Fecha inválida', 40877 }); 40878 40879 return esMx; 40880 40881}))); 40882 40883 40884/***/ }), 40885
vendor: 4,456 bytes, lines 40886-41015
40886/***/ "./node_modules/moment/locale/es-us.js": 40887/*!*********************************************!*\ 40888 !*** ./node_modules/moment/locale/es-us.js ***! 40889 \*********************************************/ 40890/*! no static exports found */ 40891/***/ (function(module, exports, __webpack_require__) { 40892 40893//! moment.js locale configuration 40894//! locale : Spanish (United States) [es-us] 40895//! author : bustta : https://github.com/bustta 40896//! author : chrisrodz : https://github.com/chrisrodz 40897 40898;(function (global, factory) { 40899 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : 40900 undefined 40901}(this, (function (moment) { 'use strict'; 40902 40903 //! moment.js locale configuration 40904 40905 var monthsShortDot = 40906 'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split( 40907 '_' 40908 ), 40909 monthsShort = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_'), 40910 monthsParse = [ 40911 /^ene/i, 40912 /^feb/i, 40913 /^mar/i, 40914 /^abr/i, 40915 /^may/i, 40916 /^jun/i, 40917 /^jul/i, 40918 /^ago/i, 40919 /^sep/i, 40920 /^oct/i, 40921 /^nov/i, 40922 /^dic/i, 40923 ], 40924 monthsRegex = 40925 /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i; 40926 40927 var esUs = moment.defineLocale('es-us', { 40928 months: 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split( 40929 '_' 40930 ), 40931 monthsShort: function (m, format) { 40932 if (!m) { 40933 return monthsShortDot; 40934 } else if (/-MMM-/.test(format)) { 40935 return monthsShort[m.month()]; 40936 } else { 40937 return monthsShortDot[m.month()]; 40938 } 40939 }, 40940 monthsRegex: monthsRegex, 40941 monthsShortRegex: monthsRegex, 40942 monthsStrictRegex: 40943 /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i, 40944 monthsShortStrictRegex: 40945 /^(ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i, 40946 monthsParse: monthsParse, 40947 longMonthsParse: monthsParse, 40948 shortMonthsParse: monthsParse, 40949 weekdays: 'domingo_lunes_martes_miércoles_jueves_viernes_sábado'.split('_'), 40950 weekdaysShort: 'dom._lun._mar._mié._jue._vie._sáb.'.split('_'), 40951 weekdaysMin: 'do_lu_ma_mi_ju_vi_sá'.split('_'), 40952 weekdaysParseExact: true, 40953 longDateFormat: { 40954 LT: 'h:mm A', 40955 LTS: 'h:mm:ss A', 40956 L: 'MM/DD/YYYY', 40957 LL: 'D [de] MMMM [de] YYYY', 40958 LLL: 'D [de] MMMM [de] YYYY h:mm A', 40959 LLLL: 'dddd, D [de] MMMM [de] YYYY h:mm A', 40960 }, 40961 calendar: { 40962 sameDay: function () { 40963 return '[hoy a la' + (this.hours() !== 1 ? 's' : '') + '] LT'; 40964 }, 40965 nextDay: function () { 40966 return '[mañana a la' + (this.hours() !== 1 ? 's' : '') + '] LT'; 40967 }, 40968 nextWeek: function () { 40969 return 'dddd [a la' + (this.hours() !== 1 ? 's' : '') + '] LT'; 40970 }, 40971 lastDay: function () { 40972 return '[ayer a la' + (this.hours() !== 1 ? 's' : '') + '] LT'; 40973 }, 40974 lastWeek: function () { 40975 return ( 40976 '[el] dddd [pasado a la' + 40977 (this.hours() !== 1 ? 's' : '') + 40978 '] LT' 40979 ); 40980 }, 40981 sameElse: 'L', 40982 }, 40983 relativeTime: { 40984 future: 'en %s', 40985 past: 'hace %s', 40986 s: 'unos segundos', 40987 ss: '%d segundos', 40988 m: 'un minuto', 40989 mm: '%d minutos', 40990 h: 'una hora', 40991 hh: '%d horas', 40992 d: 'un dÃa', 40993 dd: '%d dÃas', 40994 w: 'una semana', 40995 ww: '%d semanas', 40996 M: 'un mes', 40997 MM: '%d meses', 40998 y: 'un año', 40999 yy: '%d años', 41000 }, 41001 dayOfMonthOrdinalParse: /\d{1,2}º/, 41002 ordinal: '%dº', 41003 week: { 41004 dow: 0, // Sunday is the first day of the week. 41005 doy: 6, // The week that contains Jan 6th is the first week of the year. 41006 }, 41007 }); 41008 41009 return esUs; 41010 41011}))); 41012 41013 41014/***/ }), 41015
vendor: 4,404 bytes, lines 41016-41145
41016/***/ "./node_modules/moment/locale/es.js": 41017/*!******************************************!*\ 41018 !*** ./node_modules/moment/locale/es.js ***! 41019 \******************************************/ 41020/*! no static exports found */ 41021/***/ (function(module, exports, __webpack_require__) { 41022 41023//! moment.js locale configuration 41024//! locale : Spanish [es] 41025//! author : Julio Napurà : https://github.com/julionc 41026 41027;(function (global, factory) { 41028 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : 41029 undefined 41030}(this, (function (moment) { 'use strict'; 41031 41032 //! moment.js locale configuration 41033 41034 var monthsShortDot = 41035 'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split( 41036 '_' 41037 ), 41038 monthsShort = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_'), 41039 monthsParse = [ 41040 /^ene/i, 41041 /^feb/i, 41042 /^mar/i, 41043 /^abr/i, 41044 /^may/i, 41045 /^jun/i, 41046 /^jul/i, 41047 /^ago/i, 41048 /^sep/i, 41049 /^oct/i, 41050 /^nov/i, 41051 /^dic/i, 41052 ], 41053 monthsRegex = 41054 /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i; 41055 41056 var es = moment.defineLocale('es', { 41057 months: 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split( 41058 '_' 41059 ), 41060 monthsShort: function (m, format) { 41061 if (!m) { 41062 return monthsShortDot; 41063 } else if (/-MMM-/.test(format)) { 41064 return monthsShort[m.month()]; 41065 } else { 41066 return monthsShortDot[m.month()]; 41067 } 41068 }, 41069 monthsRegex: monthsRegex, 41070 monthsShortRegex: monthsRegex, 41071 monthsStrictRegex: 41072 /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i, 41073 monthsShortStrictRegex: 41074 /^(ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i, 41075 monthsParse: monthsParse, 41076 longMonthsParse: monthsParse, 41077 shortMonthsParse: monthsParse, 41078 weekdays: 'domingo_lunes_martes_miércoles_jueves_viernes_sábado'.split('_'), 41079 weekdaysShort: 'dom._lun._mar._mié._jue._vie._sáb.'.split('_'), 41080 weekdaysMin: 'do_lu_ma_mi_ju_vi_sá'.split('_'), 41081 weekdaysParseExact: true, 41082 longDateFormat: { 41083 LT: 'H:mm', 41084 LTS: 'H:mm:ss', 41085 L: 'DD/MM/YYYY', 41086 LL: 'D [de] MMMM [de] YYYY', 41087 LLL: 'D [de] MMMM [de] YYYY H:mm', 41088 LLLL: 'dddd, D [de] MMMM [de] YYYY H:mm', 41089 }, 41090 calendar: { 41091 sameDay: function () { 41092 return '[hoy a la' + (this.hours() !== 1 ? 's' : '') + '] LT'; 41093 }, 41094 nextDay: function () { 41095 return '[mañana a la' + (this.hours() !== 1 ? 's' : '') + '] LT'; 41096 }, 41097 nextWeek: function () { 41098 return 'dddd [a la' + (this.hours() !== 1 ? 's' : '') + '] LT'; 41099 }, 41100 lastDay: function () { 41101 return '[ayer a la' + (this.hours() !== 1 ? 's' : '') + '] LT'; 41102 }, 41103 lastWeek: function () { 41104 return ( 41105 '[el] dddd [pasado a la' + 41106 (this.hours() !== 1 ? 's' : '') + 41107 '] LT' 41108 ); 41109 }, 41110 sameElse: 'L', 41111 }, 41112 relativeTime: { 41113 future: 'en %s', 41114 past: 'hace %s', 41115 s: 'unos segundos', 41116 ss: '%d segundos', 41117 m: 'un minuto', 41118 mm: '%d minutos', 41119 h: 'una hora', 41120 hh: '%d horas', 41121 d: 'un dÃa', 41122 dd: '%d dÃas', 41123 w: 'una semana', 41124 ww: '%d semanas', 41125 M: 'un mes', 41126 MM: '%d meses', 41127 y: 'un año', 41128 yy: '%d años', 41129 }, 41130 dayOfMonthOrdinalParse: /\d{1,2}º/, 41131 ordinal: '%dº', 41132 week: { 41133 dow: 1, // Monday is the first day of the week. 41134 doy: 4, // The week that contains Jan 4th is the first week of the year. 41135 }, 41136 invalidDate: 'Fecha inválida', 41137 }); 41138 41139 return es; 41140 41141}))); 41142 41143 41144/***/ }), 41145
vendor: 3,405 bytes, lines 41146-41243
41146/***/ "./node_modules/moment/locale/et.js": 41147/*!******************************************!*\ 41148 !*** ./node_modules/moment/locale/et.js ***! 41149 \******************************************/ 41150/*! no static exports found */ 41151/***/ (function(module, exports, __webpack_require__) { 41152 41153//! moment.js locale configuration 41154//! locale : Estonian [et] 41155//! author : Henry Kehlmann : https://github.com/madhenry 41156//! improvements : Illimar Tambek : https://github.com/ragulka 41157 41158;(function (global, factory) { 41159 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : 41160 undefined 41161}(this, (function (moment) { 'use strict'; 41162 41163 //! moment.js locale configuration 41164 41165 function processRelativeTime(number, withoutSuffix, key, isFuture) { 41166 var format = { 41167 s: ['mõne sekundi', 'mõni sekund', 'paar sekundit'], 41168 ss: [number + 'sekundi', number + 'sekundit'], 41169 m: ['ühe minuti', 'üks minut'], 41170 mm: [number + ' minuti', number + ' minutit'], 41171 h: ['ühe tunni', 'tund aega', 'üks tund'], 41172 hh: [number + ' tunni', number + ' tundi'], 41173 d: ['ühe päeva', 'üks päev'], 41174 M: ['kuu aja', 'kuu aega', 'üks kuu'], 41175 MM: [number + ' kuu', number + ' kuud'], 41176 y: ['ühe aasta', 'aasta', 'üks aasta'], 41177 yy: [number + ' aasta', number + ' aastat'], 41178 }; 41179 if (withoutSuffix) { 41180 return format[key][2] ? format[key][2] : format[key][1]; 41181 } 41182 return isFuture ? format[key][0] : format[key][1]; 41183 } 41184 41185 var et = moment.defineLocale('et', { 41186 months: 'jaanuar_veebruar_märts_aprill_mai_juuni_juuli_august_september_oktoober_november_detsember'.split( 41187 '_' 41188 ), 41189 monthsShort: 41190 'jaan_veebr_märts_apr_mai_juuni_juuli_aug_sept_okt_nov_dets'.split('_'), 41191 weekdays: 41192 'pühapäev_esmaspäev_teisipäev_kolmapäev_neljapäev_reede_laupäev'.split( 41193 '_' 41194 ), 41195 weekdaysShort: 'P_E_T_K_N_R_L'.split('_'), 41196 weekdaysMin: 'P_E_T_K_N_R_L'.split('_'), 41197 longDateFormat: { 41198 LT: 'H:mm', 41199 LTS: 'H:mm:ss', 41200 L: 'DD.MM.YYYY', 41201 LL: 'D. MMMM YYYY', 41202 LLL: 'D. MMMM YYYY H:mm', 41203 LLLL: 'dddd, D. MMMM YYYY H:mm', 41204 }, 41205 calendar: { 41206 sameDay: '[Täna,] LT', 41207 nextDay: '[Homme,] LT', 41208 nextWeek: '[Järgmine] dddd LT', 41209 lastDay: '[Eile,] LT', 41210 lastWeek: '[Eelmine] dddd LT', 41211 sameElse: 'L', 41212 }, 41213 relativeTime: { 41214 future: '%s pärast', 41215 past: '%s tagasi', 41216 s: processRelativeTime, 41217 ss: processRelativeTime, 41218 m: processRelativeTime, 41219 mm: processRelativeTime, 41220 h: processRelativeTime, 41221 hh: processRelativeTime, 41222 d: processRelativeTime, 41223 dd: '%d päeva', 41224 M: processRelativeTime, 41225 MM: processRelativeTime, 41226 y: processRelativeTime, 41227 yy: processRelativeTime, 41228 }, 41229 dayOfMonthOrdinalParse: /\d{1,2}\./, 41230 ordinal: '%d.', 41231 week: { 41232 dow: 1, // Monday is the first day of the week. 41233 doy: 4, // The week that contains Jan 4th is the first week of the year. 41234 }, 41235 }); 41236 41237 return et; 41238 41239}))); 41240 41241 41242/***/ }), 41243
vendor: 2,694 bytes, lines 41244-41328
41244/***/ "./node_modules/moment/locale/eu.js": 41245/*!******************************************!*\ 41246 !*** ./node_modules/moment/locale/eu.js ***! 41247 \******************************************/ 41248/*! no static exports found */ 41249/***/ (function(module, exports, __webpack_require__) { 41250 41251//! moment.js locale configuration 41252//! locale : Basque [eu] 41253//! author : Eneko Illarramendi : https://github.com/eillarra 41254 41255;(function (global, factory) { 41256 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : 41257 undefined 41258}(this, (function (moment) { 'use strict'; 41259 41260 //! moment.js locale configuration 41261 41262 var eu = moment.defineLocale('eu', { 41263 months: 'urtarrila_otsaila_martxoa_apirila_maiatza_ekaina_uztaila_abuztua_iraila_urria_azaroa_abendua'.split( 41264 '_' 41265 ), 41266 monthsShort: 41267 'urt._ots._mar._api._mai._eka._uzt._abu._ira._urr._aza._abe.'.split( 41268 '_' 41269 ), 41270 monthsParseExact: true, 41271 weekdays: 41272 'igandea_astelehena_asteartea_asteazkena_osteguna_ostirala_larunbata'.split( 41273 '_' 41274 ), 41275 weekdaysShort: 'ig._al._ar._az._og._ol._lr.'.split('_'), 41276 weekdaysMin: 'ig_al_ar_az_og_ol_lr'.split('_'), 41277 weekdaysParseExact: true, 41278 longDateFormat: { 41279 LT: 'HH:mm', 41280 LTS: 'HH:mm:ss', 41281 L: 'YYYY-MM-DD', 41282 LL: 'YYYY[ko] MMMM[ren] D[a]', 41283 LLL: 'YYYY[ko] MMMM[ren] D[a] HH:mm', 41284 LLLL: 'dddd, YYYY[ko] MMMM[ren] D[a] HH:mm', 41285 l: 'YYYY-M-D', 41286 ll: 'YYYY[ko] MMM D[a]', 41287 lll: 'YYYY[ko] MMM D[a] HH:mm', 41288 llll: 'ddd, YYYY[ko] MMM D[a] HH:mm', 41289 }, 41290 calendar: { 41291 sameDay: '[gaur] LT[etan]', 41292 nextDay: '[bihar] LT[etan]', 41293 nextWeek: 'dddd LT[etan]', 41294 lastDay: '[atzo] LT[etan]', 41295 lastWeek: '[aurreko] dddd LT[etan]', 41296 sameElse: 'L', 41297 }, 41298 relativeTime: { 41299 future: '%s barru', 41300 past: 'duela %s', 41301 s: 'segundo batzuk', 41302 ss: '%d segundo', 41303 m: 'minutu bat', 41304 mm: '%d minutu', 41305 h: 'ordu bat', 41306 hh: '%d ordu', 41307 d: 'egun bat', 41308 dd: '%d egun', 41309 M: 'hilabete bat', 41310 MM: '%d hilabete', 41311 y: 'urte bat', 41312 yy: '%d urte', 41313 }, 41314 dayOfMonthOrdinalParse: /\d{1,2}\./, 41315 ordinal: '%d.', 41316 week: { 41317 dow: 1, // Monday is the first day of the week. 41318 doy: 7, // The week that contains Jan 7th is the first week of the year. 41319 }, 41320 }); 41321 41322 return eu; 41323 41324}))); 41325 41326 41327/***/ }), 41328
vendor: 4,148 bytes, lines 41329-41461
41329/***/ "./node_modules/moment/locale/fa.js": 41330/*!******************************************!*\ 41331 !*** ./node_modules/moment/locale/fa.js ***! 41332 \******************************************/ 41333/*! no static exports found */ 41334/***/ (function(module, exports, __webpack_require__) { 41335 41336//! moment.js locale configuration 41337//! locale : Persian [fa] 41338//! author : Ebrahim Byagowi : https://github.com/ebraminio 41339 41340;(function (global, factory) { 41341 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : 41342 undefined 41343}(this, (function (moment) { 'use strict'; 41344 41345 //! moment.js locale configuration 41346 41347 var symbolMap = { 41348 1: 'Û±', 41349 2: 'Û²', 41350 3: 'Û³', 41351 4: 'Û´', 41352 5: 'Ûµ', 41353 6: 'Û¶', 41354 7: 'Û·', 41355 8: 'Û¸', 41356 9: 'Û¹', 41357 0: 'Û°', 41358 }, 41359 numberMap = { 41360 'Û±': '1', 41361 'Û²': '2', 41362 'Û³': '3', 41363 'Û´': '4', 41364 'Ûµ': '5', 41365 'Û¶': '6', 41366 'Û·': '7', 41367 'Û¸': '8', 41368 'Û¹': '9', 41369 'Û°': '0', 41370 }; 41371 41372 var fa = moment.defineLocale('fa', { 41373 months: 'ÚØ§ÙÙÛÙ_ÙÙØ±ÛÙ_٠ارس_Ø¢ÙØ±ÛÙ_Ù Ù_ÚÙØ¦Ù_ÚÙØ¦ÛÙ_Ø§ÙØª_سپتا٠بر_اکتبر_ÙÙØ§Ù بر_دسا٠بر'.split( 41374 '_' 41375 ), 41376 monthsShort: 41377 'ÚØ§ÙÙÛÙ_ÙÙØ±ÛÙ_٠ارس_Ø¢ÙØ±ÛÙ_Ù Ù_ÚÙØ¦Ù_ÚÙØ¦ÛÙ_Ø§ÙØª_سپتا٠بر_اکتبر_ÙÙØ§Ù بر_دسا٠بر'.split( 41378 '_' 41379 ), 41380 weekdays: 41381 'ÛÚ©\u200cØ´ÙØ¨Ù_Ø¯ÙØ´ÙبÙ_سÙ\u200cØ´ÙØ¨Ù_ÚÙØ§Ø±Ø´ÙبÙ_Ù¾ÙØ¬\u200cØ´ÙØ¨Ù_ج٠عÙ_Ø´ÙØ¨Ù'.split( 41382 '_' 41383 ), 41384 weekdaysShort: 41385 'ÛÚ©\u200cØ´ÙØ¨Ù_Ø¯ÙØ´ÙبÙ_سÙ\u200cØ´ÙØ¨Ù_ÚÙØ§Ø±Ø´ÙبÙ_Ù¾ÙØ¬\u200cØ´ÙØ¨Ù_ج٠عÙ_Ø´ÙØ¨Ù'.split( 41386 '_' 41387 ), 41388 weekdaysMin: 'Û_د_س_Ú_Ù¾_ج_Ø´'.split('_'), 41389 weekdaysParseExact: true, 41390 longDateFormat: { 41391 LT: 'HH:mm', 41392 LTS: 'HH:mm:ss', 41393 L: 'DD/MM/YYYY', 41394 LL: 'D MMMM YYYY', 41395 LLL: 'D MMMM YYYY HH:mm', 41396 LLLL: 'dddd, D MMMM YYYY HH:mm', 41397 }, 41398 meridiemParse: /ÙØ¨Ù از Ø¸ÙØ±|بعد از Ø¸ÙØ±/, 41399 isPM: function (input) { 41400 return /بعد از Ø¸ÙØ±/.test(input); 41401 }, 41402 meridiem: function (hour, minute, isLower) { 41403 if (hour < 12) { 41404 return 'ÙØ¨Ù از Ø¸ÙØ±'; 41405 } else { 41406 return 'بعد از Ø¸ÙØ±'; 41407 } 41408 }, 41409 calendar: { 41410 sameDay: '[Ø§Ù Ø±ÙØ² ساعت] LT', 41411 nextDay: '[ÙØ±Ø¯Ø§ ساعت] LT', 41412 nextWeek: 'dddd [ساعت] LT', 41413 lastDay: '[Ø¯ÛØ±Ùز ساعت] LT', 41414 lastWeek: 'dddd [Ù¾ÛØ´] [ساعت] LT', 41415 sameElse: 'L', 41416 }, 41417 relativeTime: { 41418 future: 'در %s', 41419 past: '%s Ù¾ÛØ´', 41420 s: 'ÚÙØ¯ ثاÙÛÙ', 41421 ss: '%d ثاÙÛÙ', 41422 m: 'ÛÚ© دÙÛÙÙ', 41423 mm: '%d دÙÛÙÙ', 41424 h: 'ÛÚ© ساعت', 41425 hh: '%d ساعت', 41426 d: 'ÛÚ© Ø±ÙØ²', 41427 dd: '%d Ø±ÙØ²', 41428 M: 'ÛÚ© ٠اÙ', 41429 MM: '%d ٠اÙ', 41430 y: 'ÛÚ© ساÙ', 41431 yy: '%d ساÙ', 41432 }, 41433 preparse: function (string) { 41434 return string 41435 .replace(/[Û°-Û¹]/g, function (match) { 41436 return numberMap[match]; 41437 }) 41438 .replace(/Ø/g, ','); 41439 }, 41440 postformat: function (string) { 41441 return string 41442 .replace(/\d/g, function (match) { 41443 return symbolMap[match]; 41444 }) 41445 .replace(/,/g, 'Ø'); 41446 }, 41447 dayOfMonthOrdinalParse: /\d{1,2}Ù /, 41448 ordinal: '%dÙ ', 41449 week: { 41450 dow: 6, // Saturday is the first day of the week. 41451 doy: 12, // The week that contains Jan 12th is the first week of the year. 41452 }, 41453 }); 41454 41455 return fa; 41456 41457}))); 41458 41459 41460/***/ }), 41461
vendor: 4,594 bytes, lines 41462-41605
41462/***/ "./node_modules/moment/locale/fi.js": 41463/*!******************************************!*\ 41464 !*** ./node_modules/moment/locale/fi.js ***! 41465 \******************************************/ 41466/*! no static exports found */ 41467/***/ (function(module, exports, __webpack_require__) { 41468 41469//! moment.js locale configuration 41470//! locale : Finnish [fi] 41471//! author : Tarmo Aidantausta : https://github.com/bleadof 41472 41473;(function (global, factory) { 41474 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : 41475 undefined 41476}(this, (function (moment) { 'use strict'; 41477 41478 //! moment.js locale configuration 41479 41480 var numbersPast = 41481 'nolla yksi kaksi kolme neljä viisi kuusi seitsemän kahdeksan yhdeksän'.split( 41482 ' ' 41483 ), 41484 numbersFuture = [ 41485 'nolla', 41486 'yhden', 41487 'kahden', 41488 'kolmen', 41489 'neljän', 41490 'viiden', 41491 'kuuden', 41492 numbersPast[7], 41493 numbersPast[8], 41494 numbersPast[9], 41495 ]; 41496 function translate(number, withoutSuffix, key, isFuture) { 41497 var result = ''; 41498 switch (key) { 41499 case 's': 41500 return isFuture ? 'muutaman sekunnin' : 'muutama sekunti'; 41501 case 'ss': 41502 result = isFuture ? 'sekunnin' : 'sekuntia'; 41503 break; 41504 case 'm': 41505 return isFuture ? 'minuutin' : 'minuutti'; 41506 case 'mm': 41507 result = isFuture ? 'minuutin' : 'minuuttia'; 41508 break; 41509 case 'h': 41510 return isFuture ? 'tunnin' : 'tunti'; 41511 case 'hh': 41512 result = isFuture ? 'tunnin' : 'tuntia'; 41513 break; 41514 case 'd': 41515 return isFuture ? 'päivän' : 'päivä'; 41516 case 'dd': 41517 result = isFuture ? 'päivän' : 'päivää'; 41518 break; 41519 case 'M': 41520 return isFuture ? 'kuukauden' : 'kuukausi'; 41521 case 'MM': 41522 result = isFuture ? 'kuukauden' : 'kuukautta'; 41523 break; 41524 case 'y': 41525 return isFuture ? 'vuoden' : 'vuosi'; 41526 case 'yy': 41527 result = isFuture ? 'vuoden' : 'vuotta'; 41528 break; 41529 } 41530 result = verbalNumber(number, isFuture) + ' ' + result; 41531 return result; 41532 } 41533 function verbalNumber(number, isFuture) { 41534 return number < 10 41535 ? isFuture 41536 ? numbersFuture[number] 41537 : numbersPast[number] 41538 : number; 41539 } 41540 41541 var fi = moment.defineLocale('fi', { 41542 months: 'tammikuu_helmikuu_maaliskuu_huhtikuu_toukokuu_kesäkuu_heinäkuu_elokuu_syyskuu_lokakuu_marraskuu_joulukuu'.split( 41543 '_' 41544 ), 41545 monthsShort: 41546 'tammi_helmi_maalis_huhti_touko_kesä_heinä_elo_syys_loka_marras_joulu'.split( 41547 '_' 41548 ), 41549 weekdays: 41550 'sunnuntai_maanantai_tiistai_keskiviikko_torstai_perjantai_lauantai'.split( 41551 '_' 41552 ), 41553 weekdaysShort: 'su_ma_ti_ke_to_pe_la'.split('_'), 41554 weekdaysMin: 'su_ma_ti_ke_to_pe_la'.split('_'), 41555 longDateFormat: { 41556 LT: 'HH.mm', 41557 LTS: 'HH.mm.ss', 41558 L: 'DD.MM.YYYY', 41559 LL: 'Do MMMM[ta] YYYY', 41560 LLL: 'Do MMMM[ta] YYYY, [klo] HH.mm', 41561 LLLL: 'dddd, Do MMMM[ta] YYYY, [klo] HH.mm', 41562 l: 'D.M.YYYY', 41563 ll: 'Do MMM YYYY', 41564 lll: 'Do MMM YYYY, [klo] HH.mm', 41565 llll: 'ddd, Do MMM YYYY, [klo] HH.mm', 41566 }, 41567 calendar: { 41568 sameDay: '[tänään] [klo] LT', 41569 nextDay: '[huomenna] [klo] LT', 41570 nextWeek: 'dddd [klo] LT', 41571 lastDay: '[eilen] [klo] LT', 41572 lastWeek: '[viime] dddd[na] [klo] LT', 41573 sameElse: 'L', 41574 }, 41575 relativeTime: { 41576 future: '%s päästä', 41577 past: '%s sitten', 41578 s: translate, 41579 ss: translate, 41580 m: translate, 41581 mm: translate, 41582 h: translate, 41583 hh: translate, 41584 d: translate, 41585 dd: translate, 41586 M: translate, 41587 MM: translate, 41588 y: translate, 41589 yy: translate, 41590 }, 41591 dayOfMonthOrdinalParse: /\d{1,2}\./, 41592 ordinal: '%d.', 41593 week: { 41594 dow: 1, // Monday is the first day of the week. 41595 doy: 4, // The week that contains Jan 4th is the first week of the year. 41596 }, 41597 }); 41598 41599 return fi; 41600 41601}))); 41602 41603 41604/***/ }), 41605
vendor: 2,480 bytes, lines 41606-41683
41606/***/ "./node_modules/moment/locale/fil.js": 41607/*!*******************************************!*\ 41608 !*** ./node_modules/moment/locale/fil.js ***! 41609 \*******************************************/ 41610/*! no static exports found */ 41611/***/ (function(module, exports, __webpack_require__) { 41612 41613//! moment.js locale configuration 41614//! locale : Filipino [fil] 41615//! author : Dan Hagman : https://github.com/hagmandan 41616//! author : Matthew Co : https://github.com/matthewdeeco 41617 41618;(function (global, factory) { 41619 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : 41620 undefined 41621}(this, (function (moment) { 'use strict'; 41622 41623 //! moment.js locale configuration 41624 41625 var fil = moment.defineLocale('fil', { 41626 months: 'Enero_Pebrero_Marso_Abril_Mayo_Hunyo_Hulyo_Agosto_Setyembre_Oktubre_Nobyembre_Disyembre'.split( 41627 '_' 41628 ), 41629 monthsShort: 'Ene_Peb_Mar_Abr_May_Hun_Hul_Ago_Set_Okt_Nob_Dis'.split('_'), 41630 weekdays: 'Linggo_Lunes_Martes_Miyerkules_Huwebes_Biyernes_Sabado'.split( 41631 '_' 41632 ), 41633 weekdaysShort: 'Lin_Lun_Mar_Miy_Huw_Biy_Sab'.split('_'), 41634 weekdaysMin: 'Li_Lu_Ma_Mi_Hu_Bi_Sab'.split('_'), 41635 longDateFormat: { 41636 LT: 'HH:mm', 41637 LTS: 'HH:mm:ss', 41638 L: 'MM/D/YYYY', 41639 LL: 'MMMM D, YYYY', 41640 LLL: 'MMMM D, YYYY HH:mm', 41641 LLLL: 'dddd, MMMM DD, YYYY HH:mm', 41642 }, 41643 calendar: { 41644 sameDay: 'LT [ngayong araw]', 41645 nextDay: '[Bukas ng] LT', 41646 nextWeek: 'LT [sa susunod na] dddd', 41647 lastDay: 'LT [kahapon]', 41648 lastWeek: 'LT [noong nakaraang] dddd', 41649 sameElse: 'L', 41650 }, 41651 relativeTime: { 41652 future: 'sa loob ng %s', 41653 past: '%s ang nakalipas', 41654 s: 'ilang segundo', 41655 ss: '%d segundo', 41656 m: 'isang minuto', 41657 mm: '%d minuto', 41658 h: 'isang oras', 41659 hh: '%d oras', 41660 d: 'isang araw', 41661 dd: '%d araw', 41662 M: 'isang buwan', 41663 MM: '%d buwan', 41664 y: 'isang taon', 41665 yy: '%d taon', 41666 }, 41667 dayOfMonthOrdinalParse: /\d{1,2}/, 41668 ordinal: function (number) { 41669 return number; 41670 }, 41671 week: { 41672 dow: 1, // Monday is the first day of the week. 41673 doy: 4, // The week that contains Jan 4th is the first week of the year. 41674 }, 41675 }); 41676 41677 return fil; 41678 41679}))); 41680 41681 41682/***/ }), 41683
vendor: 2,466 bytes, lines 41684-41760
41684/***/ "./node_modules/moment/locale/fo.js": 41685/*!******************************************!*\ 41686 !*** ./node_modules/moment/locale/fo.js ***! 41687 \******************************************/ 41688/*! no static exports found */ 41689/***/ (function(module, exports, __webpack_require__) { 41690 41691//! moment.js locale configuration 41692//! locale : Faroese [fo] 41693//! author : Ragnar Johannesen : https://github.com/ragnar123 41694//! author : Kristian Sakarisson : https://github.com/sakarisson 41695 41696;(function (global, factory) { 41697 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : 41698 undefined 41699}(this, (function (moment) { 'use strict'; 41700 41701 //! moment.js locale configuration 41702 41703 var fo = moment.defineLocale('fo', { 41704 months: 'januar_februar_mars_aprÃl_mai_juni_juli_august_september_oktober_november_desember'.split( 41705 '_' 41706 ), 41707 monthsShort: 'jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des'.split('_'), 41708 weekdays: 41709 'sunnudagur_mánadagur_týsdagur_mikudagur_hósdagur_frÃggjadagur_leygardagur'.split( 41710 '_' 41711 ), 41712 weekdaysShort: 'sun_mán_týs_mik_hós_frÃ_ley'.split('_'), 41713 weekdaysMin: 'su_má_tý_mi_hó_fr_le'.split('_'), 41714 longDateFormat: { 41715 LT: 'HH:mm', 41716 LTS: 'HH:mm:ss', 41717 L: 'DD/MM/YYYY', 41718 LL: 'D MMMM YYYY', 41719 LLL: 'D MMMM YYYY HH:mm', 41720 LLLL: 'dddd D. MMMM, YYYY HH:mm', 41721 }, 41722 calendar: { 41723 sameDay: '[à dag kl.] LT', 41724 nextDay: '[à morgin kl.] LT', 41725 nextWeek: 'dddd [kl.] LT', 41726 lastDay: '[à gjár kl.] LT', 41727 lastWeek: '[sÃðstu] dddd [kl] LT', 41728 sameElse: 'L', 41729 }, 41730 relativeTime: { 41731 future: 'um %s', 41732 past: '%s sÃðani', 41733 s: 'fá sekund', 41734 ss: '%d sekundir', 41735 m: 'ein minuttur', 41736 mm: '%d minuttir', 41737 h: 'ein tÃmi', 41738 hh: '%d tÃmar', 41739 d: 'ein dagur', 41740 dd: '%d dagar', 41741 M: 'ein mánaður', 41742 MM: '%d mánaðir', 41743 y: 'eitt ár', 41744 yy: '%d ár', 41745 }, 41746 dayOfMonthOrdinalParse: /\d{1,2}\./, 41747 ordinal: '%d.', 41748 week: { 41749 dow: 1, // Monday is the first day of the week. 41750 doy: 4, // The week that contains Jan 4th is the first week of the year. 41751 }, 41752 }); 41753 41754 return fo; 41755 41756}))); 41757 41758 41759/***/ }), 41760
vendor: 2,866 bytes, lines 41761-41850
41761/***/ "./node_modules/moment/locale/fr-ca.js": 41762/*!*********************************************!*\ 41763 !*** ./node_modules/moment/locale/fr-ca.js ***! 41764 \*********************************************/ 41765/*! no static exports found */ 41766/***/ (function(module, exports, __webpack_require__) { 41767 41768//! moment.js locale configuration 41769//! locale : French (Canada) [fr-ca] 41770//! author : Jonathan Abourbih : https://github.com/jonbca 41771 41772;(function (global, factory) { 41773 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : 41774 undefined 41775}(this, (function (moment) { 'use strict'; 41776 41777 //! moment.js locale configuration 41778 41779 var frCa = moment.defineLocale('fr-ca', { 41780 months: 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split( 41781 '_' 41782 ), 41783 monthsShort: 41784 'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split( 41785 '_' 41786 ), 41787 monthsParseExact: true, 41788 weekdays: 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'), 41789 weekdaysShort: 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'), 41790 weekdaysMin: 'di_lu_ma_me_je_ve_sa'.split('_'), 41791 weekdaysParseExact: true, 41792 longDateFormat: { 41793 LT: 'HH:mm', 41794 LTS: 'HH:mm:ss', 41795 L: 'YYYY-MM-DD', 41796 LL: 'D MMMM YYYY', 41797 LLL: 'D MMMM YYYY HH:mm', 41798 LLLL: 'dddd D MMMM YYYY HH:mm', 41799 }, 41800 calendar: { 41801 sameDay: '[Aujourdâhui à ] LT', 41802 nextDay: '[Demain à ] LT', 41803 nextWeek: 'dddd [à ] LT', 41804 lastDay: '[Hier à ] LT', 41805 lastWeek: 'dddd [dernier à ] LT', 41806 sameElse: 'L', 41807 }, 41808 relativeTime: { 41809 future: 'dans %s', 41810 past: 'il y a %s', 41811 s: 'quelques secondes', 41812 ss: '%d secondes', 41813 m: 'une minute', 41814 mm: '%d minutes', 41815 h: 'une heure', 41816 hh: '%d heures', 41817 d: 'un jour', 41818 dd: '%d jours', 41819 M: 'un mois', 41820 MM: '%d mois', 41821 y: 'un an', 41822 yy: '%d ans', 41823 }, 41824 dayOfMonthOrdinalParse: /\d{1,2}(er|e)/, 41825 ordinal: function (number, period) { 41826 switch (period) { 41827 // Words with masculine grammatical gender: mois, trimestre, jour 41828 default: 41829 case 'M': 41830 case 'Q': 41831 case 'D': 41832 case 'DDD': 41833 case 'd': 41834 return number + (number === 1 ? 'er' : 'e'); 41835 41836 // Words with feminine grammatical gender: semaine 41837 case 'w': 41838 case 'W': 41839 return number + (number === 1 ? 're' : 'e'); 41840 } 41841 }, 41842 }); 41843 41844 return frCa; 41845 41846}))); 41847 41848 41849/***/ }), 41850
vendor: 3,041 bytes, lines 41851-41944
41851/***/ "./node_modules/moment/locale/fr-ch.js": 41852/*!*********************************************!*\ 41853 !*** ./node_modules/moment/locale/fr-ch.js ***! 41854 \*********************************************/ 41855/*! no static exports found */ 41856/***/ (function(module, exports, __webpack_require__) { 41857 41858//! moment.js locale configuration 41859//! locale : French (Switzerland) [fr-ch] 41860//! author : Gaspard Bucher : https://github.com/gaspard 41861 41862;(function (global, factory) { 41863 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : 41864 undefined 41865}(this, (function (moment) { 'use strict'; 41866 41867 //! moment.js locale configuration 41868 41869 var frCh = moment.defineLocale('fr-ch', { 41870 months: 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split( 41871 '_' 41872 ), 41873 monthsShort: 41874 'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split( 41875 '_' 41876 ), 41877 monthsParseExact: true, 41878 weekdays: 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'), 41879 weekdaysShort: 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'), 41880 weekdaysMin: 'di_lu_ma_me_je_ve_sa'.split('_'), 41881 weekdaysParseExact: true, 41882 longDateFormat: { 41883 LT: 'HH:mm', 41884 LTS: 'HH:mm:ss', 41885 L: 'DD.MM.YYYY', 41886 LL: 'D MMMM YYYY', 41887 LLL: 'D MMMM YYYY HH:mm', 41888 LLLL: 'dddd D MMMM YYYY HH:mm', 41889 }, 41890 calendar: { 41891 sameDay: '[Aujourdâhui à ] LT', 41892 nextDay: '[Demain à ] LT', 41893 nextWeek: 'dddd [à ] LT', 41894 lastDay: '[Hier à ] LT', 41895 lastWeek: 'dddd [dernier à ] LT', 41896 sameElse: 'L', 41897 }, 41898 relativeTime: { 41899 future: 'dans %s', 41900 past: 'il y a %s', 41901 s: 'quelques secondes', 41902 ss: '%d secondes', 41903 m: 'une minute', 41904 mm: '%d minutes', 41905 h: 'une heure', 41906 hh: '%d heures', 41907 d: 'un jour', 41908 dd: '%d jours', 41909 M: 'un mois', 41910 MM: '%d mois', 41911 y: 'un an', 41912 yy: '%d ans', 41913 }, 41914 dayOfMonthOrdinalParse: /\d{1,2}(er|e)/, 41915 ordinal: function (number, period) { 41916 switch (period) { 41917 // Words with masculine grammatical gender: mois, trimestre, jour 41918 default: 41919 case 'M': 41920 case 'Q': 41921 case 'D': 41922 case 'DDD': 41923 case 'd': 41924 return number + (number === 1 ? 'er' : 'e'); 41925 41926 // Words with feminine grammatical gender: semaine 41927 case 'w': 41928 case 'W': 41929 return number + (number === 1 ? 're' : 'e'); 41930 } 41931 }, 41932 week: { 41933 dow: 1, // Monday is the first day of the week. 41934 doy: 4, // The week that contains Jan 4th is the first week of the year. 41935 }, 41936 }); 41937 41938 return frCh; 41939 41940}))); 41941 41942 41943/***/ }), 41944
vendor: 4,361 bytes, lines 41945-42072
41945/***/ "./node_modules/moment/locale/fr.js": 41946/*!******************************************!*\ 41947 !*** ./node_modules/moment/locale/fr.js ***! 41948 \******************************************/ 41949/*! no static exports found */ 41950/***/ (function(module, exports, __webpack_require__) { 41951 41952//! moment.js locale configuration 41953//! locale : French [fr] 41954//! author : John Fischer : https://github.com/jfroffice 41955 41956;(function (global, factory) { 41957 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : 41958 undefined 41959}(this, (function (moment) { 'use strict'; 41960 41961 //! moment.js locale configuration 41962 41963 var monthsStrictRegex = 41964 /^(janvier|février|mars|avril|mai|juin|juillet|août|septembre|octobre|novembre|décembre)/i, 41965 monthsShortStrictRegex = 41966 /(janv\.?|févr\.?|mars|avr\.?|mai|juin|juil\.?|août|sept\.?|oct\.?|nov\.?|déc\.?)/i, 41967 monthsRegex = 41968 /(janv\.?|févr\.?|mars|avr\.?|mai|juin|juil\.?|août|sept\.?|oct\.?|nov\.?|déc\.?|janvier|février|mars|avril|mai|juin|juillet|août|septembre|octobre|novembre|décembre)/i, 41969 monthsParse = [ 41970 /^janv/i, 41971 /^févr/i, 41972 /^mars/i, 41973 /^avr/i, 41974 /^mai/i, 41975 /^juin/i, 41976 /^juil/i, 41977 /^août/i, 41978 /^sept/i, 41979 /^oct/i, 41980 /^nov/i, 41981 /^déc/i, 41982 ]; 41983 41984 var fr = moment.defineLocale('fr', { 41985 months: 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split( 41986 '_' 41987 ), 41988 monthsShort: 41989 'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split( 41990 '_' 41991 ), 41992 monthsRegex: monthsRegex, 41993 monthsShortRegex: monthsRegex, 41994 monthsStrictRegex: monthsStrictRegex, 41995 monthsShortStrictRegex: monthsShortStrictRegex, 41996 monthsParse: monthsParse, 41997 longMonthsParse: monthsParse, 41998 shortMonthsParse: monthsParse, 41999 weekdays: 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'), 42000 weekdaysShort: 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'), 42001 weekdaysMin: 'di_lu_ma_me_je_ve_sa'.split('_'), 42002 weekdaysParseExact: true, 42003 longDateFormat: { 42004 LT: 'HH:mm', 42005 LTS: 'HH:mm:ss', 42006 L: 'DD/MM/YYYY', 42007 LL: 'D MMMM YYYY', 42008 LLL: 'D MMMM YYYY HH:mm', 42009 LLLL: 'dddd D MMMM YYYY HH:mm', 42010 }, 42011 calendar: { 42012 sameDay: '[Aujourdâhui à ] LT', 42013 nextDay: '[Demain à ] LT', 42014 nextWeek: 'dddd [à ] LT', 42015 lastDay: '[Hier à ] LT', 42016 lastWeek: 'dddd [dernier à ] LT', 42017 sameElse: 'L', 42018 }, 42019 relativeTime: { 42020 future: 'dans %s', 42021 past: 'il y a %s', 42022 s: 'quelques secondes', 42023 ss: '%d secondes', 42024 m: 'une minute', 42025 mm: '%d minutes', 42026 h: 'une heure', 42027 hh: '%d heures', 42028 d: 'un jour', 42029 dd: '%d jours', 42030 w: 'une semaine', 42031 ww: '%d semaines', 42032 M: 'un mois', 42033 MM: '%d mois', 42034 y: 'un an', 42035 yy: '%d ans', 42036 }, 42037 dayOfMonthOrdinalParse: /\d{1,2}(er|)/, 42038 ordinal: function (number, period) { 42039 switch (period) { 42040 // TODO: Return 'e' when day of month > 1. Move this case inside 42041 // block for masculine words below. 42042 // See https://github.com/moment/moment/issues/3375 42043 case 'D': 42044 return number + (number === 1 ? 'er' : ''); 42045 42046 // Words with masculine grammatical gender: mois, trimestre, jour 42047 default: 42048 case 'M': 42049 case 'Q': 42050 case 'DDD': 42051 case 'd': 42052 return number + (number === 1 ? 'er' : 'e'); 42053 42054 // Words with feminine grammatical gender: semaine 42055 case 'w': 42056 case 'W': 42057 return number + (number === 1 ? 're' : 'e'); 42058 } 42059 }, 42060 week: { 42061 dow: 1, // Monday is the first day of the week. 42062 doy: 4, // The week that contains Jan 4th is the first week of the year. 42063 }, 42064 }); 42065 42066 return fr; 42067 42068}))); 42069 42070 42071/***/ }), 42072
vendor: 3,041 bytes, lines 42073-42167
42073/***/ "./node_modules/moment/locale/fy.js": 42074/*!******************************************!*\ 42075 !*** ./node_modules/moment/locale/fy.js ***! 42076 \******************************************/ 42077/*! no static exports found */ 42078/***/ (function(module, exports, __webpack_require__) { 42079 42080//! moment.js locale configuration 42081//! locale : Frisian [fy] 42082//! author : Robin van der Vliet : https://github.com/robin0van0der0v 42083 42084;(function (global, factory) { 42085 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : 42086 undefined 42087}(this, (function (moment) { 'use strict'; 42088 42089 //! moment.js locale configuration 42090 42091 var monthsShortWithDots = 42092 'jan._feb._mrt._apr._mai_jun._jul._aug._sep._okt._nov._des.'.split('_'), 42093 monthsShortWithoutDots = 42094 'jan_feb_mrt_apr_mai_jun_jul_aug_sep_okt_nov_des'.split('_'); 42095 42096 var fy = moment.defineLocale('fy', { 42097 months: 'jannewaris_febrewaris_maart_april_maaie_juny_july_augustus_septimber_oktober_novimber_desimber'.split( 42098 '_' 42099 ), 42100 monthsShort: function (m, format) { 42101 if (!m) { 42102 return monthsShortWithDots; 42103 } else if (/-MMM-/.test(format)) { 42104 return monthsShortWithoutDots[m.month()]; 42105 } else { 42106 return monthsShortWithDots[m.month()]; 42107 } 42108 }, 42109 monthsParseExact: true, 42110 weekdays: 'snein_moandei_tiisdei_woansdei_tongersdei_freed_sneon'.split( 42111 '_' 42112 ), 42113 weekdaysShort: 'si._mo._ti._wo._to._fr._so.'.split('_'), 42114 weekdaysMin: 'Si_Mo_Ti_Wo_To_Fr_So'.split('_'), 42115 weekdaysParseExact: true, 42116 longDateFormat: { 42117 LT: 'HH:mm', 42118 LTS: 'HH:mm:ss', 42119 L: 'DD-MM-YYYY', 42120 LL: 'D MMMM YYYY', 42121 LLL: 'D MMMM YYYY HH:mm', 42122 LLLL: 'dddd D MMMM YYYY HH:mm', 42123 }, 42124 calendar: { 42125 sameDay: '[hjoed om] LT', 42126 nextDay: '[moarn om] LT', 42127 nextWeek: 'dddd [om] LT', 42128 lastDay: '[juster om] LT', 42129 lastWeek: '[ôfrûne] dddd [om] LT', 42130 sameElse: 'L', 42131 }, 42132 relativeTime: { 42133 future: 'oer %s', 42134 past: '%s lyn', 42135 s: 'in pear sekonden', 42136 ss: '%d sekonden', 42137 m: 'ien minút', 42138 mm: '%d minuten', 42139 h: 'ien oere', 42140 hh: '%d oeren', 42141 d: 'ien dei', 42142 dd: '%d dagen', 42143 M: 'ien moanne', 42144 MM: '%d moannen', 42145 y: 'ien jier', 42146 yy: '%d jierren', 42147 }, 42148 dayOfMonthOrdinalParse: /\d{1,2}(ste|de)/, 42149 ordinal: function (number) { 42150 return ( 42151 number + 42152 (number === 1 || number === 8 || number >= 20 ? 'ste' : 'de') 42153 ); 42154 }, 42155 week: { 42156 dow: 1, // Monday is the first day of the week. 42157 doy: 4, // The week that contains Jan 4th is the first week of the year. 42158 }, 42159 }); 42160 42161 return fy; 42162 42163}))); 42164 42165 42166/***/ }), 42167
vendor: 3,206 bytes, lines 42168-42282
42168/***/ "./node_modules/moment/locale/ga.js": 42169/*!******************************************!*\ 42170 !*** ./node_modules/moment/locale/ga.js ***! 42171 \******************************************/ 42172/*! no static exports found */ 42173/***/ (function(module, exports, __webpack_require__) { 42174 42175//! moment.js locale configuration 42176//! locale : Irish or Irish Gaelic [ga] 42177//! author : André Silva : https://github.com/askpt 42178 42179;(function (global, factory) { 42180 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : 42181 undefined 42182}(this, (function (moment) { 'use strict'; 42183 42184 //! moment.js locale configuration 42185 42186 var months = [ 42187 'Eanáir', 42188 'Feabhra', 42189 'Márta', 42190 'Aibreán', 42191 'Bealtaine', 42192 'Meitheamh', 42193 'Iúil', 42194 'Lúnasa', 42195 'Meán Fómhair', 42196 'Deireadh Fómhair', 42197 'Samhain', 42198 'Nollaig', 42199 ], 42200 monthsShort = [ 42201 'Ean', 42202 'Feabh', 42203 'Márt', 42204 'Aib', 42205 'Beal', 42206 'Meith', 42207 'Iúil', 42208 'Lún', 42209 'M.F.', 42210 'D.F.', 42211 'Samh', 42212 'Noll', 42213 ], 42214 weekdays = [ 42215 'Dé Domhnaigh', 42216 'Dé Luain', 42217 'Dé Máirt', 42218 'Dé Céadaoin', 42219 'Déardaoin', 42220 'Dé hAoine', 42221 'Dé Sathairn', 42222 ], 42223 weekdaysShort = ['Domh', 'Luan', 'Máirt', 'Céad', 'Déar', 'Aoine', 'Sath'], 42224 weekdaysMin = ['Do', 'Lu', 'Má', 'Cé', 'Dé', 'A', 'Sa']; 42225 42226 var ga = moment.defineLocale('ga', { 42227 months: months, 42228 monthsShort: monthsShort, 42229 monthsParseExact: true, 42230 weekdays: weekdays, 42231 weekdaysShort: weekdaysShort, 42232 weekdaysMin: weekdaysMin, 42233 longDateFormat: { 42234 LT: 'HH:mm', 42235 LTS: 'HH:mm:ss', 42236 L: 'DD/MM/YYYY', 42237 LL: 'D MMMM YYYY', 42238 LLL: 'D MMMM YYYY HH:mm', 42239 LLLL: 'dddd, D MMMM YYYY HH:mm', 42240 }, 42241 calendar: { 42242 sameDay: '[Inniu ag] LT', 42243 nextDay: '[Amárach ag] LT', 42244 nextWeek: 'dddd [ag] LT', 42245 lastDay: '[Inné ag] LT', 42246 lastWeek: 'dddd [seo caite] [ag] LT', 42247 sameElse: 'L', 42248 }, 42249 relativeTime: { 42250 future: 'i %s', 42251 past: '%s ó shin', 42252 s: 'cúpla soicind', 42253 ss: '%d soicind', 42254 m: 'nóiméad', 42255 mm: '%d nóiméad', 42256 h: 'uair an chloig', 42257 hh: '%d uair an chloig', 42258 d: 'lá', 42259 dd: '%d lá', 42260 M: 'mÃ', 42261 MM: '%d mÃonna', 42262 y: 'bliain', 42263 yy: '%d bliain', 42264 }, 42265 dayOfMonthOrdinalParse: /\d{1,2}(d|na|mh)/, 42266 ordinal: function (number) { 42267 var output = number === 1 ? 'd' : number % 10 === 2 ? 'na' : 'mh'; 42268 return number + output; 42269 }, 42270 week: { 42271 dow: 1, // Monday is the first day of the week. 42272 doy: 4, // The week that contains Jan 4th is the first week of the year. 42273 }, 42274 }); 42275 42276 return ga; 42277 42278}))); 42279 42280 42281/***/ }), 42282
vendor: 3,226 bytes, lines 42283-42397
42283/***/ "./node_modules/moment/locale/gd.js": 42284/*!******************************************!*\ 42285 !*** ./node_modules/moment/locale/gd.js ***! 42286 \******************************************/ 42287/*! no static exports found */ 42288/***/ (function(module, exports, __webpack_require__) { 42289 42290//! moment.js locale configuration 42291//! locale : Scottish Gaelic [gd] 42292//! author : Jon Ashdown : https://github.com/jonashdown 42293 42294;(function (global, factory) { 42295 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : 42296 undefined 42297}(this, (function (moment) { 'use strict'; 42298 42299 //! moment.js locale configuration 42300 42301 var months = [ 42302 'Am Faoilleach', 42303 'An Gearran', 42304 'Am Mà rt', 42305 'An Giblean', 42306 'An Cèitean', 42307 'An t-Ãgmhios', 42308 'An t-Iuchar', 42309 'An Lùnastal', 42310 'An t-Sultain', 42311 'An Dà mhair', 42312 'An t-Samhain', 42313 'An Dùbhlachd', 42314 ], 42315 monthsShort = [ 42316 'Faoi', 42317 'Gear', 42318 'Mà rt', 42319 'Gibl', 42320 'Cèit', 42321 'Ãgmh', 42322 'Iuch', 42323 'Lùn', 42324 'Sult', 42325 'Dà mh', 42326 'Samh', 42327 'Dùbh', 42328 ], 42329 weekdays = [ 42330 'Didòmhnaich', 42331 'Diluain', 42332 'Dimà irt', 42333 'Diciadain', 42334 'Diardaoin', 42335 'Dihaoine', 42336 'Disathairne', 42337 ], 42338 weekdaysShort = ['Did', 'Dil', 'Dim', 'Dic', 'Dia', 'Dih', 'Dis'], 42339 weekdaysMin = ['Dò', 'Lu', 'Mà ', 'Ci', 'Ar', 'Ha', 'Sa']; 42340 42341 var gd = moment.defineLocale('gd', { 42342 months: months, 42343 monthsShort: monthsShort, 42344 monthsParseExact: true, 42345 weekdays: weekdays, 42346 weekdaysShort: weekdaysShort, 42347 weekdaysMin: weekdaysMin, 42348 longDateFormat: { 42349 LT: 'HH:mm', 42350 LTS: 'HH:mm:ss', 42351 L: 'DD/MM/YYYY', 42352 LL: 'D MMMM YYYY', 42353 LLL: 'D MMMM YYYY HH:mm', 42354 LLLL: 'dddd, D MMMM YYYY HH:mm', 42355 }, 42356 calendar: { 42357 sameDay: '[An-diugh aig] LT', 42358 nextDay: '[A-mà ireach aig] LT', 42359 nextWeek: 'dddd [aig] LT', 42360 lastDay: '[An-dè aig] LT', 42361 lastWeek: 'dddd [seo chaidh] [aig] LT', 42362 sameElse: 'L', 42363 }, 42364 relativeTime: { 42365 future: 'ann an %s', 42366 past: 'bho chionn %s', 42367 s: 'beagan diogan', 42368 ss: '%d diogan', 42369 m: 'mionaid', 42370 mm: '%d mionaidean', 42371 h: 'uair', 42372 hh: '%d uairean', 42373 d: 'latha', 42374 dd: '%d latha', 42375 M: 'mìos', 42376 MM: '%d mìosan', 42377 y: 'bliadhna', 42378 yy: '%d bliadhna', 42379 }, 42380 dayOfMonthOrdinalParse: /\d{1,2}(d|na|mh)/, 42381 ordinal: function (number) { 42382 var output = number === 1 ? 'd' : number % 10 === 2 ? 'na' : 'mh'; 42383 return number + output; 42384 }, 42385 week: { 42386 dow: 1, // Monday is the first day of the week. 42387 doy: 4, // The week that contains Jan 4th is the first week of the year. 42388 }, 42389 }); 42390 42391 return gd; 42392 42393}))); 42394 42395 42396/***/ }), 42397
vendor: 3,117 bytes, lines 42398-42492
42398/***/ "./node_modules/moment/locale/gl.js": 42399/*!******************************************!*\ 42400 !*** ./node_modules/moment/locale/gl.js ***! 42401 \******************************************/ 42402/*! no static exports found */ 42403/***/ (function(module, exports, __webpack_require__) { 42404 42405//! moment.js locale configuration 42406//! locale : Galician [gl] 42407//! author : Juan G. Hurtado : https://github.com/juanghurtado 42408 42409;(function (global, factory) { 42410 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : 42411 undefined 42412}(this, (function (moment) { 'use strict'; 42413 42414 //! moment.js locale configuration 42415 42416 var gl = moment.defineLocale('gl', { 42417 months: 'xaneiro_febreiro_marzo_abril_maio_xuño_xullo_agosto_setembro_outubro_novembro_decembro'.split( 42418 '_' 42419 ), 42420 monthsShort: 42421 'xan._feb._mar._abr._mai._xuñ._xul._ago._set._out._nov._dec.'.split( 42422 '_' 42423 ), 42424 monthsParseExact: true, 42425 weekdays: 'domingo_luns_martes_mércores_xoves_venres_sábado'.split('_'), 42426 weekdaysShort: 'dom._lun._mar._mér._xov._ven._sáb.'.split('_'), 42427 weekdaysMin: 'do_lu_ma_mé_xo_ve_sá'.split('_'), 42428 weekdaysParseExact: true, 42429 longDateFormat: { 42430 LT: 'H:mm', 42431 LTS: 'H:mm:ss', 42432 L: 'DD/MM/YYYY', 42433 LL: 'D [de] MMMM [de] YYYY', 42434 LLL: 'D [de] MMMM [de] YYYY H:mm', 42435 LLLL: 'dddd, D [de] MMMM [de] YYYY H:mm', 42436 }, 42437 calendar: { 42438 sameDay: function () { 42439 return '[hoxe ' + (this.hours() !== 1 ? 'ás' : 'á') + '] LT'; 42440 }, 42441 nextDay: function () { 42442 return '[mañá ' + (this.hours() !== 1 ? 'ás' : 'á') + '] LT'; 42443 }, 42444 nextWeek: function () { 42445 return 'dddd [' + (this.hours() !== 1 ? 'ás' : 'a') + '] LT'; 42446 }, 42447 lastDay: function () { 42448 return '[onte ' + (this.hours() !== 1 ? 'á' : 'a') + '] LT'; 42449 }, 42450 lastWeek: function () { 42451 return ( 42452 '[o] dddd [pasado ' + (this.hours() !== 1 ? 'ás' : 'a') + '] LT' 42453 ); 42454 }, 42455 sameElse: 'L', 42456 }, 42457 relativeTime: { 42458 future: function (str) { 42459 if (str.indexOf('un') === 0) { 42460 return 'n' + str; 42461 } 42462 return 'en ' + str; 42463 }, 42464 past: 'hai %s', 42465 s: 'uns segundos', 42466 ss: '%d segundos', 42467 m: 'un minuto', 42468 mm: '%d minutos', 42469 h: 'unha hora', 42470 hh: '%d horas', 42471 d: 'un dÃa', 42472 dd: '%d dÃas', 42473 M: 'un mes', 42474 MM: '%d meses', 42475 y: 'un ano', 42476 yy: '%d anos', 42477 }, 42478 dayOfMonthOrdinalParse: /\d{1,2}º/, 42479 ordinal: '%dº', 42480 week: { 42481 dow: 1, // Monday is the first day of the week. 42482 doy: 4, // The week that contains Jan 4th is the first week of the year. 42483 }, 42484 }); 42485 42486 return gl; 42487 42488}))); 42489 42490 42491/***/ }), 42492
vendor: 6,510 bytes, lines 42493-42638
42493/***/ "./node_modules/moment/locale/gom-deva.js": 42494/*!************************************************!*\ 42495 !*** ./node_modules/moment/locale/gom-deva.js ***! 42496 \************************************************/ 42497/*! no static exports found */ 42498/***/ (function(module, exports, __webpack_require__) { 42499 42500//! moment.js locale configuration 42501//! locale : Konkani Devanagari script [gom-deva] 42502//! author : The Discoverer : https://github.com/WikiDiscoverer 42503 42504;(function (global, factory) { 42505 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : 42506 undefined 42507}(this, (function (moment) { 'use strict'; 42508 42509 //! moment.js locale configuration 42510 42511 function processRelativeTime(number, withoutSuffix, key, isFuture) { 42512 var format = { 42513 s: ['थà¥à¤¡à¤¯à¤¾ सॠà¤à¤à¤¡à¤¾à¤à¤¨à¥', 'थà¥à¤¡à¥ सॠà¤à¤à¤¡'], 42514 ss: [number + ' सॠà¤à¤à¤¡à¤¾à¤à¤¨à¥', number + ' सॠà¤à¤à¤¡'], 42515 m: ['à¤à¤à¤¾ मिणà¤à¤¾à¤¨', 'à¤à¤ मिनà¥à¤'], 42516 mm: [number + ' मिणà¤à¤¾à¤à¤¨à¥', number + ' मिणà¤à¤¾à¤'], 42517 h: ['à¤à¤à¤¾ वरान', 'à¤à¤ वर'], 42518 hh: [number + ' वराà¤à¤¨à¥', number + ' वराà¤'], 42519 d: ['à¤à¤à¤¾ दिसान', 'à¤à¤ दà¥à¤¸'], 42520 dd: [number + ' दिसाà¤à¤¨à¥', number + ' दà¥à¤¸'], 42521 M: ['à¤à¤à¤¾ मà¥à¤¹à¤¯à¤¨à¥à¤¯à¤¾à¤¨', 'à¤à¤ मà¥à¤¹à¤¯à¤¨à¥'], 42522 MM: [number + ' मà¥à¤¹à¤¯à¤¨à¥à¤¯à¤¾à¤¨à¥', number + ' मà¥à¤¹à¤¯à¤¨à¥'], 42523 y: ['à¤à¤à¤¾ वरà¥à¤¸à¤¾à¤¨', 'à¤à¤ वरà¥à¤¸'], 42524 yy: [number + ' वरà¥à¤¸à¤¾à¤à¤¨à¥', number + ' वरà¥à¤¸à¤¾à¤'], 42525 }; 42526 return isFuture ? format[key][0] : format[key][1]; 42527 } 42528 42529 var gomDeva = moment.defineLocale('gom-deva', { 42530 months: { 42531 standalone: 42532 'à¤à¤¾à¤¨à¥à¤µà¤¾à¤°à¥_फà¥à¤¬à¥à¤°à¥à¤µà¤¾à¤°à¥_मारà¥à¤_à¤à¤ªà¥à¤°à¥à¤²_मà¥_à¤à¥à¤¨_à¤à¥à¤²à¤¯_à¤à¤à¤¸à¥à¤_सपà¥à¤à¥à¤à¤¬à¤°_à¤à¤à¥à¤à¥à¤¬à¤°_नà¥à¤µà¥à¤¹à¥à¤à¤¬à¤°_डिसà¥à¤à¤¬à¤°'.split( 42533 '_' 42534 ), 42535 format: 'à¤à¤¾à¤¨à¥à¤µà¤¾à¤°à¥à¤à¥à¤¯à¤¾_फà¥à¤¬à¥à¤°à¥à¤µà¤¾à¤°à¥à¤à¥à¤¯à¤¾_मारà¥à¤à¤¾à¤à¥à¤¯à¤¾_à¤à¤ªà¥à¤°à¥à¤²à¤¾à¤à¥à¤¯à¤¾_मà¥à¤¯à¤¾à¤à¥à¤¯à¤¾_à¤à¥à¤¨à¤¾à¤à¥à¤¯à¤¾_à¤à¥à¤²à¤¯à¤¾à¤à¥à¤¯à¤¾_à¤à¤à¤¸à¥à¤à¤¾à¤à¥à¤¯à¤¾_सपà¥à¤à¥à¤à¤¬à¤°à¤¾à¤à¥à¤¯à¤¾_à¤à¤à¥à¤à¥à¤¬à¤°à¤¾à¤à¥à¤¯à¤¾_नà¥à¤µà¥à¤¹à¥à¤à¤¬à¤°à¤¾à¤à¥à¤¯à¤¾_डिसà¥à¤à¤¬à¤°à¤¾à¤à¥à¤¯à¤¾'.split( 42536 '_' 42537 ), 42538 isFormat: /MMMM(\s)+D[oD]?/, 42539 }, 42540 monthsShort: 42541 'à¤à¤¾à¤¨à¥._फà¥à¤¬à¥à¤°à¥._मारà¥à¤_à¤à¤ªà¥à¤°à¥._मà¥_à¤à¥à¤¨_à¤à¥à¤²._à¤à¤._सपà¥à¤à¥à¤._à¤à¤à¥à¤à¥._नà¥à¤µà¥à¤¹à¥à¤._डिसà¥à¤.'.split( 42542 '_' 42543 ), 42544 monthsParseExact: true, 42545 weekdays: 'à¤à¤¯à¤¤à¤¾à¤°_सà¥à¤®à¤¾à¤°_मà¤à¤à¤³à¤¾à¤°_बà¥à¤§à¤µà¤¾à¤°_बिरà¥à¤¸à¥à¤¤à¤¾à¤°_सà¥à¤à¥à¤°à¤¾à¤°_शà¥à¤¨à¤µà¤¾à¤°'.split('_'), 42546 weekdaysShort: 'à¤à¤¯à¤¤._सà¥à¤®._मà¤à¤à¤³._बà¥à¤§._बà¥à¤°à¥à¤¸à¥à¤¤._सà¥à¤à¥à¤°._शà¥à¤¨.'.split('_'), 42547 weekdaysMin: 'à¤_सà¥_मà¤_बà¥_बà¥à¤°à¥_सà¥_शà¥'.split('_'), 42548 weekdaysParseExact: true, 42549 longDateFormat: { 42550 LT: 'A h:mm [वाà¤à¤¤à¤¾à¤]', 42551 LTS: 'A h:mm:ss [वाà¤à¤¤à¤¾à¤]', 42552 L: 'DD-MM-YYYY', 42553 LL: 'D MMMM YYYY', 42554 LLL: 'D MMMM YYYY A h:mm [वाà¤à¤¤à¤¾à¤]', 42555 LLLL: 'dddd, MMMM Do, YYYY, A h:mm [वाà¤à¤¤à¤¾à¤]', 42556 llll: 'ddd, D MMM YYYY, A h:mm [वाà¤à¤¤à¤¾à¤]', 42557 }, 42558 calendar: { 42559 sameDay: '[à¤à¤¯à¤] LT', 42560 nextDay: '[फालà¥à¤¯à¤¾à¤] LT', 42561 nextWeek: '[फà¥à¤¡à¤²à¥] dddd[,] LT', 42562 lastDay: '[à¤à¤¾à¤²] LT', 42563 lastWeek: '[फाà¤à¤²à¥] dddd[,] LT', 42564 sameElse: 'L', 42565 }, 42566 relativeTime: { 42567 future: '%s', 42568 past: '%s à¤à¤¦à¥à¤', 42569 s: processRelativeTime, 42570 ss: processRelativeTime, 42571 m: processRelativeTime, 42572 mm: processRelativeTime, 42573 h: processRelativeTime, 42574 hh: processRelativeTime, 42575 d: processRelativeTime, 42576 dd: processRelativeTime, 42577 M: processRelativeTime, 42578 MM: processRelativeTime, 42579 y: processRelativeTime, 42580 yy: processRelativeTime, 42581 }, 42582 dayOfMonthOrdinalParse: /\d{1,2}(वà¥à¤°)/, 42583 ordinal: function (number, period) { 42584 switch (period) { 42585 // the ordinal 'वà¥à¤°' only applies to day of the month 42586 case 'D': 42587 return number + 'वà¥à¤°'; 42588 default: 42589 case 'M': 42590 case 'Q': 42591 case 'DDD': 42592 case 'd': 42593 case 'w': 42594 case 'W': 42595 return number; 42596 } 42597 }, 42598 week: { 42599 dow: 0, // Sunday is the first day of the week 42600 doy: 3, // The week that contains Jan 4th is the first week of the year (7 + 0 - 4) 42601 }, 42602 meridiemParse: /रातà¥|सà¤à¤¾à¤³à¥à¤|दनपाराà¤|साà¤à¤à¥/, 42603 meridiemHour: function (hour, meridiem) { 42604 if (hour === 12) { 42605 hour = 0; 42606 } 42607 if (meridiem === 'रातà¥') { 42608 return hour < 4 ? hour : hour + 12; 42609 } else if (meridiem === 'सà¤à¤¾à¤³à¥à¤') { 42610 return hour; 42611 } else if (meridiem === 'दनपाराà¤') { 42612 return hour > 12 ? hour : hour + 12; 42613 } else if (meridiem === 'साà¤à¤à¥') { 42614 return hour + 12; 42615 } 42616 }, 42617 meridiem: function (hour, minute, isLower) { 42618 if (hour < 4) { 42619 return 'रातà¥'; 42620 } else if (hour < 12) { 42621 return 'सà¤à¤¾à¤³à¥à¤'; 42622 } else if (hour < 16) { 42623 return 'दनपाराà¤'; 42624 } else if (hour < 20) { 42625 return 'साà¤à¤à¥'; 42626 } else { 42627 return 'रातà¥'; 42628 } 42629 }, 42630 }); 42631 42632 return gomDeva; 42633 42634}))); 42635 42636 42637/***/ }), 42638
vendor: 5,126 bytes, lines 42639-42782
42639/***/ "./node_modules/moment/locale/gom-latn.js": 42640/*!************************************************!*\ 42641 !*** ./node_modules/moment/locale/gom-latn.js ***! 42642 \************************************************/ 42643/*! no static exports found */ 42644/***/ (function(module, exports, __webpack_require__) { 42645 42646//! moment.js locale configuration 42647//! locale : Konkani Latin script [gom-latn] 42648//! author : The Discoverer : https://github.com/WikiDiscoverer 42649 42650;(function (global, factory) { 42651 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : 42652 undefined 42653}(this, (function (moment) { 'use strict'; 42654 42655 //! moment.js locale configuration 42656 42657 function processRelativeTime(number, withoutSuffix, key, isFuture) { 42658 var format = { 42659 s: ['thoddea sekondamni', 'thodde sekond'], 42660 ss: [number + ' sekondamni', number + ' sekond'], 42661 m: ['eka mintan', 'ek minut'], 42662 mm: [number + ' mintamni', number + ' mintam'], 42663 h: ['eka voran', 'ek vor'], 42664 hh: [number + ' voramni', number + ' voram'], 42665 d: ['eka disan', 'ek dis'], 42666 dd: [number + ' disamni', number + ' dis'], 42667 M: ['eka mhoinean', 'ek mhoino'], 42668 MM: [number + ' mhoineamni', number + ' mhoine'], 42669 y: ['eka vorsan', 'ek voros'], 42670 yy: [number + ' vorsamni', number + ' vorsam'], 42671 }; 42672 return isFuture ? format[key][0] : format[key][1]; 42673 } 42674 42675 var gomLatn = moment.defineLocale('gom-latn', { 42676 months: { 42677 standalone: 42678 'Janer_Febrer_Mars_Abril_Mai_Jun_Julai_Agost_Setembr_Otubr_Novembr_Dezembr'.split( 42679 '_' 42680 ), 42681 format: 'Janerachea_Febrerachea_Marsachea_Abrilachea_Maiachea_Junachea_Julaiachea_Agostachea_Setembrachea_Otubrachea_Novembrachea_Dezembrachea'.split( 42682 '_' 42683 ), 42684 isFormat: /MMMM(\s)+D[oD]?/, 42685 }, 42686 monthsShort: 42687 'Jan._Feb._Mars_Abr._Mai_Jun_Jul._Ago._Set._Otu._Nov._Dez.'.split('_'), 42688 monthsParseExact: true, 42689 weekdays: "Aitar_Somar_Mongllar_Budhvar_Birestar_Sukrar_Son'var".split('_'), 42690 weekdaysShort: 'Ait._Som._Mon._Bud._Bre._Suk._Son.'.split('_'), 42691 weekdaysMin: 'Ai_Sm_Mo_Bu_Br_Su_Sn'.split('_'), 42692 weekdaysParseExact: true, 42693 longDateFormat: { 42694 LT: 'A h:mm [vazta]', 42695 LTS: 'A h:mm:ss [vazta]', 42696 L: 'DD-MM-YYYY', 42697 LL: 'D MMMM YYYY', 42698 LLL: 'D MMMM YYYY A h:mm [vazta]', 42699 LLLL: 'dddd, MMMM Do, YYYY, A h:mm [vazta]', 42700 llll: 'ddd, D MMM YYYY, A h:mm [vazta]', 42701 }, 42702 calendar: { 42703 sameDay: '[Aiz] LT', 42704 nextDay: '[Faleam] LT', 42705 nextWeek: '[Fuddlo] dddd[,] LT', 42706 lastDay: '[Kal] LT', 42707 lastWeek: '[Fattlo] dddd[,] LT', 42708 sameElse: 'L', 42709 }, 42710 relativeTime: { 42711 future: '%s', 42712 past: '%s adim', 42713 s: processRelativeTime, 42714 ss: processRelativeTime, 42715 m: processRelativeTime, 42716 mm: processRelativeTime, 42717 h: processRelativeTime, 42718 hh: processRelativeTime, 42719 d: processRelativeTime, 42720 dd: processRelativeTime, 42721 M: processRelativeTime, 42722 MM: processRelativeTime, 42723 y: processRelativeTime, 42724 yy: processRelativeTime, 42725 }, 42726 dayOfMonthOrdinalParse: /\d{1,2}(er)/, 42727 ordinal: function (number, period) { 42728 switch (period) { 42729 // the ordinal 'er' only applies to day of the month 42730 case 'D': 42731 return number + 'er'; 42732 default: 42733 case 'M': 42734 case 'Q': 42735 case 'DDD': 42736 case 'd': 42737 case 'w': 42738 case 'W': 42739 return number; 42740 } 42741 }, 42742 week: { 42743 dow: 0, // Sunday is the first day of the week 42744 doy: 3, // The week that contains Jan 4th is the first week of the year (7 + 0 - 4) 42745 }, 42746 meridiemParse: /rati|sokallim|donparam|sanje/, 42747 meridiemHour: function (hour, meridiem) { 42748 if (hour === 12) { 42749 hour = 0; 42750 } 42751 if (meridiem === 'rati') { 42752 return hour < 4 ? hour : hour + 12; 42753 } else if (meridiem === 'sokallim') { 42754 return hour; 42755 } else if (meridiem === 'donparam') { 42756 return hour > 12 ? hour : hour + 12; 42757 } else if (meridiem === 'sanje') { 42758 return hour + 12; 42759 } 42760 }, 42761 meridiem: function (hour, minute, isLower) { 42762 if (hour < 4) { 42763 return 'rati'; 42764 } else if (hour < 12) { 42765 return 'sokallim'; 42766 } else if (hour < 16) { 42767 return 'donparam'; 42768 } else if (hour < 20) { 42769 return 'sanje'; 42770 } else { 42771 return 'rati'; 42772 } 42773 }, 42774 }); 42775 42776 return gomLatn; 42777 42778}))); 42779 42780 42781/***/ }), 42782
vendor: 5,086 bytes, lines 42783-42924
42783/***/ "./node_modules/moment/locale/gu.js": 42784/*!******************************************!*\ 42785 !*** ./node_modules/moment/locale/gu.js ***! 42786 \******************************************/ 42787/*! no static exports found */ 42788/***/ (function(module, exports, __webpack_require__) { 42789 42790//! moment.js locale configuration 42791//! locale : Gujarati [gu] 42792//! author : Kaushik Thanki : https://github.com/Kaushik1987 42793 42794;(function (global, factory) { 42795 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : 42796 undefined 42797}(this, (function (moment) { 'use strict'; 42798 42799 //! moment.js locale configuration 42800 42801 var symbolMap = { 42802 1: 'à«§', 42803 2: '૨', 42804 3: 'à«©', 42805 4: '૪', 42806 5: 'à««', 42807 6: '૬', 42808 7: 'à«', 42809 8: 'à«®', 42810 9: '૯', 42811 0: '૦', 42812 }, 42813 numberMap = { 42814 'à«§': '1', 42815 '૨': '2', 42816 'à«©': '3', 42817 '૪': '4', 42818 'à««': '5', 42819 '૬': '6', 42820 'à«': '7', 42821 'à«®': '8', 42822 '૯': '9', 42823 '૦': '0', 42824 }; 42825 42826 var gu = moment.defineLocale('gu', { 42827 months: 'àªàª¾àª¨à«àª¯à«àªàª°à«_ફà«àª¬à«àª°à«àªàª°à«_મારà«àª_àªàªªà«àª°àª¿àª²_મà«_àªà«àª¨_àªà«àª²àª¾àª_àªàªàª¸à«àª_સપà«àªà«àª®à«àª¬àª°_àªàªà«àªà«àª¬àª°_નવà«àª®à«àª¬àª°_ડિસà«àª®à«àª¬àª°'.split( 42828 '_' 42829 ), 42830 monthsShort: 42831 'àªàª¾àª¨à«àª¯à«._ફà«àª¬à«àª°à«._મારà«àª_àªàªªà«àª°àª¿._મà«_àªà«àª¨_àªà«àª²àª¾._àªàª._સપà«àªà«._àªàªà«àªà«._નવà«._ડિસà«.'.split( 42832 '_' 42833 ), 42834 monthsParseExact: true, 42835 weekdays: 'રવિવાર_સà«àª®àªµàª¾àª°_મàªàªàª³àªµàª¾àª°_બà«àª§à«àªµàª¾àª°_àªà«àª°à«àªµàª¾àª°_શà«àªà«àª°àªµàª¾àª°_શનિવાર'.split( 42836 '_' 42837 ), 42838 weekdaysShort: 'રવિ_સà«àª®_મàªàªàª³_બà«àª§à«_àªà«àª°à«_શà«àªà«àª°_શનિ'.split('_'), 42839 weekdaysMin: 'ર_સà«_મàª_બà«_àªà«_શà«_શ'.split('_'), 42840 longDateFormat: { 42841 LT: 'A h:mm વાàªà«àª¯à«', 42842 LTS: 'A h:mm:ss વાàªà«àª¯à«', 42843 L: 'DD/MM/YYYY', 42844 LL: 'D MMMM YYYY', 42845 LLL: 'D MMMM YYYY, A h:mm વાàªà«àª¯à«', 42846 LLLL: 'dddd, D MMMM YYYY, A h:mm વાàªà«àª¯à«', 42847 }, 42848 calendar: { 42849 sameDay: '[àªàª] LT', 42850 nextDay: '[àªàª¾àª²à«] LT', 42851 nextWeek: 'dddd, LT', 42852 lastDay: '[àªàªàªàª¾àª²à«] LT', 42853 lastWeek: '[પાàªàª²àª¾] dddd, LT', 42854 sameElse: 'L', 42855 }, 42856 relativeTime: { 42857 future: '%s મા', 42858 past: '%s પહà«àª²àª¾', 42859 s: 'ઠમà«àª પળà«', 42860 ss: '%d સà«àªàªàª¡', 42861 m: 'àªàª મિનિàª', 42862 mm: '%d મિનિàª', 42863 h: 'àªàª àªàª²àª¾àª', 42864 hh: '%d àªàª²àª¾àª', 42865 d: 'àªàª દિવસ', 42866 dd: '%d દિવસ', 42867 M: 'àªàª મહિનà«', 42868 MM: '%d મહિનà«', 42869 y: 'àªàª વરà«àª·', 42870 yy: '%d વરà«àª·', 42871 }, 42872 preparse: function (string) { 42873 return string.replace(/[૧૨૩૪૫૬à«à«®à«¯à«¦]/g, function (match) { 42874 return numberMap[match]; 42875 }); 42876 }, 42877 postformat: function (string) { 42878 return string.replace(/\d/g, function (match) { 42879 return symbolMap[match]; 42880 }); 42881 }, 42882 // Gujarati notation for meridiems are quite fuzzy in practice. While there exists 42883 // a rigid notion of a 'Pahar' it is not used as rigidly in modern Gujarati. 42884 meridiemParse: /રાત|બપà«àª°|સવાર|સાàªàª/, 42885 meridiemHour: function (hour, meridiem) { 42886 if (hour === 12) { 42887 hour = 0; 42888 } 42889 if (meridiem === 'રાત') { 42890 return hour < 4 ? hour : hour + 12; 42891 } else if (meridiem === 'સવાર') { 42892 return hour; 42893 } else if (meridiem === 'બપà«àª°') { 42894 return hour >= 10 ? hour : hour + 12; 42895 } else if (meridiem === 'સાàªàª') { 42896 return hour + 12; 42897 } 42898 }, 42899 meridiem: function (hour, minute, isLower) { 42900 if (hour < 4) { 42901 return 'રાત'; 42902 } else if (hour < 10) { 42903 return 'સવાર'; 42904 } else if (hour < 17) { 42905 return 'બપà«àª°'; 42906 } else if (hour < 20) { 42907 return 'સાàªàª'; 42908 } else { 42909 return 'રાત'; 42910 } 42911 }, 42912 week: { 42913 dow: 0, // Sunday is the first day of the week. 42914 doy: 6, // The week that contains Jan 6th is the first week of the year. 42915 }, 42916 }); 42917 42918 return gu; 42919 42920}))); 42921 42922 42923/***/ }), 42924
vendor: 4,049 bytes, lines 42925-43038
42925/***/ "./node_modules/moment/locale/he.js": 42926/*!******************************************!*\ 42927 !*** ./node_modules/moment/locale/he.js ***! 42928 \******************************************/ 42929/*! no static exports found */ 42930/***/ (function(module, exports, __webpack_require__) { 42931 42932//! moment.js locale configuration 42933//! locale : Hebrew [he] 42934//! author : Tomer Cohen : https://github.com/tomer 42935//! author : Moshe Simantov : https://github.com/DevelopmentIL 42936//! author : Tal Ater : https://github.com/TalAter 42937 42938;(function (global, factory) { 42939 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : 42940 undefined 42941}(this, (function (moment) { 'use strict'; 42942 42943 //! moment.js locale configuration 42944 42945 var he = moment.defineLocale('he', { 42946 months: '×× ××ר_פ×ר××ר_×רץ_×פר××_×××_××× ×_××××_××××ס×_ספ×××ר_×××§×××ר_× ××××ר_×צ××ר'.split( 42947 '_' 42948 ), 42949 monthsShort: 42950 '×× ×׳_פ×ר׳_×רץ_×פר׳_×××_××× ×_××××_×××׳_ספ×׳_××ק׳_× ××׳_×צ×׳'.split('_'), 42951 weekdays: 'ר×ש××_×©× ×_ש××ש×_ר×××¢×_×××ש×_ש×ש×_ש×ת'.split('_'), 42952 weekdaysShort: '×׳_×׳_×׳_×׳_×׳_×׳_ש׳'.split('_'), 42953 weekdaysMin: '×_×_×_×_×_×_ש'.split('_'), 42954 longDateFormat: { 42955 LT: 'HH:mm', 42956 LTS: 'HH:mm:ss', 42957 L: 'DD/MM/YYYY', 42958 LL: 'D [×]MMMM YYYY', 42959 LLL: 'D [×]MMMM YYYY HH:mm', 42960 LLLL: 'dddd, D [×]MMMM YYYY HH:mm', 42961 l: 'D/M/YYYY', 42962 ll: 'D MMM YYYY', 42963 lll: 'D MMM YYYY HH:mm', 42964 llll: 'ddd, D MMM YYYY HH:mm', 42965 }, 42966 calendar: { 42967 sameDay: '[×××× ×Ö¾]LT', 42968 nextDay: '[××ר ×Ö¾]LT', 42969 nextWeek: 'dddd [×שע×] LT', 42970 lastDay: '[×ת××× ×Ö¾]LT', 42971 lastWeek: '[××××] dddd [×××ר×× ×שע×] LT', 42972 sameElse: 'L', 42973 }, 42974 relativeTime: { 42975 future: '××¢×× %s', 42976 past: '××¤× × %s', 42977 s: '×ספר ×©× ××ת', 42978 ss: '%d ×©× ××ת', 42979 m: '××§×', 42980 mm: '%d ××§×ת', 42981 h: 'שע×', 42982 hh: function (number) { 42983 if (number === 2) { 42984 return 'שעת×××'; 42985 } 42986 return number + ' שע×ת'; 42987 }, 42988 d: '×××', 42989 dd: function (number) { 42990 if (number === 2) { 42991 return '××××××'; 42992 } 42993 return number + ' ××××'; 42994 }, 42995 M: '×××ש', 42996 MM: function (number) { 42997 if (number === 2) { 42998 return '×××ש×××'; 42999 } 43000 return number + ' ×××ש××'; 43001 }, 43002 y: '×©× ×', 43003 yy: function (number) { 43004 if (number === 2) { 43005 return '×©× ×ª×××'; 43006 } else if (number % 10 === 0 && number !== 10) { 43007 return number + ' ×©× ×'; 43008 } 43009 return number + ' ×©× ××'; 43010 }, 43011 }, 43012 meridiemParse: 43013 /×××"צ|××¤× ×"צ|×××¨× ×צ×ר×××|××¤× × ×צ×ר×××|××¤× ×ת ××קר|×××קר|×ער×/i, 43014 isPM: function (input) { 43015 return /^(×××"צ|×××¨× ×צ×ר×××|×ער×)$/.test(input); 43016 }, 43017 meridiem: function (hour, minute, isLower) { 43018 if (hour < 5) { 43019 return '××¤× ×ת ××קר'; 43020 } else if (hour < 10) { 43021 return '×××קר'; 43022 } else if (hour < 12) { 43023 return isLower ? '××¤× ×"צ' : '××¤× × ×צ×ר×××'; 43024 } else if (hour < 18) { 43025 return isLower ? '×××"צ' : '×××¨× ×צ×ר×××'; 43026 } else { 43027 return '×ער×'; 43028 } 43029 }, 43030 }); 43031 43032 return he; 43033 43034}))); 43035 43036 43037/***/ }), 43038
vendor: 7,535 bytes, lines 43039-43226
43039/***/ "./node_modules/moment/locale/hi.js": 43040/*!******************************************!*\ 43041 !*** ./node_modules/moment/locale/hi.js ***! 43042 \******************************************/ 43043/*! no static exports found */ 43044/***/ (function(module, exports, __webpack_require__) { 43045 43046//! moment.js locale configuration 43047//! locale : Hindi [hi] 43048//! author : Mayank Singhal : https://github.com/mayanksinghal 43049 43050;(function (global, factory) { 43051 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : 43052 undefined 43053}(this, (function (moment) { 'use strict'; 43054 43055 //! moment.js locale configuration 43056 43057 var symbolMap = { 43058 1: '१', 43059 2: '२', 43060 3: '३', 43061 4: '४', 43062 5: '५', 43063 6: '६', 43064 7: 'à¥', 43065 8: '८', 43066 9: '९', 43067 0: '०', 43068 }, 43069 numberMap = { 43070 '१': '1', 43071 '२': '2', 43072 '३': '3', 43073 '४': '4', 43074 '५': '5', 43075 '६': '6', 43076 'à¥': '7', 43077 '८': '8', 43078 '९': '9', 43079 '०': '0', 43080 }, 43081 monthsParse = [ 43082 /^à¤à¤¨/i, 43083 /^फ़र|फर/i, 43084 /^मारà¥à¤/i, 43085 /^ठपà¥à¤°à¥/i, 43086 /^मà¤/i, 43087 /^à¤à¥à¤¨/i, 43088 /^à¤à¥à¤²/i, 43089 /^ठà¤/i, 43090 /^सितà¤|सित/i, 43091 /^ठà¤à¥à¤à¥/i, 43092 /^नव|नवà¤/i, 43093 /^दिसà¤|दिस/i, 43094 ], 43095 shortMonthsParse = [ 43096 /^à¤à¤¨/i, 43097 /^फ़र/i, 43098 /^मारà¥à¤/i, 43099 /^ठपà¥à¤°à¥/i, 43100 /^मà¤/i, 43101 /^à¤à¥à¤¨/i, 43102 /^à¤à¥à¤²/i, 43103 /^ठà¤/i, 43104 /^सित/i, 43105 /^ठà¤à¥à¤à¥/i, 43106 /^नव/i, 43107 /^दिस/i, 43108 ]; 43109 43110 var hi = moment.defineLocale('hi', { 43111 months: { 43112 format: 'à¤à¤¨à¤µà¤°à¥_फ़रवरà¥_मारà¥à¤_ठपà¥à¤°à¥à¤²_मà¤_à¤à¥à¤¨_à¤à¥à¤²à¤¾à¤_ठà¤à¤¸à¥à¤¤_सितमà¥à¤¬à¤°_ठà¤à¥à¤à¥à¤¬à¤°_नवमà¥à¤¬à¤°_दिसमà¥à¤¬à¤°'.split( 43113 '_' 43114 ), 43115 standalone: 43116 'à¤à¤¨à¤µà¤°à¥_फरवरà¥_मारà¥à¤_ठपà¥à¤°à¥à¤²_मà¤_à¤à¥à¤¨_à¤à¥à¤²à¤¾à¤_ठà¤à¤¸à¥à¤¤_सितà¤à¤¬à¤°_ठà¤à¥à¤à¥à¤¬à¤°_नवà¤à¤¬à¤°_दिसà¤à¤¬à¤°'.split( 43117 '_' 43118 ), 43119 }, 43120 monthsShort: 43121 'à¤à¤¨._फ़र._मारà¥à¤_ठपà¥à¤°à¥._मà¤_à¤à¥à¤¨_à¤à¥à¤²._ठà¤._सित._ठà¤à¥à¤à¥._नव._दिस.'.split('_'), 43122 weekdays: 'रविवार_सà¥à¤®à¤µà¤¾à¤°_मà¤à¤à¤²à¤µà¤¾à¤°_बà¥à¤§à¤µà¤¾à¤°_à¤à¥à¤°à¥à¤µà¤¾à¤°_शà¥à¤à¥à¤°à¤µà¤¾à¤°_शनिवार'.split('_'), 43123 weekdaysShort: 'रवि_सà¥à¤®_मà¤à¤à¤²_बà¥à¤§_à¤à¥à¤°à¥_शà¥à¤à¥à¤°_शनि'.split('_'), 43124 weekdaysMin: 'र_सà¥_मà¤_बà¥_à¤à¥_शà¥_श'.split('_'), 43125 longDateFormat: { 43126 LT: 'A h:mm बà¤à¥', 43127 LTS: 'A h:mm:ss बà¤à¥', 43128 L: 'DD/MM/YYYY', 43129 LL: 'D MMMM YYYY', 43130 LLL: 'D MMMM YYYY, A h:mm बà¤à¥', 43131 LLLL: 'dddd, D MMMM YYYY, A h:mm बà¤à¥', 43132 }, 43133 43134 monthsParse: monthsParse, 43135 longMonthsParse: monthsParse, 43136 shortMonthsParse: shortMonthsParse, 43137 43138 monthsRegex: 43139 /^(à¤à¤¨à¤µà¤°à¥|à¤à¤¨\.?|फ़रवरà¥|फरवरà¥|फ़र\.?|मारà¥à¤?|ठपà¥à¤°à¥à¤²|ठपà¥à¤°à¥\.?|मà¤?|à¤à¥à¤¨?|à¤à¥à¤²à¤¾à¤|à¤à¥à¤²\.?|ठà¤à¤¸à¥à¤¤|ठà¤\.?|सितमà¥à¤¬à¤°|सितà¤à¤¬à¤°|सित\.?|ठà¤à¥à¤à¥à¤¬à¤°|ठà¤à¥à¤à¥\.?|नवमà¥à¤¬à¤°|नवà¤à¤¬à¤°|नव\.?|दिसमà¥à¤¬à¤°|दिसà¤à¤¬à¤°|दिस\.?)/i, 43140 43141 monthsShortRegex: 43142 /^(à¤à¤¨à¤µà¤°à¥|à¤à¤¨\.?|फ़रवरà¥|फरवरà¥|फ़र\.?|मारà¥à¤?|ठपà¥à¤°à¥à¤²|ठपà¥à¤°à¥\.?|मà¤?|à¤à¥à¤¨?|à¤à¥à¤²à¤¾à¤|à¤à¥à¤²\.?|ठà¤à¤¸à¥à¤¤|ठà¤\.?|सितमà¥à¤¬à¤°|सितà¤à¤¬à¤°|सित\.?|ठà¤à¥à¤à¥à¤¬à¤°|ठà¤à¥à¤à¥\.?|नवमà¥à¤¬à¤°|नवà¤à¤¬à¤°|नव\.?|दिसमà¥à¤¬à¤°|दिसà¤à¤¬à¤°|दिस\.?)/i, 43143 43144 monthsStrictRegex: 43145 /^(à¤à¤¨à¤µà¤°à¥?|फ़रवरà¥|फरवरà¥?|मारà¥à¤?|ठपà¥à¤°à¥à¤²?|मà¤?|à¤à¥à¤¨?|à¤à¥à¤²à¤¾à¤?|ठà¤à¤¸à¥à¤¤?|सितमà¥à¤¬à¤°|सितà¤à¤¬à¤°|सित?\.?|ठà¤à¥à¤à¥à¤¬à¤°|ठà¤à¥à¤à¥\.?|नवमà¥à¤¬à¤°|नवà¤à¤¬à¤°?|दिसमà¥à¤¬à¤°|दिसà¤à¤¬à¤°?)/i, 43146 43147 monthsShortStrictRegex: 43148 /^(à¤à¤¨\.?|फ़र\.?|मारà¥à¤?|ठपà¥à¤°à¥\.?|मà¤?|à¤à¥à¤¨?|à¤à¥à¤²\.?|ठà¤\.?|सित\.?|ठà¤à¥à¤à¥\.?|नव\.?|दिस\.?)/i, 43149 43150 calendar: { 43151 sameDay: '[à¤à¤] LT', 43152 nextDay: '[à¤à¤²] LT', 43153 nextWeek: 'dddd, LT', 43154 lastDay: '[à¤à¤²] LT', 43155 lastWeek: '[पिà¤à¤²à¥] dddd, LT', 43156 sameElse: 'L', 43157 }, 43158 relativeTime: { 43159 future: '%s मà¥à¤', 43160 past: '%s पहलà¥', 43161 s: 'à¤à¥à¤ हॠà¤à¥à¤·à¤£', 43162 ss: '%d सà¥à¤à¤à¤¡', 43163 m: 'à¤à¤ मिनà¤', 43164 mm: '%d मिनà¤', 43165 h: 'à¤à¤ à¤à¤à¤à¤¾', 43166 hh: '%d à¤à¤à¤à¥', 43167 d: 'à¤à¤ दिन', 43168 dd: '%d दिन', 43169 M: 'à¤à¤ महà¥à¤¨à¥', 43170 MM: '%d महà¥à¤¨à¥', 43171 y: 'à¤à¤ वरà¥à¤·', 43172 yy: '%d वरà¥à¤·', 43173 }, 43174 preparse: function (string) { 43175 return string.replace(/[१२३४५६à¥à¥®à¥¯à¥¦]/g, function (match) { 43176 return numberMap[match]; 43177 }); 43178 }, 43179 postformat: function (string) { 43180 return string.replace(/\d/g, function (match) { 43181 return symbolMap[match]; 43182 }); 43183 }, 43184 // Hindi notation for meridiems are quite fuzzy in practice. While there exists 43185 // a rigid notion of a 'Pahar' it is not used as rigidly in modern Hindi. 43186 meridiemParse: /रात|सà¥à¤¬à¤¹|दà¥à¤ªà¤¹à¤°|शाम/, 43187 meridiemHour: function (hour, meridiem) { 43188 if (hour === 12) { 43189 hour = 0; 43190 } 43191 if (meridiem === 'रात') { 43192 return hour < 4 ? hour : hour + 12; 43193 } else if (meridiem === 'सà¥à¤¬à¤¹') { 43194 return hour; 43195 } else if (meridiem === 'दà¥à¤ªà¤¹à¤°') { 43196 return hour >= 10 ? hour : hour + 12; 43197 } else if (meridiem === 'शाम') { 43198 return hour + 12; 43199 } 43200 }, 43201 meridiem: function (hour, minute, isLower) { 43202 if (hour < 4) { 43203 return 'रात'; 43204 } else if (hour < 10) { 43205 return 'सà¥à¤¬à¤¹'; 43206 } else if (hour < 17) { 43207 return 'दà¥à¤ªà¤¹à¤°'; 43208 } else if (hour < 20) { 43209 return 'शाम'; 43210 } else { 43211 return 'रात'; 43212 } 43213 }, 43214 week: { 43215 dow: 0, // Sunday is the first day of the week. 43216 doy: 6, // The week that contains Jan 6th is the first week of the year. 43217 }, 43218 }); 43219 43220 return hi; 43221 43222}))); 43223 43224 43225/***/ }), 43226
vendor: 5,808 bytes, lines 43227-43402
43227/***/ "./node_modules/moment/locale/hr.js": 43228/*!******************************************!*\ 43229 !*** ./node_modules/moment/locale/hr.js ***! 43230 \******************************************/ 43231/*! no static exports found */ 43232/***/ (function(module, exports, __webpack_require__) { 43233 43234//! moment.js locale configuration 43235//! locale : Croatian [hr] 43236//! author : Bojan MarkoviÄ : https://github.com/bmarkovic 43237 43238;(function (global, factory) { 43239 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : 43240 undefined 43241}(this, (function (moment) { 'use strict'; 43242 43243 //! moment.js locale configuration 43244 43245 function translate(number, withoutSuffix, key) { 43246 var result = number + ' '; 43247 switch (key) { 43248 case 'ss': 43249 if (number === 1) { 43250 result += 'sekunda'; 43251 } else if (number === 2 || number === 3 || number === 4) { 43252 result += 'sekunde'; 43253 } else { 43254 result += 'sekundi'; 43255 } 43256 return result; 43257 case 'm': 43258 return withoutSuffix ? 'jedna minuta' : 'jedne minute'; 43259 case 'mm': 43260 if (number === 1) { 43261 result += 'minuta'; 43262 } else if (number === 2 || number === 3 || number === 4) { 43263 result += 'minute'; 43264 } else { 43265 result += 'minuta'; 43266 } 43267 return result; 43268 case 'h': 43269 return withoutSuffix ? 'jedan sat' : 'jednog sata'; 43270 case 'hh': 43271 if (number === 1) { 43272 result += 'sat'; 43273 } else if (number === 2 || number === 3 || number === 4) { 43274 result += 'sata'; 43275 } else { 43276 result += 'sati'; 43277 } 43278 return result; 43279 case 'dd': 43280 if (number === 1) { 43281 result += 'dan'; 43282 } else { 43283 result += 'dana'; 43284 } 43285 return result; 43286 case 'MM': 43287 if (number === 1) { 43288 result += 'mjesec'; 43289 } else if (number === 2 || number === 3 || number === 4) { 43290 result += 'mjeseca'; 43291 } else { 43292 result += 'mjeseci'; 43293 } 43294 return result; 43295 case 'yy': 43296 if (number === 1) { 43297 result += 'godina'; 43298 } else if (number === 2 || number === 3 || number === 4) { 43299 result += 'godine'; 43300 } else { 43301 result += 'godina'; 43302 } 43303 return result; 43304 } 43305 } 43306 43307 var hr = moment.defineLocale('hr', { 43308 months: { 43309 format: 'sijeÄnja_veljaÄe_ožujka_travnja_svibnja_lipnja_srpnja_kolovoza_rujna_listopada_studenoga_prosinca'.split( 43310 '_' 43311 ), 43312 standalone: 43313 'sijeÄanj_veljaÄa_ožujak_travanj_svibanj_lipanj_srpanj_kolovoz_rujan_listopad_studeni_prosinac'.split( 43314 '_' 43315 ), 43316 }, 43317 monthsShort: 43318 'sij._velj._ožu._tra._svi._lip._srp._kol._ruj._lis._stu._pro.'.split( 43319 '_' 43320 ), 43321 monthsParseExact: true, 43322 weekdays: 'nedjelja_ponedjeljak_utorak_srijeda_Äetvrtak_petak_subota'.split( 43323 '_' 43324 ), 43325 weekdaysShort: 'ned._pon._uto._sri._Äet._pet._sub.'.split('_'), 43326 weekdaysMin: 'ne_po_ut_sr_Äe_pe_su'.split('_'), 43327 weekdaysParseExact: true, 43328 longDateFormat: { 43329 LT: 'H:mm', 43330 LTS: 'H:mm:ss', 43331 L: 'DD.MM.YYYY', 43332 LL: 'Do MMMM YYYY', 43333 LLL: 'Do MMMM YYYY H:mm', 43334 LLLL: 'dddd, Do MMMM YYYY H:mm', 43335 }, 43336 calendar: { 43337 sameDay: '[danas u] LT', 43338 nextDay: '[sutra u] LT', 43339 nextWeek: function () { 43340 switch (this.day()) { 43341 case 0: 43342 return '[u] [nedjelju] [u] LT'; 43343 case 3: 43344 return '[u] [srijedu] [u] LT'; 43345 case 6: 43346 return '[u] [subotu] [u] LT'; 43347 case 1: 43348 case 2: 43349 case 4: 43350 case 5: 43351 return '[u] dddd [u] LT'; 43352 } 43353 }, 43354 lastDay: '[juÄer u] LT', 43355 lastWeek: function () { 43356 switch (this.day()) { 43357 case 0: 43358 return '[proÅ¡lu] [nedjelju] [u] LT'; 43359 case 3: 43360 return '[proÅ¡lu] [srijedu] [u] LT'; 43361 case 6: 43362 return '[proÅ¡le] [subote] [u] LT'; 43363 case 1: 43364 case 2: 43365 case 4: 43366 case 5: 43367 return '[proÅ¡li] dddd [u] LT'; 43368 } 43369 }, 43370 sameElse: 'L', 43371 }, 43372 relativeTime: { 43373 future: 'za %s', 43374 past: 'prije %s', 43375 s: 'par sekundi', 43376 ss: translate, 43377 m: translate, 43378 mm: translate, 43379 h: translate, 43380 hh: translate, 43381 d: 'dan', 43382 dd: translate, 43383 M: 'mjesec', 43384 MM: translate, 43385 y: 'godinu', 43386 yy: translate, 43387 }, 43388 dayOfMonthOrdinalParse: /\d{1,2}\./, 43389 ordinal: '%d.', 43390 week: { 43391 dow: 1, // Monday is the first day of the week. 43392 doy: 7, // The week that contains Jan 7th is the first week of the year. 43393 }, 43394 }); 43395 43396 return hr; 43397 43398}))); 43399 43400 43401/***/ }), 43402
vendor: 4,749 bytes, lines 43403-43540
43403/***/ "./node_modules/moment/locale/hu.js": 43404/*!******************************************!*\ 43405 !*** ./node_modules/moment/locale/hu.js ***! 43406 \******************************************/ 43407/*! no static exports found */ 43408/***/ (function(module, exports, __webpack_require__) { 43409 43410//! moment.js locale configuration 43411//! locale : Hungarian [hu] 43412//! author : Adam Brunner : https://github.com/adambrunner 43413//! author : Peter Viszt : https://github.com/passatgt 43414 43415;(function (global, factory) { 43416 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : 43417 undefined 43418}(this, (function (moment) { 'use strict'; 43419 43420 //! moment.js locale configuration 43421 43422 var weekEndings = 43423 'vasárnap hétfÅn kedden szerdán csütörtökön pénteken szombaton'.split(' '); 43424 function translate(number, withoutSuffix, key, isFuture) { 43425 var num = number; 43426 switch (key) { 43427 case 's': 43428 return isFuture || withoutSuffix 43429 ? 'néhány másodperc' 43430 : 'néhány másodperce'; 43431 case 'ss': 43432 return num + (isFuture || withoutSuffix) 43433 ? ' másodperc' 43434 : ' másodperce'; 43435 case 'm': 43436 return 'egy' + (isFuture || withoutSuffix ? ' perc' : ' perce'); 43437 case 'mm': 43438 return num + (isFuture || withoutSuffix ? ' perc' : ' perce'); 43439 case 'h': 43440 return 'egy' + (isFuture || withoutSuffix ? ' óra' : ' órája'); 43441 case 'hh': 43442 return num + (isFuture || withoutSuffix ? ' óra' : ' órája'); 43443 case 'd': 43444 return 'egy' + (isFuture || withoutSuffix ? ' nap' : ' napja'); 43445 case 'dd': 43446 return num + (isFuture || withoutSuffix ? ' nap' : ' napja'); 43447 case 'M': 43448 return 'egy' + (isFuture || withoutSuffix ? ' hónap' : ' hónapja'); 43449 case 'MM': 43450 return num + (isFuture || withoutSuffix ? ' hónap' : ' hónapja'); 43451 case 'y': 43452 return 'egy' + (isFuture || withoutSuffix ? ' év' : ' éve'); 43453 case 'yy': 43454 return num + (isFuture || withoutSuffix ? ' év' : ' éve'); 43455 } 43456 return ''; 43457 } 43458 function week(isFuture) { 43459 return ( 43460 (isFuture ? '' : '[múlt] ') + 43461 '[' + 43462 weekEndings[this.day()] + 43463 '] LT[-kor]' 43464 ); 43465 } 43466 43467 var hu = moment.defineLocale('hu', { 43468 months: 'január_február_március_április_május_június_július_augusztus_szeptember_október_november_december'.split( 43469 '_' 43470 ), 43471 monthsShort: 43472 'jan._feb._márc._ápr._máj._jún._júl._aug._szept._okt._nov._dec.'.split( 43473 '_' 43474 ), 43475 monthsParseExact: true, 43476 weekdays: 'vasárnap_hétfÅ_kedd_szerda_csütörtök_péntek_szombat'.split('_'), 43477 weekdaysShort: 'vas_hét_kedd_sze_csüt_pén_szo'.split('_'), 43478 weekdaysMin: 'v_h_k_sze_cs_p_szo'.split('_'), 43479 longDateFormat: { 43480 LT: 'H:mm', 43481 LTS: 'H:mm:ss', 43482 L: 'YYYY.MM.DD.', 43483 LL: 'YYYY. MMMM D.', 43484 LLL: 'YYYY. MMMM D. H:mm', 43485 LLLL: 'YYYY. MMMM D., dddd H:mm', 43486 }, 43487 meridiemParse: /de|du/i, 43488 isPM: function (input) { 43489 return input.charAt(1).toLowerCase() === 'u'; 43490 }, 43491 meridiem: function (hours, minutes, isLower) { 43492 if (hours < 12) { 43493 return isLower === true ? 'de' : 'DE'; 43494 } else { 43495 return isLower === true ? 'du' : 'DU'; 43496 } 43497 }, 43498 calendar: { 43499 sameDay: '[ma] LT[-kor]', 43500 nextDay: '[holnap] LT[-kor]', 43501 nextWeek: function () { 43502 return week.call(this, true); 43503 }, 43504 lastDay: '[tegnap] LT[-kor]', 43505 lastWeek: function () { 43506 return week.call(this, false); 43507 }, 43508 sameElse: 'L', 43509 }, 43510 relativeTime: { 43511 future: '%s múlva', 43512 past: '%s', 43513 s: translate, 43514 ss: translate, 43515 m: translate, 43516 mm: translate, 43517 h: translate, 43518 hh: translate, 43519 d: translate, 43520 dd: translate, 43521 M: translate, 43522 MM: translate, 43523 y: translate, 43524 yy: translate, 43525 }, 43526 dayOfMonthOrdinalParse: /\d{1,2}\./, 43527 ordinal: '%d.', 43528 week: { 43529 dow: 1, // Monday is the first day of the week. 43530 doy: 4, // The week that contains Jan 4th is the first week of the year. 43531 }, 43532 }); 43533 43534 return hu; 43535 43536}))); 43537 43538 43539/***/ }), 43540
vendor: 4,098 bytes, lines 43541-43654
43541/***/ "./node_modules/moment/locale/hy-am.js": 43542/*!*********************************************!*\ 43543 !*** ./node_modules/moment/locale/hy-am.js ***! 43544 \*********************************************/ 43545/*! no static exports found */ 43546/***/ (function(module, exports, __webpack_require__) { 43547 43548//! moment.js locale configuration 43549//! locale : Armenian [hy-am] 43550//! author : Armendarabyan : https://github.com/armendarabyan 43551 43552;(function (global, factory) { 43553 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : 43554 undefined 43555}(this, (function (moment) { 'use strict'; 43556 43557 //! moment.js locale configuration 43558 43559 var hyAm = moment.defineLocale('hy-am', { 43560 months: { 43561 format: 'Õ°Õ¸ÖÕ¶Õ¾Õ¡ÖÕ«_ÖÕ¥Õ¿ÖÕ¾Õ¡ÖÕ«_Õ´Õ¡ÖÕ¿Õ«_Õ¡ÕºÖÕ«Õ¬Õ«_Õ´Õ¡ÕµÕ«Õ½Õ«_Õ°Õ¸ÖÕ¶Õ«Õ½Õ«_Õ°Õ¸ÖÕ¬Õ«Õ½Õ«_Ö Õ£Õ¸Õ½Õ¿Õ¸Õ½Õ«_Õ½Õ¥ÕºÕ¿Õ¥Õ´Õ¢Õ¥ÖÕ«_Õ°Õ¸Õ¯Õ¿Õ¥Õ´Õ¢Õ¥ÖÕ«_Õ¶Õ¸ÕµÕ¥Õ´Õ¢Õ¥ÖÕ«_Õ¤Õ¥Õ¯Õ¿Õ¥Õ´Õ¢Õ¥ÖÕ«'.split( 43562 '_' 43563 ), 43564 standalone: 43565 'Õ°Õ¸ÖÕ¶Õ¾Õ¡Ö_ÖÕ¥Õ¿ÖÕ¾Õ¡Ö_Õ´Õ¡ÖÕ¿_Õ¡ÕºÖÕ«Õ¬_Õ´Õ¡ÕµÕ«Õ½_Õ°Õ¸ÖÕ¶Õ«Õ½_Õ°Õ¸ÖÕ¬Õ«Õ½_Ö Õ£Õ¸Õ½Õ¿Õ¸Õ½_Õ½Õ¥ÕºÕ¿Õ¥Õ´Õ¢Õ¥Ö_Õ°Õ¸Õ¯Õ¿Õ¥Õ´Õ¢Õ¥Ö_Õ¶Õ¸ÕµÕ¥Õ´Õ¢Õ¥Ö_Õ¤Õ¥Õ¯Õ¿Õ¥Õ´Õ¢Õ¥Ö'.split( 43566 '_' 43567 ), 43568 }, 43569 monthsShort: 'Õ°Õ¶Õ¾_ÖÕ¿Ö_Õ´ÖÕ¿_Õ¡ÕºÖ_Õ´ÕµÕ½_Õ°Õ¶Õ½_Õ°Õ¬Õ½_Ö Õ£Õ½_Õ½ÕºÕ¿_Õ°Õ¯Õ¿_Õ¶Õ´Õ¢_Õ¤Õ¯Õ¿'.split('_'), 43570 weekdays: 43571 'Õ¯Õ«ÖÕ¡Õ¯Õ«_Õ¥ÖÕ¯Õ¸ÖÕ·Õ¡Õ¢Õ©Õ«_Õ¥ÖÕ¥ÖÕ·Õ¡Õ¢Õ©Õ«_Õ¹Õ¸ÖÕ¥ÖÕ·Õ¡Õ¢Õ©Õ«_Õ°Õ«Õ¶Õ£Õ·Õ¡Õ¢Õ©Õ«_Õ¸ÖÖÕ¢Õ¡Õ©_Õ·Õ¡Õ¢Õ¡Õ©'.split( 43572 '_' 43573 ), 43574 weekdaysShort: 'Õ¯ÖÕ¯_Õ¥ÖÕ¯_Õ¥ÖÖ_Õ¹ÖÖ_Õ°Õ¶Õ£_Õ¸ÖÖÕ¢_Õ·Õ¢Õ©'.split('_'), 43575 weekdaysMin: 'Õ¯ÖÕ¯_Õ¥ÖÕ¯_Õ¥ÖÖ_Õ¹ÖÖ_Õ°Õ¶Õ£_Õ¸ÖÖÕ¢_Õ·Õ¢Õ©'.split('_'), 43576 longDateFormat: { 43577 LT: 'HH:mm', 43578 LTS: 'HH:mm:ss', 43579 L: 'DD.MM.YYYY', 43580 LL: 'D MMMM YYYY Õ©.', 43581 LLL: 'D MMMM YYYY Õ©., HH:mm', 43582 LLLL: 'dddd, D MMMM YYYY Õ©., HH:mm', 43583 }, 43584 calendar: { 43585 sameDay: '[Õ¡ÕµÕ½Ö Ö] LT', 43586 nextDay: '[Õ¾Õ¡Õ²Õ¨] LT', 43587 lastDay: '[Õ¥ÖÕ¥Õ¯] LT', 43588 nextWeek: function () { 43589 return 'dddd [Ö ÖÕ¨ ÕªÕ¡Õ´Õ¨] LT'; 43590 }, 43591 lastWeek: function () { 43592 return '[Õ¡Õ¶ÖÕ¡Õ®] dddd [Ö ÖÕ¨ ÕªÕ¡Õ´Õ¨] LT'; 43593 }, 43594 sameElse: 'L', 43595 }, 43596 relativeTime: { 43597 future: '%s Õ°Õ¥Õ¿Õ¸', 43598 past: '%s Õ¡Õ¼Õ¡Õ»', 43599 s: 'Õ´Õ« ÖÕ¡Õ¶Õ« Õ¾Õ¡ÕµÖÕ¯ÕµÕ¡Õ¶', 43600 ss: '%d Õ¾Õ¡ÕµÖÕ¯ÕµÕ¡Õ¶', 43601 m: 'ÖÕ¸ÕºÕ¥', 43602 mm: '%d ÖÕ¸ÕºÕ¥', 43603 h: 'ÕªÕ¡Õ´', 43604 hh: '%d ÕªÕ¡Õ´', 43605 d: 'Ö Ö', 43606 dd: '%d Ö Ö', 43607 M: 'Õ¡Õ´Õ«Õ½', 43608 MM: '%d Õ¡Õ´Õ«Õ½', 43609 y: 'Õ¿Õ¡ÖÕ«', 43610 yy: '%d Õ¿Õ¡ÖÕ«', 43611 }, 43612 meridiemParse: /Õ£Õ«Õ·Õ¥ÖÕ¾Õ¡|Õ¡Õ¼Õ¡Õ¾Õ¸Õ¿Õ¾Õ¡|ÖÕ¥ÖÕ¥Õ¯Õ¾Õ¡|Õ¥ÖÕ¥Õ¯Õ¸ÕµÕ¡Õ¶/, 43613 isPM: function (input) { 43614 return /^(ÖÕ¥ÖÕ¥Õ¯Õ¾Õ¡|Õ¥ÖÕ¥Õ¯Õ¸ÕµÕ¡Õ¶)$/.test(input); 43615 }, 43616 meridiem: function (hour) { 43617 if (hour < 4) { 43618 return 'Õ£Õ«Õ·Õ¥ÖÕ¾Õ¡'; 43619 } else if (hour < 12) { 43620 return 'Õ¡Õ¼Õ¡Õ¾Õ¸Õ¿Õ¾Õ¡'; 43621 } else if (hour < 17) { 43622 return 'ÖÕ¥ÖÕ¥Õ¯Õ¾Õ¡'; 43623 } else { 43624 return 'Õ¥ÖÕ¥Õ¯Õ¸ÕµÕ¡Õ¶'; 43625 } 43626 }, 43627 dayOfMonthOrdinalParse: /\d{1,2}|\d{1,2}-(Õ«Õ¶|ÖÕ¤)/, 43628 ordinal: function (number, period) { 43629 switch (period) { 43630 case 'DDD': 43631 case 'w': 43632 case 'W': 43633 case 'DDDo': 43634 if (number === 1) { 43635 return number + '-Õ«Õ¶'; 43636 } 43637 return number + '-ÖÕ¤'; 43638 default: 43639 return number; 43640 } 43641 }, 43642 week: { 43643 dow: 1, // Monday is the first day of the week. 43644 doy: 7, // The week that contains Jan 7th is the first week of the year. 43645 }, 43646 }); 43647 43648 return hyAm; 43649 43650}))); 43651 43652 43653/***/ }), 43654
vendor: 3,145 bytes, lines 43655-43750
43655/***/ "./node_modules/moment/locale/id.js": 43656/*!******************************************!*\ 43657 !*** ./node_modules/moment/locale/id.js ***! 43658 \******************************************/ 43659/*! no static exports found */ 43660/***/ (function(module, exports, __webpack_require__) { 43661 43662//! moment.js locale configuration 43663//! locale : Indonesian [id] 43664//! author : Mohammad Satrio Utomo : https://github.com/tyok 43665//! reference: http://id.wikisource.org/wiki/Pedoman_Umum_Ejaan_Bahasa_Indonesia_yang_Disempurnakan 43666 43667;(function (global, factory) { 43668 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : 43669 undefined 43670}(this, (function (moment) { 'use strict'; 43671 43672 //! moment.js locale configuration 43673 43674 var id = moment.defineLocale('id', { 43675 months: 'Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_November_Desember'.split( 43676 '_' 43677 ), 43678 monthsShort: 'Jan_Feb_Mar_Apr_Mei_Jun_Jul_Agt_Sep_Okt_Nov_Des'.split('_'), 43679 weekdays: 'Minggu_Senin_Selasa_Rabu_Kamis_Jumat_Sabtu'.split('_'), 43680 weekdaysShort: 'Min_Sen_Sel_Rab_Kam_Jum_Sab'.split('_'), 43681 weekdaysMin: 'Mg_Sn_Sl_Rb_Km_Jm_Sb'.split('_'), 43682 longDateFormat: { 43683 LT: 'HH.mm', 43684 LTS: 'HH.mm.ss', 43685 L: 'DD/MM/YYYY', 43686 LL: 'D MMMM YYYY', 43687 LLL: 'D MMMM YYYY [pukul] HH.mm', 43688 LLLL: 'dddd, D MMMM YYYY [pukul] HH.mm', 43689 }, 43690 meridiemParse: /pagi|siang|sore|malam/, 43691 meridiemHour: function (hour, meridiem) { 43692 if (hour === 12) { 43693 hour = 0; 43694 } 43695 if (meridiem === 'pagi') { 43696 return hour; 43697 } else if (meridiem === 'siang') { 43698 return hour >= 11 ? hour : hour + 12; 43699 } else if (meridiem === 'sore' || meridiem === 'malam') { 43700 return hour + 12; 43701 } 43702 }, 43703 meridiem: function (hours, minutes, isLower) { 43704 if (hours < 11) { 43705 return 'pagi'; 43706 } else if (hours < 15) { 43707 return 'siang'; 43708 } else if (hours < 19) { 43709 return 'sore'; 43710 } else { 43711 return 'malam'; 43712 } 43713 }, 43714 calendar: { 43715 sameDay: '[Hari ini pukul] LT', 43716 nextDay: '[Besok pukul] LT', 43717 nextWeek: 'dddd [pukul] LT', 43718 lastDay: '[Kemarin pukul] LT', 43719 lastWeek: 'dddd [lalu pukul] LT', 43720 sameElse: 'L', 43721 }, 43722 relativeTime: { 43723 future: 'dalam %s', 43724 past: '%s yang lalu', 43725 s: 'beberapa detik', 43726 ss: '%d detik', 43727 m: 'semenit', 43728 mm: '%d menit', 43729 h: 'sejam', 43730 hh: '%d jam', 43731 d: 'sehari', 43732 dd: '%d hari', 43733 M: 'sebulan', 43734 MM: '%d bulan', 43735 y: 'setahun', 43736 yy: '%d tahun', 43737 }, 43738 week: { 43739 dow: 0, // Sunday is the first day of the week. 43740 doy: 6, // The week that contains Jan 6th is the first week of the year. 43741 }, 43742 }); 43743 43744 return id; 43745 43746}))); 43747 43748 43749/***/ }), 43750
vendor: 5,484 bytes, lines 43751-43910
43751/***/ "./node_modules/moment/locale/is.js": 43752/*!******************************************!*\ 43753 !*** ./node_modules/moment/locale/is.js ***! 43754 \******************************************/ 43755/*! no static exports found */ 43756/***/ (function(module, exports, __webpack_require__) { 43757 43758//! moment.js locale configuration 43759//! locale : Icelandic [is] 43760//! author : Hinrik Ãrn Sigurðsson : https://github.com/hinrik 43761 43762;(function (global, factory) { 43763 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : 43764 undefined 43765}(this, (function (moment) { 'use strict'; 43766 43767 //! moment.js locale configuration 43768 43769 function plural(n) { 43770 if (n % 100 === 11) { 43771 return true; 43772 } else if (n % 10 === 1) { 43773 return false; 43774 } 43775 return true; 43776 } 43777 function translate(number, withoutSuffix, key, isFuture) { 43778 var result = number + ' '; 43779 switch (key) { 43780 case 's': 43781 return withoutSuffix || isFuture 43782 ? 'nokkrar sekúndur' 43783 : 'nokkrum sekúndum'; 43784 case 'ss': 43785 if (plural(number)) { 43786 return ( 43787 result + 43788 (withoutSuffix || isFuture ? 'sekúndur' : 'sekúndum') 43789 ); 43790 } 43791 return result + 'sekúnda'; 43792 case 'm': 43793 return withoutSuffix ? 'mÃnúta' : 'mÃnútu'; 43794 case 'mm': 43795 if (plural(number)) { 43796 return ( 43797 result + (withoutSuffix || isFuture ? 'mÃnútur' : 'mÃnútum') 43798 ); 43799 } else if (withoutSuffix) { 43800 return result + 'mÃnúta'; 43801 } 43802 return result + 'mÃnútu'; 43803 case 'hh': 43804 if (plural(number)) { 43805 return ( 43806 result + 43807 (withoutSuffix || isFuture 43808 ? 'klukkustundir' 43809 : 'klukkustundum') 43810 ); 43811 } 43812 return result + 'klukkustund'; 43813 case 'd': 43814 if (withoutSuffix) { 43815 return 'dagur'; 43816 } 43817 return isFuture ? 'dag' : 'degi'; 43818 case 'dd': 43819 if (plural(number)) { 43820 if (withoutSuffix) { 43821 return result + 'dagar'; 43822 } 43823 return result + (isFuture ? 'daga' : 'dögum'); 43824 } else if (withoutSuffix) { 43825 return result + 'dagur'; 43826 } 43827 return result + (isFuture ? 'dag' : 'degi'); 43828 case 'M': 43829 if (withoutSuffix) { 43830 return 'mánuður'; 43831 } 43832 return isFuture ? 'mánuð' : 'mánuði'; 43833 case 'MM': 43834 if (plural(number)) { 43835 if (withoutSuffix) { 43836 return result + 'mánuðir'; 43837 } 43838 return result + (isFuture ? 'mánuði' : 'mánuðum'); 43839 } else if (withoutSuffix) { 43840 return result + 'mánuður'; 43841 } 43842 return result + (isFuture ? 'mánuð' : 'mánuði'); 43843 case 'y': 43844 return withoutSuffix || isFuture ? 'ár' : 'ári'; 43845 case 'yy': 43846 if (plural(number)) { 43847 return result + (withoutSuffix || isFuture ? 'ár' : 'árum'); 43848 } 43849 return result + (withoutSuffix || isFuture ? 'ár' : 'ári'); 43850 } 43851 } 43852 43853 var is = moment.defineLocale('is', { 43854 months: 'janúar_febrúar_mars_aprÃl_maÃ_júnÃ_júlÃ_ágúst_september_október_nóvember_desember'.split( 43855 '_' 43856 ), 43857 monthsShort: 'jan_feb_mar_apr_maÃ_jún_júl_ágú_sep_okt_nóv_des'.split('_'), 43858 weekdays: 43859 'sunnudagur_mánudagur_þriðjudagur_miðvikudagur_fimmtudagur_föstudagur_laugardagur'.split( 43860 '_' 43861 ), 43862 weekdaysShort: 'sun_mán_þri_mið_fim_fös_lau'.split('_'), 43863 weekdaysMin: 'Su_Má_Ãr_Mi_Fi_Fö_La'.split('_'), 43864 longDateFormat: { 43865 LT: 'H:mm', 43866 LTS: 'H:mm:ss', 43867 L: 'DD.MM.YYYY', 43868 LL: 'D. MMMM YYYY', 43869 LLL: 'D. MMMM YYYY [kl.] H:mm', 43870 LLLL: 'dddd, D. MMMM YYYY [kl.] H:mm', 43871 }, 43872 calendar: { 43873 sameDay: '[à dag kl.] LT', 43874 nextDay: '[á morgun kl.] LT', 43875 nextWeek: 'dddd [kl.] LT', 43876 lastDay: '[à gær kl.] LT', 43877 lastWeek: '[sÃðasta] dddd [kl.] LT', 43878 sameElse: 'L', 43879 }, 43880 relativeTime: { 43881 future: 'eftir %s', 43882 past: 'fyrir %s sÃðan', 43883 s: translate, 43884 ss: translate, 43885 m: translate, 43886 mm: translate, 43887 h: 'klukkustund', 43888 hh: translate, 43889 d: translate, 43890 dd: translate, 43891 M: translate, 43892 MM: translate, 43893 y: translate, 43894 yy: translate, 43895 }, 43896 dayOfMonthOrdinalParse: /\d{1,2}\./, 43897 ordinal: '%d.', 43898 week: { 43899 dow: 1, // Monday is the first day of the week. 43900 doy: 4, // The week that contains Jan 4th is the first week of the year. 43901 }, 43902 }); 43903 43904 return is; 43905 43906}))); 43907 43908 43909/***/ }), 43910
vendor: 2,683 bytes, lines 43911-43994
43911/***/ "./node_modules/moment/locale/it-ch.js": 43912/*!*********************************************!*\ 43913 !*** ./node_modules/moment/locale/it-ch.js ***! 43914 \*********************************************/ 43915/*! no static exports found */ 43916/***/ (function(module, exports, __webpack_require__) { 43917 43918//! moment.js locale configuration 43919//! locale : Italian (Switzerland) [it-ch] 43920//! author : xfh : https://github.com/xfh 43921 43922;(function (global, factory) { 43923 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : 43924 undefined 43925}(this, (function (moment) { 'use strict'; 43926 43927 //! moment.js locale configuration 43928 43929 var itCh = moment.defineLocale('it-ch', { 43930 months: 'gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre'.split( 43931 '_' 43932 ), 43933 monthsShort: 'gen_feb_mar_apr_mag_giu_lug_ago_set_ott_nov_dic'.split('_'), 43934 weekdays: 'domenica_lunedì_martedì_mercoledì_giovedì_venerdì_sabato'.split( 43935 '_' 43936 ), 43937 weekdaysShort: 'dom_lun_mar_mer_gio_ven_sab'.split('_'), 43938 weekdaysMin: 'do_lu_ma_me_gi_ve_sa'.split('_'), 43939 longDateFormat: { 43940 LT: 'HH:mm', 43941 LTS: 'HH:mm:ss', 43942 L: 'DD.MM.YYYY', 43943 LL: 'D MMMM YYYY', 43944 LLL: 'D MMMM YYYY HH:mm', 43945 LLLL: 'dddd D MMMM YYYY HH:mm', 43946 }, 43947 calendar: { 43948 sameDay: '[Oggi alle] LT', 43949 nextDay: '[Domani alle] LT', 43950 nextWeek: 'dddd [alle] LT', 43951 lastDay: '[Ieri alle] LT', 43952 lastWeek: function () { 43953 switch (this.day()) { 43954 case 0: 43955 return '[la scorsa] dddd [alle] LT'; 43956 default: 43957 return '[lo scorso] dddd [alle] LT'; 43958 } 43959 }, 43960 sameElse: 'L', 43961 }, 43962 relativeTime: { 43963 future: function (s) { 43964 return (/^[0-9].+$/.test(s) ? 'tra' : 'in') + ' ' + s; 43965 }, 43966 past: '%s fa', 43967 s: 'alcuni secondi', 43968 ss: '%d secondi', 43969 m: 'un minuto', 43970 mm: '%d minuti', 43971 h: "un'ora", 43972 hh: '%d ore', 43973 d: 'un giorno', 43974 dd: '%d giorni', 43975 M: 'un mese', 43976 MM: '%d mesi', 43977 y: 'un anno', 43978 yy: '%d anni', 43979 }, 43980 dayOfMonthOrdinalParse: /\d{1,2}º/, 43981 ordinal: '%dº', 43982 week: { 43983 dow: 1, // Monday is the first day of the week. 43984 doy: 4, // The week that contains Jan 4th is the first week of the year. 43985 }, 43986 }); 43987 43988 return itCh; 43989 43990}))); 43991 43992 43993/***/ }), 43994
vendor: 4,145 bytes, lines 43995-44120
43995/***/ "./node_modules/moment/locale/it.js": 43996/*!******************************************!*\ 43997 !*** ./node_modules/moment/locale/it.js ***! 43998 \******************************************/ 43999/*! no static exports found */ 44000/***/ (function(module, exports, __webpack_require__) { 44001 44002//! moment.js locale configuration 44003//! locale : Italian [it] 44004//! author : Lorenzo : https://github.com/aliem 44005//! author: Mattia Larentis: https://github.com/nostalgiaz 44006//! author: Marco : https://github.com/Manfre98 44007 44008;(function (global, factory) { 44009 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : 44010 undefined 44011}(this, (function (moment) { 'use strict'; 44012 44013 //! moment.js locale configuration 44014 44015 var it = moment.defineLocale('it', { 44016 months: 'gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre'.split( 44017 '_' 44018 ), 44019 monthsShort: 'gen_feb_mar_apr_mag_giu_lug_ago_set_ott_nov_dic'.split('_'), 44020 weekdays: 'domenica_lunedì_martedì_mercoledì_giovedì_venerdì_sabato'.split( 44021 '_' 44022 ), 44023 weekdaysShort: 'dom_lun_mar_mer_gio_ven_sab'.split('_'), 44024 weekdaysMin: 'do_lu_ma_me_gi_ve_sa'.split('_'), 44025 longDateFormat: { 44026 LT: 'HH:mm', 44027 LTS: 'HH:mm:ss', 44028 L: 'DD/MM/YYYY', 44029 LL: 'D MMMM YYYY', 44030 LLL: 'D MMMM YYYY HH:mm', 44031 LLLL: 'dddd D MMMM YYYY HH:mm', 44032 }, 44033 calendar: { 44034 sameDay: function () { 44035 return ( 44036 '[Oggi a' + 44037 (this.hours() > 1 ? 'lle ' : this.hours() === 0 ? ' ' : "ll'") + 44038 ']LT' 44039 ); 44040 }, 44041 nextDay: function () { 44042 return ( 44043 '[Domani a' + 44044 (this.hours() > 1 ? 'lle ' : this.hours() === 0 ? ' ' : "ll'") + 44045 ']LT' 44046 ); 44047 }, 44048 nextWeek: function () { 44049 return ( 44050 'dddd [a' + 44051 (this.hours() > 1 ? 'lle ' : this.hours() === 0 ? ' ' : "ll'") + 44052 ']LT' 44053 ); 44054 }, 44055 lastDay: function () { 44056 return ( 44057 '[Ieri a' + 44058 (this.hours() > 1 ? 'lle ' : this.hours() === 0 ? ' ' : "ll'") + 44059 ']LT' 44060 ); 44061 }, 44062 lastWeek: function () { 44063 switch (this.day()) { 44064 case 0: 44065 return ( 44066 '[La scorsa] dddd [a' + 44067 (this.hours() > 1 44068 ? 'lle ' 44069 : this.hours() === 0 44070 ? ' ' 44071 : "ll'") + 44072 ']LT' 44073 ); 44074 default: 44075 return ( 44076 '[Lo scorso] dddd [a' + 44077 (this.hours() > 1 44078 ? 'lle ' 44079 : this.hours() === 0 44080 ? ' ' 44081 : "ll'") + 44082 ']LT' 44083 ); 44084 } 44085 }, 44086 sameElse: 'L', 44087 }, 44088 relativeTime: { 44089 future: 'tra %s', 44090 past: '%s fa', 44091 s: 'alcuni secondi', 44092 ss: '%d secondi', 44093 m: 'un minuto', 44094 mm: '%d minuti', 44095 h: "un'ora", 44096 hh: '%d ore', 44097 d: 'un giorno', 44098 dd: '%d giorni', 44099 w: 'una settimana', 44100 ww: '%d settimane', 44101 M: 'un mese', 44102 MM: '%d mesi', 44103 y: 'un anno', 44104 yy: '%d anni', 44105 }, 44106 dayOfMonthOrdinalParse: /\d{1,2}º/, 44107 ordinal: '%dº', 44108 week: { 44109 dow: 1, // Monday is the first day of the week. 44110 doy: 4, // The week that contains Jan 4th is the first week of the year. 44111 }, 44112 }); 44113 44114 return it; 44115 44116}))); 44117 44118 44119/***/ }), 44120
vendor: 5,017 bytes, lines 44121-44288
44121/***/ "./node_modules/moment/locale/ja.js": 44122/*!******************************************!*\ 44123 !*** ./node_modules/moment/locale/ja.js ***! 44124 \******************************************/ 44125/*! no static exports found */ 44126/***/ (function(module, exports, __webpack_require__) { 44127 44128//! moment.js locale configuration 44129//! locale : Japanese [ja] 44130//! author : LI Long : https://github.com/baryon 44131 44132;(function (global, factory) { 44133 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : 44134 undefined 44135}(this, (function (moment) { 'use strict'; 44136 44137 //! moment.js locale configuration 44138 44139 var ja = moment.defineLocale('ja', { 44140 eras: [ 44141 { 44142 since: '2019-05-01', 44143 offset: 1, 44144 name: '令å', 44145 narrow: 'ã¿', 44146 abbr: 'R', 44147 }, 44148 { 44149 since: '1989-01-08', 44150 until: '2019-04-30', 44151 offset: 1, 44152 name: 'å¹³æ', 44153 narrow: 'ã»', 44154 abbr: 'H', 44155 }, 44156 { 44157 since: '1926-12-25', 44158 until: '1989-01-07', 44159 offset: 1, 44160 name: 'æå', 44161 narrow: 'ã¼', 44162 abbr: 'S', 44163 }, 44164 { 44165 since: '1912-07-30', 44166 until: '1926-12-24', 44167 offset: 1, 44168 name: '大æ£', 44169 narrow: 'ã½', 44170 abbr: 'T', 44171 }, 44172 { 44173 since: '1873-01-01', 44174 until: '1912-07-29', 44175 offset: 6, 44176 name: 'ææ²»', 44177 narrow: 'ã¾', 44178 abbr: 'M', 44179 }, 44180 { 44181 since: '0001-01-01', 44182 until: '1873-12-31', 44183 offset: 1, 44184 name: '西æ¦', 44185 narrow: 'AD', 44186 abbr: 'AD', 44187 }, 44188 { 44189 since: '0000-12-31', 44190 until: -Infinity, 44191 offset: 1, 44192 name: 'ç´å å', 44193 narrow: 'BC', 44194 abbr: 'BC', 44195 }, 44196 ], 44197 eraYearOrdinalRegex: /(å |\d+)å¹´/, 44198 eraYearOrdinalParse: function (input, match) { 44199 return match[1] === 'å ' ? 1 : parseInt(match[1] || input, 10); 44200 }, 44201 months: '1æ_2æ_3æ_4æ_5æ_6æ_7æ_8æ_9æ_10æ_11æ_12æ'.split('_'), 44202 monthsShort: '1æ_2æ_3æ_4æ_5æ_6æ_7æ_8æ_9æ_10æ_11æ_12æ'.split( 44203 '_' 44204 ), 44205 weekdays: 'æ¥ææ¥_æææ¥_ç«ææ¥_æ°´ææ¥_æ¨ææ¥_éææ¥_åææ¥'.split('_'), 44206 weekdaysShort: 'æ¥_æ_ç«_æ°´_æ¨_é_å'.split('_'), 44207 weekdaysMin: 'æ¥_æ_ç«_æ°´_æ¨_é_å'.split('_'), 44208 longDateFormat: { 44209 LT: 'HH:mm', 44210 LTS: 'HH:mm:ss', 44211 L: 'YYYY/MM/DD', 44212 LL: 'YYYYå¹´MæDæ¥', 44213 LLL: 'YYYYå¹´MæDæ¥ HH:mm', 44214 LLLL: 'YYYYå¹´MæDæ¥ dddd HH:mm', 44215 l: 'YYYY/MM/DD', 44216 ll: 'YYYYå¹´MæDæ¥', 44217 lll: 'YYYYå¹´MæDæ¥ HH:mm', 44218 llll: 'YYYYå¹´MæDæ¥(ddd) HH:mm', 44219 }, 44220 meridiemParse: /åå|åå¾/i, 44221 isPM: function (input) { 44222 return input === 'åå¾'; 44223 }, 44224 meridiem: function (hour, minute, isLower) { 44225 if (hour < 12) { 44226 return 'åå'; 44227 } else { 44228 return 'åå¾'; 44229 } 44230 }, 44231 calendar: { 44232 sameDay: '[仿¥] LT', 44233 nextDay: '[ææ¥] LT', 44234 nextWeek: function (now) { 44235 if (now.week() !== this.week()) { 44236 return '[æ¥é±]dddd LT'; 44237 } else { 44238 return 'dddd LT'; 44239 } 44240 }, 44241 lastDay: '[æ¨æ¥] LT', 44242 lastWeek: function (now) { 44243 if (this.week() !== now.week()) { 44244 return '[å é±]dddd LT'; 44245 } else { 44246 return 'dddd LT'; 44247 } 44248 }, 44249 sameElse: 'L', 44250 }, 44251 dayOfMonthOrdinalParse: /\d{1,2}æ¥/, 44252 ordinal: function (number, period) { 44253 switch (period) { 44254 case 'y': 44255 return number === 1 ? 'å å¹´' : number + 'å¹´'; 44256 case 'd': 44257 case 'D': 44258 case 'DDD': 44259 return number + 'æ¥'; 44260 default: 44261 return number; 44262 } 44263 }, 44264 relativeTime: { 44265 future: '%så¾', 44266 past: '%så', 44267 s: 'æ°ç§', 44268 ss: '%dç§', 44269 m: '1å', 44270 mm: '%då', 44271 h: '1æé', 44272 hh: '%dæé', 44273 d: '1æ¥', 44274 dd: '%dæ¥', 44275 M: '1ã¶æ', 44276 MM: '%dã¶æ', 44277 y: '1å¹´', 44278 yy: '%då¹´', 44279 }, 44280 }); 44281 44282 return ja; 44283 44284}))); 44285 44286 44287/***/ }), 44288
vendor: 3,154 bytes, lines 44289-44384
44289/***/ "./node_modules/moment/locale/jv.js": 44290/*!******************************************!*\ 44291 !*** ./node_modules/moment/locale/jv.js ***! 44292 \******************************************/ 44293/*! no static exports found */ 44294/***/ (function(module, exports, __webpack_require__) { 44295 44296//! moment.js locale configuration 44297//! locale : Javanese [jv] 44298//! author : Rony Lantip : https://github.com/lantip 44299//! reference: http://jv.wikipedia.org/wiki/Basa_Jawa 44300 44301;(function (global, factory) { 44302 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : 44303 undefined 44304}(this, (function (moment) { 'use strict'; 44305 44306 //! moment.js locale configuration 44307 44308 var jv = moment.defineLocale('jv', { 44309 months: 'Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_Nopember_Desember'.split( 44310 '_' 44311 ), 44312 monthsShort: 'Jan_Feb_Mar_Apr_Mei_Jun_Jul_Ags_Sep_Okt_Nop_Des'.split('_'), 44313 weekdays: 'Minggu_Senen_Seloso_Rebu_Kemis_Jemuwah_Septu'.split('_'), 44314 weekdaysShort: 'Min_Sen_Sel_Reb_Kem_Jem_Sep'.split('_'), 44315 weekdaysMin: 'Mg_Sn_Sl_Rb_Km_Jm_Sp'.split('_'), 44316 longDateFormat: { 44317 LT: 'HH.mm', 44318 LTS: 'HH.mm.ss', 44319 L: 'DD/MM/YYYY', 44320 LL: 'D MMMM YYYY', 44321 LLL: 'D MMMM YYYY [pukul] HH.mm', 44322 LLLL: 'dddd, D MMMM YYYY [pukul] HH.mm', 44323 }, 44324 meridiemParse: /enjing|siyang|sonten|ndalu/, 44325 meridiemHour: function (hour, meridiem) { 44326 if (hour === 12) { 44327 hour = 0; 44328 } 44329 if (meridiem === 'enjing') { 44330 return hour; 44331 } else if (meridiem === 'siyang') { 44332 return hour >= 11 ? hour : hour + 12; 44333 } else if (meridiem === 'sonten' || meridiem === 'ndalu') { 44334 return hour + 12; 44335 } 44336 }, 44337 meridiem: function (hours, minutes, isLower) { 44338 if (hours < 11) { 44339 return 'enjing'; 44340 } else if (hours < 15) { 44341 return 'siyang'; 44342 } else if (hours < 19) { 44343 return 'sonten'; 44344 } else { 44345 return 'ndalu'; 44346 } 44347 }, 44348 calendar: { 44349 sameDay: '[Dinten puniko pukul] LT', 44350 nextDay: '[Mbenjang pukul] LT', 44351 nextWeek: 'dddd [pukul] LT', 44352 lastDay: '[Kala wingi pukul] LT', 44353 lastWeek: 'dddd [kepengker pukul] LT', 44354 sameElse: 'L', 44355 }, 44356 relativeTime: { 44357 future: 'wonten ing %s', 44358 past: '%s ingkang kepengker', 44359 s: 'sawetawis detik', 44360 ss: '%d detik', 44361 m: 'setunggal menit', 44362 mm: '%d menit', 44363 h: 'setunggal jam', 44364 hh: '%d jam', 44365 d: 'sedinten', 44366 dd: '%d dinten', 44367 M: 'sewulan', 44368 MM: '%d wulan', 44369 y: 'setaun', 44370 yy: '%d taun', 44371 }, 44372 week: { 44373 dow: 1, // Monday is the first day of the week. 44374 doy: 7, // The week that contains Jan 7th is the first week of the year. 44375 }, 44376 }); 44377 44378 return jv; 44379 44380}))); 44381 44382 44383/***/ }), 44384
vendor: 4,342 bytes, lines 44385-44496
44385/***/ "./node_modules/moment/locale/ka.js": 44386/*!******************************************!*\ 44387 !*** ./node_modules/moment/locale/ka.js ***! 44388 \******************************************/ 44389/*! no static exports found */ 44390/***/ (function(module, exports, __webpack_require__) { 44391 44392//! moment.js locale configuration 44393//! locale : Georgian [ka] 44394//! author : Irakli Janiashvili : https://github.com/IrakliJani 44395 44396;(function (global, factory) { 44397 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : 44398 undefined 44399}(this, (function (moment) { 'use strict'; 44400 44401 //! moment.js locale configuration 44402 44403 var ka = moment.defineLocale('ka', { 44404 months: 'áááááá á_ááááá áááá_ááá á¢á_ááá ááá_áááá¡á_ááááá¡á_ááááá¡á_ááááá¡á¢á_á¡áá¥á¢ááááá á_áá¥á¢ááááá á_ááááááá á_áááááááá á'.split( 44405 '_' 44406 ), 44407 monthsShort: 'ááá_ááá_ááá _ááá _ááá_ááá_ááá_ááá_á¡áá¥_áá¥á¢_ááá_ááá'.split('_'), 44408 weekdays: { 44409 standalone: 44410 'áááá á_áá á¨ááááá_á¡ááá¨ááááá_ááá®á¨ááááá_á®á£áá¨ááááá_ááá áá¡áááá_á¨ááááá'.split( 44411 '_' 44412 ), 44413 format: 'áááá áá¡_áá á¨ááááá¡_á¡ááá¨ááááá¡_ááá®á¨ááááá¡_á®á£áá¨ááááá¡_ááá áá¡áááá¡_á¨ááááá¡'.split( 44414 '_' 44415 ), 44416 isFormat: /(á¬ááá|á¨ááááá)/, 44417 }, 44418 weekdaysShort: 'ááá_áá á¨_á¡áá_ááá®_á®á£á_ááá _á¨áá'.split('_'), 44419 weekdaysMin: 'áá_áá _á¡á_áá_á®á£_áá_á¨á'.split('_'), 44420 longDateFormat: { 44421 LT: 'HH:mm', 44422 LTS: 'HH:mm:ss', 44423 L: 'DD/MM/YYYY', 44424 LL: 'D MMMM YYYY', 44425 LLL: 'D MMMM YYYY HH:mm', 44426 LLLL: 'dddd, D MMMM YYYY HH:mm', 44427 }, 44428 calendar: { 44429 sameDay: '[áá¦áá¡] LT[-áá]', 44430 nextDay: '[á®ááá] LT[-áá]', 44431 lastDay: '[áá£á¨áá] LT[-áá]', 44432 nextWeek: '[á¨ááááá] dddd LT[-áá]', 44433 lastWeek: '[á¬ááá] dddd LT-áá', 44434 sameElse: 'L', 44435 }, 44436 relativeTime: { 44437 future: function (s) { 44438 return s.replace( 44439 /(á¬áá|á¬á£á|á¡ááá|á¬áá|áá¦|áá)(á|á)/, 44440 function ($0, $1, $2) { 44441 return $2 === 'á' ? $1 + 'á¨á' : $1 + $2 + 'á¨á'; 44442 } 44443 ); 44444 }, 44445 past: function (s) { 44446 if (/(á¬ááá|á¬á£áá|á¡áááá|áá¦á|ááá)/.test(s)) { 44447 return s.replace(/(á|á)$/, 'áá¡ á¬áá'); 44448 } 44449 if (/á¬ááá/.test(s)) { 44450 return s.replace(/á¬ááá$/, 'á¬ááá¡ á¬áá'); 44451 } 44452 return s; 44453 }, 44454 s: 'á áááááááá á¬ááá', 44455 ss: '%d á¬ááá', 44456 m: 'á¬á£áá', 44457 mm: '%d á¬á£áá', 44458 h: 'á¡áááá', 44459 hh: '%d á¡áááá', 44460 d: 'áá¦á', 44461 dd: '%d áá¦á', 44462 M: 'ááá', 44463 MM: '%d ááá', 44464 y: 'á¬ááá', 44465 yy: '%d á¬ááá', 44466 }, 44467 dayOfMonthOrdinalParse: /0|1-áá|áá-\d{1,2}|\d{1,2}-á/, 44468 ordinal: function (number) { 44469 if (number === 0) { 44470 return number; 44471 } 44472 if (number === 1) { 44473 return number + '-áá'; 44474 } 44475 if ( 44476 number < 20 || 44477 (number <= 100 && number % 20 === 0) || 44478 number % 100 === 0 44479 ) { 44480 return 'áá-' + number; 44481 } 44482 return number + '-á'; 44483 }, 44484 week: { 44485 dow: 1, 44486 doy: 7, 44487 }, 44488 }); 44489 44490 return ka; 44491 44492}))); 44493 44494 44495/***/ }), 44496
vendor: 3,289 bytes, lines 44497-44598
44497/***/ "./node_modules/moment/locale/kk.js": 44498/*!******************************************!*\ 44499 !*** ./node_modules/moment/locale/kk.js ***! 44500 \******************************************/ 44501/*! no static exports found */ 44502/***/ (function(module, exports, __webpack_require__) { 44503 44504//! moment.js locale configuration 44505//! locale : Kazakh [kk] 44506//! authors : Nurlan Rakhimzhanov : https://github.com/nurlan 44507 44508;(function (global, factory) { 44509 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : 44510 undefined 44511}(this, (function (moment) { 'use strict'; 44512 44513 //! moment.js locale configuration 44514 44515 var suffixes = { 44516 0: '-ÑÑ', 44517 1: '-ÑÑ', 44518 2: '-ÑÑ', 44519 3: '-ÑÑ', 44520 4: '-ÑÑ', 44521 5: '-ÑÑ', 44522 6: '-ÑÑ', 44523 7: '-ÑÑ', 44524 8: '-ÑÑ', 44525 9: '-ÑÑ', 44526 10: '-ÑÑ', 44527 20: '-ÑÑ', 44528 30: '-ÑÑ', 44529 40: '-ÑÑ', 44530 50: '-ÑÑ', 44531 60: '-ÑÑ', 44532 70: '-ÑÑ', 44533 80: '-ÑÑ', 44534 90: '-ÑÑ', 44535 100: '-ÑÑ', 44536 }; 44537 44538 var kk = moment.defineLocale('kk', { 44539 months: 'ÒаңÑаÑ_аÒпан_наÑÑÑз_ÑÓÑÑÑ_мамÑÑ_маÑÑÑм_ÑÑлде_ÑамÑз_ÒÑÑкүйек_Òазан_ÒаÑаÑа_желÑоÒÑан'.split( 44540 '_' 44541 ), 44542 monthsShort: 'Òаң_аÒп_наÑ_ÑÓÑ_мам_маÑ_ÑÑл_Ñам_ÒÑÑ_Òаз_ÒаÑ_жел'.split('_'), 44543 weekdays: 'жекÑенбÑ_дүйÑенбÑ_ÑейÑенбÑ_ÑÓÑÑенбÑ_бейÑенбÑ_жұма_ÑенбÑ'.split( 44544 '_' 44545 ), 44546 weekdaysShort: 'жек_дүй_Ñей_ÑÓÑ_бей_жұм_Ñен'.split('_'), 44547 weekdaysMin: 'жк_дй_Ñй_ÑÑ_бй_жм_Ñн'.split('_'), 44548 longDateFormat: { 44549 LT: 'HH:mm', 44550 LTS: 'HH:mm:ss', 44551 L: 'DD.MM.YYYY', 44552 LL: 'D MMMM YYYY', 44553 LLL: 'D MMMM YYYY HH:mm', 44554 LLLL: 'dddd, D MMMM YYYY HH:mm', 44555 }, 44556 calendar: { 44557 sameDay: '[ÐүгÑн ÑаÒаÑ] LT', 44558 nextDay: '[ÐÑÑең ÑаÒаÑ] LT', 44559 nextWeek: 'dddd [ÑаÒаÑ] LT', 44560 lastDay: '[ÐеÑе ÑаÒаÑ] LT', 44561 lastWeek: '[Ó¨Ñкен апÑанÑÒ£] dddd [ÑаÒаÑ] LT', 44562 sameElse: 'L', 44563 }, 44564 relativeTime: { 44565 future: '%s ÑÑÑнде', 44566 past: '%s бұÑÑн', 44567 s: 'бÑÑнеÑе ÑекÑнд', 44568 ss: '%d ÑекÑнд', 44569 m: 'бÑÑ Ð¼Ð¸Ð½ÑÑ', 44570 mm: '%d минÑÑ', 44571 h: 'бÑÑ ÑаÒаÑ', 44572 hh: '%d ÑаÒаÑ', 44573 d: 'бÑÑ ÐºÒ¯Ð½', 44574 dd: '%d күн', 44575 M: 'бÑÑ Ð°Ð¹', 44576 MM: '%d ай', 44577 y: 'бÑÑ Ð¶Ñл', 44578 yy: '%d жÑл', 44579 }, 44580 dayOfMonthOrdinalParse: /\d{1,2}-(ÑÑ|ÑÑ)/, 44581 ordinal: function (number) { 44582 var a = number % 10, 44583 b = number >= 100 ? 100 : null; 44584 return number + (suffixes[number] || suffixes[a] || suffixes[b]); 44585 }, 44586 week: { 44587 dow: 1, // Monday is the first day of the week. 44588 doy: 7, // The week that contains Jan 7th is the first week of the year. 44589 }, 44590 }); 44591 44592 return kk; 44593 44594}))); 44595 44596 44597/***/ }), 44598
vendor: 4,240 bytes, lines 44599-44721
44599/***/ "./node_modules/moment/locale/km.js": 44600/*!******************************************!*\ 44601 !*** ./node_modules/moment/locale/km.js ***! 44602 \******************************************/ 44603/*! no static exports found */ 44604/***/ (function(module, exports, __webpack_require__) { 44605 44606//! moment.js locale configuration 44607//! locale : Cambodian [km] 44608//! author : Kruy Vanna : https://github.com/kruyvanna 44609 44610;(function (global, factory) { 44611 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : 44612 undefined 44613}(this, (function (moment) { 'use strict'; 44614 44615 //! moment.js locale configuration 44616 44617 var symbolMap = { 44618 1: 'á¡', 44619 2: 'á¢', 44620 3: 'á£', 44621 4: 'á¤', 44622 5: 'á¥', 44623 6: 'á¦', 44624 7: 'á§', 44625 8: 'á¨', 44626 9: 'á©', 44627 0: 'á ', 44628 }, 44629 numberMap = { 44630 'á¡': '1', 44631 'á¢': '2', 44632 'á£': '3', 44633 'á¤': '4', 44634 'á¥': '5', 44635 'á¦': '6', 44636 'á§': '7', 44637 'á¨': '8', 44638 'á©': '9', 44639 'á ': '0', 44640 }; 44641 44642 var km = moment.defineLocale('km', { 44643 months: 'áááá¶_áá»áááá_áá¸áá¶_áááá¶_á§ááá¶_áá·áá»áá¶_áááááá¶_áá¸á á¶_ááááá¶_áá»áá¶_áá·á ááá·áá¶_áááá¼'.split( 44644 '_' 44645 ), 44646 monthsShort: 44647 'áááá¶_áá»áááá_áá¸áá¶_áááá¶_á§ááá¶_áá·áá»áá¶_áááááá¶_áá¸á á¶_ááááá¶_áá»áá¶_áá·á ááá·áá¶_áááá¼'.split( 44648 '_' 44649 ), 44650 weekdays: 'á¢á¶áá·ááá_á áááá_á¢áááá¶á_áá»á_áááá ááááá·á_áá»ááá_áá áá'.split('_'), 44651 weekdaysShort: 'á¢á¶_á _á¢_á_ááá_áá»_á'.split('_'), 44652 weekdaysMin: 'á¢á¶_á _á¢_á_ááá_áá»_á'.split('_'), 44653 weekdaysParseExact: true, 44654 longDateFormat: { 44655 LT: 'HH:mm', 44656 LTS: 'HH:mm:ss', 44657 L: 'DD/MM/YYYY', 44658 LL: 'D MMMM YYYY', 44659 LLL: 'D MMMM YYYY HH:mm', 44660 LLLL: 'dddd, D MMMM YYYY HH:mm', 44661 }, 44662 meridiemParse: /áááá¹á|áááá¶á /, 44663 isPM: function (input) { 44664 return input === 'áááá¶á '; 44665 }, 44666 meridiem: function (hour, minute, isLower) { 44667 if (hour < 12) { 44668 return 'áááá¹á'; 44669 } else { 44670 return 'áááá¶á '; 44671 } 44672 }, 44673 calendar: { 44674 sameDay: '[ááááááá áááá] LT', 44675 nextDay: '[ááá¢áá áááá] LT', 44676 nextWeek: 'dddd [áááá] LT', 44677 lastDay: '[áááá·ááá·á áááá] LT', 44678 lastWeek: 'dddd [ááááá¶á ááá»á] [áááá] LT', 44679 sameElse: 'L', 44680 }, 44681 relativeTime: { 44682 future: '%sááá', 44683 past: '%sáá»á', 44684 s: 'ááá»áááá¶ááá·áá¶áá¸', 44685 ss: '%d áá·áá¶áá¸', 44686 m: 'áá½ááá¶áá¸', 44687 mm: '%d áá¶áá¸', 44688 h: 'áá½ááááá', 44689 hh: '%d áááá', 44690 d: 'áá½ááááá', 44691 dd: '%d áááá', 44692 M: 'áá½ááá', 44693 MM: '%d áá', 44694 y: 'áá½ááááá¶á', 44695 yy: '%d áááá¶á', 44696 }, 44697 dayOfMonthOrdinalParse: /áá¸\d{1,2}/, 44698 ordinal: 'áá¸%d', 44699 preparse: function (string) { 44700 return string.replace(/[á¡á¢á£á¤á¥á¦á§á¨á©á ]/g, function (match) { 44701 return numberMap[match]; 44702 }); 44703 }, 44704 postformat: function (string) { 44705 return string.replace(/\d/g, function (match) { 44706 return symbolMap[match]; 44707 }); 44708 }, 44709 week: { 44710 dow: 1, // Monday is the first day of the week. 44711 doy: 4, // The week that contains Jan 4th is the first week of the year. 44712 }, 44713 }); 44714 44715 return km; 44716 44717}))); 44718 44719 44720/***/ }), 44721
vendor: 5,214 bytes, lines 44722-44865
44722/***/ "./node_modules/moment/locale/kn.js": 44723/*!******************************************!*\ 44724 !*** ./node_modules/moment/locale/kn.js ***! 44725 \******************************************/ 44726/*! no static exports found */ 44727/***/ (function(module, exports, __webpack_require__) { 44728 44729//! moment.js locale configuration 44730//! locale : Kannada [kn] 44731//! author : Rajeev Naik : https://github.com/rajeevnaikte 44732 44733;(function (global, factory) { 44734 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : 44735 undefined 44736}(this, (function (moment) { 'use strict'; 44737 44738 //! moment.js locale configuration 44739 44740 var symbolMap = { 44741 1: 'à³§', 44742 2: '೨', 44743 3: '೩', 44744 4: '೪', 44745 5: '೫', 44746 6: '೬', 44747 7: 'à³', 44748 8: 'à³®', 44749 9: '೯', 44750 0: '೦', 44751 }, 44752 numberMap = { 44753 'à³§': '1', 44754 '೨': '2', 44755 '೩': '3', 44756 '೪': '4', 44757 '೫': '5', 44758 '೬': '6', 44759 'à³': '7', 44760 'à³®': '8', 44761 '೯': '9', 44762 '೦': '0', 44763 }; 44764 44765 var kn = moment.defineLocale('kn', { 44766 months: 'à²à²¨à²µà²°à²¿_ಫà³à²¬à³à²°à²µà²°à²¿_ಮಾರà³à²à³_à²à²ªà³à²°à²¿à²²à³_ಮà³à³_à²à³à²¨à³_à²à³à²²à³à³_à²à²à²¸à³à²à³_ಸà³à²ªà³à²à³à²à²¬à²°à³_ಠà²à³à²à³à³à³à²¬à²°à³_ನವà³à²à²¬à²°à³_ಡಿಸà³à²à²¬à²°à³'.split( 44767 '_' 44768 ), 44769 monthsShort: 44770 'à²à²¨_ಫà³à²¬à³à²°_ಮಾರà³à²à³_à²à²ªà³à²°à²¿à²²à³_ಮà³à³_à²à³à²¨à³_à²à³à²²à³à³_à²à²à²¸à³à²à³_ಸà³à²ªà³à²à³à²_ಠà²à³à²à³à³à³_ನವà³à²_ಡಿಸà³à²'.split( 44771 '_' 44772 ), 44773 monthsParseExact: true, 44774 weekdays: 'à²à²¾à²¨à³à²µà²¾à²°_ಸà³à³à³à²®à²µà²¾à²°_ಮà²à²à²³à²µà²¾à²°_ಬà³à²§à²µà²¾à²°_à²à³à²°à³à²µà²¾à²°_ಶà³à²à³à²°à²µà²¾à²°_ಶನಿವಾರ'.split( 44775 '_' 44776 ), 44777 weekdaysShort: 'à²à²¾à²¨à³_ಸà³à³à³à²®_ಮà²à²à²³_ಬà³à²§_à²à³à²°à³_ಶà³à²à³à²°_ಶನಿ'.split('_'), 44778 weekdaysMin: 'à²à²¾_ಸà³à³à³_ಮà²_ಬà³_à²à³_ಶà³_ಶ'.split('_'), 44779 longDateFormat: { 44780 LT: 'A h:mm', 44781 LTS: 'A h:mm:ss', 44782 L: 'DD/MM/YYYY', 44783 LL: 'D MMMM YYYY', 44784 LLL: 'D MMMM YYYY, A h:mm', 44785 LLLL: 'dddd, D MMMM YYYY, A h:mm', 44786 }, 44787 calendar: { 44788 sameDay: '[à²à²à²¦à³] LT', 44789 nextDay: '[ನಾಳà³] LT', 44790 nextWeek: 'dddd, LT', 44791 lastDay: '[ನಿನà³à²¨à³] LT', 44792 lastWeek: '[à²à³à³à²¨à³à²¯] dddd, LT', 44793 sameElse: 'L', 44794 }, 44795 relativeTime: { 44796 future: '%s ನà²à²¤à²°', 44797 past: '%s ಹಿà²à²¦à³', 44798 s: 'à²à³à²²à²µà³ à²à³à²·à²£à²à²³à³', 44799 ss: '%d ಸà³à²à³à²à²¡à³à²à²³à³', 44800 m: 'à²à²à²¦à³ ನಿಮಿಷ', 44801 mm: '%d ನಿಮಿಷ', 44802 h: 'à²à²à²¦à³ à²à²à²à³', 44803 hh: '%d à²à²à²à³', 44804 d: 'à²à²à²¦à³ ದಿನ', 44805 dd: '%d ದಿನ', 44806 M: 'à²à²à²¦à³ ತಿà²à²à²³à³', 44807 MM: '%d ತಿà²à²à²³à³', 44808 y: 'à²à²à²¦à³ ವರà³à²·', 44809 yy: '%d ವರà³à²·', 44810 }, 44811 preparse: function (string) { 44812 return string.replace(/[೧೨೩೪೫೬à³à³®à³¯à³¦]/g, function (match) { 44813 return numberMap[match]; 44814 }); 44815 }, 44816 postformat: function (string) { 44817 return string.replace(/\d/g, function (match) { 44818 return symbolMap[match]; 44819 }); 44820 }, 44821 meridiemParse: /ರಾತà³à²°à²¿|ಬà³à²³à²¿à²à³à²à³|ಮಧà³à²¯à²¾à²¹à³à²¨|ಸà²à²à³/, 44822 meridiemHour: function (hour, meridiem) { 44823 if (hour === 12) { 44824 hour = 0; 44825 } 44826 if (meridiem === 'ರಾತà³à²°à²¿') { 44827 return hour < 4 ? hour : hour + 12; 44828 } else if (meridiem === 'ಬà³à²³à²¿à²à³à²à³') { 44829 return hour; 44830 } else if (meridiem === 'ಮಧà³à²¯à²¾à²¹à³à²¨') { 44831 return hour >= 10 ? hour : hour + 12; 44832 } else if (meridiem === 'ಸà²à²à³') { 44833 return hour + 12; 44834 } 44835 }, 44836 meridiem: function (hour, minute, isLower) { 44837 if (hour < 4) { 44838 return 'ರಾತà³à²°à²¿'; 44839 } else if (hour < 10) { 44840 return 'ಬà³à²³à²¿à²à³à²à³'; 44841 } else if (hour < 17) { 44842 return 'ಮಧà³à²¯à²¾à²¹à³à²¨'; 44843 } else if (hour < 20) { 44844 return 'ಸà²à²à³'; 44845 } else { 44846 return 'ರಾತà³à²°à²¿'; 44847 } 44848 }, 44849 dayOfMonthOrdinalParse: /\d{1,2}(ನà³à³)/, 44850 ordinal: function (number) { 44851 return number + 'ನà³à³'; 44852 }, 44853 week: { 44854 dow: 0, // Sunday is the first day of the week. 44855 doy: 6, // The week that contains Jan 6th is the first week of the year. 44856 }, 44857 }); 44858 44859 return kn; 44860 44861}))); 44862 44863 44864/***/ }), 44865
vendor: 2,989 bytes, lines 44866-44960
44866/***/ "./node_modules/moment/locale/ko.js": 44867/*!******************************************!*\ 44868 !*** ./node_modules/moment/locale/ko.js ***! 44869 \******************************************/ 44870/*! no static exports found */ 44871/***/ (function(module, exports, __webpack_require__) { 44872 44873//! moment.js locale configuration 44874//! locale : Korean [ko] 44875//! author : Kyungwook, Park : https://github.com/kyungw00k 44876//! author : Jeeeyul Lee <[email protected]> 44877 44878;(function (global, factory) { 44879 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : 44880 undefined 44881}(this, (function (moment) { 'use strict'; 44882 44883 //! moment.js locale configuration 44884 44885 var ko = moment.defineLocale('ko', { 44886 months: '1ì_2ì_3ì_4ì_5ì_6ì_7ì_8ì_9ì_10ì_11ì_12ì'.split('_'), 44887 monthsShort: '1ì_2ì_3ì_4ì_5ì_6ì_7ì_8ì_9ì_10ì_11ì_12ì'.split( 44888 '_' 44889 ), 44890 weekdays: 'ì¼ìì¼_ììì¼_íìì¼_ììì¼_목ìì¼_ê¸ìì¼_í ìì¼'.split('_'), 44891 weekdaysShort: 'ì¼_ì_í_ì_목_ê¸_í '.split('_'), 44892 weekdaysMin: 'ì¼_ì_í_ì_목_ê¸_í '.split('_'), 44893 longDateFormat: { 44894 LT: 'A h:mm', 44895 LTS: 'A h:mm:ss', 44896 L: 'YYYY.MM.DD.', 44897 LL: 'YYYYë MMMM Dì¼', 44898 LLL: 'YYYYë MMMM Dì¼ A h:mm', 44899 LLLL: 'YYYYë MMMM Dì¼ dddd A h:mm', 44900 l: 'YYYY.MM.DD.', 44901 ll: 'YYYYë MMMM Dì¼', 44902 lll: 'YYYYë MMMM Dì¼ A h:mm', 44903 llll: 'YYYYë MMMM Dì¼ dddd A h:mm', 44904 }, 44905 calendar: { 44906 sameDay: 'ì¤ë LT', 44907 nextDay: 'ë´ì¼ LT', 44908 nextWeek: 'dddd LT', 44909 lastDay: 'ì´ì LT', 44910 lastWeek: 'ì§ë주 dddd LT', 44911 sameElse: 'L', 44912 }, 44913 relativeTime: { 44914 future: '%s í', 44915 past: '%s ì ', 44916 s: 'ëª ì´', 44917 ss: '%dì´', 44918 m: '1ë¶', 44919 mm: '%dë¶', 44920 h: 'í ìê°', 44921 hh: '%dìê°', 44922 d: 'í루', 44923 dd: '%dì¼', 44924 M: 'í ë¬', 44925 MM: '%dë¬', 44926 y: 'ì¼ ë ', 44927 yy: '%dë ', 44928 }, 44929 dayOfMonthOrdinalParse: /\d{1,2}(ì¼|ì|주)/, 44930 ordinal: function (number, period) { 44931 switch (period) { 44932 case 'd': 44933 case 'D': 44934 case 'DDD': 44935 return number + 'ì¼'; 44936 case 'M': 44937 return number + 'ì'; 44938 case 'w': 44939 case 'W': 44940 return number + '주'; 44941 default: 44942 return number; 44943 } 44944 }, 44945 meridiemParse: /ì¤ì |ì¤í/, 44946 isPM: function (token) { 44947 return token === 'ì¤í'; 44948 }, 44949 meridiem: function (hour, minute, isUpper) { 44950 return hour < 12 ? 'ì¤ì ' : 'ì¤í'; 44951 }, 44952 }); 44953 44954 return ko; 44955 44956}))); 44957 44958 44959/***/ }), 44960
vendor: 5,056 bytes, lines 44961-45094
44961/***/ "./node_modules/moment/locale/ku-kmr.js": 44962/*!**********************************************!*\ 44963 !*** ./node_modules/moment/locale/ku-kmr.js ***! 44964 \**********************************************/ 44965/*! no static exports found */ 44966/***/ (function(module, exports, __webpack_require__) { 44967 44968//! moment.js locale configuration 44969//! locale : Northern Kurdish [ku-kmr] 44970//! authors : Mazlum Ãzdogan : https://github.com/mergehez 44971 44972;(function (global, factory) { 44973 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : 44974 undefined 44975}(this, (function (moment) { 'use strict'; 44976 44977 //! moment.js locale configuration 44978 44979 function processRelativeTime(num, withoutSuffix, key, isFuture) { 44980 var format = { 44981 s: ['çend sanîye', 'çend sanîyeyan'], 44982 ss: [num + ' sanîye', num + ' sanîyeyan'], 44983 m: ['deqîqeyek', 'deqîqeyekê'], 44984 mm: [num + ' deqîqe', num + ' deqîqeyan'], 44985 h: ['saetek', 'saetekê'], 44986 hh: [num + ' saet', num + ' saetan'], 44987 d: ['rojek', 'rojekê'], 44988 dd: [num + ' roj', num + ' rojan'], 44989 w: ['hefteyek', 'hefteyekê'], 44990 ww: [num + ' hefte', num + ' hefteyan'], 44991 M: ['mehek', 'mehekê'], 44992 MM: [num + ' meh', num + ' mehan'], 44993 y: ['salek', 'salekê'], 44994 yy: [num + ' sal', num + ' salan'], 44995 }; 44996 return withoutSuffix ? format[key][0] : format[key][1]; 44997 } 44998 // function obliqueNumSuffix(num) { 44999 // if(num.includes(':')) 45000 // num = parseInt(num.split(':')[0]); 45001 // else 45002 // num = parseInt(num); 45003 // return num == 0 || num % 10 == 1 ? 'ê' 45004 // : (num > 10 && num % 10 == 0 ? 'î' : 'an'); 45005 // } 45006 function ezafeNumSuffix(num) { 45007 num = '' + num; 45008 var l = num.substring(num.length - 1), 45009 ll = num.length > 1 ? num.substring(num.length - 2) : ''; 45010 if ( 45011 !(ll == 12 || ll == 13) && 45012 (l == '2' || l == '3' || ll == '50' || l == '70' || l == '80') 45013 ) 45014 return 'yê'; 45015 return 'ê'; 45016 } 45017 45018 var kuKmr = moment.defineLocale('ku-kmr', { 45019 // According to the spelling rules defined by the work group of Weqfa Mezopotamyayê (Mesopotamia Foundation) 45020 // this should be: 'Kanûna PaÅîn_Sibat_Adar_Nîsan_Gulan_Hezîran_Tîrmeh_Tebax_Ãlon_Ãirîya PêÅîn_Ãirîya PaÅîn_Kanûna PêÅîn' 45021 // But the names below are more well known and handy 45022 months: 'Rêbendan_Sibat_Adar_Nîsan_Gulan_Hezîran_Tîrmeh_Tebax_Ãlon_Cotmeh_Mijdar_Berfanbar'.split( 45023 '_' 45024 ), 45025 monthsShort: 'Rêb_Sib_Ada_Nîs_Gul_Hez_Tîr_Teb_Ãlo_Cot_Mij_Ber'.split('_'), 45026 monthsParseExact: true, 45027 weekdays: 'YekÅem_DuÅem_SêÅem_ÃarÅem_PêncÅem_Ãn_Åemî'.split('_'), 45028 weekdaysShort: 'Yek_Du_Sê_Ãar_Pên_Ãn_Åem'.split('_'), 45029 weekdaysMin: 'Ye_Du_Sê_Ãa_Pê_Ãn_Åe'.split('_'), 45030 meridiem: function (hours, minutes, isLower) { 45031 if (hours < 12) { 45032 return isLower ? 'bn' : 'BN'; 45033 } else { 45034 return isLower ? 'pn' : 'PN'; 45035 } 45036 }, 45037 meridiemParse: /bn|BN|pn|PN/, 45038 longDateFormat: { 45039 LT: 'HH:mm', 45040 LTS: 'HH:mm:ss', 45041 L: 'DD.MM.YYYY', 45042 LL: 'Do MMMM[a] YYYY[an]', 45043 LLL: 'Do MMMM[a] YYYY[an] HH:mm', 45044 LLLL: 'dddd, Do MMMM[a] YYYY[an] HH:mm', 45045 ll: 'Do MMM[.] YYYY[an]', 45046 lll: 'Do MMM[.] YYYY[an] HH:mm', 45047 llll: 'ddd[.], Do MMM[.] YYYY[an] HH:mm', 45048 }, 45049 calendar: { 45050 sameDay: '[Ãro di saet] LT [de]', 45051 nextDay: '[Sibê di saet] LT [de]', 45052 nextWeek: 'dddd [di saet] LT [de]', 45053 lastDay: '[Duh di saet] LT [de]', 45054 lastWeek: 'dddd[a borî di saet] LT [de]', 45055 sameElse: 'L', 45056 }, 45057 relativeTime: { 45058 future: 'di %s de', 45059 past: 'berî %s', 45060 s: processRelativeTime, 45061 ss: processRelativeTime, 45062 m: processRelativeTime, 45063 mm: processRelativeTime, 45064 h: processRelativeTime, 45065 hh: processRelativeTime, 45066 d: processRelativeTime, 45067 dd: processRelativeTime, 45068 w: processRelativeTime, 45069 ww: processRelativeTime, 45070 M: processRelativeTime, 45071 MM: processRelativeTime, 45072 y: processRelativeTime, 45073 yy: processRelativeTime, 45074 }, 45075 dayOfMonthOrdinalParse: /\d{1,2}(?:yê|ê|\.)/, 45076 ordinal: function (num, period) { 45077 var p = period.toLowerCase(); 45078 if (p.includes('w') || p.includes('m')) return num + '.'; 45079 45080 return num + ezafeNumSuffix(num); 45081 }, 45082 week: { 45083 dow: 1, // Monday is the first day of the week. 45084 doy: 4, // The week that contains Jan 4th is the first week of the year. 45085 }, 45086 }); 45087 45088 return kuKmr; 45089 45090}))); 45091 45092 45093/***/ }), 45094
vendor: 4,268 bytes, lines 45095-45232
45095/***/ "./node_modules/moment/locale/ku.js": 45096/*!******************************************!*\ 45097 !*** ./node_modules/moment/locale/ku.js ***! 45098 \******************************************/ 45099/*! no static exports found */ 45100/***/ (function(module, exports, __webpack_require__) { 45101 45102//! moment.js locale configuration 45103//! locale : Kurdish [ku] 45104//! author : Shahram Mebashar : https://github.com/ShahramMebashar 45105 45106;(function (global, factory) { 45107 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : 45108 undefined 45109}(this, (function (moment) { 'use strict'; 45110 45111 //! moment.js locale configuration 45112 45113 var symbolMap = { 45114 1: 'Ù¡', 45115 2: 'Ù¢', 45116 3: 'Ù£', 45117 4: 'Ù¤', 45118 5: 'Ù¥', 45119 6: 'Ù¦', 45120 7: 'Ù§', 45121 8: 'Ù¨', 45122 9: 'Ù©', 45123 0: 'Ù ', 45124 }, 45125 numberMap = { 45126 'Ù¡': '1', 45127 'Ù¢': '2', 45128 'Ù£': '3', 45129 'Ù¤': '4', 45130 'Ù¥': '5', 45131 'Ù¦': '6', 45132 'Ù§': '7', 45133 'Ù¨': '8', 45134 'Ù©': '9', 45135 'Ù ': '0', 45136 }, 45137 months = [ 45138 'کاÙÙÙÛ Ø¯ÙÙÛÙ ', 45139 'Ø´ÙØ¨Ø§Øª', 45140 'ئازار', 45141 'ÙÛØ³Ø§Ù', 45142 'Ø¦Ø§ÛØ§Ø±', 45143 'ØÙزÛÛØ±Ø§Ù', 45144 'تÛÙ Ù ÙØ²', 45145 'ئاب', 45146 'ئÛÛÙÙÙÙ', 45147 'تشرÛÙÛ ÛÛÙÛÙ ', 45148 'تشرÛÙÛ Ø¯ÙÙÛÙ ', 45149 'ÙØ§ÙÙÙÛ ÛÛÚ©ÛÙ ', 45150 ]; 45151 45152 var ku = moment.defineLocale('ku', { 45153 months: months, 45154 monthsShort: months, 45155 weekdays: 45156 'ÛÙâÙØ´ÙâÙ Ù Ùâ_دÙÙØ´ÙâÙ Ù Ùâ_Ø³ÛØ´ÙâÙ Ù Ùâ_ÚÙØ§Ø±Ø´ÙâÙ Ù Ùâ_Ù¾ÛÙØ¬Ø´ÙâÙ Ù Ùâ_ÙÙâÛÙÛ_Ø´ÙâÙ Ù Ùâ'.split( 45157 '_' 45158 ), 45159 weekdaysShort: 45160 'ÛÙâÙØ´ÙâÙ _دÙÙØ´ÙâÙ _Ø³ÛØ´ÙâÙ _ÚÙØ§Ø±Ø´ÙâÙ _Ù¾ÛÙØ¬Ø´ÙâÙ _ÙÙâÛÙÛ_Ø´ÙâÙ Ù Ùâ'.split('_'), 45161 weekdaysMin: 'Û_د_س_Ú_Ù¾_Ù_Ø´'.split('_'), 45162 weekdaysParseExact: true, 45163 longDateFormat: { 45164 LT: 'HH:mm', 45165 LTS: 'HH:mm:ss', 45166 L: 'DD/MM/YYYY', 45167 LL: 'D MMMM YYYY', 45168 LLL: 'D MMMM YYYY HH:mm', 45169 LLLL: 'dddd, D MMMM YYYY HH:mm', 45170 }, 45171 meridiemParse: /ئÛÙØ§Ø±Ùâ|بÙâÛØ§ÙÛ/, 45172 isPM: function (input) { 45173 return /ئÛÙØ§Ø±Ùâ/.test(input); 45174 }, 45175 meridiem: function (hour, minute, isLower) { 45176 if (hour < 12) { 45177 return 'بÙâÛØ§ÙÛ'; 45178 } else { 45179 return 'ئÛÙØ§Ø±Ùâ'; 45180 } 45181 }, 45182 calendar: { 45183 sameDay: '[ئÙâÙ Ø±Û ÙØ§ØªÚÙ ÛØ±] LT', 45184 nextDay: '[بÙâÛØ§ÙÛ ÙØ§ØªÚÙ ÛØ±] LT', 45185 nextWeek: 'dddd [ÙØ§ØªÚÙ ÛØ±] LT', 45186 lastDay: '[دÙÛÙÛ ÙØ§ØªÚÙ ÛØ±] LT', 45187 lastWeek: 'dddd [ÙØ§ØªÚÙ ÛØ±] LT', 45188 sameElse: 'L', 45189 }, 45190 relativeTime: { 45191 future: 'ÙÙâ %s', 45192 past: '%s', 45193 s: 'ÚÙâÙØ¯ ÚØ±ÙÙâÛÙâÙ', 45194 ss: 'ÚØ±ÙÙâ %d', 45195 m: 'ÛÙâÙ Ø®ÙÙÙâÙ', 45196 mm: '%d Ø®ÙÙÙâÙ', 45197 h: 'ÛÙâÙ ÙØ§ØªÚÙ ÛØ±', 45198 hh: '%d ÙØ§ØªÚÙ ÛØ±', 45199 d: 'ÛÙâÙ ÚÛÚ', 45200 dd: '%d ÚÛÚ', 45201 M: 'ÛÙâ٠٠اÙÚ¯', 45202 MM: '%d ٠اÙÚ¯', 45203 y: 'ÛÙâ٠ساڵ', 45204 yy: '%d ساڵ', 45205 }, 45206 preparse: function (string) { 45207 return string 45208 .replace(/[١٢٣٤٥٦٧٨٩٠]/g, function (match) { 45209 return numberMap[match]; 45210 }) 45211 .replace(/Ø/g, ','); 45212 }, 45213 postformat: function (string) { 45214 return string 45215 .replace(/\d/g, function (match) { 45216 return symbolMap[match]; 45217 }) 45218 .replace(/,/g, 'Ø'); 45219 }, 45220 week: { 45221 dow: 6, // Saturday is the first day of the week. 45222 doy: 12, // The week that contains Jan 12th is the first week of the year. 45223 }, 45224 }); 45225 45226 return ku; 45227 45228}))); 45229 45230 45231/***/ }), 45232
vendor: 3,323 bytes, lines 45233-45336
45233/***/ "./node_modules/moment/locale/ky.js": 45234/*!******************************************!*\ 45235 !*** ./node_modules/moment/locale/ky.js ***! 45236 \******************************************/ 45237/*! no static exports found */ 45238/***/ (function(module, exports, __webpack_require__) { 45239 45240//! moment.js locale configuration 45241//! locale : Kyrgyz [ky] 45242//! author : Chyngyz Arystan uulu : https://github.com/chyngyz 45243 45244;(function (global, factory) { 45245 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : 45246 undefined 45247}(this, (function (moment) { 'use strict'; 45248 45249 //! moment.js locale configuration 45250 45251 var suffixes = { 45252 0: '-ÑÒ¯', 45253 1: '-Ñи', 45254 2: '-Ñи', 45255 3: '-ÑÒ¯', 45256 4: '-ÑÒ¯', 45257 5: '-Ñи', 45258 6: '-ÑÑ', 45259 7: '-Ñи', 45260 8: '-Ñи', 45261 9: '-ÑÑ', 45262 10: '-ÑÑ', 45263 20: '-ÑÑ', 45264 30: '-ÑÑ', 45265 40: '-ÑÑ', 45266 50: '-ÑÒ¯', 45267 60: '-ÑÑ', 45268 70: '-Ñи', 45269 80: '-Ñи', 45270 90: '-ÑÑ', 45271 100: '-ÑÒ¯', 45272 }; 45273 45274 var ky = moment.defineLocale('ky', { 45275 months: 'ÑнваÑÑ_ÑевÑалÑ_маÑÑ_апÑелÑ_май_иÑнÑ_иÑлÑ_авгÑÑÑ_ÑенÑÑбÑÑ_окÑÑбÑÑ_ноÑбÑÑ_декабÑÑ'.split( 45276 '_' 45277 ), 45278 monthsShort: 'Ñнв_Ñев_маÑÑ_апÑ_май_иÑнÑ_иÑлÑ_авг_Ñен_окÑ_ноÑ_дек'.split( 45279 '_' 45280 ), 45281 weekdays: 'ÐекÑемби_ÐүйÑөмбү_ШейÑемби_ШаÑÑемби_ÐейÑемби_ÐÑма_ÐÑемби'.split( 45282 '_' 45283 ), 45284 weekdaysShort: 'Ðек_Ðүй_Шей_ШаÑ_Ðей_ÐÑм_ÐÑе'.split('_'), 45285 weekdaysMin: 'Ðк_Ðй_Шй_ШÑ_Ðй_Ðм_ÐÑ'.split('_'), 45286 longDateFormat: { 45287 LT: 'HH:mm', 45288 LTS: 'HH:mm:ss', 45289 L: 'DD.MM.YYYY', 45290 LL: 'D MMMM YYYY', 45291 LLL: 'D MMMM YYYY HH:mm', 45292 LLLL: 'dddd, D MMMM YYYY HH:mm', 45293 }, 45294 calendar: { 45295 sameDay: '[Ðүгүн ÑааÑ] LT', 45296 nextDay: '[ÐÑÑең ÑааÑ] LT', 45297 nextWeek: 'dddd [ÑааÑ] LT', 45298 lastDay: '[ÐеÑÑÑ ÑааÑ] LT', 45299 lastWeek: '[Ó¨Ñкөн апÑанÑн] dddd [күнү] [ÑааÑ] LT', 45300 sameElse: 'L', 45301 }, 45302 relativeTime: { 45303 future: '%s иÑинде', 45304 past: '%s мÑÑÑн', 45305 s: 'биÑнеÑе ÑекÑнд', 45306 ss: '%d ÑекÑнд', 45307 m: 'Ð±Ð¸Ñ Ð¼Ò¯Ð½Ó©Ñ', 45308 mm: '%d мүнөÑ', 45309 h: 'Ð±Ð¸Ñ ÑааÑ', 45310 hh: '%d ÑааÑ', 45311 d: 'Ð±Ð¸Ñ ÐºÒ¯Ð½', 45312 dd: '%d күн', 45313 M: 'Ð±Ð¸Ñ Ð°Ð¹', 45314 MM: '%d ай', 45315 y: 'Ð±Ð¸Ñ Ð¶Ñл', 45316 yy: '%d жÑл', 45317 }, 45318 dayOfMonthOrdinalParse: /\d{1,2}-(Ñи|ÑÑ|ÑÒ¯|ÑÑ)/, 45319 ordinal: function (number) { 45320 var a = number % 10, 45321 b = number >= 100 ? 100 : null; 45322 return number + (suffixes[number] || suffixes[a] || suffixes[b]); 45323 }, 45324 week: { 45325 dow: 1, // Monday is the first day of the week. 45326 doy: 7, // The week that contains Jan 7th is the first week of the year. 45327 }, 45328 }); 45329 45330 return ky; 45331 45332}))); 45333 45334 45335/***/ }), 45336
vendor: 5,279 bytes, lines 45337-45493
45337/***/ "./node_modules/moment/locale/lb.js": 45338/*!******************************************!*\ 45339 !*** ./node_modules/moment/locale/lb.js ***! 45340 \******************************************/ 45341/*! no static exports found */ 45342/***/ (function(module, exports, __webpack_require__) { 45343 45344//! moment.js locale configuration 45345//! locale : Luxembourgish [lb] 45346//! author : mweimerskirch : https://github.com/mweimerskirch 45347//! author : David Raison : https://github.com/kwisatz 45348 45349;(function (global, factory) { 45350 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : 45351 undefined 45352}(this, (function (moment) { 'use strict'; 45353 45354 //! moment.js locale configuration 45355 45356 function processRelativeTime(number, withoutSuffix, key, isFuture) { 45357 var format = { 45358 m: ['eng Minutt', 'enger Minutt'], 45359 h: ['eng Stonn', 'enger Stonn'], 45360 d: ['een Dag', 'engem Dag'], 45361 M: ['ee Mount', 'engem Mount'], 45362 y: ['ee Joer', 'engem Joer'], 45363 }; 45364 return withoutSuffix ? format[key][0] : format[key][1]; 45365 } 45366 function processFutureTime(string) { 45367 var number = string.substr(0, string.indexOf(' ')); 45368 if (eifelerRegelAppliesToNumber(number)) { 45369 return 'a ' + string; 45370 } 45371 return 'an ' + string; 45372 } 45373 function processPastTime(string) { 45374 var number = string.substr(0, string.indexOf(' ')); 45375 if (eifelerRegelAppliesToNumber(number)) { 45376 return 'viru ' + string; 45377 } 45378 return 'virun ' + string; 45379 } 45380 /** 45381 * Returns true if the word before the given number loses the '-n' ending. 45382 * e.g. 'an 10 Deeg' but 'a 5 Deeg' 45383 * 45384 * @param number {integer} 45385 * @returns {boolean} 45386 */ 45387 function eifelerRegelAppliesToNumber(number) { 45388 number = parseInt(number, 10); 45389 if (isNaN(number)) { 45390 return false; 45391 } 45392 if (number < 0) { 45393 // Negative Number --> always true 45394 return true; 45395 } else if (number < 10) { 45396 // Only 1 digit 45397 if (4 <= number && number <= 7) { 45398 return true; 45399 } 45400 return false; 45401 } else if (number < 100) { 45402 // 2 digits 45403 var lastDigit = number % 10, 45404 firstDigit = number / 10; 45405 if (lastDigit === 0) { 45406 return eifelerRegelAppliesToNumber(firstDigit); 45407 } 45408 return eifelerRegelAppliesToNumber(lastDigit); 45409 } else if (number < 10000) { 45410 // 3 or 4 digits --> recursively check first digit 45411 while (number >= 10) { 45412 number = number / 10; 45413 } 45414 return eifelerRegelAppliesToNumber(number); 45415 } else { 45416 // Anything larger than 4 digits: recursively check first n-3 digits 45417 number = number / 1000; 45418 return eifelerRegelAppliesToNumber(number); 45419 } 45420 } 45421 45422 var lb = moment.defineLocale('lb', { 45423 months: 'Januar_Februar_Mäerz_Abrëll_Mee_Juni_Juli_August_September_Oktober_November_Dezember'.split( 45424 '_' 45425 ), 45426 monthsShort: 45427 'Jan._Febr._Mrz._Abr._Mee_Jun._Jul._Aug._Sept._Okt._Nov._Dez.'.split( 45428 '_' 45429 ), 45430 monthsParseExact: true, 45431 weekdays: 45432 'Sonndeg_Méindeg_Dënschdeg_Mëttwoch_Donneschdeg_Freideg_Samschdeg'.split( 45433 '_' 45434 ), 45435 weekdaysShort: 'So._Mé._Dë._Më._Do._Fr._Sa.'.split('_'), 45436 weekdaysMin: 'So_Mé_Dë_Më_Do_Fr_Sa'.split('_'), 45437 weekdaysParseExact: true, 45438 longDateFormat: { 45439 LT: 'H:mm [Auer]', 45440 LTS: 'H:mm:ss [Auer]', 45441 L: 'DD.MM.YYYY', 45442 LL: 'D. MMMM YYYY', 45443 LLL: 'D. MMMM YYYY H:mm [Auer]', 45444 LLLL: 'dddd, D. MMMM YYYY H:mm [Auer]', 45445 }, 45446 calendar: { 45447 sameDay: '[Haut um] LT', 45448 sameElse: 'L', 45449 nextDay: '[Muer um] LT', 45450 nextWeek: 'dddd [um] LT', 45451 lastDay: '[Gëschter um] LT', 45452 lastWeek: function () { 45453 // Different date string for 'Dënschdeg' (Tuesday) and 'Donneschdeg' (Thursday) due to phonological rule 45454 switch (this.day()) { 45455 case 2: 45456 case 4: 45457 return '[Leschten] dddd [um] LT'; 45458 default: 45459 return '[Leschte] dddd [um] LT'; 45460 } 45461 }, 45462 }, 45463 relativeTime: { 45464 future: processFutureTime, 45465 past: processPastTime, 45466 s: 'e puer Sekonnen', 45467 ss: '%d Sekonnen', 45468 m: processRelativeTime, 45469 mm: '%d Minutten', 45470 h: processRelativeTime, 45471 hh: '%d Stonnen', 45472 d: processRelativeTime, 45473 dd: '%d Deeg', 45474 M: processRelativeTime, 45475 MM: '%d Méint', 45476 y: processRelativeTime, 45477 yy: '%d Joer', 45478 }, 45479 dayOfMonthOrdinalParse: /\d{1,2}\./, 45480 ordinal: '%d.', 45481 week: { 45482 dow: 1, // Monday is the first day of the week. 45483 doy: 4, // The week that contains Jan 4th is the first week of the year. 45484 }, 45485 }); 45486 45487 return lb; 45488 45489}))); 45490 45491 45492/***/ }), 45493
vendor: 3,319 bytes, lines 45494-45579
45494/***/ "./node_modules/moment/locale/lo.js": 45495/*!******************************************!*\ 45496 !*** ./node_modules/moment/locale/lo.js ***! 45497 \******************************************/ 45498/*! no static exports found */ 45499/***/ (function(module, exports, __webpack_require__) { 45500 45501//! moment.js locale configuration 45502//! locale : Lao [lo] 45503//! author : Ryan Hart : https://github.com/ryanhart2 45504 45505;(function (global, factory) { 45506 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : 45507 undefined 45508}(this, (function (moment) { 'use strict'; 45509 45510 //! moment.js locale configuration 45511 45512 var lo = moment.defineLocale('lo', { 45513 months: 'ມັàºàºàºàº_àºàº¸àº¡àºàº²_ມີàºàº²_à»àº¡àºªàº²_àºàº¶àºàºªàº°àºàº²_ມິàºàº¸àºàº²_àºà»àº¥àº°àºàº»àº_ສິàºàº«àº²_àºàº±àºàºàº²_àºàº¸àº¥àº²_àºàº°àºàº´àº_àºàº±àºàº§àº²'.split( 45514 '_' 45515 ), 45516 monthsShort: 45517 'ມັàºàºàºàº_àºàº¸àº¡àºàº²_ມີàºàº²_à»àº¡àºªàº²_àºàº¶àºàºªàº°àºàº²_ມິàºàº¸àºàº²_àºà»àº¥àº°àºàº»àº_ສິàºàº«àº²_àºàº±àºàºàº²_àºàº¸àº¥àº²_àºàº°àºàº´àº_àºàº±àºàº§àº²'.split( 45518 '_' 45519 ), 45520 weekdays: 'àºàº²àºàº´àº_àºàº±àº_àºàº±àºàºàº²àº_àºàº¸àº_àºàº°àº«àº±àº_ສຸàº_à»àºªàº»àº²'.split('_'), 45521 weekdaysShort: 'àºàº´àº_àºàº±àº_àºàº±àºàºàº²àº_àºàº¸àº_àºàº°àº«àº±àº_ສຸàº_à»àºªàº»àº²'.split('_'), 45522 weekdaysMin: 'àº_àº_àºàº_àº_àºàº«_ສàº_ສ'.split('_'), 45523 weekdaysParseExact: true, 45524 longDateFormat: { 45525 LT: 'HH:mm', 45526 LTS: 'HH:mm:ss', 45527 L: 'DD/MM/YYYY', 45528 LL: 'D MMMM YYYY', 45529 LLL: 'D MMMM YYYY HH:mm', 45530 LLLL: 'ວັàºdddd D MMMM YYYY HH:mm', 45531 }, 45532 meridiemParse: /àºàºàºà»àºàº»à»àº²|àºàºàºà»àº¥àº/, 45533 isPM: function (input) { 45534 return input === 'àºàºàºà»àº¥àº'; 45535 }, 45536 meridiem: function (hour, minute, isLower) { 45537 if (hour < 12) { 45538 return 'àºàºàºà»àºàº»à»àº²'; 45539 } else { 45540 return 'àºàºàºà»àº¥àº'; 45541 } 45542 }, 45543 calendar: { 45544 sameDay: '[ມືà»àºàºµà»à»àº§àº¥àº²] LT', 45545 nextDay: '[ມືà»àºàº·à»àºà»àº§àº¥àº²] LT', 45546 nextWeek: '[ວັàº]dddd[à»à»àº²à»àº§àº¥àº²] LT', 45547 lastDay: '[ມືà»àº§àº²àºàºàºµà»à»àº§àº¥àº²] LT', 45548 lastWeek: '[ວັàº]dddd[à»àº¥à»àº§àºàºµà»à»àº§àº¥àº²] LT', 45549 sameElse: 'L', 45550 }, 45551 relativeTime: { 45552 future: 'àºàºµàº %s', 45553 past: '%sàºà»àº²àºàº¡àº²', 45554 s: 'àºà»à»à»àºàº»à»àº²à»àºàº§àº´àºàº²àºàºµ', 45555 ss: '%d ວິàºàº²àºàºµ', 45556 m: '1 àºàº²àºàºµ', 45557 mm: '%d àºàº²àºàºµ', 45558 h: '1 àºàº»à»àº§à»àº¡àº', 45559 hh: '%d àºàº»à»àº§à»àº¡àº', 45560 d: '1 ມືà»', 45561 dd: '%d ມືà»', 45562 M: '1 à»àºàº·àºàº', 45563 MM: '%d à»àºàº·àºàº', 45564 y: '1 àºàºµ', 45565 yy: '%d àºàºµ', 45566 }, 45567 dayOfMonthOrdinalParse: /(àºàºµà»)\d{1,2}/, 45568 ordinal: function (number) { 45569 return 'àºàºµà»' + number; 45570 }, 45571 }); 45572 45573 return lo; 45574 45575}))); 45576 45577 45578/***/ }), 45579
vendor: 4,979 bytes, lines 45580-45724
45580/***/ "./node_modules/moment/locale/lt.js": 45581/*!******************************************!*\ 45582 !*** ./node_modules/moment/locale/lt.js ***! 45583 \******************************************/ 45584/*! no static exports found */ 45585/***/ (function(module, exports, __webpack_require__) { 45586 45587//! moment.js locale configuration 45588//! locale : Lithuanian [lt] 45589//! author : Mindaugas MozÅ«ras : https://github.com/mmozuras 45590 45591;(function (global, factory) { 45592 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : 45593 undefined 45594}(this, (function (moment) { 'use strict'; 45595 45596 //! moment.js locale configuration 45597 45598 var units = { 45599 ss: 'sekundÄ_sekundžių_sekundes', 45600 m: 'minutÄ_minutÄs_minutÄ', 45601 mm: 'minutÄs_minuÄių_minutes', 45602 h: 'valanda_valandos_valandÄ ', 45603 hh: 'valandos_valandų_valandas', 45604 d: 'diena_dienos_dienÄ ', 45605 dd: 'dienos_dienų_dienas', 45606 M: 'mÄnuo_mÄnesio_mÄnesį', 45607 MM: 'mÄnesiai_mÄnesių_mÄnesius', 45608 y: 'metai_metų_metus', 45609 yy: 'metai_metų_metus', 45610 }; 45611 function translateSeconds(number, withoutSuffix, key, isFuture) { 45612 if (withoutSuffix) { 45613 return 'kelios sekundÄs'; 45614 } else { 45615 return isFuture ? 'kelių sekundžių' : 'kelias sekundes'; 45616 } 45617 } 45618 function translateSingular(number, withoutSuffix, key, isFuture) { 45619 return withoutSuffix 45620 ? forms(key)[0] 45621 : isFuture 45622 ? forms(key)[1] 45623 : forms(key)[2]; 45624 } 45625 function special(number) { 45626 return number % 10 === 0 || (number > 10 && number < 20); 45627 } 45628 function forms(key) { 45629 return units[key].split('_'); 45630 } 45631 function translate(number, withoutSuffix, key, isFuture) { 45632 var result = number + ' '; 45633 if (number === 1) { 45634 return ( 45635 result + translateSingular(number, withoutSuffix, key[0], isFuture) 45636 ); 45637 } else if (withoutSuffix) { 45638 return result + (special(number) ? forms(key)[1] : forms(key)[0]); 45639 } else { 45640 if (isFuture) { 45641 return result + forms(key)[1]; 45642 } else { 45643 return result + (special(number) ? forms(key)[1] : forms(key)[2]); 45644 } 45645 } 45646 } 45647 var lt = moment.defineLocale('lt', { 45648 months: { 45649 format: 'sausio_vasario_kovo_balandžio_gegužÄs_birželio_liepos_rugpjÅ«Äio_rugsÄjo_spalio_lapkriÄio_gruodžio'.split( 45650 '_' 45651 ), 45652 standalone: 45653 'sausis_vasaris_kovas_balandis_gegužÄ_birželis_liepa_rugpjÅ«tis_rugsÄjis_spalis_lapkritis_gruodis'.split( 45654 '_' 45655 ), 45656 isFormat: /D[oD]?(\[[^\[\]]*\]|\s)+MMMM?|MMMM?(\[[^\[\]]*\]|\s)+D[oD]?/, 45657 }, 45658 monthsShort: 'sau_vas_kov_bal_geg_bir_lie_rgp_rgs_spa_lap_grd'.split('_'), 45659 weekdays: { 45660 format: 'sekmadienį_pirmadienį_antradienį_treÄiadienį_ketvirtadienį_penktadienį_Å¡eÅ¡tadienį'.split( 45661 '_' 45662 ), 45663 standalone: 45664 'sekmadienis_pirmadienis_antradienis_treÄiadienis_ketvirtadienis_penktadienis_Å¡eÅ¡tadienis'.split( 45665 '_' 45666 ), 45667 isFormat: /dddd HH:mm/, 45668 }, 45669 weekdaysShort: 'Sek_Pir_Ant_Tre_Ket_Pen_Å eÅ¡'.split('_'), 45670 weekdaysMin: 'S_P_A_T_K_Pn_Å '.split('_'), 45671 weekdaysParseExact: true, 45672 longDateFormat: { 45673 LT: 'HH:mm', 45674 LTS: 'HH:mm:ss', 45675 L: 'YYYY-MM-DD', 45676 LL: 'YYYY [m.] MMMM D [d.]', 45677 LLL: 'YYYY [m.] MMMM D [d.], HH:mm [val.]', 45678 LLLL: 'YYYY [m.] MMMM D [d.], dddd, HH:mm [val.]', 45679 l: 'YYYY-MM-DD', 45680 ll: 'YYYY [m.] MMMM D [d.]', 45681 lll: 'YYYY [m.] MMMM D [d.], HH:mm [val.]', 45682 llll: 'YYYY [m.] MMMM D [d.], ddd, HH:mm [val.]', 45683 }, 45684 calendar: { 45685 sameDay: '[Å iandien] LT', 45686 nextDay: '[Rytoj] LT', 45687 nextWeek: 'dddd LT', 45688 lastDay: '[Vakar] LT', 45689 lastWeek: '[PraÄjusį] dddd LT', 45690 sameElse: 'L', 45691 }, 45692 relativeTime: { 45693 future: 'po %s', 45694 past: 'prieÅ¡ %s', 45695 s: translateSeconds, 45696 ss: translate, 45697 m: translateSingular, 45698 mm: translate, 45699 h: translateSingular, 45700 hh: translate, 45701 d: translateSingular, 45702 dd: translate, 45703 M: translateSingular, 45704 MM: translate, 45705 y: translateSingular, 45706 yy: translate, 45707 }, 45708 dayOfMonthOrdinalParse: /\d{1,2}-oji/, 45709 ordinal: function (number) { 45710 return number + '-oji'; 45711 }, 45712 week: { 45713 dow: 1, // Monday is the first day of the week. 45714 doy: 4, // The week that contains Jan 4th is the first week of the year. 45715 }, 45716 }); 45717 45718 return lt; 45719 45720}))); 45721 45722 45723/***/ }), 45724
vendor: 4,287 bytes, lines 45725-45838
45725/***/ "./node_modules/moment/locale/lv.js": 45726/*!******************************************!*\ 45727 !*** ./node_modules/moment/locale/lv.js ***! 45728 \******************************************/ 45729/*! no static exports found */ 45730/***/ (function(module, exports, __webpack_require__) { 45731 45732//! moment.js locale configuration 45733//! locale : Latvian [lv] 45734//! author : Kristaps Karlsons : https://github.com/skakri 45735//! author : JÄnis Elmeris : https://github.com/JanisE 45736 45737;(function (global, factory) { 45738 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : 45739 undefined 45740}(this, (function (moment) { 'use strict'; 45741 45742 //! moment.js locale configuration 45743 45744 var units = { 45745 ss: 'sekundes_sekundÄm_sekunde_sekundes'.split('_'), 45746 m: 'minÅ«tes_minÅ«tÄm_minÅ«te_minÅ«tes'.split('_'), 45747 mm: 'minÅ«tes_minÅ«tÄm_minÅ«te_minÅ«tes'.split('_'), 45748 h: 'stundas_stundÄm_stunda_stundas'.split('_'), 45749 hh: 'stundas_stundÄm_stunda_stundas'.split('_'), 45750 d: 'dienas_dienÄm_diena_dienas'.split('_'), 45751 dd: 'dienas_dienÄm_diena_dienas'.split('_'), 45752 M: 'mÄneÅ¡a_mÄneÅ¡iem_mÄnesis_mÄneÅ¡i'.split('_'), 45753 MM: 'mÄneÅ¡a_mÄneÅ¡iem_mÄnesis_mÄneÅ¡i'.split('_'), 45754 y: 'gada_gadiem_gads_gadi'.split('_'), 45755 yy: 'gada_gadiem_gads_gadi'.split('_'), 45756 }; 45757 /** 45758 * @param withoutSuffix boolean true = a length of time; false = before/after a period of time. 45759 */ 45760 function format(forms, number, withoutSuffix) { 45761 if (withoutSuffix) { 45762 // E.g. "21 minÅ«te", "3 minÅ«tes". 45763 return number % 10 === 1 && number % 100 !== 11 ? forms[2] : forms[3]; 45764 } else { 45765 // E.g. "21 minÅ«tes" as in "pÄc 21 minÅ«tes". 45766 // E.g. "3 minÅ«tÄm" as in "pÄc 3 minÅ«tÄm". 45767 return number % 10 === 1 && number % 100 !== 11 ? forms[0] : forms[1]; 45768 } 45769 } 45770 function relativeTimeWithPlural(number, withoutSuffix, key) { 45771 return number + ' ' + format(units[key], number, withoutSuffix); 45772 } 45773 function relativeTimeWithSingular(number, withoutSuffix, key) { 45774 return format(units[key], number, withoutSuffix); 45775 } 45776 function relativeSeconds(number, withoutSuffix) { 45777 return withoutSuffix ? 'dažas sekundes' : 'dažÄm sekundÄm'; 45778 } 45779 45780 var lv = moment.defineLocale('lv', { 45781 months: 'janvÄris_februÄris_marts_aprÄ«lis_maijs_jÅ«nijs_jÅ«lijs_augusts_septembris_oktobris_novembris_decembris'.split( 45782 '_' 45783 ), 45784 monthsShort: 'jan_feb_mar_apr_mai_jÅ«n_jÅ«l_aug_sep_okt_nov_dec'.split('_'), 45785 weekdays: 45786 'svÄtdiena_pirmdiena_otrdiena_treÅ¡diena_ceturtdiena_piektdiena_sestdiena'.split( 45787 '_' 45788 ), 45789 weekdaysShort: 'Sv_P_O_T_C_Pk_S'.split('_'), 45790 weekdaysMin: 'Sv_P_O_T_C_Pk_S'.split('_'), 45791 weekdaysParseExact: true, 45792 longDateFormat: { 45793 LT: 'HH:mm', 45794 LTS: 'HH:mm:ss', 45795 L: 'DD.MM.YYYY.', 45796 LL: 'YYYY. [gada] D. MMMM', 45797 LLL: 'YYYY. [gada] D. MMMM, HH:mm', 45798 LLLL: 'YYYY. [gada] D. MMMM, dddd, HH:mm', 45799 }, 45800 calendar: { 45801 sameDay: '[Å odien pulksten] LT', 45802 nextDay: '[RÄ«t pulksten] LT', 45803 nextWeek: 'dddd [pulksten] LT', 45804 lastDay: '[Vakar pulksten] LT', 45805 lastWeek: '[PagÄjuÅ¡Ä] dddd [pulksten] LT', 45806 sameElse: 'L', 45807 }, 45808 relativeTime: { 45809 future: 'pÄc %s', 45810 past: 'pirms %s', 45811 s: relativeSeconds, 45812 ss: relativeTimeWithPlural, 45813 m: relativeTimeWithSingular, 45814 mm: relativeTimeWithPlural, 45815 h: relativeTimeWithSingular, 45816 hh: relativeTimeWithPlural, 45817 d: relativeTimeWithSingular, 45818 dd: relativeTimeWithPlural, 45819 M: relativeTimeWithSingular, 45820 MM: relativeTimeWithPlural, 45821 y: relativeTimeWithSingular, 45822 yy: relativeTimeWithPlural, 45823 }, 45824 dayOfMonthOrdinalParse: /\d{1,2}\./, 45825 ordinal: '%d.', 45826 week: { 45827 dow: 1, // Monday is the first day of the week. 45828 doy: 4, // The week that contains Jan 4th is the first week of the year. 45829 }, 45830 }); 45831 45832 return lv; 45833 45834}))); 45835 45836 45837/***/ }), 45838
vendor: 4,595 bytes, lines 45839-45975
45839/***/ "./node_modules/moment/locale/me.js": 45840/*!******************************************!*\ 45841 !*** ./node_modules/moment/locale/me.js ***! 45842 \******************************************/ 45843/*! no static exports found */ 45844/***/ (function(module, exports, __webpack_require__) { 45845 45846//! moment.js locale configuration 45847//! locale : Montenegrin [me] 45848//! author : Miodrag NikaÄ <[email protected]> : https://github.com/miodragnikac 45849 45850;(function (global, factory) { 45851 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : 45852 undefined 45853}(this, (function (moment) { 'use strict'; 45854 45855 //! moment.js locale configuration 45856 45857 var translator = { 45858 words: { 45859 //Different grammatical cases 45860 ss: ['sekund', 'sekunda', 'sekundi'], 45861 m: ['jedan minut', 'jednog minuta'], 45862 mm: ['minut', 'minuta', 'minuta'], 45863 h: ['jedan sat', 'jednog sata'], 45864 hh: ['sat', 'sata', 'sati'], 45865 dd: ['dan', 'dana', 'dana'], 45866 MM: ['mjesec', 'mjeseca', 'mjeseci'], 45867 yy: ['godina', 'godine', 'godina'], 45868 }, 45869 correctGrammaticalCase: function (number, wordKey) { 45870 return number === 1 45871 ? wordKey[0] 45872 : number >= 2 && number <= 4 45873 ? wordKey[1] 45874 : wordKey[2]; 45875 }, 45876 translate: function (number, withoutSuffix, key) { 45877 var wordKey = translator.words[key]; 45878 if (key.length === 1) { 45879 return withoutSuffix ? wordKey[0] : wordKey[1]; 45880 } else { 45881 return ( 45882 number + 45883 ' ' + 45884 translator.correctGrammaticalCase(number, wordKey) 45885 ); 45886 } 45887 }, 45888 }; 45889 45890 var me = moment.defineLocale('me', { 45891 months: 'januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar'.split( 45892 '_' 45893 ), 45894 monthsShort: 45895 'jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.'.split('_'), 45896 monthsParseExact: true, 45897 weekdays: 'nedjelja_ponedjeljak_utorak_srijeda_Äetvrtak_petak_subota'.split( 45898 '_' 45899 ), 45900 weekdaysShort: 'ned._pon._uto._sri._Äet._pet._sub.'.split('_'), 45901 weekdaysMin: 'ne_po_ut_sr_Äe_pe_su'.split('_'), 45902 weekdaysParseExact: true, 45903 longDateFormat: { 45904 LT: 'H:mm', 45905 LTS: 'H:mm:ss', 45906 L: 'DD.MM.YYYY', 45907 LL: 'D. MMMM YYYY', 45908 LLL: 'D. MMMM YYYY H:mm', 45909 LLLL: 'dddd, D. MMMM YYYY H:mm', 45910 }, 45911 calendar: { 45912 sameDay: '[danas u] LT', 45913 nextDay: '[sjutra u] LT', 45914 45915 nextWeek: function () { 45916 switch (this.day()) { 45917 case 0: 45918 return '[u] [nedjelju] [u] LT'; 45919 case 3: 45920 return '[u] [srijedu] [u] LT'; 45921 case 6: 45922 return '[u] [subotu] [u] LT'; 45923 case 1: 45924 case 2: 45925 case 4: 45926 case 5: 45927 return '[u] dddd [u] LT'; 45928 } 45929 }, 45930 lastDay: '[juÄe u] LT', 45931 lastWeek: function () { 45932 var lastWeekDays = [ 45933 '[proÅ¡le] [nedjelje] [u] LT', 45934 '[proÅ¡log] [ponedjeljka] [u] LT', 45935 '[proÅ¡log] [utorka] [u] LT', 45936 '[proÅ¡le] [srijede] [u] LT', 45937 '[proÅ¡log] [Äetvrtka] [u] LT', 45938 '[proÅ¡log] [petka] [u] LT', 45939 '[proÅ¡le] [subote] [u] LT', 45940 ]; 45941 return lastWeekDays[this.day()]; 45942 }, 45943 sameElse: 'L', 45944 }, 45945 relativeTime: { 45946 future: 'za %s', 45947 past: 'prije %s', 45948 s: 'nekoliko sekundi', 45949 ss: translator.translate, 45950 m: translator.translate, 45951 mm: translator.translate, 45952 h: translator.translate, 45953 hh: translator.translate, 45954 d: 'dan', 45955 dd: translator.translate, 45956 M: 'mjesec', 45957 MM: translator.translate, 45958 y: 'godinu', 45959 yy: translator.translate, 45960 }, 45961 dayOfMonthOrdinalParse: /\d{1,2}\./, 45962 ordinal: '%d.', 45963 week: { 45964 dow: 1, // Monday is the first day of the week. 45965 doy: 7, // The week that contains Jan 7th is the first week of the year. 45966 }, 45967 }); 45968 45969 return me; 45970 45971}))); 45972 45973 45974/***/ }), 45975
vendor: 2,733 bytes, lines 45976-46055
45976/***/ "./node_modules/moment/locale/mi.js": 45977/*!******************************************!*\ 45978 !*** ./node_modules/moment/locale/mi.js ***! 45979 \******************************************/ 45980/*! no static exports found */ 45981/***/ (function(module, exports, __webpack_require__) { 45982 45983//! moment.js locale configuration 45984//! locale : Maori [mi] 45985//! author : John Corrigan <[email protected]> : https://github.com/johnideal 45986 45987;(function (global, factory) { 45988 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : 45989 undefined 45990}(this, (function (moment) { 'use strict'; 45991 45992 //! moment.js locale configuration 45993 45994 var mi = moment.defineLocale('mi', { 45995 months: 'Kohi-tÄte_Hui-tanguru_PoutÅ«-te-rangi_Paenga-whÄwhÄ_Haratua_Pipiri_HÅngoingoi_Here-turi-kÅkÄ_Mahuru_Whiringa-Ä-nuku_Whiringa-Ä-rangi_Hakihea'.split( 45996 '_' 45997 ), 45998 monthsShort: 45999 'Kohi_Hui_Pou_Pae_Hara_Pipi_HÅngoi_Here_Mahu_Whi-nu_Whi-ra_Haki'.split( 46000 '_' 46001 ), 46002 monthsRegex: /(?:['a-z\u0101\u014D\u016B]+\-?){1,3}/i, 46003 monthsStrictRegex: /(?:['a-z\u0101\u014D\u016B]+\-?){1,3}/i, 46004 monthsShortRegex: /(?:['a-z\u0101\u014D\u016B]+\-?){1,3}/i, 46005 monthsShortStrictRegex: /(?:['a-z\u0101\u014D\u016B]+\-?){1,2}/i, 46006 weekdays: 'RÄtapu_Mane_TÅ«rei_Wenerei_TÄite_Paraire_HÄtarei'.split('_'), 46007 weekdaysShort: 'Ta_Ma_TÅ«_We_TÄi_Pa_HÄ'.split('_'), 46008 weekdaysMin: 'Ta_Ma_TÅ«_We_TÄi_Pa_HÄ'.split('_'), 46009 longDateFormat: { 46010 LT: 'HH:mm', 46011 LTS: 'HH:mm:ss', 46012 L: 'DD/MM/YYYY', 46013 LL: 'D MMMM YYYY', 46014 LLL: 'D MMMM YYYY [i] HH:mm', 46015 LLLL: 'dddd, D MMMM YYYY [i] HH:mm', 46016 }, 46017 calendar: { 46018 sameDay: '[i teie mahana, i] LT', 46019 nextDay: '[apopo i] LT', 46020 nextWeek: 'dddd [i] LT', 46021 lastDay: '[inanahi i] LT', 46022 lastWeek: 'dddd [whakamutunga i] LT', 46023 sameElse: 'L', 46024 }, 46025 relativeTime: { 46026 future: 'i roto i %s', 46027 past: '%s i mua', 46028 s: 'te hÄkona ruarua', 46029 ss: '%d hÄkona', 46030 m: 'he meneti', 46031 mm: '%d meneti', 46032 h: 'te haora', 46033 hh: '%d haora', 46034 d: 'he ra', 46035 dd: '%d ra', 46036 M: 'he marama', 46037 MM: '%d marama', 46038 y: 'he tau', 46039 yy: '%d tau', 46040 }, 46041 dayOfMonthOrdinalParse: /\d{1,2}º/, 46042 ordinal: '%dº', 46043 week: { 46044 dow: 1, // Monday is the first day of the week. 46045 doy: 4, // The week that contains Jan 4th is the first week of the year. 46046 }, 46047 }); 46048 46049 return mi; 46050 46051}))); 46052 46053 46054/***/ }), 46055
vendor: 3,832 bytes, lines 46056-46161
46056/***/ "./node_modules/moment/locale/mk.js": 46057/*!******************************************!*\ 46058 !*** ./node_modules/moment/locale/mk.js ***! 46059 \******************************************/ 46060/*! no static exports found */ 46061/***/ (function(module, exports, __webpack_require__) { 46062 46063//! moment.js locale configuration 46064//! locale : Macedonian [mk] 46065//! author : Borislav Mickov : https://github.com/B0k0 46066//! author : Sashko Todorov : https://github.com/bkyceh 46067 46068;(function (global, factory) { 46069 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : 46070 undefined 46071}(this, (function (moment) { 'use strict'; 46072 46073 //! moment.js locale configuration 46074 46075 var mk = moment.defineLocale('mk', { 46076 months: 'ÑанÑаÑи_ÑевÑÑаÑи_маÑÑ_апÑил_маÑ_ÑÑни_ÑÑли_авгÑÑÑ_ÑепÑемвÑи_окÑомвÑи_ноемвÑи_декемвÑи'.split( 46077 '_' 46078 ), 46079 monthsShort: 'Ñан_Ñев_маÑ_апÑ_маÑ_ÑÑн_ÑÑл_авг_Ñеп_окÑ_ное_дек'.split('_'), 46080 weekdays: 'недела_понеделник_вÑоÑник_ÑÑеда_ÑеÑвÑÑок_пеÑок_ÑабоÑа'.split( 46081 '_' 46082 ), 46083 weekdaysShort: 'нед_пон_вÑо_ÑÑе_ÑеÑ_пеÑ_Ñаб'.split('_'), 46084 weekdaysMin: 'нe_пo_вÑ_ÑÑ_Ñе_пе_Ña'.split('_'), 46085 longDateFormat: { 46086 LT: 'H:mm', 46087 LTS: 'H:mm:ss', 46088 L: 'D.MM.YYYY', 46089 LL: 'D MMMM YYYY', 46090 LLL: 'D MMMM YYYY H:mm', 46091 LLLL: 'dddd, D MMMM YYYY H:mm', 46092 }, 46093 calendar: { 46094 sameDay: '[ÐÐµÐ½ÐµÑ Ð²Ð¾] LT', 46095 nextDay: '[УÑÑе во] LT', 46096 nextWeek: '[Ðо] dddd [во] LT', 46097 lastDay: '[ÐÑеÑа во] LT', 46098 lastWeek: function () { 46099 switch (this.day()) { 46100 case 0: 46101 case 3: 46102 case 6: 46103 return '[ÐзминаÑаÑа] dddd [во] LT'; 46104 case 1: 46105 case 2: 46106 case 4: 46107 case 5: 46108 return '[ÐзминаÑиоÑ] dddd [во] LT'; 46109 } 46110 }, 46111 sameElse: 'L', 46112 }, 46113 relativeTime: { 46114 future: 'за %s', 46115 past: 'пÑед %s', 46116 s: 'Ð½ÐµÐºÐ¾Ð»ÐºÑ ÑекÑнди', 46117 ss: '%d ÑекÑнди', 46118 m: 'една минÑÑа', 46119 mm: '%d минÑÑи', 46120 h: 'еден ÑаÑ', 46121 hh: '%d ÑаÑа', 46122 d: 'еден ден', 46123 dd: '%d дена', 46124 M: 'еден меÑеÑ', 46125 MM: '%d меÑеÑи', 46126 y: 'една година', 46127 yy: '%d години', 46128 }, 46129 dayOfMonthOrdinalParse: /\d{1,2}-(ев|ен|Ñи|ви|Ñи|ми)/, 46130 ordinal: function (number) { 46131 var lastDigit = number % 10, 46132 last2Digits = number % 100; 46133 if (number === 0) { 46134 return number + '-ев'; 46135 } else if (last2Digits === 0) { 46136 return number + '-ен'; 46137 } else if (last2Digits > 10 && last2Digits < 20) { 46138 return number + '-Ñи'; 46139 } else if (lastDigit === 1) { 46140 return number + '-ви'; 46141 } else if (lastDigit === 2) { 46142 return number + '-Ñи'; 46143 } else if (lastDigit === 7 || lastDigit === 8) { 46144 return number + '-ми'; 46145 } else { 46146 return number + '-Ñи'; 46147 } 46148 }, 46149 week: { 46150 dow: 1, // Monday is the first day of the week. 46151 doy: 7, // The week that contains Jan 7th is the first week of the year. 46152 }, 46153 }); 46154 46155 return mk; 46156 46157}))); 46158 46159 46160/***/ }), 46161
vendor: 4,085 bytes, lines 46162-46263
46162/***/ "./node_modules/moment/locale/ml.js": 46163/*!******************************************!*\ 46164 !*** ./node_modules/moment/locale/ml.js ***! 46165 \******************************************/ 46166/*! no static exports found */ 46167/***/ (function(module, exports, __webpack_require__) { 46168 46169//! moment.js locale configuration 46170//! locale : Malayalam [ml] 46171//! author : Floyd Pink : https://github.com/floydpink 46172 46173;(function (global, factory) { 46174 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : 46175 undefined 46176}(this, (function (moment) { 'use strict'; 46177 46178 //! moment.js locale configuration 46179 46180 var ml = moment.defineLocale('ml', { 46181 months: 'à´à´¨àµà´µà´°à´¿_à´«àµà´¬àµà´°àµà´µà´°à´¿_മാർà´àµà´àµ_à´à´ªàµà´°à´¿àµ½_à´®àµà´¯àµ_à´àµàµº_à´àµà´²àµ_à´à´à´¸àµà´±àµà´±àµ_à´¸àµà´ªàµà´±àµà´±à´à´¬àµ¼_à´à´àµà´àµà´¬àµ¼_നവà´à´¬àµ¼_à´¡à´¿à´¸à´à´¬àµ¼'.split( 46182 '_' 46183 ), 46184 monthsShort: 46185 'à´à´¨àµ._à´«àµà´¬àµà´°àµ._മാർ._à´à´ªàµà´°à´¿._à´®àµà´¯àµ_à´àµàµº_à´àµà´²àµ._à´à´._à´¸àµà´ªàµà´±àµà´±._à´à´àµà´àµ._നവà´._à´¡à´¿à´¸à´.'.split( 46186 '_' 46187 ), 46188 monthsParseExact: true, 46189 weekdays: 46190 'à´à´¾à´¯à´±à´¾à´´àµà´_തിà´àµà´à´³à´¾à´´àµà´_à´àµà´µàµà´µà´¾à´´àµà´_à´¬àµà´§à´¨à´¾à´´àµà´_à´µàµà´¯à´¾à´´à´¾à´´àµà´_à´µàµà´³àµà´³à´¿à´¯à´¾à´´àµà´_ശനിയാഴàµà´'.split( 46191 '_' 46192 ), 46193 weekdaysShort: 'à´à´¾à´¯àµ¼_തിà´àµà´àµ¾_à´àµà´µàµà´µ_à´¬àµà´§àµ»_à´µàµà´¯à´¾à´´à´_à´µàµà´³àµà´³à´¿_ശനി'.split('_'), 46194 weekdaysMin: 'à´à´¾_തി_à´àµ_à´¬àµ_à´µàµà´¯à´¾_à´µàµ_à´¶'.split('_'), 46195 longDateFormat: { 46196 LT: 'A h:mm -à´¨àµ', 46197 LTS: 'A h:mm:ss -à´¨àµ', 46198 L: 'DD/MM/YYYY', 46199 LL: 'D MMMM YYYY', 46200 LLL: 'D MMMM YYYY, A h:mm -à´¨àµ', 46201 LLLL: 'dddd, D MMMM YYYY, A h:mm -à´¨àµ', 46202 }, 46203 calendar: { 46204 sameDay: '[à´à´¨àµà´¨àµ] LT', 46205 nextDay: '[നാളàµ] LT', 46206 nextWeek: 'dddd, LT', 46207 lastDay: '[à´à´¨àµà´¨à´²àµ] LT', 46208 lastWeek: '[à´à´´à´¿à´àµà´] dddd, LT', 46209 sameElse: 'L', 46210 }, 46211 relativeTime: { 46212 future: '%s à´à´´à´¿à´àµà´àµ', 46213 past: '%s à´®àµàµ»à´ªàµ', 46214 s: 'ഠൽപ നിമിഷà´àµà´àµ¾', 46215 ss: '%d à´¸àµà´àµà´àµ»à´¡àµ', 46216 m: 'à´à´°àµ മിനിറàµà´±àµ', 46217 mm: '%d മിനിറàµà´±àµ', 46218 h: 'à´à´°àµ മണിà´àµà´àµàµ¼', 46219 hh: '%d മണിà´àµà´àµàµ¼', 46220 d: 'à´à´°àµ ദിവസà´', 46221 dd: '%d ദിവസà´', 46222 M: 'à´à´°àµ മാസà´', 46223 MM: '%d മാസà´', 46224 y: 'à´à´°àµ വർഷà´', 46225 yy: '%d വർഷà´', 46226 }, 46227 meridiemParse: /രാതàµà´°à´¿|രാവിലàµ|à´à´àµà´ à´à´´à´¿à´àµà´àµ|à´µàµà´àµà´¨àµà´¨àµà´°à´|രാതàµà´°à´¿/i, 46228 meridiemHour: function (hour, meridiem) { 46229 if (hour === 12) { 46230 hour = 0; 46231 } 46232 if ( 46233 (meridiem === 'രാതàµà´°à´¿' && hour >= 4) || 46234 meridiem === 'à´à´àµà´ à´à´´à´¿à´àµà´àµ' || 46235 meridiem === 'à´µàµà´àµà´¨àµà´¨àµà´°à´' 46236 ) { 46237 return hour + 12; 46238 } else { 46239 return hour; 46240 } 46241 }, 46242 meridiem: function (hour, minute, isLower) { 46243 if (hour < 4) { 46244 return 'രാതàµà´°à´¿'; 46245 } else if (hour < 12) { 46246 return 'രാവിലàµ'; 46247 } else if (hour < 17) { 46248 return 'à´à´àµà´ à´à´´à´¿à´àµà´àµ'; 46249 } else if (hour < 20) { 46250 return 'à´µàµà´àµà´¨àµà´¨àµà´°à´'; 46251 } else { 46252 return 'രാതàµà´°à´¿'; 46253 } 46254 }, 46255 }); 46256 46257 return ml; 46258 46259}))); 46260 46261 46262/***/ }), 46263
vendor: 4,280 bytes, lines 46264-46383
46264/***/ "./node_modules/moment/locale/mn.js": 46265/*!******************************************!*\ 46266 !*** ./node_modules/moment/locale/mn.js ***! 46267 \******************************************/ 46268/*! no static exports found */ 46269/***/ (function(module, exports, __webpack_require__) { 46270 46271//! moment.js locale configuration 46272//! locale : Mongolian [mn] 46273//! author : Javkhlantugs Nyamdorj : https://github.com/javkhaanj7 46274 46275;(function (global, factory) { 46276 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : 46277 undefined 46278}(this, (function (moment) { 'use strict'; 46279 46280 //! moment.js locale configuration 46281 46282 function translate(number, withoutSuffix, key, isFuture) { 46283 switch (key) { 46284 case 's': 46285 return withoutSuffix ? 'Ñ ÑÐ´Ñ Ñн ÑекÑнд' : 'Ñ ÑÐ´Ñ Ñн ÑекÑндÑн'; 46286 case 'ss': 46287 return number + (withoutSuffix ? ' ÑекÑнд' : ' ÑекÑндÑн'); 46288 case 'm': 46289 case 'mm': 46290 return number + (withoutSuffix ? ' минÑÑ' : ' минÑÑÑн'); 46291 case 'h': 46292 case 'hh': 46293 return number + (withoutSuffix ? ' Ñаг' : ' Ñагийн'); 46294 case 'd': 46295 case 'dd': 46296 return number + (withoutSuffix ? ' өдөÑ' : ' өдÑийн'); 46297 case 'M': 46298 case 'MM': 46299 return number + (withoutSuffix ? ' ÑаÑ' : ' ÑаÑÑн'); 46300 case 'y': 46301 case 'yy': 46302 return number + (withoutSuffix ? ' жил' : ' жилийн'); 46303 default: 46304 return number; 46305 } 46306 } 46307 46308 var mn = moment.defineLocale('mn', { 46309 months: 'ÐÑгдүгÑÑÑ ÑаÑ_ХоÑÑдÑÐ³Ð°Ð°Ñ ÑаÑ_ÐÑÑавдÑÐ³Ð°Ð°Ñ ÑаÑ_ÐÓ©ÑөвдүгÑÑÑ ÑаÑ_ТавдÑÐ³Ð°Ð°Ñ ÑаÑ_ÐÑÑгадÑÐ³Ð°Ð°Ñ ÑаÑ_ÐолдÑÐ³Ð°Ð°Ñ ÑаÑ_ÐаймдÑÐ³Ð°Ð°Ñ ÑаÑ_ÐÑдүгÑÑÑ ÑаÑ_ÐÑавдÑÐ³Ð°Ð°Ñ ÑаÑ_ÐÑван нÑгдүгÑÑÑ ÑаÑ_ÐÑван Ñ Ð¾ÑÑдÑÐ³Ð°Ð°Ñ ÑаÑ'.split( 46310 '_' 46311 ), 46312 monthsShort: 46313 '1 ÑаÑ_2 ÑаÑ_3 ÑаÑ_4 ÑаÑ_5 ÑаÑ_6 ÑаÑ_7 ÑаÑ_8 ÑаÑ_9 ÑаÑ_10 ÑаÑ_11 ÑаÑ_12 ÑаÑ'.split( 46314 '_' 46315 ), 46316 monthsParseExact: true, 46317 weekdays: 'ÐÑм_Ðаваа_ÐÑгмаÑ_ÐÑ Ð°Ð³Ð²Ð°_ÐÒ¯ÑÑв_ÐааÑан_ÐÑмба'.split('_'), 46318 weekdaysShort: 'ÐÑм_Ðав_ÐÑг_ÐÑ Ð°_ÐÒ¯Ñ_Ðаа_ÐÑм'.split('_'), 46319 weekdaysMin: 'ÐÑ_Ðа_ÐÑ_ÐÑ _ÐÒ¯_Ðа_ÐÑ'.split('_'), 46320 weekdaysParseExact: true, 46321 longDateFormat: { 46322 LT: 'HH:mm', 46323 LTS: 'HH:mm:ss', 46324 L: 'YYYY-MM-DD', 46325 LL: 'YYYY Ð¾Ð½Ñ MMMMÑн D', 46326 LLL: 'YYYY Ð¾Ð½Ñ MMMMÑн D HH:mm', 46327 LLLL: 'dddd, YYYY Ð¾Ð½Ñ MMMMÑн D HH:mm', 46328 }, 46329 meridiemParse: /Ò®Ó¨|ҮХ/i, 46330 isPM: function (input) { 46331 return input === 'ҮХ'; 46332 }, 46333 meridiem: function (hour, minute, isLower) { 46334 if (hour < 12) { 46335 return 'Ò®Ó¨'; 46336 } else { 46337 return 'ҮХ'; 46338 } 46339 }, 46340 calendar: { 46341 sameDay: '[ӨнөөдөÑ] LT', 46342 nextDay: '[ÐаÑгааÑ] LT', 46343 nextWeek: '[ÐÑÑÑ ] dddd LT', 46344 lastDay: '[Ó¨ÑигдөÑ] LT', 46345 lastWeek: '[ӨнгөÑÑөн] dddd LT', 46346 sameElse: 'L', 46347 }, 46348 relativeTime: { 46349 future: '%s даÑаа', 46350 past: '%s өмнө', 46351 s: translate, 46352 ss: translate, 46353 m: translate, 46354 mm: translate, 46355 h: translate, 46356 hh: translate, 46357 d: translate, 46358 dd: translate, 46359 M: translate, 46360 MM: translate, 46361 y: translate, 46362 yy: translate, 46363 }, 46364 dayOfMonthOrdinalParse: /\d{1,2} өдөÑ/, 46365 ordinal: function (number, period) { 46366 switch (period) { 46367 case 'd': 46368 case 'D': 46369 case 'DDD': 46370 return number + ' өдөÑ'; 46371 default: 46372 return number; 46373 } 46374 }, 46375 }); 46376 46377 return mn; 46378 46379}))); 46380 46381 46382/***/ }), 46383
vendor: 7,844 bytes, lines 46384-46606
46384/***/ "./node_modules/moment/locale/mr.js": 46385/*!******************************************!*\ 46386 !*** ./node_modules/moment/locale/mr.js ***! 46387 \******************************************/ 46388/*! no static exports found */ 46389/***/ (function(module, exports, __webpack_require__) { 46390 46391//! moment.js locale configuration 46392//! locale : Marathi [mr] 46393//! author : Harshad Kale : https://github.com/kalehv 46394//! author : Vivek Athalye : https://github.com/vnathalye 46395 46396;(function (global, factory) { 46397 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : 46398 undefined 46399}(this, (function (moment) { 'use strict'; 46400 46401 //! moment.js locale configuration 46402 46403 var symbolMap = { 46404 1: '१', 46405 2: '२', 46406 3: '३', 46407 4: '४', 46408 5: '५', 46409 6: '६', 46410 7: 'à¥', 46411 8: '८', 46412 9: '९', 46413 0: '०', 46414 }, 46415 numberMap = { 46416 '१': '1', 46417 '२': '2', 46418 '३': '3', 46419 '४': '4', 46420 '५': '5', 46421 '६': '6', 46422 'à¥': '7', 46423 '८': '8', 46424 '९': '9', 46425 '०': '0', 46426 }; 46427 46428 function relativeTimeMr(number, withoutSuffix, string, isFuture) { 46429 var output = ''; 46430 if (withoutSuffix) { 46431 switch (string) { 46432 case 's': 46433 output = 'à¤à¤¾à¤¹à¥ सà¥à¤à¤à¤¦'; 46434 break; 46435 case 'ss': 46436 output = '%d सà¥à¤à¤à¤¦'; 46437 break; 46438 case 'm': 46439 output = 'à¤à¤ मिनिà¤'; 46440 break; 46441 case 'mm': 46442 output = '%d मिनिà¤à¥'; 46443 break; 46444 case 'h': 46445 output = 'à¤à¤ तास'; 46446 break; 46447 case 'hh': 46448 output = '%d तास'; 46449 break; 46450 case 'd': 46451 output = 'à¤à¤ दिवस'; 46452 break; 46453 case 'dd': 46454 output = '%d दिवस'; 46455 break; 46456 case 'M': 46457 output = 'à¤à¤ महिना'; 46458 break; 46459 case 'MM': 46460 output = '%d महिनà¥'; 46461 break; 46462 case 'y': 46463 output = 'à¤à¤ वरà¥à¤·'; 46464 break; 46465 case 'yy': 46466 output = '%d वरà¥à¤·à¥'; 46467 break; 46468 } 46469 } else { 46470 switch (string) { 46471 case 's': 46472 output = 'à¤à¤¾à¤¹à¥ सà¥à¤à¤à¤¦à¤¾à¤'; 46473 break; 46474 case 'ss': 46475 output = '%d सà¥à¤à¤à¤¦à¤¾à¤'; 46476 break; 46477 case 'm': 46478 output = 'à¤à¤à¤¾ मिनिà¤à¤¾'; 46479 break; 46480 case 'mm': 46481 output = '%d मिनिà¤à¤¾à¤'; 46482 break; 46483 case 'h': 46484 output = 'à¤à¤à¤¾ तासा'; 46485 break; 46486 case 'hh': 46487 output = '%d तासाà¤'; 46488 break; 46489 case 'd': 46490 output = 'à¤à¤à¤¾ दिवसा'; 46491 break; 46492 case 'dd': 46493 output = '%d दिवसाà¤'; 46494 break; 46495 case 'M': 46496 output = 'à¤à¤à¤¾ महिनà¥à¤¯à¤¾'; 46497 break; 46498 case 'MM': 46499 output = '%d महिनà¥à¤¯à¤¾à¤'; 46500 break; 46501 case 'y': 46502 output = 'à¤à¤à¤¾ वरà¥à¤·à¤¾'; 46503 break; 46504 case 'yy': 46505 output = '%d वरà¥à¤·à¤¾à¤'; 46506 break; 46507 } 46508 } 46509 return output.replace(/%d/i, number); 46510 } 46511 46512 var mr = moment.defineLocale('mr', { 46513 months: 'à¤à¤¾à¤¨à¥à¤µà¤¾à¤°à¥_फà¥à¤¬à¥à¤°à¥à¤µà¤¾à¤°à¥_मारà¥à¤_à¤à¤ªà¥à¤°à¤¿à¤²_मà¥_à¤à¥à¤¨_à¤à¥à¤²à¥_à¤à¤à¤¸à¥à¤_सपà¥à¤à¥à¤à¤¬à¤°_à¤à¤à¥à¤à¥à¤¬à¤°_नà¥à¤µà¥à¤¹à¥à¤à¤¬à¤°_डिसà¥à¤à¤¬à¤°'.split( 46514 '_' 46515 ), 46516 monthsShort: 46517 'à¤à¤¾à¤¨à¥._फà¥à¤¬à¥à¤°à¥._मारà¥à¤._à¤à¤ªà¥à¤°à¤¿._मà¥._à¤à¥à¤¨._à¤à¥à¤²à¥._à¤à¤._सपà¥à¤à¥à¤._à¤à¤à¥à¤à¥._नà¥à¤µà¥à¤¹à¥à¤._डिसà¥à¤.'.split( 46518 '_' 46519 ), 46520 monthsParseExact: true, 46521 weekdays: 'रविवार_सà¥à¤®à¤µà¤¾à¤°_मà¤à¤à¤³à¤µà¤¾à¤°_बà¥à¤§à¤µà¤¾à¤°_à¤à¥à¤°à¥à¤µà¤¾à¤°_शà¥à¤à¥à¤°à¤µà¤¾à¤°_शनिवार'.split('_'), 46522 weekdaysShort: 'रवि_सà¥à¤®_मà¤à¤à¤³_बà¥à¤§_à¤à¥à¤°à¥_शà¥à¤à¥à¤°_शनि'.split('_'), 46523 weekdaysMin: 'र_सà¥_मà¤_बà¥_à¤à¥_शà¥_श'.split('_'), 46524 longDateFormat: { 46525 LT: 'A h:mm वाà¤à¤¤à¤¾', 46526 LTS: 'A h:mm:ss वाà¤à¤¤à¤¾', 46527 L: 'DD/MM/YYYY', 46528 LL: 'D MMMM YYYY', 46529 LLL: 'D MMMM YYYY, A h:mm वाà¤à¤¤à¤¾', 46530 LLLL: 'dddd, D MMMM YYYY, A h:mm वाà¤à¤¤à¤¾', 46531 }, 46532 calendar: { 46533 sameDay: '[à¤à¤] LT', 46534 nextDay: '[à¤à¤¦à¥à¤¯à¤¾] LT', 46535 nextWeek: 'dddd, LT', 46536 lastDay: '[à¤à¤¾à¤²] LT', 46537 lastWeek: '[माà¤à¥à¤²] dddd, LT', 46538 sameElse: 'L', 46539 }, 46540 relativeTime: { 46541 future: '%sमधà¥à¤¯à¥', 46542 past: '%sपà¥à¤°à¥à¤µà¥', 46543 s: relativeTimeMr, 46544 ss: relativeTimeMr, 46545 m: relativeTimeMr, 46546 mm: relativeTimeMr, 46547 h: relativeTimeMr, 46548 hh: relativeTimeMr, 46549 d: relativeTimeMr, 46550 dd: relativeTimeMr, 46551 M: relativeTimeMr, 46552 MM: relativeTimeMr, 46553 y: relativeTimeMr, 46554 yy: relativeTimeMr, 46555 }, 46556 preparse: function (string) { 46557 return string.replace(/[१२३४५६à¥à¥®à¥¯à¥¦]/g, function (match) { 46558 return numberMap[match]; 46559 }); 46560 }, 46561 postformat: function (string) { 46562 return string.replace(/\d/g, function (match) { 46563 return symbolMap[match]; 46564 }); 46565 }, 46566 meridiemParse: /पहाà¤à¥|सà¤à¤¾à¤³à¥|दà¥à¤ªà¤¾à¤°à¥|सायà¤à¤à¤¾à¤³à¥|रातà¥à¤°à¥/, 46567 meridiemHour: function (hour, meridiem) { 46568 if (hour === 12) { 46569 hour = 0; 46570 } 46571 if (meridiem === 'पहाà¤à¥' || meridiem === 'सà¤à¤¾à¤³à¥') { 46572 return hour; 46573 } else if ( 46574 meridiem === 'दà¥à¤ªà¤¾à¤°à¥' || 46575 meridiem === 'सायà¤à¤à¤¾à¤³à¥' || 46576 meridiem === 'रातà¥à¤°à¥' 46577 ) { 46578 return hour >= 12 ? hour : hour + 12; 46579 } 46580 }, 46581 meridiem: function (hour, minute, isLower) { 46582 if (hour >= 0 && hour < 6) { 46583 return 'पहाà¤à¥'; 46584 } else if (hour < 12) { 46585 return 'सà¤à¤¾à¤³à¥'; 46586 } else if (hour < 17) { 46587 return 'दà¥à¤ªà¤¾à¤°à¥'; 46588 } else if (hour < 20) { 46589 return 'सायà¤à¤à¤¾à¤³à¥'; 46590 } else { 46591 return 'रातà¥à¤°à¥'; 46592 } 46593 }, 46594 week: { 46595 dow: 0, // Sunday is the first day of the week. 46596 doy: 6, // The week that contains Jan 6th is the first week of the year. 46597 }, 46598 }); 46599 46600 return mr; 46601 46602}))); 46603 46604 46605/***/ }), 46606
vendor: 3,116 bytes, lines 46607-46702
46607/***/ "./node_modules/moment/locale/ms-my.js": 46608/*!*********************************************!*\ 46609 !*** ./node_modules/moment/locale/ms-my.js ***! 46610 \*********************************************/ 46611/*! no static exports found */ 46612/***/ (function(module, exports, __webpack_require__) { 46613 46614//! moment.js locale configuration 46615//! locale : Malay [ms-my] 46616//! note : DEPRECATED, the correct one is [ms] 46617//! author : Weldan Jamili : https://github.com/weldan 46618 46619;(function (global, factory) { 46620 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : 46621 undefined 46622}(this, (function (moment) { 'use strict'; 46623 46624 //! moment.js locale configuration 46625 46626 var msMy = moment.defineLocale('ms-my', { 46627 months: 'Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember'.split( 46628 '_' 46629 ), 46630 monthsShort: 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis'.split('_'), 46631 weekdays: 'Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu'.split('_'), 46632 weekdaysShort: 'Ahd_Isn_Sel_Rab_Kha_Jum_Sab'.split('_'), 46633 weekdaysMin: 'Ah_Is_Sl_Rb_Km_Jm_Sb'.split('_'), 46634 longDateFormat: { 46635 LT: 'HH.mm', 46636 LTS: 'HH.mm.ss', 46637 L: 'DD/MM/YYYY', 46638 LL: 'D MMMM YYYY', 46639 LLL: 'D MMMM YYYY [pukul] HH.mm', 46640 LLLL: 'dddd, D MMMM YYYY [pukul] HH.mm', 46641 }, 46642 meridiemParse: /pagi|tengahari|petang|malam/, 46643 meridiemHour: function (hour, meridiem) { 46644 if (hour === 12) { 46645 hour = 0; 46646 } 46647 if (meridiem === 'pagi') { 46648 return hour; 46649 } else if (meridiem === 'tengahari') { 46650 return hour >= 11 ? hour : hour + 12; 46651 } else if (meridiem === 'petang' || meridiem === 'malam') { 46652 return hour + 12; 46653 } 46654 }, 46655 meridiem: function (hours, minutes, isLower) { 46656 if (hours < 11) { 46657 return 'pagi'; 46658 } else if (hours < 15) { 46659 return 'tengahari'; 46660 } else if (hours < 19) { 46661 return 'petang'; 46662 } else { 46663 return 'malam'; 46664 } 46665 }, 46666 calendar: { 46667 sameDay: '[Hari ini pukul] LT', 46668 nextDay: '[Esok pukul] LT', 46669 nextWeek: 'dddd [pukul] LT', 46670 lastDay: '[Kelmarin pukul] LT', 46671 lastWeek: 'dddd [lepas pukul] LT', 46672 sameElse: 'L', 46673 }, 46674 relativeTime: { 46675 future: 'dalam %s', 46676 past: '%s yang lepas', 46677 s: 'beberapa saat', 46678 ss: '%d saat', 46679 m: 'seminit', 46680 mm: '%d minit', 46681 h: 'sejam', 46682 hh: '%d jam', 46683 d: 'sehari', 46684 dd: '%d hari', 46685 M: 'sebulan', 46686 MM: '%d bulan', 46687 y: 'setahun', 46688 yy: '%d tahun', 46689 }, 46690 week: { 46691 dow: 1, // Monday is the first day of the week. 46692 doy: 7, // The week that contains Jan 7th is the first week of the year. 46693 }, 46694 }); 46695 46696 return msMy; 46697 46698}))); 46699 46700 46701/***/ }), 46702
vendor: 3,047 bytes, lines 46703-46797
46703/***/ "./node_modules/moment/locale/ms.js": 46704/*!******************************************!*\ 46705 !*** ./node_modules/moment/locale/ms.js ***! 46706 \******************************************/ 46707/*! no static exports found */ 46708/***/ (function(module, exports, __webpack_require__) { 46709 46710//! moment.js locale configuration 46711//! locale : Malay [ms] 46712//! author : Weldan Jamili : https://github.com/weldan 46713 46714;(function (global, factory) { 46715 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : 46716 undefined 46717}(this, (function (moment) { 'use strict'; 46718 46719 //! moment.js locale configuration 46720 46721 var ms = moment.defineLocale('ms', { 46722 months: 'Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember'.split( 46723 '_' 46724 ), 46725 monthsShort: 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis'.split('_'), 46726 weekdays: 'Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu'.split('_'), 46727 weekdaysShort: 'Ahd_Isn_Sel_Rab_Kha_Jum_Sab'.split('_'), 46728 weekdaysMin: 'Ah_Is_Sl_Rb_Km_Jm_Sb'.split('_'), 46729 longDateFormat: { 46730 LT: 'HH.mm', 46731 LTS: 'HH.mm.ss', 46732 L: 'DD/MM/YYYY', 46733 LL: 'D MMMM YYYY', 46734 LLL: 'D MMMM YYYY [pukul] HH.mm', 46735 LLLL: 'dddd, D MMMM YYYY [pukul] HH.mm', 46736 }, 46737 meridiemParse: /pagi|tengahari|petang|malam/, 46738 meridiemHour: function (hour, meridiem) { 46739 if (hour === 12) { 46740 hour = 0; 46741 } 46742 if (meridiem === 'pagi') { 46743 return hour; 46744 } else if (meridiem === 'tengahari') { 46745 return hour >= 11 ? hour : hour + 12; 46746 } else if (meridiem === 'petang' || meridiem === 'malam') { 46747 return hour + 12; 46748 } 46749 }, 46750 meridiem: function (hours, minutes, isLower) { 46751 if (hours < 11) { 46752 return 'pagi'; 46753 } else if (hours < 15) { 46754 return 'tengahari'; 46755 } else if (hours < 19) { 46756 return 'petang'; 46757 } else { 46758 return 'malam'; 46759 } 46760 }, 46761 calendar: { 46762 sameDay: '[Hari ini pukul] LT', 46763 nextDay: '[Esok pukul] LT', 46764 nextWeek: 'dddd [pukul] LT', 46765 lastDay: '[Kelmarin pukul] LT', 46766 lastWeek: 'dddd [lepas pukul] LT', 46767 sameElse: 'L', 46768 }, 46769 relativeTime: { 46770 future: 'dalam %s', 46771 past: '%s yang lepas', 46772 s: 'beberapa saat', 46773 ss: '%d saat', 46774 m: 'seminit', 46775 mm: '%d minit', 46776 h: 'sejam', 46777 hh: '%d jam', 46778 d: 'sehari', 46779 dd: '%d hari', 46780 M: 'sebulan', 46781 MM: '%d bulan', 46782 y: 'setahun', 46783 yy: '%d tahun', 46784 }, 46785 week: { 46786 dow: 1, // Monday is the first day of the week. 46787 doy: 7, // The week that contains Jan 7th is the first week of the year. 46788 }, 46789 }); 46790 46791 return ms; 46792 46793}))); 46794 46795 46796/***/ }), 46797
vendor: 2,378 bytes, lines 46798-46873
46798/***/ "./node_modules/moment/locale/mt.js": 46799/*!******************************************!*\ 46800 !*** ./node_modules/moment/locale/mt.js ***! 46801 \******************************************/ 46802/*! no static exports found */ 46803/***/ (function(module, exports, __webpack_require__) { 46804 46805//! moment.js locale configuration 46806//! locale : Maltese (Malta) [mt] 46807//! author : Alessandro Maruccia : https://github.com/alesma 46808 46809;(function (global, factory) { 46810 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : 46811 undefined 46812}(this, (function (moment) { 'use strict'; 46813 46814 //! moment.js locale configuration 46815 46816 var mt = moment.defineLocale('mt', { 46817 months: 'Jannar_Frar_Marzu_April_Mejju_Ä unju_Lulju_Awwissu_Settembru_Ottubru_Novembru_DiÄembru'.split( 46818 '_' 46819 ), 46820 monthsShort: 'Jan_Fra_Mar_Apr_Mej_Ä un_Lul_Aww_Set_Ott_Nov_DiÄ'.split('_'), 46821 weekdays: 46822 'Il-Ħadd_It-Tnejn_It-Tlieta_L-Erbgħa_Il-Ħamis_Il-Ä imgħa_Is-Sibt'.split( 46823 '_' 46824 ), 46825 weekdaysShort: 'Ħad_Tne_Tli_Erb_Ħam_Ä im_Sib'.split('_'), 46826 weekdaysMin: 'Ħa_Tn_Tl_Er_Ħa_Ä i_Si'.split('_'), 46827 longDateFormat: { 46828 LT: 'HH:mm', 46829 LTS: 'HH:mm:ss', 46830 L: 'DD/MM/YYYY', 46831 LL: 'D MMMM YYYY', 46832 LLL: 'D MMMM YYYY HH:mm', 46833 LLLL: 'dddd, D MMMM YYYY HH:mm', 46834 }, 46835 calendar: { 46836 sameDay: '[Illum fil-]LT', 46837 nextDay: '[Għada fil-]LT', 46838 nextWeek: 'dddd [fil-]LT', 46839 lastDay: '[Il-bieraħ fil-]LT', 46840 lastWeek: 'dddd [li għadda] [fil-]LT', 46841 sameElse: 'L', 46842 }, 46843 relativeTime: { 46844 future: 'fâ %s', 46845 past: '%s ilu', 46846 s: 'ftit sekondi', 46847 ss: '%d sekondi', 46848 m: 'minuta', 46849 mm: '%d minuti', 46850 h: 'siegħa', 46851 hh: '%d siegħat', 46852 d: 'Ä¡urnata', 46853 dd: '%d Ä¡ranet', 46854 M: 'xahar', 46855 MM: '%d xhur', 46856 y: 'sena', 46857 yy: '%d sni', 46858 }, 46859 dayOfMonthOrdinalParse: /\d{1,2}º/, 46860 ordinal: '%dº', 46861 week: { 46862 dow: 1, // Monday is the first day of the week. 46863 doy: 4, // The week that contains Jan 4th is the first week of the year. 46864 }, 46865 }); 46866 46867 return mt; 46868 46869}))); 46870 46871 46872/***/ }), 46873
vendor: 3,912 bytes, lines 46874-46984
46874/***/ "./node_modules/moment/locale/my.js": 46875/*!******************************************!*\ 46876 !*** ./node_modules/moment/locale/my.js ***! 46877 \******************************************/ 46878/*! no static exports found */ 46879/***/ (function(module, exports, __webpack_require__) { 46880 46881//! moment.js locale configuration 46882//! locale : Burmese [my] 46883//! author : Squar team, mysquar.com 46884//! author : David Rossellat : https://github.com/gholadr 46885//! author : Tin Aung Lin : https://github.com/thanyawzinmin 46886 46887;(function (global, factory) { 46888 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : 46889 undefined 46890}(this, (function (moment) { 'use strict'; 46891 46892 //! moment.js locale configuration 46893 46894 var symbolMap = { 46895 1: 'á', 46896 2: 'á', 46897 3: 'á', 46898 4: 'á', 46899 5: 'á ', 46900 6: 'á', 46901 7: 'á', 46902 8: 'á', 46903 9: 'á', 46904 0: 'á', 46905 }, 46906 numberMap = { 46907 'á': '1', 46908 'á': '2', 46909 'á': '3', 46910 'á': '4', 46911 'á ': '5', 46912 'á': '6', 46913 'á': '7', 46914 'á': '8', 46915 'á': '9', 46916 'á': '0', 46917 }; 46918 46919 var my = moment.defineLocale('my', { 46920 months: 'áááºááá«áá®_áá±áá±á¬áºáá«áá®_áááº_á§áá¼á®_áá±_áá½ááº_áá°ááá¯ááº_áá¼áá¯ááº_á ááºáááºáá¬_á¡á±á¬ááºááá¯áá¬_ááá¯áááºáá¬_áá®áááºáá¬'.split( 46921 '_' 46922 ), 46923 monthsShort: 'áááº_áá±_áááº_áá¼á®_áá±_áá½ááº_ááá¯ááº_áá¼_á ááº_á¡á±á¬ááº_ááá¯_áá®'.split('_'), 46924 weekdays: 'ááááºá¹ááá½á±_ááááºá¹áá¬_á¡ááºá¹áá«_áá¯áá¹ááá°á¸_áá¼á¬áááá±á¸_áá±á¬áá¼á¬_á áá±'.split( 46925 '_' 46926 ), 46927 weekdaysShort: 'áá½á±_áá¬_áá«_áá°á¸_áá¼á¬_áá±á¬_áá±'.split('_'), 46928 weekdaysMin: 'áá½á±_áá¬_áá«_áá°á¸_áá¼á¬_áá±á¬_áá±'.split('_'), 46929 46930 longDateFormat: { 46931 LT: 'HH:mm', 46932 LTS: 'HH:mm:ss', 46933 L: 'DD/MM/YYYY', 46934 LL: 'D MMMM YYYY', 46935 LLL: 'D MMMM YYYY HH:mm', 46936 LLLL: 'dddd D MMMM YYYY HH:mm', 46937 }, 46938 calendar: { 46939 sameDay: '[ááá±.] LT [áá¾á¬]', 46940 nextDay: '[ááááºáá¼ááº] LT [áá¾á¬]', 46941 nextWeek: 'dddd LT [áá¾á¬]', 46942 lastDay: '[ááá±.á] LT [áá¾á¬]', 46943 lastWeek: '[áá¼á®á¸áá²á·áá±á¬] dddd LT [áá¾á¬]', 46944 sameElse: 'L', 46945 }, 46946 relativeTime: { 46947 future: 'áá¬áááºá· %s áá¾á¬', 46948 past: 'áá½ááºáá²á·áá±á¬ %s á', 46949 s: 'á áá¹áááº.á¡áááºá¸áááº', 46950 ss: '%d á áá¹ááá·áº', 46951 m: 'áá áºáááá áº', 46952 mm: '%d áááá áº', 46953 h: 'áá áºáá¬áá®', 46954 hh: '%d áá¬áá®', 46955 d: 'áá áºáááº', 46956 dd: '%d áááº', 46957 M: 'áá áºá', 46958 MM: '%d á', 46959 y: 'áá áºáá¾á áº', 46960 yy: '%d áá¾á áº', 46961 }, 46962 preparse: function (string) { 46963 return string.replace(/[ááááá ááááá]/g, function (match) { 46964 return numberMap[match]; 46965 }); 46966 }, 46967 postformat: function (string) { 46968 return string.replace(/\d/g, function (match) { 46969 return symbolMap[match]; 46970 }); 46971 }, 46972 week: { 46973 dow: 1, // Monday is the first day of the week. 46974 doy: 4, // The week that contains Jan 4th is the first week of the year. 46975 }, 46976 }); 46977 46978 return my; 46979 46980}))); 46981 46982 46983/***/ }), 46984
vendor: 2,605 bytes, lines 46985-47064
46985/***/ "./node_modules/moment/locale/nb.js": 46986/*!******************************************!*\ 46987 !*** ./node_modules/moment/locale/nb.js ***! 46988 \******************************************/ 46989/*! no static exports found */ 46990/***/ (function(module, exports, __webpack_require__) { 46991 46992//! moment.js locale configuration 46993//! locale : Norwegian Bokmål [nb] 46994//! authors : Espen Hovlandsdal : https://github.com/rexxars 46995//! Sigurd Gartmann : https://github.com/sigurdga 46996//! Stephen Ramthun : https://github.com/stephenramthun 46997 46998;(function (global, factory) { 46999 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : 47000 undefined 47001}(this, (function (moment) { 'use strict'; 47002 47003 //! moment.js locale configuration 47004 47005 var nb = moment.defineLocale('nb', { 47006 months: 'januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember'.split( 47007 '_' 47008 ), 47009 monthsShort: 47010 'jan._feb._mars_apr._mai_juni_juli_aug._sep._okt._nov._des.'.split('_'), 47011 monthsParseExact: true, 47012 weekdays: 'søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag'.split('_'), 47013 weekdaysShort: 'sø._ma._ti._on._to._fr._lø.'.split('_'), 47014 weekdaysMin: 'sø_ma_ti_on_to_fr_lø'.split('_'), 47015 weekdaysParseExact: true, 47016 longDateFormat: { 47017 LT: 'HH:mm', 47018 LTS: 'HH:mm:ss', 47019 L: 'DD.MM.YYYY', 47020 LL: 'D. MMMM YYYY', 47021 LLL: 'D. MMMM YYYY [kl.] HH:mm', 47022 LLLL: 'dddd D. MMMM YYYY [kl.] HH:mm', 47023 }, 47024 calendar: { 47025 sameDay: '[i dag kl.] LT', 47026 nextDay: '[i morgen kl.] LT', 47027 nextWeek: 'dddd [kl.] LT', 47028 lastDay: '[i går kl.] LT', 47029 lastWeek: '[forrige] dddd [kl.] LT', 47030 sameElse: 'L', 47031 }, 47032 relativeTime: { 47033 future: 'om %s', 47034 past: '%s siden', 47035 s: 'noen sekunder', 47036 ss: '%d sekunder', 47037 m: 'ett minutt', 47038 mm: '%d minutter', 47039 h: 'én time', 47040 hh: '%d timer', 47041 d: 'én dag', 47042 dd: '%d dager', 47043 w: 'én uke', 47044 ww: '%d uker', 47045 M: 'én måned', 47046 MM: '%d måneder', 47047 y: 'ett år', 47048 yy: '%d år', 47049 }, 47050 dayOfMonthOrdinalParse: /\d{1,2}\./, 47051 ordinal: '%d.', 47052 week: { 47053 dow: 1, // Monday is the first day of the week. 47054 doy: 4, // The week that contains Jan 4th is the first week of the year. 47055 }, 47056 }); 47057 47058 return nb; 47059 47060}))); 47061 47062 47063/***/ }), 47064
vendor: 4,981 bytes, lines 47065-47205
47065/***/ "./node_modules/moment/locale/ne.js": 47066/*!******************************************!*\ 47067 !*** ./node_modules/moment/locale/ne.js ***! 47068 \******************************************/ 47069/*! no static exports found */ 47070/***/ (function(module, exports, __webpack_require__) { 47071 47072//! moment.js locale configuration 47073//! locale : Nepalese [ne] 47074//! author : suvash : https://github.com/suvash 47075 47076;(function (global, factory) { 47077 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : 47078 undefined 47079}(this, (function (moment) { 'use strict'; 47080 47081 //! moment.js locale configuration 47082 47083 var symbolMap = { 47084 1: '१', 47085 2: '२', 47086 3: '३', 47087 4: '४', 47088 5: '५', 47089 6: '६', 47090 7: 'à¥', 47091 8: '८', 47092 9: '९', 47093 0: '०', 47094 }, 47095 numberMap = { 47096 '१': '1', 47097 '२': '2', 47098 '३': '3', 47099 '४': '4', 47100 '५': '5', 47101 '६': '6', 47102 'à¥': '7', 47103 '८': '8', 47104 '९': '9', 47105 '०': '0', 47106 }; 47107 47108 var ne = moment.defineLocale('ne', { 47109 months: 'à¤à¤¨à¤µà¤°à¥_फà¥à¤¬à¥à¤°à¥à¤µà¤°à¥_मारà¥à¤_ठपà¥à¤°à¤¿à¤²_मà¤_à¤à¥à¤¨_à¤à¥à¤²à¤¾à¤_ठà¤à¤·à¥à¤_सà¥à¤ªà¥à¤à¥à¤®à¥à¤¬à¤°_ठà¤à¥à¤à¥à¤¬à¤°_नà¥à¤à¥à¤®à¥à¤¬à¤°_डिसà¥à¤®à¥à¤¬à¤°'.split( 47110 '_' 47111 ), 47112 monthsShort: 47113 'à¤à¤¨._फà¥à¤¬à¥à¤°à¥._मारà¥à¤_ठपà¥à¤°à¤¿._मà¤_à¤à¥à¤¨_à¤à¥à¤²à¤¾à¤._ठà¤._सà¥à¤ªà¥à¤._ठà¤à¥à¤à¥._नà¥à¤à¥._डिसà¥.'.split( 47114 '_' 47115 ), 47116 monthsParseExact: true, 47117 weekdays: 'à¤à¤à¤¤à¤¬à¤¾à¤°_सà¥à¤®à¤¬à¤¾à¤°_मà¤à¥à¤à¤²à¤¬à¤¾à¤°_बà¥à¤§à¤¬à¤¾à¤°_बिहिबार_शà¥à¤à¥à¤°à¤¬à¤¾à¤°_शनिबार'.split( 47118 '_' 47119 ), 47120 weekdaysShort: 'à¤à¤à¤¤._सà¥à¤®._मà¤à¥à¤à¤²._बà¥à¤§._बिहि._शà¥à¤à¥à¤°._शनि.'.split('_'), 47121 weekdaysMin: 'à¤._सà¥._मà¤._बà¥._बि._शà¥._श.'.split('_'), 47122 weekdaysParseExact: true, 47123 longDateFormat: { 47124 LT: 'Aà¤à¥ h:mm बà¤à¥', 47125 LTS: 'Aà¤à¥ h:mm:ss बà¤à¥', 47126 L: 'DD/MM/YYYY', 47127 LL: 'D MMMM YYYY', 47128 LLL: 'D MMMM YYYY, Aà¤à¥ h:mm बà¤à¥', 47129 LLLL: 'dddd, D MMMM YYYY, Aà¤à¥ h:mm बà¤à¥', 47130 }, 47131 preparse: function (string) { 47132 return string.replace(/[१२३४५६à¥à¥®à¥¯à¥¦]/g, function (match) { 47133 return numberMap[match]; 47134 }); 47135 }, 47136 postformat: function (string) { 47137 return string.replace(/\d/g, function (match) { 47138 return symbolMap[match]; 47139 }); 47140 }, 47141 meridiemParse: /राति|बिहान|दिà¤à¤à¤¸à¥|साà¤à¤/, 47142 meridiemHour: function (hour, meridiem) { 47143 if (hour === 12) { 47144 hour = 0; 47145 } 47146 if (meridiem === 'राति') { 47147 return hour < 4 ? hour : hour + 12; 47148 } else if (meridiem === 'बिहान') { 47149 return hour; 47150 } else if (meridiem === 'दिà¤à¤à¤¸à¥') { 47151 return hour >= 10 ? hour : hour + 12; 47152 } else if (meridiem === 'साà¤à¤') { 47153 return hour + 12; 47154 } 47155 }, 47156 meridiem: function (hour, minute, isLower) { 47157 if (hour < 3) { 47158 return 'राति'; 47159 } else if (hour < 12) { 47160 return 'बिहान'; 47161 } else if (hour < 16) { 47162 return 'दिà¤à¤à¤¸à¥'; 47163 } else if (hour < 20) { 47164 return 'साà¤à¤'; 47165 } else { 47166 return 'राति'; 47167 } 47168 }, 47169 calendar: { 47170 sameDay: '[à¤à¤] LT', 47171 nextDay: '[à¤à¥à¤²à¤¿] LT', 47172 nextWeek: '[à¤à¤à¤à¤¦à¥] dddd[,] LT', 47173 lastDay: '[हिà¤à¥] LT', 47174 lastWeek: '[à¤à¤à¤à¥] dddd[,] LT', 47175 sameElse: 'L', 47176 }, 47177 relativeTime: { 47178 future: '%sमा', 47179 past: '%s ठà¤à¤¾à¤¡à¤¿', 47180 s: 'à¤à¥à¤¹à¥ à¤à¥à¤·à¤£', 47181 ss: '%d सà¥à¤à¥à¤£à¥à¤¡', 47182 m: 'à¤à¤ मिनà¥à¤', 47183 mm: '%d मिनà¥à¤', 47184 h: 'à¤à¤ à¤à¤£à¥à¤à¤¾', 47185 hh: '%d à¤à¤£à¥à¤à¤¾', 47186 d: 'à¤à¤ दिन', 47187 dd: '%d दिन', 47188 M: 'à¤à¤ महिना', 47189 MM: '%d महिना', 47190 y: 'à¤à¤ बरà¥à¤·', 47191 yy: '%d बरà¥à¤·', 47192 }, 47193 week: { 47194 dow: 0, // Sunday is the first day of the week. 47195 doy: 6, // The week that contains Jan 6th is the first week of the year. 47196 }, 47197 }); 47198 47199 return ne; 47200 47201}))); 47202 47203 47204/***/ }), 47205
vendor: 4,046 bytes, lines 47206-47327
47206/***/ "./node_modules/moment/locale/nl-be.js": 47207/*!*********************************************!*\ 47208 !*** ./node_modules/moment/locale/nl-be.js ***! 47209 \*********************************************/ 47210/*! no static exports found */ 47211/***/ (function(module, exports, __webpack_require__) { 47212 47213//! moment.js locale configuration 47214//! locale : Dutch (Belgium) [nl-be] 47215//! author : Joris Röling : https://github.com/jorisroling 47216//! author : Jacob Middag : https://github.com/middagj 47217 47218;(function (global, factory) { 47219 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : 47220 undefined 47221}(this, (function (moment) { 'use strict'; 47222 47223 //! moment.js locale configuration 47224 47225 var monthsShortWithDots = 47226 'jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.'.split('_'), 47227 monthsShortWithoutDots = 47228 'jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec'.split('_'), 47229 monthsParse = [ 47230 /^jan/i, 47231 /^feb/i, 47232 /^(maart|mrt\.?)$/i, 47233 /^apr/i, 47234 /^mei$/i, 47235 /^jun[i.]?$/i, 47236 /^jul[i.]?$/i, 47237 /^aug/i, 47238 /^sep/i, 47239 /^okt/i, 47240 /^nov/i, 47241 /^dec/i, 47242 ], 47243 monthsRegex = 47244 /^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december|jan\.?|feb\.?|mrt\.?|apr\.?|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i; 47245 47246 var nlBe = moment.defineLocale('nl-be', { 47247 months: 'januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december'.split( 47248 '_' 47249 ), 47250 monthsShort: function (m, format) { 47251 if (!m) { 47252 return monthsShortWithDots; 47253 } else if (/-MMM-/.test(format)) { 47254 return monthsShortWithoutDots[m.month()]; 47255 } else { 47256 return monthsShortWithDots[m.month()]; 47257 } 47258 }, 47259 47260 monthsRegex: monthsRegex, 47261 monthsShortRegex: monthsRegex, 47262 monthsStrictRegex: 47263 /^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december)/i, 47264 monthsShortStrictRegex: 47265 /^(jan\.?|feb\.?|mrt\.?|apr\.?|mei|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i, 47266 47267 monthsParse: monthsParse, 47268 longMonthsParse: monthsParse, 47269 shortMonthsParse: monthsParse, 47270 47271 weekdays: 47272 'zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag'.split('_'), 47273 weekdaysShort: 'zo._ma._di._wo._do._vr._za.'.split('_'), 47274 weekdaysMin: 'zo_ma_di_wo_do_vr_za'.split('_'), 47275 weekdaysParseExact: true, 47276 longDateFormat: { 47277 LT: 'HH:mm', 47278 LTS: 'HH:mm:ss', 47279 L: 'DD/MM/YYYY', 47280 LL: 'D MMMM YYYY', 47281 LLL: 'D MMMM YYYY HH:mm', 47282 LLLL: 'dddd D MMMM YYYY HH:mm', 47283 }, 47284 calendar: { 47285 sameDay: '[vandaag om] LT', 47286 nextDay: '[morgen om] LT', 47287 nextWeek: 'dddd [om] LT', 47288 lastDay: '[gisteren om] LT', 47289 lastWeek: '[afgelopen] dddd [om] LT', 47290 sameElse: 'L', 47291 }, 47292 relativeTime: { 47293 future: 'over %s', 47294 past: '%s geleden', 47295 s: 'een paar seconden', 47296 ss: '%d seconden', 47297 m: 'één minuut', 47298 mm: '%d minuten', 47299 h: 'één uur', 47300 hh: '%d uur', 47301 d: 'één dag', 47302 dd: '%d dagen', 47303 M: 'één maand', 47304 MM: '%d maanden', 47305 y: 'één jaar', 47306 yy: '%d jaar', 47307 }, 47308 dayOfMonthOrdinalParse: /\d{1,2}(ste|de)/, 47309 ordinal: function (number) { 47310 return ( 47311 number + 47312 (number === 1 || number === 8 || number >= 20 ? 'ste' : 'de') 47313 ); 47314 }, 47315 week: { 47316 dow: 1, // Monday is the first day of the week. 47317 doy: 4, // The week that contains Jan 4th is the first week of the year. 47318 }, 47319 }); 47320 47321 return nlBe; 47322 47323}))); 47324 47325 47326/***/ }), 47327
vendor: 4,071 bytes, lines 47328-47451
47328/***/ "./node_modules/moment/locale/nl.js": 47329/*!******************************************!*\ 47330 !*** ./node_modules/moment/locale/nl.js ***! 47331 \******************************************/ 47332/*! no static exports found */ 47333/***/ (function(module, exports, __webpack_require__) { 47334 47335//! moment.js locale configuration 47336//! locale : Dutch [nl] 47337//! author : Joris Röling : https://github.com/jorisroling 47338//! author : Jacob Middag : https://github.com/middagj 47339 47340;(function (global, factory) { 47341 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : 47342 undefined 47343}(this, (function (moment) { 'use strict'; 47344 47345 //! moment.js locale configuration 47346 47347 var monthsShortWithDots = 47348 'jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.'.split('_'), 47349 monthsShortWithoutDots = 47350 'jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec'.split('_'), 47351 monthsParse = [ 47352 /^jan/i, 47353 /^feb/i, 47354 /^(maart|mrt\.?)$/i, 47355 /^apr/i, 47356 /^mei$/i, 47357 /^jun[i.]?$/i, 47358 /^jul[i.]?$/i, 47359 /^aug/i, 47360 /^sep/i, 47361 /^okt/i, 47362 /^nov/i, 47363 /^dec/i, 47364 ], 47365 monthsRegex = 47366 /^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december|jan\.?|feb\.?|mrt\.?|apr\.?|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i; 47367 47368 var nl = moment.defineLocale('nl', { 47369 months: 'januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december'.split( 47370 '_' 47371 ), 47372 monthsShort: function (m, format) { 47373 if (!m) { 47374 return monthsShortWithDots; 47375 } else if (/-MMM-/.test(format)) { 47376 return monthsShortWithoutDots[m.month()]; 47377 } else { 47378 return monthsShortWithDots[m.month()]; 47379 } 47380 }, 47381 47382 monthsRegex: monthsRegex, 47383 monthsShortRegex: monthsRegex, 47384 monthsStrictRegex: 47385 /^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december)/i, 47386 monthsShortStrictRegex: 47387 /^(jan\.?|feb\.?|mrt\.?|apr\.?|mei|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i, 47388 47389 monthsParse: monthsParse, 47390 longMonthsParse: monthsParse, 47391 shortMonthsParse: monthsParse, 47392 47393 weekdays: 47394 'zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag'.split('_'), 47395 weekdaysShort: 'zo._ma._di._wo._do._vr._za.'.split('_'), 47396 weekdaysMin: 'zo_ma_di_wo_do_vr_za'.split('_'), 47397 weekdaysParseExact: true, 47398 longDateFormat: { 47399 LT: 'HH:mm', 47400 LTS: 'HH:mm:ss', 47401 L: 'DD-MM-YYYY', 47402 LL: 'D MMMM YYYY', 47403 LLL: 'D MMMM YYYY HH:mm', 47404 LLLL: 'dddd D MMMM YYYY HH:mm', 47405 }, 47406 calendar: { 47407 sameDay: '[vandaag om] LT', 47408 nextDay: '[morgen om] LT', 47409 nextWeek: 'dddd [om] LT', 47410 lastDay: '[gisteren om] LT', 47411 lastWeek: '[afgelopen] dddd [om] LT', 47412 sameElse: 'L', 47413 }, 47414 relativeTime: { 47415 future: 'over %s', 47416 past: '%s geleden', 47417 s: 'een paar seconden', 47418 ss: '%d seconden', 47419 m: 'één minuut', 47420 mm: '%d minuten', 47421 h: 'één uur', 47422 hh: '%d uur', 47423 d: 'één dag', 47424 dd: '%d dagen', 47425 w: 'één week', 47426 ww: '%d weken', 47427 M: 'één maand', 47428 MM: '%d maanden', 47429 y: 'één jaar', 47430 yy: '%d jaar', 47431 }, 47432 dayOfMonthOrdinalParse: /\d{1,2}(ste|de)/, 47433 ordinal: function (number) { 47434 return ( 47435 number + 47436 (number === 1 || number === 8 || number >= 20 ? 'ste' : 'de') 47437 ); 47438 }, 47439 week: { 47440 dow: 1, // Monday is the first day of the week. 47441 doy: 4, // The week that contains Jan 4th is the first week of the year. 47442 }, 47443 }); 47444 47445 return nl; 47446 47447}))); 47448 47449 47450/***/ }), 47451
vendor: 2,530 bytes, lines 47452-47530
47452/***/ "./node_modules/moment/locale/nn.js": 47453/*!******************************************!*\ 47454 !*** ./node_modules/moment/locale/nn.js ***! 47455 \******************************************/ 47456/*! no static exports found */ 47457/***/ (function(module, exports, __webpack_require__) { 47458 47459//! moment.js locale configuration 47460//! locale : Nynorsk [nn] 47461//! authors : https://github.com/mechuwind 47462//! Stephen Ramthun : https://github.com/stephenramthun 47463 47464;(function (global, factory) { 47465 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : 47466 undefined 47467}(this, (function (moment) { 'use strict'; 47468 47469 //! moment.js locale configuration 47470 47471 var nn = moment.defineLocale('nn', { 47472 months: 'januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember'.split( 47473 '_' 47474 ), 47475 monthsShort: 47476 'jan._feb._mars_apr._mai_juni_juli_aug._sep._okt._nov._des.'.split('_'), 47477 monthsParseExact: true, 47478 weekdays: 'sundag_måndag_tysdag_onsdag_torsdag_fredag_laurdag'.split('_'), 47479 weekdaysShort: 'su._må._ty._on._to._fr._lau.'.split('_'), 47480 weekdaysMin: 'su_må_ty_on_to_fr_la'.split('_'), 47481 weekdaysParseExact: true, 47482 longDateFormat: { 47483 LT: 'HH:mm', 47484 LTS: 'HH:mm:ss', 47485 L: 'DD.MM.YYYY', 47486 LL: 'D. MMMM YYYY', 47487 LLL: 'D. MMMM YYYY [kl.] H:mm', 47488 LLLL: 'dddd D. MMMM YYYY [kl.] HH:mm', 47489 }, 47490 calendar: { 47491 sameDay: '[I dag klokka] LT', 47492 nextDay: '[I morgon klokka] LT', 47493 nextWeek: 'dddd [klokka] LT', 47494 lastDay: '[I går klokka] LT', 47495 lastWeek: '[Føregåande] dddd [klokka] LT', 47496 sameElse: 'L', 47497 }, 47498 relativeTime: { 47499 future: 'om %s', 47500 past: '%s sidan', 47501 s: 'nokre sekund', 47502 ss: '%d sekund', 47503 m: 'eit minutt', 47504 mm: '%d minutt', 47505 h: 'ein time', 47506 hh: '%d timar', 47507 d: 'ein dag', 47508 dd: '%d dagar', 47509 w: 'ei veke', 47510 ww: '%d veker', 47511 M: 'ein månad', 47512 MM: '%d månader', 47513 y: 'eit år', 47514 yy: '%d år', 47515 }, 47516 dayOfMonthOrdinalParse: /\d{1,2}\./, 47517 ordinal: '%d.', 47518 week: { 47519 dow: 1, // Monday is the first day of the week. 47520 doy: 4, // The week that contains Jan 4th is the first week of the year. 47521 }, 47522 }); 47523 47524 return nn; 47525 47526}))); 47527 47528 47529/***/ }), 47530
vendor: 3,328 bytes, lines 47531-47635
47531/***/ "./node_modules/moment/locale/oc-lnc.js": 47532/*!**********************************************!*\ 47533 !*** ./node_modules/moment/locale/oc-lnc.js ***! 47534 \**********************************************/ 47535/*! no static exports found */ 47536/***/ (function(module, exports, __webpack_require__) { 47537 47538//! moment.js locale configuration 47539//! locale : Occitan, lengadocian dialecte [oc-lnc] 47540//! author : Quentin PAGÃS : https://github.com/Quenty31 47541 47542;(function (global, factory) { 47543 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : 47544 undefined 47545}(this, (function (moment) { 'use strict'; 47546 47547 //! moment.js locale configuration 47548 47549 var ocLnc = moment.defineLocale('oc-lnc', { 47550 months: { 47551 standalone: 47552 'genièr_febrièr_març_abril_mai_junh_julhet_agost_setembre_octòbre_novembre_decembre'.split( 47553 '_' 47554 ), 47555 format: "de genièr_de febrièr_de març_d'abril_de mai_de junh_de julhet_d'agost_de setembre_d'octòbre_de novembre_de decembre".split( 47556 '_' 47557 ), 47558 isFormat: /D[oD]?(\s)+MMMM/, 47559 }, 47560 monthsShort: 47561 'gen._febr._març_abr._mai_junh_julh._ago._set._oct._nov._dec.'.split( 47562 '_' 47563 ), 47564 monthsParseExact: true, 47565 weekdays: 'dimenge_diluns_dimars_dimècres_dijòus_divendres_dissabte'.split( 47566 '_' 47567 ), 47568 weekdaysShort: 'dg._dl._dm._dc._dj._dv._ds.'.split('_'), 47569 weekdaysMin: 'dg_dl_dm_dc_dj_dv_ds'.split('_'), 47570 weekdaysParseExact: true, 47571 longDateFormat: { 47572 LT: 'H:mm', 47573 LTS: 'H:mm:ss', 47574 L: 'DD/MM/YYYY', 47575 LL: 'D MMMM [de] YYYY', 47576 ll: 'D MMM YYYY', 47577 LLL: 'D MMMM [de] YYYY [a] H:mm', 47578 lll: 'D MMM YYYY, H:mm', 47579 LLLL: 'dddd D MMMM [de] YYYY [a] H:mm', 47580 llll: 'ddd D MMM YYYY, H:mm', 47581 }, 47582 calendar: { 47583 sameDay: '[uèi a] LT', 47584 nextDay: '[deman a] LT', 47585 nextWeek: 'dddd [a] LT', 47586 lastDay: '[ièr a] LT', 47587 lastWeek: 'dddd [passat a] LT', 47588 sameElse: 'L', 47589 }, 47590 relativeTime: { 47591 future: "d'aquà %s", 47592 past: 'fa %s', 47593 s: 'unas segondas', 47594 ss: '%d segondas', 47595 m: 'una minuta', 47596 mm: '%d minutas', 47597 h: 'una ora', 47598 hh: '%d oras', 47599 d: 'un jorn', 47600 dd: '%d jorns', 47601 M: 'un mes', 47602 MM: '%d meses', 47603 y: 'un an', 47604 yy: '%d ans', 47605 }, 47606 dayOfMonthOrdinalParse: /\d{1,2}(r|n|t|è|a)/, 47607 ordinal: function (number, period) { 47608 var output = 47609 number === 1 47610 ? 'r' 47611 : number === 2 47612 ? 'n' 47613 : number === 3 47614 ? 'r' 47615 : number === 4 47616 ? 't' 47617 : 'è'; 47618 if (period === 'w' || period === 'W') { 47619 output = 'a'; 47620 } 47621 return number + output; 47622 }, 47623 week: { 47624 dow: 1, // Monday is the first day of the week. 47625 doy: 4, 47626 }, 47627 }); 47628 47629 return ocLnc; 47630 47631}))); 47632 47633 47634/***/ }), 47635
vendor: 5,168 bytes, lines 47636-47777
47636/***/ "./node_modules/moment/locale/pa-in.js": 47637/*!*********************************************!*\ 47638 !*** ./node_modules/moment/locale/pa-in.js ***! 47639 \*********************************************/ 47640/*! no static exports found */ 47641/***/ (function(module, exports, __webpack_require__) { 47642 47643//! moment.js locale configuration 47644//! locale : Punjabi (India) [pa-in] 47645//! author : Harpreet Singh : https://github.com/harpreetkhalsagtbit 47646 47647;(function (global, factory) { 47648 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : 47649 undefined 47650}(this, (function (moment) { 'use strict'; 47651 47652 //! moment.js locale configuration 47653 47654 var symbolMap = { 47655 1: 'à©§', 47656 2: '੨', 47657 3: 'à©©', 47658 4: '੪', 47659 5: 'à©«', 47660 6: '੬', 47661 7: 'à©', 47662 8: 'à©®', 47663 9: '੯', 47664 0: '੦', 47665 }, 47666 numberMap = { 47667 'à©§': '1', 47668 '੨': '2', 47669 'à©©': '3', 47670 '੪': '4', 47671 'à©«': '5', 47672 '੬': '6', 47673 'à©': '7', 47674 'à©®': '8', 47675 '੯': '9', 47676 '੦': '0', 47677 }; 47678 47679 var paIn = moment.defineLocale('pa-in', { 47680 // There are months name as per Nanakshahi Calendar but they are not used as rigidly in modern Punjabi. 47681 months: 'à¨à¨¨à¨µà¨°à©_ਫ਼ਰਵਰà©_ਮਾਰà¨_ਠਪà©à¨°à©à¨²_ਮà¨_à¨à©à¨¨_à¨à©à¨²à¨¾à¨_ਠà¨à¨¸à¨¤_ਸਤੰਬਰ_ਠà¨à¨¤à©à¨¬à¨°_ਨਵੰਬਰ_ਦਸੰਬਰ'.split( 47682 '_' 47683 ), 47684 monthsShort: 47685 'à¨à¨¨à¨µà¨°à©_ਫ਼ਰਵਰà©_ਮਾਰà¨_ਠਪà©à¨°à©à¨²_ਮà¨_à¨à©à¨¨_à¨à©à¨²à¨¾à¨_ਠà¨à¨¸à¨¤_ਸਤੰਬਰ_ਠà¨à¨¤à©à¨¬à¨°_ਨਵੰਬਰ_ਦਸੰਬਰ'.split( 47686 '_' 47687 ), 47688 weekdays: 'à¨à¨¤à¨µà¨¾à¨°_ਸà©à¨®à¨µà¨¾à¨°_ਮੰà¨à¨²à¨µà¨¾à¨°_ਬà©à¨§à¨µà¨¾à¨°_ਵà©à¨°à¨µà¨¾à¨°_ਸ਼à©à©±à¨à¨°à¨µà¨¾à¨°_ਸ਼ਨà©à¨à¨°à¨µà¨¾à¨°'.split( 47689 '_' 47690 ), 47691 weekdaysShort: 'à¨à¨¤_ਸà©à¨®_ਮੰà¨à¨²_ਬà©à¨§_ਵà©à¨°_ਸ਼à©à¨à¨°_ਸ਼ਨà©'.split('_'), 47692 weekdaysMin: 'à¨à¨¤_ਸà©à¨®_ਮੰà¨à¨²_ਬà©à¨§_ਵà©à¨°_ਸ਼à©à¨à¨°_ਸ਼ਨà©'.split('_'), 47693 longDateFormat: { 47694 LT: 'A h:mm ਵà¨à©', 47695 LTS: 'A h:mm:ss ਵà¨à©', 47696 L: 'DD/MM/YYYY', 47697 LL: 'D MMMM YYYY', 47698 LLL: 'D MMMM YYYY, A h:mm ਵà¨à©', 47699 LLLL: 'dddd, D MMMM YYYY, A h:mm ਵà¨à©', 47700 }, 47701 calendar: { 47702 sameDay: '[ਠà¨] LT', 47703 nextDay: '[à¨à¨²] LT', 47704 nextWeek: '[ਠà¨à¨²à¨¾] dddd, LT', 47705 lastDay: '[à¨à¨²] LT', 47706 lastWeek: '[ਪਿà¨à¨²à©] dddd, LT', 47707 sameElse: 'L', 47708 }, 47709 relativeTime: { 47710 future: '%s ਵਿੱà¨', 47711 past: '%s ਪਿà¨à¨²à©', 47712 s: 'à¨à©à¨ ਸà¨à¨¿à©°à¨', 47713 ss: '%d ਸà¨à¨¿à©°à¨', 47714 m: 'à¨à¨ ਮਿੰà¨', 47715 mm: '%d ਮਿੰà¨', 47716 h: 'à¨à©±à¨ à¨à©°à¨à¨¾', 47717 hh: '%d à¨à©°à¨à©', 47718 d: 'à¨à©±à¨ ਦਿਨ', 47719 dd: '%d ਦਿਨ', 47720 M: 'à¨à©±à¨ ਮਹà©à¨¨à¨¾', 47721 MM: '%d ਮਹà©à¨¨à©', 47722 y: 'à¨à©±à¨ ਸਾਲ', 47723 yy: '%d ਸਾਲ', 47724 }, 47725 preparse: function (string) { 47726 return string.replace(/[੧੨੩੪੫੬à©à©®à©¯à©¦]/g, function (match) { 47727 return numberMap[match]; 47728 }); 47729 }, 47730 postformat: function (string) { 47731 return string.replace(/\d/g, function (match) { 47732 return symbolMap[match]; 47733 }); 47734 }, 47735 // Punjabi notation for meridiems are quite fuzzy in practice. While there exists 47736 // a rigid notion of a 'Pahar' it is not used as rigidly in modern Punjabi. 47737 meridiemParse: /ਰਾਤ|ਸਵà©à¨°|ਦà©à¨ªà¨¹à¨¿à¨°|ਸ਼ਾਮ/, 47738 meridiemHour: function (hour, meridiem) { 47739 if (hour === 12) { 47740 hour = 0; 47741 } 47742 if (meridiem === 'ਰਾਤ') { 47743 return hour < 4 ? hour : hour + 12; 47744 } else if (meridiem === 'ਸਵà©à¨°') { 47745 return hour; 47746 } else if (meridiem === 'ਦà©à¨ªà¨¹à¨¿à¨°') { 47747 return hour >= 10 ? hour : hour + 12; 47748 } else if (meridiem === 'ਸ਼ਾਮ') { 47749 return hour + 12; 47750 } 47751 }, 47752 meridiem: function (hour, minute, isLower) { 47753 if (hour < 4) { 47754 return 'ਰਾਤ'; 47755 } else if (hour < 10) { 47756 return 'ਸਵà©à¨°'; 47757 } else if (hour < 17) { 47758 return 'ਦà©à¨ªà¨¹à¨¿à¨°'; 47759 } else if (hour < 20) { 47760 return 'ਸ਼ਾਮ'; 47761 } else { 47762 return 'ਰਾਤ'; 47763 } 47764 }, 47765 week: { 47766 dow: 0, // Sunday is the first day of the week. 47767 doy: 6, // The week that contains Jan 6th is the first week of the year. 47768 }, 47769 }); 47770 47771 return paIn; 47772 47773}))); 47774 47775 47776/***/ }), 47777
vendor: 5,176 bytes, lines 47778-47937
47778/***/ "./node_modules/moment/locale/pl.js": 47779/*!******************************************!*\ 47780 !*** ./node_modules/moment/locale/pl.js ***! 47781 \******************************************/ 47782/*! no static exports found */ 47783/***/ (function(module, exports, __webpack_require__) { 47784 47785//! moment.js locale configuration 47786//! locale : Polish [pl] 47787//! author : Rafal Hirsz : https://github.com/evoL 47788 47789;(function (global, factory) { 47790 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : 47791 undefined 47792}(this, (function (moment) { 'use strict'; 47793 47794 //! moment.js locale configuration 47795 47796 var monthsNominative = 47797 'styczeÅ_luty_marzec_kwiecieÅ_maj_czerwiec_lipiec_sierpieÅ_wrzesieÅ_październik_listopad_grudzieÅ'.split( 47798 '_' 47799 ), 47800 monthsSubjective = 47801 'stycznia_lutego_marca_kwietnia_maja_czerwca_lipca_sierpnia_wrzeÅnia_października_listopada_grudnia'.split( 47802 '_' 47803 ), 47804 monthsParse = [ 47805 /^sty/i, 47806 /^lut/i, 47807 /^mar/i, 47808 /^kwi/i, 47809 /^maj/i, 47810 /^cze/i, 47811 /^lip/i, 47812 /^sie/i, 47813 /^wrz/i, 47814 /^paź/i, 47815 /^lis/i, 47816 /^gru/i, 47817 ]; 47818 function plural(n) { 47819 return n % 10 < 5 && n % 10 > 1 && ~~(n / 10) % 10 !== 1; 47820 } 47821 function translate(number, withoutSuffix, key) { 47822 var result = number + ' '; 47823 switch (key) { 47824 case 'ss': 47825 return result + (plural(number) ? 'sekundy' : 'sekund'); 47826 case 'm': 47827 return withoutSuffix ? 'minuta' : 'minutÄ'; 47828 case 'mm': 47829 return result + (plural(number) ? 'minuty' : 'minut'); 47830 case 'h': 47831 return withoutSuffix ? 'godzina' : 'godzinÄ'; 47832 case 'hh': 47833 return result + (plural(number) ? 'godziny' : 'godzin'); 47834 case 'ww': 47835 return result + (plural(number) ? 'tygodnie' : 'tygodni'); 47836 case 'MM': 47837 return result + (plural(number) ? 'miesiÄ ce' : 'miesiÄcy'); 47838 case 'yy': 47839 return result + (plural(number) ? 'lata' : 'lat'); 47840 } 47841 } 47842 47843 var pl = moment.defineLocale('pl', { 47844 months: function (momentToFormat, format) { 47845 if (!momentToFormat) { 47846 return monthsNominative; 47847 } else if (/D MMMM/.test(format)) { 47848 return monthsSubjective[momentToFormat.month()]; 47849 } else { 47850 return monthsNominative[momentToFormat.month()]; 47851 } 47852 }, 47853 monthsShort: 'sty_lut_mar_kwi_maj_cze_lip_sie_wrz_paź_lis_gru'.split('_'), 47854 monthsParse: monthsParse, 47855 longMonthsParse: monthsParse, 47856 shortMonthsParse: monthsParse, 47857 weekdays: 47858 'niedziela_poniedziaÅek_wtorek_Åroda_czwartek_piÄ tek_sobota'.split('_'), 47859 weekdaysShort: 'ndz_pon_wt_År_czw_pt_sob'.split('_'), 47860 weekdaysMin: 'Nd_Pn_Wt_År_Cz_Pt_So'.split('_'), 47861 longDateFormat: { 47862 LT: 'HH:mm', 47863 LTS: 'HH:mm:ss', 47864 L: 'DD.MM.YYYY', 47865 LL: 'D MMMM YYYY', 47866 LLL: 'D MMMM YYYY HH:mm', 47867 LLLL: 'dddd, D MMMM YYYY HH:mm', 47868 }, 47869 calendar: { 47870 sameDay: '[DziÅ o] LT', 47871 nextDay: '[Jutro o] LT', 47872 nextWeek: function () { 47873 switch (this.day()) { 47874 case 0: 47875 return '[W niedzielÄ o] LT'; 47876 47877 case 2: 47878 return '[We wtorek o] LT'; 47879 47880 case 3: 47881 return '[W ÅrodÄ o] LT'; 47882 47883 case 6: 47884 return '[W sobotÄ o] LT'; 47885 47886 default: 47887 return '[W] dddd [o] LT'; 47888 } 47889 }, 47890 lastDay: '[Wczoraj o] LT', 47891 lastWeek: function () { 47892 switch (this.day()) { 47893 case 0: 47894 return '[W zeszÅÄ niedzielÄ o] LT'; 47895 case 3: 47896 return '[W zeszÅÄ ÅrodÄ o] LT'; 47897 case 6: 47898 return '[W zeszÅÄ sobotÄ o] LT'; 47899 default: 47900 return '[W zeszÅy] dddd [o] LT'; 47901 } 47902 }, 47903 sameElse: 'L', 47904 }, 47905 relativeTime: { 47906 future: 'za %s', 47907 past: '%s temu', 47908 s: 'kilka sekund', 47909 ss: translate, 47910 m: translate, 47911 mm: translate, 47912 h: translate, 47913 hh: translate, 47914 d: '1 dzieÅ', 47915 dd: '%d dni', 47916 w: 'tydzieÅ', 47917 ww: translate, 47918 M: 'miesiÄ c', 47919 MM: translate, 47920 y: 'rok', 47921 yy: translate, 47922 }, 47923 dayOfMonthOrdinalParse: /\d{1,2}\./, 47924 ordinal: '%d.', 47925 week: { 47926 dow: 1, // Monday is the first day of the week. 47927 doy: 4, // The week that contains Jan 4th is the first week of the year. 47928 }, 47929 }); 47930 47931 return pl; 47932 47933}))); 47934 47935 47936/***/ }), 47937
vendor: 2,572 bytes, lines 47938-48015
47938/***/ "./node_modules/moment/locale/pt-br.js": 47939/*!*********************************************!*\ 47940 !*** ./node_modules/moment/locale/pt-br.js ***! 47941 \*********************************************/ 47942/*! no static exports found */ 47943/***/ (function(module, exports, __webpack_require__) { 47944 47945//! moment.js locale configuration 47946//! locale : Portuguese (Brazil) [pt-br] 47947//! author : Caio Ribeiro Pereira : https://github.com/caio-ribeiro-pereira 47948 47949;(function (global, factory) { 47950 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : 47951 undefined 47952}(this, (function (moment) { 'use strict'; 47953 47954 //! moment.js locale configuration 47955 47956 var ptBr = moment.defineLocale('pt-br', { 47957 months: 'janeiro_fevereiro_março_abril_maio_junho_julho_agosto_setembro_outubro_novembro_dezembro'.split( 47958 '_' 47959 ), 47960 monthsShort: 'jan_fev_mar_abr_mai_jun_jul_ago_set_out_nov_dez'.split('_'), 47961 weekdays: 47962 'domingo_segunda-feira_terça-feira_quarta-feira_quinta-feira_sexta-feira_sábado'.split( 47963 '_' 47964 ), 47965 weekdaysShort: 'dom_seg_ter_qua_qui_sex_sáb'.split('_'), 47966 weekdaysMin: 'do_2ª_3ª_4ª_5ª_6ª_sá'.split('_'), 47967 weekdaysParseExact: true, 47968 longDateFormat: { 47969 LT: 'HH:mm', 47970 LTS: 'HH:mm:ss', 47971 L: 'DD/MM/YYYY', 47972 LL: 'D [de] MMMM [de] YYYY', 47973 LLL: 'D [de] MMMM [de] YYYY [à s] HH:mm', 47974 LLLL: 'dddd, D [de] MMMM [de] YYYY [à s] HH:mm', 47975 }, 47976 calendar: { 47977 sameDay: '[Hoje à s] LT', 47978 nextDay: '[Amanhã à s] LT', 47979 nextWeek: 'dddd [à s] LT', 47980 lastDay: '[Ontem à s] LT', 47981 lastWeek: function () { 47982 return this.day() === 0 || this.day() === 6 47983 ? '[Ãltimo] dddd [à s] LT' // Saturday + Sunday 47984 : '[Ãltima] dddd [à s] LT'; // Monday - Friday 47985 }, 47986 sameElse: 'L', 47987 }, 47988 relativeTime: { 47989 future: 'em %s', 47990 past: 'há %s', 47991 s: 'poucos segundos', 47992 ss: '%d segundos', 47993 m: 'um minuto', 47994 mm: '%d minutos', 47995 h: 'uma hora', 47996 hh: '%d horas', 47997 d: 'um dia', 47998 dd: '%d dias', 47999 M: 'um mês', 48000 MM: '%d meses', 48001 y: 'um ano', 48002 yy: '%d anos', 48003 }, 48004 dayOfMonthOrdinalParse: /\d{1,2}º/, 48005 ordinal: '%dº', 48006 invalidDate: 'Data inválida', 48007 }); 48008 48009 return ptBr; 48010 48011}))); 48012 48013 48014/***/ }), 48015
vendor: 2,690 bytes, lines 48016-48098
48016/***/ "./node_modules/moment/locale/pt.js": 48017/*!******************************************!*\ 48018 !*** ./node_modules/moment/locale/pt.js ***! 48019 \******************************************/ 48020/*! no static exports found */ 48021/***/ (function(module, exports, __webpack_require__) { 48022 48023//! moment.js locale configuration 48024//! locale : Portuguese [pt] 48025//! author : Jefferson : https://github.com/jalex79 48026 48027;(function (global, factory) { 48028 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : 48029 undefined 48030}(this, (function (moment) { 'use strict'; 48031 48032 //! moment.js locale configuration 48033 48034 var pt = moment.defineLocale('pt', { 48035 months: 'janeiro_fevereiro_março_abril_maio_junho_julho_agosto_setembro_outubro_novembro_dezembro'.split( 48036 '_' 48037 ), 48038 monthsShort: 'jan_fev_mar_abr_mai_jun_jul_ago_set_out_nov_dez'.split('_'), 48039 weekdays: 48040 'Domingo_Segunda-feira_Terça-feira_Quarta-feira_Quinta-feira_Sexta-feira_Sábado'.split( 48041 '_' 48042 ), 48043 weekdaysShort: 'Dom_Seg_Ter_Qua_Qui_Sex_Sáb'.split('_'), 48044 weekdaysMin: 'Do_2ª_3ª_4ª_5ª_6ª_Sá'.split('_'), 48045 weekdaysParseExact: true, 48046 longDateFormat: { 48047 LT: 'HH:mm', 48048 LTS: 'HH:mm:ss', 48049 L: 'DD/MM/YYYY', 48050 LL: 'D [de] MMMM [de] YYYY', 48051 LLL: 'D [de] MMMM [de] YYYY HH:mm', 48052 LLLL: 'dddd, D [de] MMMM [de] YYYY HH:mm', 48053 }, 48054 calendar: { 48055 sameDay: '[Hoje à s] LT', 48056 nextDay: '[Amanhã à s] LT', 48057 nextWeek: 'dddd [à s] LT', 48058 lastDay: '[Ontem à s] LT', 48059 lastWeek: function () { 48060 return this.day() === 0 || this.day() === 6 48061 ? '[Ãltimo] dddd [à s] LT' // Saturday + Sunday 48062 : '[Ãltima] dddd [à s] LT'; // Monday - Friday 48063 }, 48064 sameElse: 'L', 48065 }, 48066 relativeTime: { 48067 future: 'em %s', 48068 past: 'há %s', 48069 s: 'segundos', 48070 ss: '%d segundos', 48071 m: 'um minuto', 48072 mm: '%d minutos', 48073 h: 'uma hora', 48074 hh: '%d horas', 48075 d: 'um dia', 48076 dd: '%d dias', 48077 w: 'uma semana', 48078 ww: '%d semanas', 48079 M: 'um mês', 48080 MM: '%d meses', 48081 y: 'um ano', 48082 yy: '%d anos', 48083 }, 48084 dayOfMonthOrdinalParse: /\d{1,2}º/, 48085 ordinal: '%dº', 48086 week: { 48087 dow: 1, // Monday is the first day of the week. 48088 doy: 4, // The week that contains Jan 4th is the first week of the year. 48089 }, 48090 }); 48091 48092 return pt; 48093 48094}))); 48095 48096 48097/***/ }), 48098
vendor: 3,081 bytes, lines 48099-48194
48099/***/ "./node_modules/moment/locale/ro.js": 48100/*!******************************************!*\ 48101 !*** ./node_modules/moment/locale/ro.js ***! 48102 \******************************************/ 48103/*! no static exports found */ 48104/***/ (function(module, exports, __webpack_require__) { 48105 48106//! moment.js locale configuration 48107//! locale : Romanian [ro] 48108//! author : Vlad Gurdiga : https://github.com/gurdiga 48109//! author : Valentin Agachi : https://github.com/avaly 48110//! author : Emanuel Cepoi : https://github.com/cepem 48111 48112;(function (global, factory) { 48113 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : 48114 undefined 48115}(this, (function (moment) { 'use strict'; 48116 48117 //! moment.js locale configuration 48118 48119 function relativeTimeWithPlural(number, withoutSuffix, key) { 48120 var format = { 48121 ss: 'secunde', 48122 mm: 'minute', 48123 hh: 'ore', 48124 dd: 'zile', 48125 ww: 'sÄptÄmâni', 48126 MM: 'luni', 48127 yy: 'ani', 48128 }, 48129 separator = ' '; 48130 if (number % 100 >= 20 || (number >= 100 && number % 100 === 0)) { 48131 separator = ' de '; 48132 } 48133 return number + separator + format[key]; 48134 } 48135 48136 var ro = moment.defineLocale('ro', { 48137 months: 'ianuarie_februarie_martie_aprilie_mai_iunie_iulie_august_septembrie_octombrie_noiembrie_decembrie'.split( 48138 '_' 48139 ), 48140 monthsShort: 48141 'ian._feb._mart._apr._mai_iun._iul._aug._sept._oct._nov._dec.'.split( 48142 '_' 48143 ), 48144 monthsParseExact: true, 48145 weekdays: 'duminicÄ_luni_marÈi_miercuri_joi_vineri_sâmbÄtÄ'.split('_'), 48146 weekdaysShort: 'Dum_Lun_Mar_Mie_Joi_Vin_Sâm'.split('_'), 48147 weekdaysMin: 'Du_Lu_Ma_Mi_Jo_Vi_Sâ'.split('_'), 48148 longDateFormat: { 48149 LT: 'H:mm', 48150 LTS: 'H:mm:ss', 48151 L: 'DD.MM.YYYY', 48152 LL: 'D MMMM YYYY', 48153 LLL: 'D MMMM YYYY H:mm', 48154 LLLL: 'dddd, D MMMM YYYY H:mm', 48155 }, 48156 calendar: { 48157 sameDay: '[azi la] LT', 48158 nextDay: '[mâine la] LT', 48159 nextWeek: 'dddd [la] LT', 48160 lastDay: '[ieri la] LT', 48161 lastWeek: '[fosta] dddd [la] LT', 48162 sameElse: 'L', 48163 }, 48164 relativeTime: { 48165 future: 'peste %s', 48166 past: '%s în urmÄ', 48167 s: 'câteva secunde', 48168 ss: relativeTimeWithPlural, 48169 m: 'un minut', 48170 mm: relativeTimeWithPlural, 48171 h: 'o orÄ', 48172 hh: relativeTimeWithPlural, 48173 d: 'o zi', 48174 dd: relativeTimeWithPlural, 48175 w: 'o sÄptÄmânÄ', 48176 ww: relativeTimeWithPlural, 48177 M: 'o lunÄ', 48178 MM: relativeTimeWithPlural, 48179 y: 'un an', 48180 yy: relativeTimeWithPlural, 48181 }, 48182 week: { 48183 dow: 1, // Monday is the first day of the week. 48184 doy: 7, // The week that contains Jan 7th is the first week of the year. 48185 }, 48186 }); 48187 48188 return ro; 48189 48190}))); 48191 48192 48193/***/ }), 48194
vendor: 9,716 bytes, lines 48195-48427
48195/***/ "./node_modules/moment/locale/ru.js": 48196/*!******************************************!*\ 48197 !*** ./node_modules/moment/locale/ru.js ***! 48198 \******************************************/ 48199/*! no static exports found */ 48200/***/ (function(module, exports, __webpack_require__) { 48201 48202//! moment.js locale configuration 48203//! locale : Russian [ru] 48204//! author : Viktorminator : https://github.com/Viktorminator 48205//! author : Menelion Elensúle : https://github.com/Oire 48206//! author : ÐоÑенбеÑг ÐаÑк : https://github.com/socketpair 48207 48208;(function (global, factory) { 48209 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : 48210 undefined 48211}(this, (function (moment) { 'use strict'; 48212 48213 //! moment.js locale configuration 48214 48215 function plural(word, num) { 48216 var forms = word.split('_'); 48217 return num % 10 === 1 && num % 100 !== 11 48218 ? forms[0] 48219 : num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20) 48220 ? forms[1] 48221 : forms[2]; 48222 } 48223 function relativeTimeWithPlural(number, withoutSuffix, key) { 48224 var format = { 48225 ss: withoutSuffix ? 'ÑекÑнда_ÑекÑндÑ_ÑекÑнд' : 'ÑекÑндÑ_ÑекÑндÑ_ÑекÑнд', 48226 mm: withoutSuffix ? 'минÑÑа_минÑÑÑ_минÑÑ' : 'минÑÑÑ_минÑÑÑ_минÑÑ', 48227 hh: 'ÑаÑ_ÑаÑа_ÑаÑов', 48228 dd: 'денÑ_днÑ_дней', 48229 ww: 'неделÑ_недели_неделÑ', 48230 MM: 'меÑÑÑ_меÑÑÑа_меÑÑÑев', 48231 yy: 'год_года_леÑ', 48232 }; 48233 if (key === 'm') { 48234 return withoutSuffix ? 'минÑÑа' : 'минÑÑÑ'; 48235 } else { 48236 return number + ' ' + plural(format[key], +number); 48237 } 48238 } 48239 var monthsParse = [ 48240 /^Ñнв/i, 48241 /^Ñев/i, 48242 /^маÑ/i, 48243 /^апÑ/i, 48244 /^ма[йÑ]/i, 48245 /^иÑн/i, 48246 /^иÑл/i, 48247 /^авг/i, 48248 /^Ñен/i, 48249 /^окÑ/i, 48250 /^ноÑ/i, 48251 /^дек/i, 48252 ]; 48253 48254 // http://new.gramota.ru/spravka/rules/139-prop : § 103 48255 // СокÑаÑÐµÐ½Ð¸Ñ Ð¼ÐµÑÑÑев: http://new.gramota.ru/spravka/buro/search-answer?s=242637 48256 // CLDR data: http://www.unicode.org/cldr/charts/28/summary/ru.html#1753 48257 var ru = moment.defineLocale('ru', { 48258 months: { 48259 format: 'ÑнваÑÑ_ÑевÑалÑ_маÑÑа_апÑелÑ_маÑ_иÑнÑ_иÑлÑ_авгÑÑÑа_ÑенÑÑбÑÑ_окÑÑбÑÑ_ноÑбÑÑ_декабÑÑ'.split( 48260 '_' 48261 ), 48262 standalone: 48263 'ÑнваÑÑ_ÑевÑалÑ_маÑÑ_апÑелÑ_май_иÑнÑ_иÑлÑ_авгÑÑÑ_ÑенÑÑбÑÑ_окÑÑбÑÑ_ноÑбÑÑ_декабÑÑ'.split( 48264 '_' 48265 ), 48266 }, 48267 monthsShort: { 48268 // по CLDR именно "иÑл." и "иÑн.", но какой ÑмÑÑл менÑÑÑ Ð±ÑÐºÐ²Ñ Ð½Ð° ÑоÑкÑ? 48269 format: 'Ñнв._ÑевÑ._маÑ._апÑ._маÑ_иÑнÑ_иÑлÑ_авг._ÑенÑ._окÑ._ноÑб._дек.'.split( 48270 '_' 48271 ), 48272 standalone: 48273 'Ñнв._ÑевÑ._маÑÑ_апÑ._май_иÑнÑ_иÑлÑ_авг._ÑенÑ._окÑ._ноÑб._дек.'.split( 48274 '_' 48275 ), 48276 }, 48277 weekdays: { 48278 standalone: 48279 'воÑкÑеÑенÑе_понеделÑник_вÑоÑник_ÑÑеда_ÑеÑвеÑг_пÑÑниÑа_ÑÑббоÑа'.split( 48280 '_' 48281 ), 48282 format: 'воÑкÑеÑенÑе_понеделÑник_вÑоÑник_ÑÑедÑ_ÑеÑвеÑг_пÑÑниÑÑ_ÑÑббоÑÑ'.split( 48283 '_' 48284 ), 48285 isFormat: /\[ ?[Ðв] ?(?:пÑоÑлÑÑ|ÑледÑÑÑÑÑ|ÑÑÑ)? ?] ?dddd/, 48286 }, 48287 weekdaysShort: 'вÑ_пн_вÑ_ÑÑ_ÑÑ_пÑ_Ñб'.split('_'), 48288 weekdaysMin: 'вÑ_пн_вÑ_ÑÑ_ÑÑ_пÑ_Ñб'.split('_'), 48289 monthsParse: monthsParse, 48290 longMonthsParse: monthsParse, 48291 shortMonthsParse: monthsParse, 48292 48293 // полнÑе Ð½Ð°Ð·Ð²Ð°Ð½Ð¸Ñ Ñ Ð¿Ð°Ð´ÐµÐ¶Ð°Ð¼Ð¸, по ÑÑи бÑквÑ, Ð´Ð»Ñ Ð½ÐµÐºÐ¾ÑоÑÑÑ , по 4 бÑквÑ, ÑокÑаÑÐµÐ½Ð¸Ñ Ñ ÑоÑкой и без ÑоÑки 48294 monthsRegex: 48295 /^(ÑнваÑ[ÑÑ]|Ñнв\.?|ÑевÑал[ÑÑ]|ÑевÑ?\.?|маÑÑа?|маÑ\.?|апÑел[ÑÑ]|апÑ\.?|ма[йÑ]|иÑн[ÑÑ]|иÑн\.?|иÑл[ÑÑ]|иÑл\.?|авгÑÑÑа?|авг\.?|ÑенÑÑбÑ[ÑÑ]|ÑенÑ?\.?|окÑÑбÑ[ÑÑ]|окÑ\.?|ноÑбÑ[ÑÑ]|ноÑб?\.?|декабÑ[ÑÑ]|дек\.?)/i, 48296 48297 // ÐºÐ¾Ð¿Ð¸Ñ Ð¿ÑедÑдÑÑего 48298 monthsShortRegex: 48299 /^(ÑнваÑ[ÑÑ]|Ñнв\.?|ÑевÑал[ÑÑ]|ÑевÑ?\.?|маÑÑа?|маÑ\.?|апÑел[ÑÑ]|апÑ\.?|ма[йÑ]|иÑн[ÑÑ]|иÑн\.?|иÑл[ÑÑ]|иÑл\.?|авгÑÑÑа?|авг\.?|ÑенÑÑбÑ[ÑÑ]|ÑенÑ?\.?|окÑÑбÑ[ÑÑ]|окÑ\.?|ноÑбÑ[ÑÑ]|ноÑб?\.?|декабÑ[ÑÑ]|дек\.?)/i, 48300 48301 // полнÑе Ð½Ð°Ð·Ð²Ð°Ð½Ð¸Ñ Ñ Ð¿Ð°Ð´ÐµÐ¶Ð°Ð¼Ð¸ 48302 monthsStrictRegex: 48303 /^(ÑнваÑ[ÑÑ]|ÑевÑал[ÑÑ]|маÑÑа?|апÑел[ÑÑ]|ма[Ñй]|иÑн[ÑÑ]|иÑл[ÑÑ]|авгÑÑÑа?|ÑенÑÑбÑ[ÑÑ]|окÑÑбÑ[ÑÑ]|ноÑбÑ[ÑÑ]|декабÑ[ÑÑ])/i, 48304 48305 // ÐÑÑажение, коÑоÑое ÑооÑвеÑÑÑвÑÐµÑ ÑолÑко ÑокÑаÑÑннÑм ÑоÑмам 48306 monthsShortStrictRegex: 48307 /^(Ñнв\.|ÑевÑ?\.|маÑ[Ñ.]|апÑ\.|ма[Ñй]|иÑн[ÑÑ.]|иÑл[ÑÑ.]|авг\.|ÑенÑ?\.|окÑ\.|ноÑб?\.|дек\.)/i, 48308 longDateFormat: { 48309 LT: 'H:mm', 48310 LTS: 'H:mm:ss', 48311 L: 'DD.MM.YYYY', 48312 LL: 'D MMMM YYYY г.', 48313 LLL: 'D MMMM YYYY г., H:mm', 48314 LLLL: 'dddd, D MMMM YYYY г., H:mm', 48315 }, 48316 calendar: { 48317 sameDay: '[СегоднÑ, в] LT', 48318 nextDay: '[ÐавÑÑа, в] LT', 48319 lastDay: '[ÐÑеÑа, в] LT', 48320 nextWeek: function (now) { 48321 if (now.week() !== this.week()) { 48322 switch (this.day()) { 48323 case 0: 48324 return '[Ð ÑледÑÑÑее] dddd, [в] LT'; 48325 case 1: 48326 case 2: 48327 case 4: 48328 return '[Ð ÑледÑÑÑий] dddd, [в] LT'; 48329 case 3: 48330 case 5: 48331 case 6: 48332 return '[Ð ÑледÑÑÑÑÑ] dddd, [в] LT'; 48333 } 48334 } else { 48335 if (this.day() === 2) { 48336 return '[Ðо] dddd, [в] LT'; 48337 } else { 48338 return '[Ð] dddd, [в] LT'; 48339 } 48340 } 48341 }, 48342 lastWeek: function (now) { 48343 if (now.week() !== this.week()) { 48344 switch (this.day()) { 48345 case 0: 48346 return '[РпÑоÑлое] dddd, [в] LT'; 48347 case 1: 48348 case 2: 48349 case 4: 48350 return '[РпÑоÑлÑй] dddd, [в] LT'; 48351 case 3: 48352 case 5: 48353 case 6: 48354 return '[РпÑоÑлÑÑ] dddd, [в] LT'; 48355 } 48356 } else { 48357 if (this.day() === 2) { 48358 return '[Ðо] dddd, [в] LT'; 48359 } else { 48360 return '[Ð] dddd, [в] LT'; 48361 } 48362 } 48363 }, 48364 sameElse: 'L', 48365 }, 48366 relativeTime: { 48367 future: 'ÑеÑез %s', 48368 past: '%s назад', 48369 s: 'неÑколÑко ÑекÑнд', 48370 ss: relativeTimeWithPlural, 48371 m: relativeTimeWithPlural, 48372 mm: relativeTimeWithPlural, 48373 h: 'ÑаÑ', 48374 hh: relativeTimeWithPlural, 48375 d: 'денÑ', 48376 dd: relativeTimeWithPlural, 48377 w: 'неделÑ', 48378 ww: relativeTimeWithPlural, 48379 M: 'меÑÑÑ', 48380 MM: relativeTimeWithPlural, 48381 y: 'год', 48382 yy: relativeTimeWithPlural, 48383 }, 48384 meridiemParse: /ноÑи|ÑÑÑа|днÑ|веÑеÑа/i, 48385 isPM: function (input) { 48386 return /^(днÑ|веÑеÑа)$/.test(input); 48387 }, 48388 meridiem: function (hour, minute, isLower) { 48389 if (hour < 4) { 48390 return 'ноÑи'; 48391 } else if (hour < 12) { 48392 return 'ÑÑÑа'; 48393 } else if (hour < 17) { 48394 return 'днÑ'; 48395 } else { 48396 return 'веÑеÑа'; 48397 } 48398 }, 48399 dayOfMonthOrdinalParse: /\d{1,2}-(й|го|Ñ)/, 48400 ordinal: function (number, period) { 48401 switch (period) { 48402 case 'M': 48403 case 'd': 48404 case 'DDD': 48405 return number + '-й'; 48406 case 'D': 48407 return number + '-го'; 48408 case 'w': 48409 case 'W': 48410 return number + '-Ñ'; 48411 default: 48412 return number; 48413 } 48414 }, 48415 week: { 48416 dow: 1, // Monday is the first day of the week. 48417 doy: 4, // The week that contains Jan 4th is the first week of the year. 48418 }, 48419 }); 48420 48421 return ru; 48422 48423}))); 48424 48425 48426/***/ }), 48427
vendor: 2,943 bytes, lines 48428-48528
48428/***/ "./node_modules/moment/locale/sd.js": 48429/*!******************************************!*\ 48430 !*** ./node_modules/moment/locale/sd.js ***! 48431 \******************************************/ 48432/*! no static exports found */ 48433/***/ (function(module, exports, __webpack_require__) { 48434 48435//! moment.js locale configuration 48436//! locale : Sindhi [sd] 48437//! author : Narain Sagar : https://github.com/narainsagar 48438 48439;(function (global, factory) { 48440 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : 48441 undefined 48442}(this, (function (moment) { 'use strict'; 48443 48444 //! moment.js locale configuration 48445 48446 var months = [ 48447 'جÙÙØ±Ù', 48448 'ÙÙØ¨Ø±ÙرÙ', 48449 '٠ارÚ', 48450 'اپرÙÙ', 48451 '٠ئÙ', 48452 'جÙÙ', 48453 'جÙÙØ§Ø¡Ù', 48454 'آگسٽ', 48455 'سÙپٽ٠بر', 48456 'Ø¢ÚªÙ½ÙØ¨Ø±', 48457 'ÙÙ٠بر', 48458 'ÚØ³Ù بر', 48459 ], 48460 days = ['Ø¢ÚØ±', 'سÙ٠ر', 'اڱارÙ', 'اربع', 'Ø®Ù ÙØ³', 'ج٠ع', 'ÚÙÚØ±']; 48461 48462 var sd = moment.defineLocale('sd', { 48463 months: months, 48464 monthsShort: months, 48465 weekdays: days, 48466 weekdaysShort: days, 48467 weekdaysMin: days, 48468 longDateFormat: { 48469 LT: 'HH:mm', 48470 LTS: 'HH:mm:ss', 48471 L: 'DD/MM/YYYY', 48472 LL: 'D MMMM YYYY', 48473 LLL: 'D MMMM YYYY HH:mm', 48474 LLLL: 'ddddØ D MMMM YYYY HH:mm', 48475 }, 48476 meridiemParse: /صبØ|شا٠/, 48477 isPM: function (input) { 48478 return 'شا٠' === input; 48479 }, 48480 meridiem: function (hour, minute, isLower) { 48481 if (hour < 12) { 48482 return 'صبØ'; 48483 } 48484 return 'شا٠'; 48485 }, 48486 calendar: { 48487 sameDay: '[اÚ] LT', 48488 nextDay: '[Ø³ÚØ§Ú»Ù] LT', 48489 nextWeek: 'dddd [اڳÙÙ ÙÙØªÙ تÙ] LT', 48490 lastDay: '[ڪاÙÙÙ] LT', 48491 lastWeek: '[گزرÙÙ ÙÙØªÙ] dddd [تÙ] LT', 48492 sameElse: 'L', 48493 }, 48494 relativeTime: { 48495 future: '%s Ù¾ÙØ¡', 48496 past: '%s اڳ', 48497 s: 'ÚÙØ¯ سÙÚªÙÚ', 48498 ss: '%d سÙÚªÙÚ', 48499 m: 'ÙÚª Ù ÙÙ½', 48500 mm: '%d Ù ÙÙ½', 48501 h: 'ÙÚª ÚªÙØ§Úª', 48502 hh: '%d ÚªÙØ§Úª', 48503 d: 'ÙÚª ÚÙÙÙÙ', 48504 dd: '%d ÚÙÙÙÙ', 48505 M: 'ÙÚª Ù ÙÙÙÙ', 48506 MM: '%d Ù ÙÙÙØ§', 48507 y: 'ÙÚª ساÙ', 48508 yy: '%d ساÙ', 48509 }, 48510 preparse: function (string) { 48511 return string.replace(/Ø/g, ','); 48512 }, 48513 postformat: function (string) { 48514 return string.replace(/,/g, 'Ø'); 48515 }, 48516 week: { 48517 dow: 1, // Monday is the first day of the week. 48518 doy: 4, // The week that contains Jan 4th is the first week of the year. 48519 }, 48520 }); 48521 48522 return sd; 48523 48524}))); 48525 48526 48527/***/ }), 48528
vendor: 2,547 bytes, lines 48529-48605
48529/***/ "./node_modules/moment/locale/se.js": 48530/*!******************************************!*\ 48531 !*** ./node_modules/moment/locale/se.js ***! 48532 \******************************************/ 48533/*! no static exports found */ 48534/***/ (function(module, exports, __webpack_require__) { 48535 48536//! moment.js locale configuration 48537//! locale : Northern Sami [se] 48538//! authors : BÃ¥rd Rolstad Henriksen : https://github.com/karamell 48539 48540;(function (global, factory) { 48541 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : 48542 undefined 48543}(this, (function (moment) { 'use strict'; 48544 48545 //! moment.js locale configuration 48546 48547 var se = moment.defineLocale('se', { 48548 months: 'oÄÄajagemánnu_guovvamánnu_njukÄamánnu_cuoÅománnu_miessemánnu_geassemánnu_suoidnemánnu_borgemánnu_ÄakÄamánnu_golggotmánnu_skábmamánnu_juovlamánnu'.split( 48549 '_' 48550 ), 48551 monthsShort: 48552 'oÄÄj_guov_njuk_cuo_mies_geas_suoi_borg_ÄakÄ_golg_skáb_juov'.split('_'), 48553 weekdays: 48554 'sotnabeaivi_vuossárga_maÅÅebárga_gaskavahkku_duorastat_bearjadat_lávvardat'.split( 48555 '_' 48556 ), 48557 weekdaysShort: 'sotn_vuos_maÅ_gask_duor_bear_láv'.split('_'), 48558 weekdaysMin: 's_v_m_g_d_b_L'.split('_'), 48559 longDateFormat: { 48560 LT: 'HH:mm', 48561 LTS: 'HH:mm:ss', 48562 L: 'DD.MM.YYYY', 48563 LL: 'MMMM D. [b.] YYYY', 48564 LLL: 'MMMM D. [b.] YYYY [ti.] HH:mm', 48565 LLLL: 'dddd, MMMM D. [b.] YYYY [ti.] HH:mm', 48566 }, 48567 calendar: { 48568 sameDay: '[otne ti] LT', 48569 nextDay: '[ihttin ti] LT', 48570 nextWeek: 'dddd [ti] LT', 48571 lastDay: '[ikte ti] LT', 48572 lastWeek: '[ovddit] dddd [ti] LT', 48573 sameElse: 'L', 48574 }, 48575 relativeTime: { 48576 future: '%s geažes', 48577 past: 'maÅit %s', 48578 s: 'moadde sekunddat', 48579 ss: '%d sekunddat', 48580 m: 'okta minuhta', 48581 mm: '%d minuhtat', 48582 h: 'okta diimmu', 48583 hh: '%d diimmut', 48584 d: 'okta beaivi', 48585 dd: '%d beaivvit', 48586 M: 'okta mánnu', 48587 MM: '%d mánut', 48588 y: 'okta jahki', 48589 yy: '%d jagit', 48590 }, 48591 dayOfMonthOrdinalParse: /\d{1,2}\./, 48592 ordinal: '%d.', 48593 week: { 48594 dow: 1, // Monday is the first day of the week. 48595 doy: 4, // The week that contains Jan 4th is the first week of the year. 48596 }, 48597 }); 48598 48599 return se; 48600 48601}))); 48602 48603 48604/***/ }), 48605
vendor: 3,427 bytes, lines 48606-48694
48606/***/ "./node_modules/moment/locale/si.js": 48607/*!******************************************!*\ 48608 !*** ./node_modules/moment/locale/si.js ***! 48609 \******************************************/ 48610/*! no static exports found */ 48611/***/ (function(module, exports, __webpack_require__) { 48612 48613//! moment.js locale configuration 48614//! locale : Sinhalese [si] 48615//! author : Sampath Sitinamaluwa : https://github.com/sampathsris 48616 48617;(function (global, factory) { 48618 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : 48619 undefined 48620}(this, (function (moment) { 'use strict'; 48621 48622 //! moment.js locale configuration 48623 48624 /*jshint -W100*/ 48625 var si = moment.defineLocale('si', { 48626 months: 'ජනà·à·à¶»à·_à¶´à·à¶¶à¶»à·à·à¶»à·_මà·à¶»à·à¶à·_à¶ à¶´à·âà¶»à·à¶½à·_මà·à¶ºà·_à¶¢à·à¶±à·_à¶¢à·à¶½à·_à¶ à¶à·à·à·à¶à·_à·à·à¶´à·à¶à·à¶¸à·à¶¶à¶»à·_à¶à¶à·à¶à·à¶¶à¶»à·_à¶±à·à·à·à¶¸à·à¶¶à¶»à·_දà·à·à·à¶¸à·à¶¶à¶»à·'.split( 48627 '_' 48628 ), 48629 monthsShort: 'ජන_à¶´à·à¶¶_මà·à¶»à·_à¶ à¶´à·_මà·à¶ºà·_à¶¢à·à¶±à·_à¶¢à·à¶½à·_à¶ à¶à·_à·à·à¶´à·_à¶à¶à·_à¶±à·à·à·_දà·à·à·'.split( 48630 '_' 48631 ), 48632 weekdays: 48633 'à¶à¶»à·à¶¯à·_à·à¶³à·à¶¯à·_à¶ à¶à·à¶»à·à·à·à¶¯à·_බදà·à¶¯à·_à¶¶à·âà¶»à·à·à·à¶´à¶à·à¶±à·à¶¯à·_à·à·à¶à·à¶»à·à¶¯à·_à·à·à¶±à·à·à¶»à·à¶¯à·'.split( 48634 '_' 48635 ), 48636 weekdaysShort: 'à¶à¶»à·_à·à¶³à·_à¶ à¶_බදà·_à¶¶à·âà¶»à·_à·à·à¶à·_à·à·à¶±'.split('_'), 48637 weekdaysMin: 'à¶_à·_à¶ _à¶¶_à¶¶à·âà¶»_à·à·_à·à·'.split('_'), 48638 weekdaysParseExact: true, 48639 longDateFormat: { 48640 LT: 'a h:mm', 48641 LTS: 'a h:mm:ss', 48642 L: 'YYYY/MM/DD', 48643 LL: 'YYYY MMMM D', 48644 LLL: 'YYYY MMMM D, a h:mm', 48645 LLLL: 'YYYY MMMM D [à·à·à¶±à·] dddd, a h:mm:ss', 48646 }, 48647 calendar: { 48648 sameDay: '[චද] LT[à¶§]', 48649 nextDay: '[à·à·à¶§] LT[à¶§]', 48650 nextWeek: 'dddd LT[à¶§]', 48651 lastDay: '[à¶à¶ºà·] LT[à¶§]', 48652 lastWeek: '[à¶´à·à·à¶à·à¶º] dddd LT[à¶§]', 48653 sameElse: 'L', 48654 }, 48655 relativeTime: { 48656 future: '%sà¶à·à¶±à·', 48657 past: '%sà¶à¶§ à¶´à·à¶»', 48658 s: 'à¶à¶à·à¶´à¶» à¶à·à·à·à¶´à¶º', 48659 ss: 'à¶à¶à·à¶´à¶» %d', 48660 m: 'මà·à¶±à·à¶à·à¶à·à·', 48661 mm: 'මà·à¶±à·à¶à·à¶à· %d', 48662 h: 'à¶´à·à¶º', 48663 hh: 'à¶´à·à¶º %d', 48664 d: 'දà·à¶±à¶º', 48665 dd: 'දà·à¶± %d', 48666 M: 'මà·à·à¶º', 48667 MM: 'මà·à· %d', 48668 y: 'à·à·à¶»', 48669 yy: 'à·à·à¶» %d', 48670 }, 48671 dayOfMonthOrdinalParse: /\d{1,2} à·à·à¶±à·/, 48672 ordinal: function (number) { 48673 return number + ' à·à·à¶±à·'; 48674 }, 48675 meridiemParse: /à¶´à·à¶» à·à¶»à·|à¶´à·à· à·à¶»à·|à¶´à·.à·|à¶´.à·./, 48676 isPM: function (input) { 48677 return input === 'à¶´.à·.' || input === 'à¶´à·à· à·à¶»à·'; 48678 }, 48679 meridiem: function (hours, minutes, isLower) { 48680 if (hours > 11) { 48681 return isLower ? 'à¶´.à·.' : 'à¶´à·à· à·à¶»à·'; 48682 } else { 48683 return isLower ? 'à¶´à·.à·.' : 'à¶´à·à¶» à·à¶»à·'; 48684 } 48685 }, 48686 }); 48687 48688 return si; 48689 48690}))); 48691 48692 48693/***/ }), 48694
vendor: 6,215 bytes, lines 48695-48859
48695/***/ "./node_modules/moment/locale/sk.js": 48696/*!******************************************!*\ 48697 !*** ./node_modules/moment/locale/sk.js ***! 48698 \******************************************/ 48699/*! no static exports found */ 48700/***/ (function(module, exports, __webpack_require__) { 48701 48702//! moment.js locale configuration 48703//! locale : Slovak [sk] 48704//! author : Martin Minka : https://github.com/k2s 48705//! based on work of petrbela : https://github.com/petrbela 48706 48707;(function (global, factory) { 48708 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : 48709 undefined 48710}(this, (function (moment) { 'use strict'; 48711 48712 //! moment.js locale configuration 48713 48714 var months = 48715 'január_február_marec_aprÃl_máj_jún_júl_august_september_október_november_december'.split( 48716 '_' 48717 ), 48718 monthsShort = 'jan_feb_mar_apr_máj_jún_júl_aug_sep_okt_nov_dec'.split('_'); 48719 function plural(n) { 48720 return n > 1 && n < 5; 48721 } 48722 function translate(number, withoutSuffix, key, isFuture) { 48723 var result = number + ' '; 48724 switch (key) { 48725 case 's': // a few seconds / in a few seconds / a few seconds ago 48726 return withoutSuffix || isFuture ? 'pár sekúnd' : 'pár sekundami'; 48727 case 'ss': // 9 seconds / in 9 seconds / 9 seconds ago 48728 if (withoutSuffix || isFuture) { 48729 return result + (plural(number) ? 'sekundy' : 'sekúnd'); 48730 } else { 48731 return result + 'sekundami'; 48732 } 48733 case 'm': // a minute / in a minute / a minute ago 48734 return withoutSuffix ? 'minúta' : isFuture ? 'minútu' : 'minútou'; 48735 case 'mm': // 9 minutes / in 9 minutes / 9 minutes ago 48736 if (withoutSuffix || isFuture) { 48737 return result + (plural(number) ? 'minúty' : 'minút'); 48738 } else { 48739 return result + 'minútami'; 48740 } 48741 case 'h': // an hour / in an hour / an hour ago 48742 return withoutSuffix ? 'hodina' : isFuture ? 'hodinu' : 'hodinou'; 48743 case 'hh': // 9 hours / in 9 hours / 9 hours ago 48744 if (withoutSuffix || isFuture) { 48745 return result + (plural(number) ? 'hodiny' : 'hodÃn'); 48746 } else { 48747 return result + 'hodinami'; 48748 } 48749 case 'd': // a day / in a day / a day ago 48750 return withoutSuffix || isFuture ? 'deÅ' : 'dÅom'; 48751 case 'dd': // 9 days / in 9 days / 9 days ago 48752 if (withoutSuffix || isFuture) { 48753 return result + (plural(number) ? 'dni' : 'dnÃ'); 48754 } else { 48755 return result + 'dÅami'; 48756 } 48757 case 'M': // a month / in a month / a month ago 48758 return withoutSuffix || isFuture ? 'mesiac' : 'mesiacom'; 48759 case 'MM': // 9 months / in 9 months / 9 months ago 48760 if (withoutSuffix || isFuture) { 48761 return result + (plural(number) ? 'mesiace' : 'mesiacov'); 48762 } else { 48763 return result + 'mesiacmi'; 48764 } 48765 case 'y': // a year / in a year / a year ago 48766 return withoutSuffix || isFuture ? 'rok' : 'rokom'; 48767 case 'yy': // 9 years / in 9 years / 9 years ago 48768 if (withoutSuffix || isFuture) { 48769 return result + (plural(number) ? 'roky' : 'rokov'); 48770 } else { 48771 return result + 'rokmi'; 48772 } 48773 } 48774 } 48775 48776 var sk = moment.defineLocale('sk', { 48777 months: months, 48778 monthsShort: monthsShort, 48779 weekdays: 'nedeľa_pondelok_utorok_streda_Å¡tvrtok_piatok_sobota'.split('_'), 48780 weekdaysShort: 'ne_po_ut_st_Å¡t_pi_so'.split('_'), 48781 weekdaysMin: 'ne_po_ut_st_Å¡t_pi_so'.split('_'), 48782 longDateFormat: { 48783 LT: 'H:mm', 48784 LTS: 'H:mm:ss', 48785 L: 'DD.MM.YYYY', 48786 LL: 'D. MMMM YYYY', 48787 LLL: 'D. MMMM YYYY H:mm', 48788 LLLL: 'dddd D. MMMM YYYY H:mm', 48789 }, 48790 calendar: { 48791 sameDay: '[dnes o] LT', 48792 nextDay: '[zajtra o] LT', 48793 nextWeek: function () { 48794 switch (this.day()) { 48795 case 0: 48796 return '[v nedeľu o] LT'; 48797 case 1: 48798 case 2: 48799 return '[v] dddd [o] LT'; 48800 case 3: 48801 return '[v stredu o] LT'; 48802 case 4: 48803 return '[vo Å¡tvrtok o] LT'; 48804 case 5: 48805 return '[v piatok o] LT'; 48806 case 6: 48807 return '[v sobotu o] LT'; 48808 } 48809 }, 48810 lastDay: '[vÄera o] LT', 48811 lastWeek: function () { 48812 switch (this.day()) { 48813 case 0: 48814 return '[minulú nedeľu o] LT'; 48815 case 1: 48816 case 2: 48817 return '[minulý] dddd [o] LT'; 48818 case 3: 48819 return '[minulú stredu o] LT'; 48820 case 4: 48821 case 5: 48822 return '[minulý] dddd [o] LT'; 48823 case 6: 48824 return '[minulú sobotu o] LT'; 48825 } 48826 }, 48827 sameElse: 'L', 48828 }, 48829 relativeTime: { 48830 future: 'za %s', 48831 past: 'pred %s', 48832 s: translate, 48833 ss: translate, 48834 m: translate, 48835 mm: translate, 48836 h: translate, 48837 hh: translate, 48838 d: translate, 48839 dd: translate, 48840 M: translate, 48841 MM: translate, 48842 y: translate, 48843 yy: translate, 48844 }, 48845 dayOfMonthOrdinalParse: /\d{1,2}\./, 48846 ordinal: '%d.', 48847 week: { 48848 dow: 1, // Monday is the first day of the week. 48849 doy: 4, // The week that contains Jan 4th is the first week of the year. 48850 }, 48851 }); 48852 48853 return sk; 48854 48855}))); 48856 48857 48858/***/ }), 48859
vendor: 7,261 bytes, lines 48860-49050
48860/***/ "./node_modules/moment/locale/sl.js": 48861/*!******************************************!*\ 48862 !*** ./node_modules/moment/locale/sl.js ***! 48863 \******************************************/ 48864/*! no static exports found */ 48865/***/ (function(module, exports, __webpack_require__) { 48866 48867//! moment.js locale configuration 48868//! locale : Slovenian [sl] 48869//! author : Robert SedovÅ¡ek : https://github.com/sedovsek 48870 48871;(function (global, factory) { 48872 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : 48873 undefined 48874}(this, (function (moment) { 'use strict'; 48875 48876 //! moment.js locale configuration 48877 48878 function processRelativeTime(number, withoutSuffix, key, isFuture) { 48879 var result = number + ' '; 48880 switch (key) { 48881 case 's': 48882 return withoutSuffix || isFuture 48883 ? 'nekaj sekund' 48884 : 'nekaj sekundami'; 48885 case 'ss': 48886 if (number === 1) { 48887 result += withoutSuffix ? 'sekundo' : 'sekundi'; 48888 } else if (number === 2) { 48889 result += withoutSuffix || isFuture ? 'sekundi' : 'sekundah'; 48890 } else if (number < 5) { 48891 result += withoutSuffix || isFuture ? 'sekunde' : 'sekundah'; 48892 } else { 48893 result += 'sekund'; 48894 } 48895 return result; 48896 case 'm': 48897 return withoutSuffix ? 'ena minuta' : 'eno minuto'; 48898 case 'mm': 48899 if (number === 1) { 48900 result += withoutSuffix ? 'minuta' : 'minuto'; 48901 } else if (number === 2) { 48902 result += withoutSuffix || isFuture ? 'minuti' : 'minutama'; 48903 } else if (number < 5) { 48904 result += withoutSuffix || isFuture ? 'minute' : 'minutami'; 48905 } else { 48906 result += withoutSuffix || isFuture ? 'minut' : 'minutami'; 48907 } 48908 return result; 48909 case 'h': 48910 return withoutSuffix ? 'ena ura' : 'eno uro'; 48911 case 'hh': 48912 if (number === 1) { 48913 result += withoutSuffix ? 'ura' : 'uro'; 48914 } else if (number === 2) { 48915 result += withoutSuffix || isFuture ? 'uri' : 'urama'; 48916 } else if (number < 5) { 48917 result += withoutSuffix || isFuture ? 'ure' : 'urami'; 48918 } else { 48919 result += withoutSuffix || isFuture ? 'ur' : 'urami'; 48920 } 48921 return result; 48922 case 'd': 48923 return withoutSuffix || isFuture ? 'en dan' : 'enim dnem'; 48924 case 'dd': 48925 if (number === 1) { 48926 result += withoutSuffix || isFuture ? 'dan' : 'dnem'; 48927 } else if (number === 2) { 48928 result += withoutSuffix || isFuture ? 'dni' : 'dnevoma'; 48929 } else { 48930 result += withoutSuffix || isFuture ? 'dni' : 'dnevi'; 48931 } 48932 return result; 48933 case 'M': 48934 return withoutSuffix || isFuture ? 'en mesec' : 'enim mesecem'; 48935 case 'MM': 48936 if (number === 1) { 48937 result += withoutSuffix || isFuture ? 'mesec' : 'mesecem'; 48938 } else if (number === 2) { 48939 result += withoutSuffix || isFuture ? 'meseca' : 'mesecema'; 48940 } else if (number < 5) { 48941 result += withoutSuffix || isFuture ? 'mesece' : 'meseci'; 48942 } else { 48943 result += withoutSuffix || isFuture ? 'mesecev' : 'meseci'; 48944 } 48945 return result; 48946 case 'y': 48947 return withoutSuffix || isFuture ? 'eno leto' : 'enim letom'; 48948 case 'yy': 48949 if (number === 1) { 48950 result += withoutSuffix || isFuture ? 'leto' : 'letom'; 48951 } else if (number === 2) { 48952 result += withoutSuffix || isFuture ? 'leti' : 'letoma'; 48953 } else if (number < 5) { 48954 result += withoutSuffix || isFuture ? 'leta' : 'leti'; 48955 } else { 48956 result += withoutSuffix || isFuture ? 'let' : 'leti'; 48957 } 48958 return result; 48959 } 48960 } 48961 48962 var sl = moment.defineLocale('sl', { 48963 months: 'januar_februar_marec_april_maj_junij_julij_avgust_september_oktober_november_december'.split( 48964 '_' 48965 ), 48966 monthsShort: 48967 'jan._feb._mar._apr._maj._jun._jul._avg._sep._okt._nov._dec.'.split( 48968 '_' 48969 ), 48970 monthsParseExact: true, 48971 weekdays: 'nedelja_ponedeljek_torek_sreda_Äetrtek_petek_sobota'.split('_'), 48972 weekdaysShort: 'ned._pon._tor._sre._Äet._pet._sob.'.split('_'), 48973 weekdaysMin: 'ne_po_to_sr_Äe_pe_so'.split('_'), 48974 weekdaysParseExact: true, 48975 longDateFormat: { 48976 LT: 'H:mm', 48977 LTS: 'H:mm:ss', 48978 L: 'DD. MM. YYYY', 48979 LL: 'D. MMMM YYYY', 48980 LLL: 'D. MMMM YYYY H:mm', 48981 LLLL: 'dddd, D. MMMM YYYY H:mm', 48982 }, 48983 calendar: { 48984 sameDay: '[danes ob] LT', 48985 nextDay: '[jutri ob] LT', 48986 48987 nextWeek: function () { 48988 switch (this.day()) { 48989 case 0: 48990 return '[v] [nedeljo] [ob] LT'; 48991 case 3: 48992 return '[v] [sredo] [ob] LT'; 48993 case 6: 48994 return '[v] [soboto] [ob] LT'; 48995 case 1: 48996 case 2: 48997 case 4: 48998 case 5: 48999 return '[v] dddd [ob] LT'; 49000 } 49001 }, 49002 lastDay: '[vÄeraj ob] LT', 49003 lastWeek: function () { 49004 switch (this.day()) { 49005 case 0: 49006 return '[prejÅ¡njo] [nedeljo] [ob] LT'; 49007 case 3: 49008 return '[prejÅ¡njo] [sredo] [ob] LT'; 49009 case 6: 49010 return '[prejÅ¡njo] [soboto] [ob] LT'; 49011 case 1: 49012 case 2: 49013 case 4: 49014 case 5: 49015 return '[prejÅ¡nji] dddd [ob] LT'; 49016 } 49017 }, 49018 sameElse: 'L', 49019 }, 49020 relativeTime: { 49021 future: 'Äez %s', 49022 past: 'pred %s', 49023 s: processRelativeTime, 49024 ss: processRelativeTime, 49025 m: processRelativeTime, 49026 mm: processRelativeTime, 49027 h: processRelativeTime, 49028 hh: processRelativeTime, 49029 d: processRelativeTime, 49030 dd: processRelativeTime, 49031 M: processRelativeTime, 49032 MM: processRelativeTime, 49033 y: processRelativeTime, 49034 yy: processRelativeTime, 49035 }, 49036 dayOfMonthOrdinalParse: /\d{1,2}\./, 49037 ordinal: '%d.', 49038 week: { 49039 dow: 1, // Monday is the first day of the week. 49040 doy: 7, // The week that contains Jan 7th is the first week of the year. 49041 }, 49042 }); 49043 49044 return sl; 49045 49046}))); 49047 49048 49049/***/ }), 49050
vendor: 2,709 bytes, lines 49051-49135
49051/***/ "./node_modules/moment/locale/sq.js": 49052/*!******************************************!*\ 49053 !*** ./node_modules/moment/locale/sq.js ***! 49054 \******************************************/ 49055/*! no static exports found */ 49056/***/ (function(module, exports, __webpack_require__) { 49057 49058//! moment.js locale configuration 49059//! locale : Albanian [sq] 49060//! author : Flakërim Ismani : https://github.com/flakerimi 49061//! author : Menelion Elensúle : https://github.com/Oire 49062//! author : Oerd Cukalla : https://github.com/oerd 49063 49064;(function (global, factory) { 49065 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : 49066 undefined 49067}(this, (function (moment) { 'use strict'; 49068 49069 //! moment.js locale configuration 49070 49071 var sq = moment.defineLocale('sq', { 49072 months: 'Janar_Shkurt_Mars_Prill_Maj_Qershor_Korrik_Gusht_Shtator_Tetor_Nëntor_Dhjetor'.split( 49073 '_' 49074 ), 49075 monthsShort: 'Jan_Shk_Mar_Pri_Maj_Qer_Kor_Gus_Sht_Tet_Nën_Dhj'.split('_'), 49076 weekdays: 'E Diel_E Hënë_E Martë_E Mërkurë_E Enjte_E Premte_E Shtunë'.split( 49077 '_' 49078 ), 49079 weekdaysShort: 'Die_Hën_Mar_Mër_Enj_Pre_Sht'.split('_'), 49080 weekdaysMin: 'D_H_Ma_Më_E_P_Sh'.split('_'), 49081 weekdaysParseExact: true, 49082 meridiemParse: /PD|MD/, 49083 isPM: function (input) { 49084 return input.charAt(0) === 'M'; 49085 }, 49086 meridiem: function (hours, minutes, isLower) { 49087 return hours < 12 ? 'PD' : 'MD'; 49088 }, 49089 longDateFormat: { 49090 LT: 'HH:mm', 49091 LTS: 'HH:mm:ss', 49092 L: 'DD/MM/YYYY', 49093 LL: 'D MMMM YYYY', 49094 LLL: 'D MMMM YYYY HH:mm', 49095 LLLL: 'dddd, D MMMM YYYY HH:mm', 49096 }, 49097 calendar: { 49098 sameDay: '[Sot në] LT', 49099 nextDay: '[Nesër në] LT', 49100 nextWeek: 'dddd [në] LT', 49101 lastDay: '[Dje në] LT', 49102 lastWeek: 'dddd [e kaluar në] LT', 49103 sameElse: 'L', 49104 }, 49105 relativeTime: { 49106 future: 'në %s', 49107 past: '%s më parë', 49108 s: 'disa sekonda', 49109 ss: '%d sekonda', 49110 m: 'një minutë', 49111 mm: '%d minuta', 49112 h: 'një orë', 49113 hh: '%d orë', 49114 d: 'një ditë', 49115 dd: '%d ditë', 49116 M: 'një muaj', 49117 MM: '%d muaj', 49118 y: 'një vit', 49119 yy: '%d vite', 49120 }, 49121 dayOfMonthOrdinalParse: /\d{1,2}\./, 49122 ordinal: '%d.', 49123 week: { 49124 dow: 1, // Monday is the first day of the week. 49125 doy: 4, // The week that contains Jan 4th is the first week of the year. 49126 }, 49127 }); 49128 49129 return sq; 49130 49131}))); 49132 49133 49134/***/ }), 49135
vendor: 5,748 bytes, lines 49136-49282
49136/***/ "./node_modules/moment/locale/sr-cyrl.js": 49137/*!***********************************************!*\ 49138 !*** ./node_modules/moment/locale/sr-cyrl.js ***! 49139 \***********************************************/ 49140/*! no static exports found */ 49141/***/ (function(module, exports, __webpack_require__) { 49142 49143//! moment.js locale configuration 49144//! locale : Serbian Cyrillic [sr-cyrl] 49145//! author : Milan JanaÄkoviÄ<[email protected]> : https://github.com/milan-j 49146//! author : Stefan CrnjakoviÄ <[email protected]> : https://github.com/crnjakovic 49147 49148;(function (global, factory) { 49149 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : 49150 undefined 49151}(this, (function (moment) { 'use strict'; 49152 49153 //! moment.js locale configuration 49154 49155 var translator = { 49156 words: { 49157 //Different grammatical cases 49158 ss: ['ÑекÑнда', 'ÑекÑнде', 'ÑекÑнди'], 49159 m: ['Ñедан минÑÑ', 'Ñедног минÑÑа'], 49160 mm: ['минÑÑ', 'минÑÑа', 'минÑÑа'], 49161 h: ['Ñедан ÑаÑ', 'Ñедног ÑаÑа'], 49162 hh: ['ÑаÑ', 'ÑаÑа', 'ÑаÑи'], 49163 d: ['Ñедан дан', 'Ñедног дана'], 49164 dd: ['дан', 'дана', 'дана'], 49165 M: ['Ñедан меÑеÑ', 'Ñедног меÑеÑа'], 49166 MM: ['меÑеÑ', 'меÑеÑа', 'меÑеÑи'], 49167 y: ['ÑÐµÐ´Ð½Ñ Ð³Ð¾Ð´Ð¸Ð½Ñ', 'Ñедне године'], 49168 yy: ['годинÑ', 'године', 'година'], 49169 }, 49170 correctGrammaticalCase: function (number, wordKey) { 49171 if ( 49172 number % 10 >= 1 && 49173 number % 10 <= 4 && 49174 (number % 100 < 10 || number % 100 >= 20) 49175 ) { 49176 return number % 10 === 1 ? wordKey[0] : wordKey[1]; 49177 } 49178 return wordKey[2]; 49179 }, 49180 translate: function (number, withoutSuffix, key, isFuture) { 49181 var wordKey = translator.words[key], 49182 word; 49183 49184 if (key.length === 1) { 49185 // Nominativ 49186 if (key === 'y' && withoutSuffix) return 'Ñедна година'; 49187 return isFuture || withoutSuffix ? wordKey[0] : wordKey[1]; 49188 } 49189 49190 word = translator.correctGrammaticalCase(number, wordKey); 49191 // Nominativ 49192 if (key === 'yy' && withoutSuffix && word === 'годинÑ') { 49193 return number + ' година'; 49194 } 49195 49196 return number + ' ' + word; 49197 }, 49198 }; 49199 49200 var srCyrl = moment.defineLocale('sr-cyrl', { 49201 months: 'ÑанÑаÑ_ÑебÑÑаÑ_маÑÑ_апÑил_маÑ_ÑÑн_ÑÑл_авгÑÑÑ_ÑепÑембаÑ_окÑобаÑ_новембаÑ_деÑембаÑ'.split( 49202 '_' 49203 ), 49204 monthsShort: 49205 'Ñан._Ñеб._маÑ._апÑ._маÑ_ÑÑн_ÑÑл_авг._Ñеп._окÑ._нов._деÑ.'.split('_'), 49206 monthsParseExact: true, 49207 weekdays: 'недеÑа_понедеÑак_ÑÑоÑак_ÑÑеда_ÑеÑвÑÑак_пеÑак_ÑÑбоÑа'.split('_'), 49208 weekdaysShort: 'нед._пон._ÑÑо._ÑÑе._ÑеÑ._пеÑ._ÑÑб.'.split('_'), 49209 weekdaysMin: 'не_по_ÑÑ_ÑÑ_Ñе_пе_ÑÑ'.split('_'), 49210 weekdaysParseExact: true, 49211 longDateFormat: { 49212 LT: 'H:mm', 49213 LTS: 'H:mm:ss', 49214 L: 'D. M. YYYY.', 49215 LL: 'D. MMMM YYYY.', 49216 LLL: 'D. MMMM YYYY. H:mm', 49217 LLLL: 'dddd, D. MMMM YYYY. H:mm', 49218 }, 49219 calendar: { 49220 sameDay: '[Ð´Ð°Ð½Ð°Ñ Ñ] LT', 49221 nextDay: '[ÑÑÑÑа Ñ] LT', 49222 nextWeek: function () { 49223 switch (this.day()) { 49224 case 0: 49225 return '[Ñ] [недеÑÑ] [Ñ] LT'; 49226 case 3: 49227 return '[Ñ] [ÑÑедÑ] [Ñ] LT'; 49228 case 6: 49229 return '[Ñ] [ÑÑбоÑÑ] [Ñ] LT'; 49230 case 1: 49231 case 2: 49232 case 4: 49233 case 5: 49234 return '[Ñ] dddd [Ñ] LT'; 49235 } 49236 }, 49237 lastDay: '[ÑÑÑе Ñ] LT', 49238 lastWeek: function () { 49239 var lastWeekDays = [ 49240 '[пÑоÑле] [недеÑе] [Ñ] LT', 49241 '[пÑоÑлог] [понедеÑка] [Ñ] LT', 49242 '[пÑоÑлог] [ÑÑоÑка] [Ñ] LT', 49243 '[пÑоÑле] [ÑÑеде] [Ñ] LT', 49244 '[пÑоÑлог] [ÑеÑвÑÑка] [Ñ] LT', 49245 '[пÑоÑлог] [пеÑка] [Ñ] LT', 49246 '[пÑоÑле] [ÑÑбоÑе] [Ñ] LT', 49247 ]; 49248 return lastWeekDays[this.day()]; 49249 }, 49250 sameElse: 'L', 49251 }, 49252 relativeTime: { 49253 future: 'за %s', 49254 past: 'пÑе %s', 49255 s: 'неколико ÑекÑнди', 49256 ss: translator.translate, 49257 m: translator.translate, 49258 mm: translator.translate, 49259 h: translator.translate, 49260 hh: translator.translate, 49261 d: translator.translate, 49262 dd: translator.translate, 49263 M: translator.translate, 49264 MM: translator.translate, 49265 y: translator.translate, 49266 yy: translator.translate, 49267 }, 49268 dayOfMonthOrdinalParse: /\d{1,2}\./, 49269 ordinal: '%d.', 49270 week: { 49271 dow: 1, // Monday is the first day of the week. 49272 doy: 7, // The week that contains Jan 1st is the first week of the year. 49273 }, 49274 }); 49275 49276 return srCyrl; 49277 49278}))); 49279 49280 49281/***/ }), 49282
vendor: 5,175 bytes, lines 49283-49431
49283/***/ "./node_modules/moment/locale/sr.js": 49284/*!******************************************!*\ 49285 !*** ./node_modules/moment/locale/sr.js ***! 49286 \******************************************/ 49287/*! no static exports found */ 49288/***/ (function(module, exports, __webpack_require__) { 49289 49290//! moment.js locale configuration 49291//! locale : Serbian [sr] 49292//! author : Milan JanaÄkoviÄ<[email protected]> : https://github.com/milan-j 49293//! author : Stefan CrnjakoviÄ <[email protected]> : https://github.com/crnjakovic 49294 49295;(function (global, factory) { 49296 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : 49297 undefined 49298}(this, (function (moment) { 'use strict'; 49299 49300 //! moment.js locale configuration 49301 49302 var translator = { 49303 words: { 49304 //Different grammatical cases 49305 ss: ['sekunda', 'sekunde', 'sekundi'], 49306 m: ['jedan minut', 'jednog minuta'], 49307 mm: ['minut', 'minuta', 'minuta'], 49308 h: ['jedan sat', 'jednog sata'], 49309 hh: ['sat', 'sata', 'sati'], 49310 d: ['jedan dan', 'jednog dana'], 49311 dd: ['dan', 'dana', 'dana'], 49312 M: ['jedan mesec', 'jednog meseca'], 49313 MM: ['mesec', 'meseca', 'meseci'], 49314 y: ['jednu godinu', 'jedne godine'], 49315 yy: ['godinu', 'godine', 'godina'], 49316 }, 49317 correctGrammaticalCase: function (number, wordKey) { 49318 if ( 49319 number % 10 >= 1 && 49320 number % 10 <= 4 && 49321 (number % 100 < 10 || number % 100 >= 20) 49322 ) { 49323 return number % 10 === 1 ? wordKey[0] : wordKey[1]; 49324 } 49325 return wordKey[2]; 49326 }, 49327 translate: function (number, withoutSuffix, key, isFuture) { 49328 var wordKey = translator.words[key], 49329 word; 49330 49331 if (key.length === 1) { 49332 // Nominativ 49333 if (key === 'y' && withoutSuffix) return 'jedna godina'; 49334 return isFuture || withoutSuffix ? wordKey[0] : wordKey[1]; 49335 } 49336 49337 word = translator.correctGrammaticalCase(number, wordKey); 49338 // Nominativ 49339 if (key === 'yy' && withoutSuffix && word === 'godinu') { 49340 return number + ' godina'; 49341 } 49342 49343 return number + ' ' + word; 49344 }, 49345 }; 49346 49347 var sr = moment.defineLocale('sr', { 49348 months: 'januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar'.split( 49349 '_' 49350 ), 49351 monthsShort: 49352 'jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.'.split('_'), 49353 monthsParseExact: true, 49354 weekdays: 'nedelja_ponedeljak_utorak_sreda_Äetvrtak_petak_subota'.split( 49355 '_' 49356 ), 49357 weekdaysShort: 'ned._pon._uto._sre._Äet._pet._sub.'.split('_'), 49358 weekdaysMin: 'ne_po_ut_sr_Äe_pe_su'.split('_'), 49359 weekdaysParseExact: true, 49360 longDateFormat: { 49361 LT: 'H:mm', 49362 LTS: 'H:mm:ss', 49363 L: 'D. M. YYYY.', 49364 LL: 'D. MMMM YYYY.', 49365 LLL: 'D. MMMM YYYY. H:mm', 49366 LLLL: 'dddd, D. MMMM YYYY. H:mm', 49367 }, 49368 calendar: { 49369 sameDay: '[danas u] LT', 49370 nextDay: '[sutra u] LT', 49371 nextWeek: function () { 49372 switch (this.day()) { 49373 case 0: 49374 return '[u] [nedelju] [u] LT'; 49375 case 3: 49376 return '[u] [sredu] [u] LT'; 49377 case 6: 49378 return '[u] [subotu] [u] LT'; 49379 case 1: 49380 case 2: 49381 case 4: 49382 case 5: 49383 return '[u] dddd [u] LT'; 49384 } 49385 }, 49386 lastDay: '[juÄe u] LT', 49387 lastWeek: function () { 49388 var lastWeekDays = [ 49389 '[proÅ¡le] [nedelje] [u] LT', 49390 '[proÅ¡log] [ponedeljka] [u] LT', 49391 '[proÅ¡log] [utorka] [u] LT', 49392 '[proÅ¡le] [srede] [u] LT', 49393 '[proÅ¡log] [Äetvrtka] [u] LT', 49394 '[proÅ¡log] [petka] [u] LT', 49395 '[proÅ¡le] [subote] [u] LT', 49396 ]; 49397 return lastWeekDays[this.day()]; 49398 }, 49399 sameElse: 'L', 49400 }, 49401 relativeTime: { 49402 future: 'za %s', 49403 past: 'pre %s', 49404 s: 'nekoliko sekundi', 49405 ss: translator.translate, 49406 m: translator.translate, 49407 mm: translator.translate, 49408 h: translator.translate, 49409 hh: translator.translate, 49410 d: translator.translate, 49411 dd: translator.translate, 49412 M: translator.translate, 49413 MM: translator.translate, 49414 y: translator.translate, 49415 yy: translator.translate, 49416 }, 49417 dayOfMonthOrdinalParse: /\d{1,2}\./, 49418 ordinal: '%d.', 49419 week: { 49420 dow: 1, // Monday is the first day of the week. 49421 doy: 7, // The week that contains Jan 7th is the first week of the year. 49422 }, 49423 }); 49424 49425 return sr; 49426 49427}))); 49428 49429 49430/***/ }), 49431
vendor: 3,378 bytes, lines 49432-49535
49432/***/ "./node_modules/moment/locale/ss.js": 49433/*!******************************************!*\ 49434 !*** ./node_modules/moment/locale/ss.js ***! 49435 \******************************************/ 49436/*! no static exports found */ 49437/***/ (function(module, exports, __webpack_require__) { 49438 49439//! moment.js locale configuration 49440//! locale : siSwati [ss] 49441//! author : Nicolai Davies<[email protected]> : https://github.com/nicolaidavies 49442 49443;(function (global, factory) { 49444 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : 49445 undefined 49446}(this, (function (moment) { 'use strict'; 49447 49448 //! moment.js locale configuration 49449 49450 var ss = moment.defineLocale('ss', { 49451 months: "Bhimbidvwane_Indlovana_Indlov'lenkhulu_Mabasa_Inkhwekhweti_Inhlaba_Kholwane_Ingci_Inyoni_Imphala_Lweti_Ingongoni".split( 49452 '_' 49453 ), 49454 monthsShort: 'Bhi_Ina_Inu_Mab_Ink_Inh_Kho_Igc_Iny_Imp_Lwe_Igo'.split('_'), 49455 weekdays: 49456 'Lisontfo_Umsombuluko_Lesibili_Lesitsatfu_Lesine_Lesihlanu_Umgcibelo'.split( 49457 '_' 49458 ), 49459 weekdaysShort: 'Lis_Umb_Lsb_Les_Lsi_Lsh_Umg'.split('_'), 49460 weekdaysMin: 'Li_Us_Lb_Lt_Ls_Lh_Ug'.split('_'), 49461 weekdaysParseExact: true, 49462 longDateFormat: { 49463 LT: 'h:mm A', 49464 LTS: 'h:mm:ss A', 49465 L: 'DD/MM/YYYY', 49466 LL: 'D MMMM YYYY', 49467 LLL: 'D MMMM YYYY h:mm A', 49468 LLLL: 'dddd, D MMMM YYYY h:mm A', 49469 }, 49470 calendar: { 49471 sameDay: '[Namuhla nga] LT', 49472 nextDay: '[Kusasa nga] LT', 49473 nextWeek: 'dddd [nga] LT', 49474 lastDay: '[Itolo nga] LT', 49475 lastWeek: 'dddd [leliphelile] [nga] LT', 49476 sameElse: 'L', 49477 }, 49478 relativeTime: { 49479 future: 'nga %s', 49480 past: 'wenteka nga %s', 49481 s: 'emizuzwana lomcane', 49482 ss: '%d mzuzwana', 49483 m: 'umzuzu', 49484 mm: '%d emizuzu', 49485 h: 'lihora', 49486 hh: '%d emahora', 49487 d: 'lilanga', 49488 dd: '%d emalanga', 49489 M: 'inyanga', 49490 MM: '%d tinyanga', 49491 y: 'umnyaka', 49492 yy: '%d iminyaka', 49493 }, 49494 meridiemParse: /ekuseni|emini|entsambama|ebusuku/, 49495 meridiem: function (hours, minutes, isLower) { 49496 if (hours < 11) { 49497 return 'ekuseni'; 49498 } else if (hours < 15) { 49499 return 'emini'; 49500 } else if (hours < 19) { 49501 return 'entsambama'; 49502 } else { 49503 return 'ebusuku'; 49504 } 49505 }, 49506 meridiemHour: function (hour, meridiem) { 49507 if (hour === 12) { 49508 hour = 0; 49509 } 49510 if (meridiem === 'ekuseni') { 49511 return hour; 49512 } else if (meridiem === 'emini') { 49513 return hour >= 11 ? hour : hour + 12; 49514 } else if (meridiem === 'entsambama' || meridiem === 'ebusuku') { 49515 if (hour === 0) { 49516 return 0; 49517 } 49518 return hour + 12; 49519 } 49520 }, 49521 dayOfMonthOrdinalParse: /\d{1,2}/, 49522 ordinal: '%d', 49523 week: { 49524 dow: 1, // Monday is the first day of the week. 49525 doy: 4, // The week that contains Jan 4th is the first week of the year. 49526 }, 49527 }); 49528 49529 return ss; 49530 49531}))); 49532 49533 49534/***/ }), 49535
vendor: 2,832 bytes, lines 49536-49623
49536/***/ "./node_modules/moment/locale/sv.js": 49537/*!******************************************!*\ 49538 !*** ./node_modules/moment/locale/sv.js ***! 49539 \******************************************/ 49540/*! no static exports found */ 49541/***/ (function(module, exports, __webpack_require__) { 49542 49543//! moment.js locale configuration 49544//! locale : Swedish [sv] 49545//! author : Jens Alm : https://github.com/ulmus 49546 49547;(function (global, factory) { 49548 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : 49549 undefined 49550}(this, (function (moment) { 'use strict'; 49551 49552 //! moment.js locale configuration 49553 49554 var sv = moment.defineLocale('sv', { 49555 months: 'januari_februari_mars_april_maj_juni_juli_augusti_september_oktober_november_december'.split( 49556 '_' 49557 ), 49558 monthsShort: 'jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec'.split('_'), 49559 weekdays: 'söndag_måndag_tisdag_onsdag_torsdag_fredag_lördag'.split('_'), 49560 weekdaysShort: 'sön_mån_tis_ons_tor_fre_lör'.split('_'), 49561 weekdaysMin: 'sö_må_ti_on_to_fr_lö'.split('_'), 49562 longDateFormat: { 49563 LT: 'HH:mm', 49564 LTS: 'HH:mm:ss', 49565 L: 'YYYY-MM-DD', 49566 LL: 'D MMMM YYYY', 49567 LLL: 'D MMMM YYYY [kl.] HH:mm', 49568 LLLL: 'dddd D MMMM YYYY [kl.] HH:mm', 49569 lll: 'D MMM YYYY HH:mm', 49570 llll: 'ddd D MMM YYYY HH:mm', 49571 }, 49572 calendar: { 49573 sameDay: '[Idag] LT', 49574 nextDay: '[Imorgon] LT', 49575 lastDay: '[Igår] LT', 49576 nextWeek: '[På] dddd LT', 49577 lastWeek: '[I] dddd[s] LT', 49578 sameElse: 'L', 49579 }, 49580 relativeTime: { 49581 future: 'om %s', 49582 past: 'för %s sedan', 49583 s: 'några sekunder', 49584 ss: '%d sekunder', 49585 m: 'en minut', 49586 mm: '%d minuter', 49587 h: 'en timme', 49588 hh: '%d timmar', 49589 d: 'en dag', 49590 dd: '%d dagar', 49591 M: 'en månad', 49592 MM: '%d månader', 49593 y: 'ett år', 49594 yy: '%d år', 49595 }, 49596 dayOfMonthOrdinalParse: /\d{1,2}(\:e|\:a)/, 49597 ordinal: function (number) { 49598 var b = number % 10, 49599 output = 49600 ~~((number % 100) / 10) === 1 49601 ? ':e' 49602 : b === 1 49603 ? ':a' 49604 : b === 2 49605 ? ':a' 49606 : b === 3 49607 ? ':e' 49608 : ':e'; 49609 return number + output; 49610 }, 49611 week: { 49612 dow: 1, // Monday is the first day of the week. 49613 doy: 4, // The week that contains Jan 4th is the first week of the year. 49614 }, 49615 }); 49616 49617 return sv; 49618 49619}))); 49620 49621 49622/***/ }), 49623
vendor: 2,341 bytes, lines 49624-49698
49624/***/ "./node_modules/moment/locale/sw.js": 49625/*!******************************************!*\ 49626 !*** ./node_modules/moment/locale/sw.js ***! 49627 \******************************************/ 49628/*! no static exports found */ 49629/***/ (function(module, exports, __webpack_require__) { 49630 49631//! moment.js locale configuration 49632//! locale : Swahili [sw] 49633//! author : Fahad Kassim : https://github.com/fadsel 49634 49635;(function (global, factory) { 49636 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : 49637 undefined 49638}(this, (function (moment) { 'use strict'; 49639 49640 //! moment.js locale configuration 49641 49642 var sw = moment.defineLocale('sw', { 49643 months: 'Januari_Februari_Machi_Aprili_Mei_Juni_Julai_Agosti_Septemba_Oktoba_Novemba_Desemba'.split( 49644 '_' 49645 ), 49646 monthsShort: 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ago_Sep_Okt_Nov_Des'.split('_'), 49647 weekdays: 49648 'Jumapili_Jumatatu_Jumanne_Jumatano_Alhamisi_Ijumaa_Jumamosi'.split( 49649 '_' 49650 ), 49651 weekdaysShort: 'Jpl_Jtat_Jnne_Jtan_Alh_Ijm_Jmos'.split('_'), 49652 weekdaysMin: 'J2_J3_J4_J5_Al_Ij_J1'.split('_'), 49653 weekdaysParseExact: true, 49654 longDateFormat: { 49655 LT: 'hh:mm A', 49656 LTS: 'HH:mm:ss', 49657 L: 'DD.MM.YYYY', 49658 LL: 'D MMMM YYYY', 49659 LLL: 'D MMMM YYYY HH:mm', 49660 LLLL: 'dddd, D MMMM YYYY HH:mm', 49661 }, 49662 calendar: { 49663 sameDay: '[leo saa] LT', 49664 nextDay: '[kesho saa] LT', 49665 nextWeek: '[wiki ijayo] dddd [saat] LT', 49666 lastDay: '[jana] LT', 49667 lastWeek: '[wiki iliyopita] dddd [saat] LT', 49668 sameElse: 'L', 49669 }, 49670 relativeTime: { 49671 future: '%s baadaye', 49672 past: 'tokea %s', 49673 s: 'hivi punde', 49674 ss: 'sekunde %d', 49675 m: 'dakika moja', 49676 mm: 'dakika %d', 49677 h: 'saa limoja', 49678 hh: 'masaa %d', 49679 d: 'siku moja', 49680 dd: 'siku %d', 49681 M: 'mwezi mmoja', 49682 MM: 'miezi %d', 49683 y: 'mwaka mmoja', 49684 yy: 'miaka %d', 49685 }, 49686 week: { 49687 dow: 1, // Monday is the first day of the week. 49688 doy: 7, // The week that contains Jan 7th is the first week of the year. 49689 }, 49690 }); 49691 49692 return sw; 49693 49694}))); 49695 49696 49697/***/ }), 49698
vendor: 5,790 bytes, lines 49699-49849
49699/***/ "./node_modules/moment/locale/ta.js": 49700/*!******************************************!*\ 49701 !*** ./node_modules/moment/locale/ta.js ***! 49702 \******************************************/ 49703/*! no static exports found */ 49704/***/ (function(module, exports, __webpack_require__) { 49705 49706//! moment.js locale configuration 49707//! locale : Tamil [ta] 49708//! author : Arjunkumar Krishnamoorthy : https://github.com/tk120404 49709 49710;(function (global, factory) { 49711 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : 49712 undefined 49713}(this, (function (moment) { 'use strict'; 49714 49715 //! moment.js locale configuration 49716 49717 var symbolMap = { 49718 1: '௧', 49719 2: '௨', 49720 3: '௩', 49721 4: '௪', 49722 5: '௫', 49723 6: '௬', 49724 7: 'à¯', 49725 8: '௮', 49726 9: '௯', 49727 0: '௦', 49728 }, 49729 numberMap = { 49730 '௧': '1', 49731 '௨': '2', 49732 '௩': '3', 49733 '௪': '4', 49734 '௫': '5', 49735 '௬': '6', 49736 'à¯': '7', 49737 '௮': '8', 49738 '௯': '9', 49739 '௦': '0', 49740 }; 49741 49742 var ta = moment.defineLocale('ta', { 49743 months: 'à®à®©à®µà®°à®¿_பிபà¯à®°à®µà®°à®¿_மாரà¯à®à¯_à®à®ªà¯à®°à®²à¯_à®®à¯_à®à¯à®©à¯_à®à¯à®²à¯_à®à®à®¸à¯à®à¯_à®à¯à®ªà¯à®à¯à®®à¯à®ªà®°à¯_à® à®à¯à®à¯à®¾à®ªà®°à¯_நவமà¯à®ªà®°à¯_à®à®¿à®à®®à¯à®ªà®°à¯'.split( 49744 '_' 49745 ), 49746 monthsShort: 49747 'à®à®©à®µà®°à®¿_பிபà¯à®°à®µà®°à®¿_மாரà¯à®à¯_à®à®ªà¯à®°à®²à¯_à®®à¯_à®à¯à®©à¯_à®à¯à®²à¯_à®à®à®¸à¯à®à¯_à®à¯à®ªà¯à®à¯à®®à¯à®ªà®°à¯_à® à®à¯à®à¯à®¾à®ªà®°à¯_நவமà¯à®ªà®°à¯_à®à®¿à®à®®à¯à®ªà®°à¯'.split( 49748 '_' 49749 ), 49750 weekdays: 49751 'à®à®¾à®¯à®¿à®±à¯à®±à¯à®à¯à®à®¿à®´à®®à¯_திà®à¯à®à®à¯à®à®¿à®´à®®à¯_à®à¯à®µà¯à®µà®¾à®¯à¯à®à®¿à®´à®®à¯_பà¯à®¤à®©à¯à®à®¿à®´à®®à¯_வியாழà®à¯à®à®¿à®´à®®à¯_வà¯à®³à¯à®³à®¿à®à¯à®à®¿à®´à®®à¯_à®à®©à®¿à®à¯à®à®¿à®´à®®à¯'.split( 49752 '_' 49753 ), 49754 weekdaysShort: 'à®à®¾à®¯à®¿à®±à¯_திà®à¯à®à®³à¯_à®à¯à®µà¯à®µà®¾à®¯à¯_பà¯à®¤à®©à¯_வியாழனà¯_வà¯à®³à¯à®³à®¿_à®à®©à®¿'.split( 49755 '_' 49756 ), 49757 weekdaysMin: 'à®à®¾_தி_à®à¯_பà¯_வி_வà¯_à®'.split('_'), 49758 longDateFormat: { 49759 LT: 'HH:mm', 49760 LTS: 'HH:mm:ss', 49761 L: 'DD/MM/YYYY', 49762 LL: 'D MMMM YYYY', 49763 LLL: 'D MMMM YYYY, HH:mm', 49764 LLLL: 'dddd, D MMMM YYYY, HH:mm', 49765 }, 49766 calendar: { 49767 sameDay: '[à®à®©à¯à®±à¯] LT', 49768 nextDay: '[நாளà¯] LT', 49769 nextWeek: 'dddd, LT', 49770 lastDay: '[நà¯à®±à¯à®±à¯] LT', 49771 lastWeek: '[à®à®à®¨à¯à®¤ வாரமà¯] dddd, LT', 49772 sameElse: 'L', 49773 }, 49774 relativeTime: { 49775 future: '%s à®à®²à¯', 49776 past: '%s à®®à¯à®©à¯', 49777 s: 'à®à®°à¯ à®à®¿à®² விநாà®à®¿à®à®³à¯', 49778 ss: '%d விநாà®à®¿à®à®³à¯', 49779 m: 'à®à®°à¯ நிமிà®à®®à¯', 49780 mm: '%d நிமிà®à®à¯à®à®³à¯', 49781 h: 'à®à®°à¯ மணி நà¯à®°à®®à¯', 49782 hh: '%d மணி நà¯à®°à®®à¯', 49783 d: 'à®à®°à¯ நாளà¯', 49784 dd: '%d நாà®à¯à®à®³à¯', 49785 M: 'à®à®°à¯ மாதமà¯', 49786 MM: '%d மாதà®à¯à®à®³à¯', 49787 y: 'à®à®°à¯ வரà¯à®à®®à¯', 49788 yy: '%d à®à®£à¯à®à¯à®à®³à¯', 49789 }, 49790 dayOfMonthOrdinalParse: /\d{1,2}வதà¯/, 49791 ordinal: function (number) { 49792 return number + 'வதà¯'; 49793 }, 49794 preparse: function (string) { 49795 return string.replace(/[௧௨௩௪௫௬à¯à¯®à¯¯à¯¦]/g, function (match) { 49796 return numberMap[match]; 49797 }); 49798 }, 49799 postformat: function (string) { 49800 return string.replace(/\d/g, function (match) { 49801 return symbolMap[match]; 49802 }); 49803 }, 49804 // refer http://ta.wikipedia.org/s/1er1 49805 meridiemParse: /யாமமà¯|வà¯à®à®±à¯|à®à®¾à®²à¯|நணà¯à®ªà®à®²à¯|à®à®±à¯à®ªà®¾à®à¯|மாலà¯/, 49806 meridiem: function (hour, minute, isLower) { 49807 if (hour < 2) { 49808 return ' யாமமà¯'; 49809 } else if (hour < 6) { 49810 return ' வà¯à®à®±à¯'; // வà¯à®à®±à¯ 49811 } else if (hour < 10) { 49812 return ' à®à®¾à®²à¯'; // à®à®¾à®²à¯ 49813 } else if (hour < 14) { 49814 return ' நணà¯à®ªà®à®²à¯'; // நணà¯à®ªà®à®²à¯ 49815 } else if (hour < 18) { 49816 return ' à®à®±à¯à®ªà®¾à®à¯'; // à®à®±à¯à®ªà®¾à®à¯ 49817 } else if (hour < 22) { 49818 return ' மாலà¯'; // மால௠49819 } else { 49820 return ' யாமமà¯'; 49821 } 49822 }, 49823 meridiemHour: function (hour, meridiem) { 49824 if (hour === 12) { 49825 hour = 0; 49826 } 49827 if (meridiem === 'யாமமà¯') { 49828 return hour < 2 ? hour : hour + 12; 49829 } else if (meridiem === 'வà¯à®à®±à¯' || meridiem === 'à®à®¾à®²à¯') { 49830 return hour; 49831 } else if (meridiem === 'நணà¯à®ªà®à®²à¯') { 49832 return hour >= 10 ? hour : hour + 12; 49833 } else { 49834 return hour + 12; 49835 } 49836 }, 49837 week: { 49838 dow: 0, // Sunday is the first day of the week. 49839 doy: 6, // The week that contains Jan 6th is the first week of the year. 49840 }, 49841 }); 49842 49843 return ta; 49844 49845}))); 49846 49847 49848/***/ }), 49849
vendor: 4,214 bytes, lines 49850-49957
49850/***/ "./node_modules/moment/locale/te.js": 49851/*!******************************************!*\ 49852 !*** ./node_modules/moment/locale/te.js ***! 49853 \******************************************/ 49854/*! no static exports found */ 49855/***/ (function(module, exports, __webpack_require__) { 49856 49857//! moment.js locale configuration 49858//! locale : Telugu [te] 49859//! author : Krishna Chaitanya Thota : https://github.com/kcthota 49860 49861;(function (global, factory) { 49862 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : 49863 undefined 49864}(this, (function (moment) { 'use strict'; 49865 49866 //! moment.js locale configuration 49867 49868 var te = moment.defineLocale('te', { 49869 months: 'à°à°¨à°µà°°à°¿_à°«à°¿à°¬à±à°°à°µà°°à°¿_మారà±à°à°¿_à°à°ªà±à°°à°¿à°²à±_à°®à±_à°à±à°¨à±_à°à±à°²à±_à°à°à°¸à±à°à±_à°¸à±à°ªà±à°à±à°à°¬à°°à±_à° à°à±à°à±à°¬à°°à±_నవà°à°¬à°°à±_à°¡à°¿à°¸à±à°à°¬à°°à±'.split( 49870 '_' 49871 ), 49872 monthsShort: 49873 'à°à°¨._à°«à°¿à°¬à±à°°._మారà±à°à°¿_à°à°ªà±à°°à°¿._à°®à±_à°à±à°¨à±_à°à±à°²à±_à°à°._à°¸à±à°ªà±._à° à°à±à°à±._నవ._à°¡à°¿à°¸à±.'.split( 49874 '_' 49875 ), 49876 monthsParseExact: true, 49877 weekdays: 49878 'à°à°¦à°¿à°µà°¾à°°à°_à°¸à±à°®à°µà°¾à°°à°_à°®à°à°à°³à°µà°¾à°°à°_à°¬à±à°§à°µà°¾à°°à°_à°à±à°°à±à°µà°¾à°°à°_à°¶à±à°à±à°°à°µà°¾à°°à°_శనివారà°'.split( 49879 '_' 49880 ), 49881 weekdaysShort: 'à°à°¦à°¿_à°¸à±à°®_à°®à°à°à°³_à°¬à±à°§_à°à±à°°à±_à°¶à±à°à±à°°_శని'.split('_'), 49882 weekdaysMin: 'à°_à°¸à±_à°®à°_à°¬à±_à°à±_à°¶à±_à°¶'.split('_'), 49883 longDateFormat: { 49884 LT: 'A h:mm', 49885 LTS: 'A h:mm:ss', 49886 L: 'DD/MM/YYYY', 49887 LL: 'D MMMM YYYY', 49888 LLL: 'D MMMM YYYY, A h:mm', 49889 LLLL: 'dddd, D MMMM YYYY, A h:mm', 49890 }, 49891 calendar: { 49892 sameDay: '[à°¨à±à°¡à±] LT', 49893 nextDay: '[à°°à±à°ªà±] LT', 49894 nextWeek: 'dddd, LT', 49895 lastDay: '[నినà±à°¨] LT', 49896 lastWeek: '[à°à°¤] dddd, LT', 49897 sameElse: 'L', 49898 }, 49899 relativeTime: { 49900 future: '%s à°²à±', 49901 past: '%s à°à±à°°à°¿à°¤à°', 49902 s: 'à°à±à°¨à±à°¨à°¿ à°à±à°·à°£à°¾à°²à±', 49903 ss: '%d à°¸à±à°à°¨à±à°²à±', 49904 m: 'à°à° నిమిషà°', 49905 mm: '%d నిమిషాలà±', 49906 h: 'à°à° à°à°à°', 49907 hh: '%d à°à°à°à°²à±', 49908 d: 'à°à° à°°à±à°à±', 49909 dd: '%d à°°à±à°à±à°²à±', 49910 M: 'à°à° à°¨à±à°²', 49911 MM: '%d à°¨à±à°²à°²à±', 49912 y: 'à°à° à°¸à°à°µà°¤à±à°¸à°°à°', 49913 yy: '%d à°¸à°à°µà°¤à±à°¸à°°à°¾à°²à±', 49914 }, 49915 dayOfMonthOrdinalParse: /\d{1,2}à°µ/, 49916 ordinal: '%dà°µ', 49917 meridiemParse: /రాతà±à°°à°¿|à°à°¦à°¯à°|మధà±à°¯à°¾à°¹à±à°¨à°|సాయà°à°¤à±à°°à°/, 49918 meridiemHour: function (hour, meridiem) { 49919 if (hour === 12) { 49920 hour = 0; 49921 } 49922 if (meridiem === 'రాతà±à°°à°¿') { 49923 return hour < 4 ? hour : hour + 12; 49924 } else if (meridiem === 'à°à°¦à°¯à°') { 49925 return hour; 49926 } else if (meridiem === 'మధà±à°¯à°¾à°¹à±à°¨à°') { 49927 return hour >= 10 ? hour : hour + 12; 49928 } else if (meridiem === 'సాయà°à°¤à±à°°à°') { 49929 return hour + 12; 49930 } 49931 }, 49932 meridiem: function (hour, minute, isLower) { 49933 if (hour < 4) { 49934 return 'రాతà±à°°à°¿'; 49935 } else if (hour < 10) { 49936 return 'à°à°¦à°¯à°'; 49937 } else if (hour < 17) { 49938 return 'మధà±à°¯à°¾à°¹à±à°¨à°'; 49939 } else if (hour < 20) { 49940 return 'సాయà°à°¤à±à°°à°'; 49941 } else { 49942 return 'రాతà±à°°à°¿'; 49943 } 49944 }, 49945 week: { 49946 dow: 0, // Sunday is the first day of the week. 49947 doy: 6, // The week that contains Jan 6th is the first week of the year. 49948 }, 49949 }); 49950 49951 return te; 49952 49953}))); 49954 49955 49956/***/ }), 49957
vendor: 2,919 bytes, lines 49958-50045
49958/***/ "./node_modules/moment/locale/tet.js": 49959/*!*******************************************!*\ 49960 !*** ./node_modules/moment/locale/tet.js ***! 49961 \*******************************************/ 49962/*! no static exports found */ 49963/***/ (function(module, exports, __webpack_require__) { 49964 49965//! moment.js locale configuration 49966//! locale : Tetun Dili (East Timor) [tet] 49967//! author : Joshua Brooks : https://github.com/joshbrooks 49968//! author : Onorio De J. Afonso : https://github.com/marobo 49969//! author : Sonia Simoes : https://github.com/soniasimoes 49970 49971;(function (global, factory) { 49972 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : 49973 undefined 49974}(this, (function (moment) { 'use strict'; 49975 49976 //! moment.js locale configuration 49977 49978 var tet = moment.defineLocale('tet', { 49979 months: 'Janeiru_Fevereiru_Marsu_Abril_Maiu_Juñu_Jullu_Agustu_Setembru_Outubru_Novembru_Dezembru'.split( 49980 '_' 49981 ), 49982 monthsShort: 'Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez'.split('_'), 49983 weekdays: 'Domingu_Segunda_Tersa_Kuarta_Kinta_Sesta_Sabadu'.split('_'), 49984 weekdaysShort: 'Dom_Seg_Ters_Kua_Kint_Sest_Sab'.split('_'), 49985 weekdaysMin: 'Do_Seg_Te_Ku_Ki_Ses_Sa'.split('_'), 49986 longDateFormat: { 49987 LT: 'HH:mm', 49988 LTS: 'HH:mm:ss', 49989 L: 'DD/MM/YYYY', 49990 LL: 'D MMMM YYYY', 49991 LLL: 'D MMMM YYYY HH:mm', 49992 LLLL: 'dddd, D MMMM YYYY HH:mm', 49993 }, 49994 calendar: { 49995 sameDay: '[Ohin iha] LT', 49996 nextDay: '[Aban iha] LT', 49997 nextWeek: 'dddd [iha] LT', 49998 lastDay: '[Horiseik iha] LT', 49999 lastWeek: 'dddd [semana kotuk] [iha] LT', 50000 sameElse: 'L', 50001 }, 50002 relativeTime: { 50003 future: 'iha %s', 50004 past: '%s liuba', 50005 s: 'segundu balun', 50006 ss: 'segundu %d', 50007 m: 'minutu ida', 50008 mm: 'minutu %d', 50009 h: 'oras ida', 50010 hh: 'oras %d', 50011 d: 'loron ida', 50012 dd: 'loron %d', 50013 M: 'fulan ida', 50014 MM: 'fulan %d', 50015 y: 'tinan ida', 50016 yy: 'tinan %d', 50017 }, 50018 dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/, 50019 ordinal: function (number) { 50020 var b = number % 10, 50021 output = 50022 ~~((number % 100) / 10) === 1 50023 ? 'th' 50024 : b === 1 50025 ? 'st' 50026 : b === 2 50027 ? 'nd' 50028 : b === 3 50029 ? 'rd' 50030 : 'th'; 50031 return number + output; 50032 }, 50033 week: { 50034 dow: 1, // Monday is the first day of the week. 50035 doy: 4, // The week that contains Jan 4th is the first week of the year. 50036 }, 50037 }); 50038 50039 return tet; 50040 50041}))); 50042 50043 50044/***/ }), 50045
vendor: 4,538 bytes, lines 50046-50182
50046/***/ "./node_modules/moment/locale/tg.js": 50047/*!******************************************!*\ 50048 !*** ./node_modules/moment/locale/tg.js ***! 50049 \******************************************/ 50050/*! no static exports found */ 50051/***/ (function(module, exports, __webpack_require__) { 50052 50053//! moment.js locale configuration 50054//! locale : Tajik [tg] 50055//! author : Orif N. Jr. : https://github.com/orif-jr 50056 50057;(function (global, factory) { 50058 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : 50059 undefined 50060}(this, (function (moment) { 'use strict'; 50061 50062 //! moment.js locale configuration 50063 50064 var suffixes = { 50065 0: '-Ñм', 50066 1: '-Ñм', 50067 2: '-Ñм', 50068 3: '-Ñм', 50069 4: '-Ñм', 50070 5: '-Ñм', 50071 6: '-Ñм', 50072 7: '-Ñм', 50073 8: '-Ñм', 50074 9: '-Ñм', 50075 10: '-Ñм', 50076 12: '-Ñм', 50077 13: '-Ñм', 50078 20: '-Ñм', 50079 30: '-Ñм', 50080 40: '-Ñм', 50081 50: '-Ñм', 50082 60: '-Ñм', 50083 70: '-Ñм', 50084 80: '-Ñм', 50085 90: '-Ñм', 50086 100: '-Ñм', 50087 }; 50088 50089 var tg = moment.defineLocale('tg', { 50090 months: { 50091 format: 'ÑнваÑи_ÑевÑали_маÑÑи_апÑели_майи_иÑни_иÑли_авгÑÑÑи_ÑенÑÑбÑи_окÑÑбÑи_ноÑбÑи_декабÑи'.split( 50092 '_' 50093 ), 50094 standalone: 50095 'ÑнваÑ_ÑевÑал_маÑÑ_апÑел_май_иÑн_иÑл_авгÑÑÑ_ÑенÑÑбÑ_окÑÑбÑ_ноÑбÑ_декабÑ'.split( 50096 '_' 50097 ), 50098 }, 50099 monthsShort: 'Ñнв_Ñев_маÑ_апÑ_май_иÑн_иÑл_авг_Ñен_окÑ_ноÑ_дек'.split('_'), 50100 weekdays: 'ÑкÑанбе_дÑÑанбе_ÑеÑанбе_ÑоÑÑанбе_панҷÑанбе_Ò·ÑмÑа_Ñанбе'.split( 50101 '_' 50102 ), 50103 weekdaysShort: 'ÑÑб_дÑб_ÑÑб_ÑÑб_пÑб_Ò·Ñм_Ñнб'.split('_'), 50104 weekdaysMin: 'ÑÑ_дÑ_ÑÑ_ÑÑ_пÑ_ҷм_Ñб'.split('_'), 50105 longDateFormat: { 50106 LT: 'HH:mm', 50107 LTS: 'HH:mm:ss', 50108 L: 'DD.MM.YYYY', 50109 LL: 'D MMMM YYYY', 50110 LLL: 'D MMMM YYYY HH:mm', 50111 LLLL: 'dddd, D MMMM YYYY HH:mm', 50112 }, 50113 calendar: { 50114 sameDay: '[ÐмÑӯз ÑоаÑи] LT', 50115 nextDay: '[ФаÑдо ÑоаÑи] LT', 50116 lastDay: '[ÐиÑӯз ÑоаÑи] LT', 50117 nextWeek: 'dddd[и] [ҳаÑÑаи оÑнда ÑоаÑи] LT', 50118 lastWeek: 'dddd[и] [ҳаÑÑаи гÑзаÑÑа ÑоаÑи] LT', 50119 sameElse: 'L', 50120 }, 50121 relativeTime: { 50122 future: 'баÑди %s', 50123 past: '%s пеÑ', 50124 s: 'ÑкÑанд ÑониÑ', 50125 m: 'Ñк даÒиÒа', 50126 mm: '%d даÒиÒа', 50127 h: 'Ñк ÑоаÑ', 50128 hh: '%d ÑоаÑ', 50129 d: 'Ñк Ñӯз', 50130 dd: '%d Ñӯз', 50131 M: 'Ñк моҳ', 50132 MM: '%d моҳ', 50133 y: 'Ñк Ñол', 50134 yy: '%d Ñол', 50135 }, 50136 meridiemParse: /Ñаб|ÑÑбҳ|Ñӯз|бегоҳ/, 50137 meridiemHour: function (hour, meridiem) { 50138 if (hour === 12) { 50139 hour = 0; 50140 } 50141 if (meridiem === 'Ñаб') { 50142 return hour < 4 ? hour : hour + 12; 50143 } else if (meridiem === 'ÑÑбҳ') { 50144 return hour; 50145 } else if (meridiem === 'Ñӯз') { 50146 return hour >= 11 ? hour : hour + 12; 50147 } else if (meridiem === 'бегоҳ') { 50148 return hour + 12; 50149 } 50150 }, 50151 meridiem: function (hour, minute, isLower) { 50152 if (hour < 4) { 50153 return 'Ñаб'; 50154 } else if (hour < 11) { 50155 return 'ÑÑбҳ'; 50156 } else if (hour < 16) { 50157 return 'Ñӯз'; 50158 } else if (hour < 19) { 50159 return 'бегоҳ'; 50160 } else { 50161 return 'Ñаб'; 50162 } 50163 }, 50164 dayOfMonthOrdinalParse: /\d{1,2}-(Ñм|Ñм)/, 50165 ordinal: function (number) { 50166 var a = number % 10, 50167 b = number >= 100 ? 100 : null; 50168 return number + (suffixes[number] || suffixes[a] || suffixes[b]); 50169 }, 50170 week: { 50171 dow: 1, // Monday is the first day of the week. 50172 doy: 7, // The week that contains Jan 1th is the first week of the year. 50173 }, 50174 }); 50175 50176 return tg; 50177 50178}))); 50179 50180 50181/***/ }), 50182
vendor: 3,466 bytes, lines 50183-50267
50183/***/ "./node_modules/moment/locale/th.js": 50184/*!******************************************!*\ 50185 !*** ./node_modules/moment/locale/th.js ***! 50186 \******************************************/ 50187/*! no static exports found */ 50188/***/ (function(module, exports, __webpack_require__) { 50189 50190//! moment.js locale configuration 50191//! locale : Thai [th] 50192//! author : Kridsada Thanabulpong : https://github.com/sirn 50193 50194;(function (global, factory) { 50195 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : 50196 undefined 50197}(this, (function (moment) { 'use strict'; 50198 50199 //! moment.js locale configuration 50200 50201 var th = moment.defineLocale('th', { 50202 months: 'มà¸à¸£à¸²à¸à¸¡_à¸à¸¸à¸¡à¸ าà¸à¸±à¸à¸à¹_มีà¸à¸²à¸à¸¡_à¹à¸¡à¸©à¸²à¸¢à¸_à¸à¸¤à¸©à¸ าà¸à¸¡_มิà¸à¸¸à¸à¸²à¸¢à¸_à¸à¸£à¸à¸à¸²à¸à¸¡_สิà¸à¸«à¸²à¸à¸¡_à¸à¸±à¸à¸¢à¸²à¸¢à¸_à¸à¸¸à¸¥à¸²à¸à¸¡_à¸à¸¤à¸¨à¸à¸´à¸à¸²à¸¢à¸_à¸à¸±à¸à¸§à¸²à¸à¸¡'.split( 50203 '_' 50204 ), 50205 monthsShort: 50206 'ม.à¸._à¸.à¸._มี.à¸._à¹à¸¡.ย._à¸.à¸._มิ.ย._à¸.à¸._ส.à¸._à¸.ย._à¸.à¸._à¸.ย._à¸.à¸.'.split( 50207 '_' 50208 ), 50209 monthsParseExact: true, 50210 weekdays: 'à¸à¸²à¸à¸´à¸à¸¢à¹_à¸à¸±à¸à¸à¸£à¹_à¸à¸±à¸à¸à¸²à¸£_à¸à¸¸à¸_à¸à¸¤à¸«à¸±à¸ªà¸à¸à¸µ_ศุà¸à¸£à¹_à¹à¸ªà¸²à¸£à¹'.split('_'), 50211 weekdaysShort: 'à¸à¸²à¸à¸´à¸à¸¢à¹_à¸à¸±à¸à¸à¸£à¹_à¸à¸±à¸à¸à¸²à¸£_à¸à¸¸à¸_à¸à¸¤à¸«à¸±à¸ª_ศุà¸à¸£à¹_à¹à¸ªà¸²à¸£à¹'.split('_'), // yes, three characters difference 50212 weekdaysMin: 'à¸à¸²._à¸._à¸._à¸._à¸à¸¤._ศ._ส.'.split('_'), 50213 weekdaysParseExact: true, 50214 longDateFormat: { 50215 LT: 'H:mm', 50216 LTS: 'H:mm:ss', 50217 L: 'DD/MM/YYYY', 50218 LL: 'D MMMM YYYY', 50219 LLL: 'D MMMM YYYY à¹à¸§à¸¥à¸² H:mm', 50220 LLLL: 'วัà¸ddddà¸à¸µà¹ D MMMM YYYY à¹à¸§à¸¥à¸² H:mm', 50221 }, 50222 meridiemParse: /à¸à¹à¸à¸à¹à¸à¸µà¹à¸¢à¸|หลัà¸à¹à¸à¸µà¹à¸¢à¸/, 50223 isPM: function (input) { 50224 return input === 'หลัà¸à¹à¸à¸µà¹à¸¢à¸'; 50225 }, 50226 meridiem: function (hour, minute, isLower) { 50227 if (hour < 12) { 50228 return 'à¸à¹à¸à¸à¹à¸à¸µà¹à¸¢à¸'; 50229 } else { 50230 return 'หลัà¸à¹à¸à¸µà¹à¸¢à¸'; 50231 } 50232 }, 50233 calendar: { 50234 sameDay: '[วัà¸à¸à¸µà¹ à¹à¸§à¸¥à¸²] LT', 50235 nextDay: '[à¸à¸£à¸¸à¹à¸à¸à¸µà¹ à¹à¸§à¸¥à¸²] LT', 50236 nextWeek: 'dddd[หà¸à¹à¸² à¹à¸§à¸¥à¸²] LT', 50237 lastDay: '[à¹à¸¡à¸·à¹à¸à¸§à¸²à¸à¸à¸µà¹ à¹à¸§à¸¥à¸²] LT', 50238 lastWeek: '[วัà¸]dddd[à¸à¸µà¹à¹à¸¥à¹à¸§ à¹à¸§à¸¥à¸²] LT', 50239 sameElse: 'L', 50240 }, 50241 relativeTime: { 50242 future: 'à¸à¸µà¸ %s', 50243 past: '%sà¸à¸µà¹à¹à¸¥à¹à¸§', 50244 s: 'à¹à¸¡à¹à¸à¸µà¹à¸§à¸´à¸à¸²à¸à¸µ', 50245 ss: '%d วิà¸à¸²à¸à¸µ', 50246 m: '1 à¸à¸²à¸à¸µ', 50247 mm: '%d à¸à¸²à¸à¸µ', 50248 h: '1 à¸à¸±à¹à¸§à¹à¸¡à¸', 50249 hh: '%d à¸à¸±à¹à¸§à¹à¸¡à¸', 50250 d: '1 วัà¸', 50251 dd: '%d วัà¸', 50252 w: '1 สัà¸à¸à¸²à¸«à¹', 50253 ww: '%d สัà¸à¸à¸²à¸«à¹', 50254 M: '1 à¹à¸à¸·à¸à¸', 50255 MM: '%d à¹à¸à¸·à¸à¸', 50256 y: '1 à¸à¸µ', 50257 yy: '%d à¸à¸µ', 50258 }, 50259 }); 50260 50261 return th; 50262 50263}))); 50264 50265 50266/***/ }), 50267
vendor: 3,318 bytes, lines 50268-50378
50268/***/ "./node_modules/moment/locale/tk.js": 50269/*!******************************************!*\ 50270 !*** ./node_modules/moment/locale/tk.js ***! 50271 \******************************************/ 50272/*! no static exports found */ 50273/***/ (function(module, exports, __webpack_require__) { 50274 50275//! moment.js locale configuration 50276//! locale : Turkmen [tk] 50277//! author : Atamyrat Abdyrahmanov : https://github.com/atamyratabdy 50278 50279;(function (global, factory) { 50280 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : 50281 undefined 50282}(this, (function (moment) { 'use strict'; 50283 50284 //! moment.js locale configuration 50285 50286 var suffixes = { 50287 1: "'inji", 50288 5: "'inji", 50289 8: "'inji", 50290 70: "'inji", 50291 80: "'inji", 50292 2: "'nji", 50293 7: "'nji", 50294 20: "'nji", 50295 50: "'nji", 50296 3: "'ünji", 50297 4: "'ünji", 50298 100: "'ünji", 50299 6: "'njy", 50300 9: "'unjy", 50301 10: "'unjy", 50302 30: "'unjy", 50303 60: "'ynjy", 50304 90: "'ynjy", 50305 }; 50306 50307 var tk = moment.defineLocale('tk', { 50308 months: 'Ãanwar_Fewral_Mart_Aprel_Maý_Iýun_Iýul_Awgust_Sentýabr_Oktýabr_Noýabr_Dekabr'.split( 50309 '_' 50310 ), 50311 monthsShort: 'Ãan_Few_Mar_Apr_Maý_Iýn_Iýl_Awg_Sen_Okt_Noý_Dek'.split('_'), 50312 weekdays: 'ÃekÅenbe_DuÅenbe_SiÅenbe_ÃarÅenbe_PenÅenbe_Anna_Åenbe'.split( 50313 '_' 50314 ), 50315 weekdaysShort: 'Ãek_DuÅ_SiÅ_Ãar_Pen_Ann_Åen'.split('_'), 50316 weekdaysMin: 'Ãk_DÅ_SÅ_Ãr_Pn_An_Ån'.split('_'), 50317 longDateFormat: { 50318 LT: 'HH:mm', 50319 LTS: 'HH:mm:ss', 50320 L: 'DD.MM.YYYY', 50321 LL: 'D MMMM YYYY', 50322 LLL: 'D MMMM YYYY HH:mm', 50323 LLLL: 'dddd, D MMMM YYYY HH:mm', 50324 }, 50325 calendar: { 50326 sameDay: '[bugün sagat] LT', 50327 nextDay: '[ertir sagat] LT', 50328 nextWeek: '[indiki] dddd [sagat] LT', 50329 lastDay: '[düýn] LT', 50330 lastWeek: '[geçen] dddd [sagat] LT', 50331 sameElse: 'L', 50332 }, 50333 relativeTime: { 50334 future: '%s soÅ', 50335 past: '%s öÅ', 50336 s: 'birnäçe sekunt', 50337 m: 'bir minut', 50338 mm: '%d minut', 50339 h: 'bir sagat', 50340 hh: '%d sagat', 50341 d: 'bir gün', 50342 dd: '%d gün', 50343 M: 'bir aý', 50344 MM: '%d aý', 50345 y: 'bir ýyl', 50346 yy: '%d ýyl', 50347 }, 50348 ordinal: function (number, period) { 50349 switch (period) { 50350 case 'd': 50351 case 'D': 50352 case 'Do': 50353 case 'DD': 50354 return number; 50355 default: 50356 if (number === 0) { 50357 // special case for zero 50358 return number + "'unjy"; 50359 } 50360 var a = number % 10, 50361 b = (number % 100) - a, 50362 c = number >= 100 ? 100 : null; 50363 return number + (suffixes[a] || suffixes[b] || suffixes[c]); 50364 } 50365 }, 50366 week: { 50367 dow: 1, // Monday is the first day of the week. 50368 doy: 7, // The week that contains Jan 7th is the first week of the year. 50369 }, 50370 }); 50371 50372 return tk; 50373 50374}))); 50375 50376 50377/***/ }), 50378
vendor: 2,449 bytes, lines 50379-50455
50379/***/ "./node_modules/moment/locale/tl-ph.js": 50380/*!*********************************************!*\ 50381 !*** ./node_modules/moment/locale/tl-ph.js ***! 50382 \*********************************************/ 50383/*! no static exports found */ 50384/***/ (function(module, exports, __webpack_require__) { 50385 50386//! moment.js locale configuration 50387//! locale : Tagalog (Philippines) [tl-ph] 50388//! author : Dan Hagman : https://github.com/hagmandan 50389 50390;(function (global, factory) { 50391 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : 50392 undefined 50393}(this, (function (moment) { 'use strict'; 50394 50395 //! moment.js locale configuration 50396 50397 var tlPh = moment.defineLocale('tl-ph', { 50398 months: 'Enero_Pebrero_Marso_Abril_Mayo_Hunyo_Hulyo_Agosto_Setyembre_Oktubre_Nobyembre_Disyembre'.split( 50399 '_' 50400 ), 50401 monthsShort: 'Ene_Peb_Mar_Abr_May_Hun_Hul_Ago_Set_Okt_Nob_Dis'.split('_'), 50402 weekdays: 'Linggo_Lunes_Martes_Miyerkules_Huwebes_Biyernes_Sabado'.split( 50403 '_' 50404 ), 50405 weekdaysShort: 'Lin_Lun_Mar_Miy_Huw_Biy_Sab'.split('_'), 50406 weekdaysMin: 'Li_Lu_Ma_Mi_Hu_Bi_Sab'.split('_'), 50407 longDateFormat: { 50408 LT: 'HH:mm', 50409 LTS: 'HH:mm:ss', 50410 L: 'MM/D/YYYY', 50411 LL: 'MMMM D, YYYY', 50412 LLL: 'MMMM D, YYYY HH:mm', 50413 LLLL: 'dddd, MMMM DD, YYYY HH:mm', 50414 }, 50415 calendar: { 50416 sameDay: 'LT [ngayong araw]', 50417 nextDay: '[Bukas ng] LT', 50418 nextWeek: 'LT [sa susunod na] dddd', 50419 lastDay: 'LT [kahapon]', 50420 lastWeek: 'LT [noong nakaraang] dddd', 50421 sameElse: 'L', 50422 }, 50423 relativeTime: { 50424 future: 'sa loob ng %s', 50425 past: '%s ang nakalipas', 50426 s: 'ilang segundo', 50427 ss: '%d segundo', 50428 m: 'isang minuto', 50429 mm: '%d minuto', 50430 h: 'isang oras', 50431 hh: '%d oras', 50432 d: 'isang araw', 50433 dd: '%d araw', 50434 M: 'isang buwan', 50435 MM: '%d buwan', 50436 y: 'isang taon', 50437 yy: '%d taon', 50438 }, 50439 dayOfMonthOrdinalParse: /\d{1,2}/, 50440 ordinal: function (number) { 50441 return number; 50442 }, 50443 week: { 50444 dow: 1, // Monday is the first day of the week. 50445 doy: 4, // The week that contains Jan 4th is the first week of the year. 50446 }, 50447 }); 50448 50449 return tlPh; 50450 50451}))); 50452 50453 50454/***/ }), 50455
vendor: 4,731 bytes, lines 50456-50599
50456/***/ "./node_modules/moment/locale/tlh.js": 50457/*!*******************************************!*\ 50458 !*** ./node_modules/moment/locale/tlh.js ***! 50459 \*******************************************/ 50460/*! no static exports found */ 50461/***/ (function(module, exports, __webpack_require__) { 50462 50463//! moment.js locale configuration 50464//! locale : Klingon [tlh] 50465//! author : Dominika Kruk : https://github.com/amaranthrose 50466 50467;(function (global, factory) { 50468 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : 50469 undefined 50470}(this, (function (moment) { 'use strict'; 50471 50472 //! moment.js locale configuration 50473 50474 var numbersNouns = 'pagh_waâ_chaâ_wej_loS_vagh_jav_Soch_chorgh_Hut'.split('_'); 50475 50476 function translateFuture(output) { 50477 var time = output; 50478 time = 50479 output.indexOf('jaj') !== -1 50480 ? time.slice(0, -3) + 'leS' 50481 : output.indexOf('jar') !== -1 50482 ? time.slice(0, -3) + 'waQ' 50483 : output.indexOf('DIS') !== -1 50484 ? time.slice(0, -3) + 'nem' 50485 : time + ' pIq'; 50486 return time; 50487 } 50488 50489 function translatePast(output) { 50490 var time = output; 50491 time = 50492 output.indexOf('jaj') !== -1 50493 ? time.slice(0, -3) + 'Huâ' 50494 : output.indexOf('jar') !== -1 50495 ? time.slice(0, -3) + 'wen' 50496 : output.indexOf('DIS') !== -1 50497 ? time.slice(0, -3) + 'ben' 50498 : time + ' ret'; 50499 return time; 50500 } 50501 50502 function translate(number, withoutSuffix, string, isFuture) { 50503 var numberNoun = numberAsNoun(number); 50504 switch (string) { 50505 case 'ss': 50506 return numberNoun + ' lup'; 50507 case 'mm': 50508 return numberNoun + ' tup'; 50509 case 'hh': 50510 return numberNoun + ' rep'; 50511 case 'dd': 50512 return numberNoun + ' jaj'; 50513 case 'MM': 50514 return numberNoun + ' jar'; 50515 case 'yy': 50516 return numberNoun + ' DIS'; 50517 } 50518 } 50519 50520 function numberAsNoun(number) { 50521 var hundred = Math.floor((number % 1000) / 100), 50522 ten = Math.floor((number % 100) / 10), 50523 one = number % 10, 50524 word = ''; 50525 if (hundred > 0) { 50526 word += numbersNouns[hundred] + 'vatlh'; 50527 } 50528 if (ten > 0) { 50529 word += (word !== '' ? ' ' : '') + numbersNouns[ten] + 'maH'; 50530 } 50531 if (one > 0) { 50532 word += (word !== '' ? ' ' : '') + numbersNouns[one]; 50533 } 50534 return word === '' ? 'pagh' : word; 50535 } 50536 50537 var tlh = moment.defineLocale('tlh', { 50538 months: 'teraâ jar waâ_teraâ jar chaâ_teraâ jar wej_teraâ jar loS_teraâ jar vagh_teraâ jar jav_teraâ jar Soch_teraâ jar chorgh_teraâ jar Hut_teraâ jar waâmaH_teraâ jar waâmaH waâ_teraâ jar waâmaH chaâ'.split( 50539 '_' 50540 ), 50541 monthsShort: 50542 'jar waâ_jar chaâ_jar wej_jar loS_jar vagh_jar jav_jar Soch_jar chorgh_jar Hut_jar waâmaH_jar waâmaH waâ_jar waâmaH chaâ'.split( 50543 '_' 50544 ), 50545 monthsParseExact: true, 50546 weekdays: 'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split( 50547 '_' 50548 ), 50549 weekdaysShort: 50550 'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split('_'), 50551 weekdaysMin: 50552 'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split('_'), 50553 longDateFormat: { 50554 LT: 'HH:mm', 50555 LTS: 'HH:mm:ss', 50556 L: 'DD.MM.YYYY', 50557 LL: 'D MMMM YYYY', 50558 LLL: 'D MMMM YYYY HH:mm', 50559 LLLL: 'dddd, D MMMM YYYY HH:mm', 50560 }, 50561 calendar: { 50562 sameDay: '[DaHjaj] LT', 50563 nextDay: '[waâleS] LT', 50564 nextWeek: 'LLL', 50565 lastDay: '[waâHuâ] LT', 50566 lastWeek: 'LLL', 50567 sameElse: 'L', 50568 }, 50569 relativeTime: { 50570 future: translateFuture, 50571 past: translatePast, 50572 s: 'puS lup', 50573 ss: translate, 50574 m: 'waâ tup', 50575 mm: translate, 50576 h: 'waâ rep', 50577 hh: translate, 50578 d: 'waâ jaj', 50579 dd: translate, 50580 M: 'waâ jar', 50581 MM: translate, 50582 y: 'waâ DIS', 50583 yy: translate, 50584 }, 50585 dayOfMonthOrdinalParse: /\d{1,2}\./, 50586 ordinal: '%d.', 50587 week: { 50588 dow: 1, // Monday is the first day of the week. 50589 doy: 4, // The week that contains Jan 4th is the first week of the year. 50590 }, 50591 }); 50592 50593 return tlh; 50594 50595}))); 50596 50597 50598/***/ }), 50599
vendor: 3,813 bytes, lines 50600-50725
50600/***/ "./node_modules/moment/locale/tr.js": 50601/*!******************************************!*\ 50602 !*** ./node_modules/moment/locale/tr.js ***! 50603 \******************************************/ 50604/*! no static exports found */ 50605/***/ (function(module, exports, __webpack_require__) { 50606 50607//! moment.js locale configuration 50608//! locale : Turkish [tr] 50609//! authors : Erhan Gundogan : https://github.com/erhangundogan, 50610//! Burak YiÄit Kaya: https://github.com/BYK 50611 50612;(function (global, factory) { 50613 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : 50614 undefined 50615}(this, (function (moment) { 'use strict'; 50616 50617 //! moment.js locale configuration 50618 50619 var suffixes = { 50620 1: "'inci", 50621 5: "'inci", 50622 8: "'inci", 50623 70: "'inci", 50624 80: "'inci", 50625 2: "'nci", 50626 7: "'nci", 50627 20: "'nci", 50628 50: "'nci", 50629 3: "'üncü", 50630 4: "'üncü", 50631 100: "'üncü", 50632 6: "'ncı", 50633 9: "'uncu", 50634 10: "'uncu", 50635 30: "'uncu", 50636 60: "'ıncı", 50637 90: "'ıncı", 50638 }; 50639 50640 var tr = moment.defineLocale('tr', { 50641 months: 'Ocak_Åubat_Mart_Nisan_Mayıs_Haziran_Temmuz_AÄustos_Eylül_Ekim_Kasım_Aralık'.split( 50642 '_' 50643 ), 50644 monthsShort: 'Oca_Åub_Mar_Nis_May_Haz_Tem_AÄu_Eyl_Eki_Kas_Ara'.split('_'), 50645 weekdays: 'Pazar_Pazartesi_Salı_ÃarÅamba_PerÅembe_Cuma_Cumartesi'.split( 50646 '_' 50647 ), 50648 weekdaysShort: 'Paz_Pzt_Sal_Ãar_Per_Cum_Cmt'.split('_'), 50649 weekdaysMin: 'Pz_Pt_Sa_Ãa_Pe_Cu_Ct'.split('_'), 50650 meridiem: function (hours, minutes, isLower) { 50651 if (hours < 12) { 50652 return isLower ? 'öö' : 'ÃÃ'; 50653 } else { 50654 return isLower ? 'ös' : 'ÃS'; 50655 } 50656 }, 50657 meridiemParse: /öö|ÃÃ|ös|ÃS/, 50658 isPM: function (input) { 50659 return input === 'ös' || input === 'ÃS'; 50660 }, 50661 longDateFormat: { 50662 LT: 'HH:mm', 50663 LTS: 'HH:mm:ss', 50664 L: 'DD.MM.YYYY', 50665 LL: 'D MMMM YYYY', 50666 LLL: 'D MMMM YYYY HH:mm', 50667 LLLL: 'dddd, D MMMM YYYY HH:mm', 50668 }, 50669 calendar: { 50670 sameDay: '[bugün saat] LT', 50671 nextDay: '[yarın saat] LT', 50672 nextWeek: '[gelecek] dddd [saat] LT', 50673 lastDay: '[dün] LT', 50674 lastWeek: '[geçen] dddd [saat] LT', 50675 sameElse: 'L', 50676 }, 50677 relativeTime: { 50678 future: '%s sonra', 50679 past: '%s önce', 50680 s: 'birkaç saniye', 50681 ss: '%d saniye', 50682 m: 'bir dakika', 50683 mm: '%d dakika', 50684 h: 'bir saat', 50685 hh: '%d saat', 50686 d: 'bir gün', 50687 dd: '%d gün', 50688 w: 'bir hafta', 50689 ww: '%d hafta', 50690 M: 'bir ay', 50691 MM: '%d ay', 50692 y: 'bir yıl', 50693 yy: '%d yıl', 50694 }, 50695 ordinal: function (number, period) { 50696 switch (period) { 50697 case 'd': 50698 case 'D': 50699 case 'Do': 50700 case 'DD': 50701 return number; 50702 default: 50703 if (number === 0) { 50704 // special case for zero 50705 return number + "'ıncı"; 50706 } 50707 var a = number % 10, 50708 b = (number % 100) - a, 50709 c = number >= 100 ? 100 : null; 50710 return number + (suffixes[a] || suffixes[b] || suffixes[c]); 50711 } 50712 }, 50713 week: { 50714 dow: 1, // Monday is the first day of the week. 50715 doy: 7, // The week that contains Jan 7th is the first week of the year. 50716 }, 50717 }); 50718 50719 return tr; 50720 50721}))); 50722 50723 50724/***/ }), 50725
vendor: 3,937 bytes, lines 50726-50834
50726/***/ "./node_modules/moment/locale/tzl.js": 50727/*!*******************************************!*\ 50728 !*** ./node_modules/moment/locale/tzl.js ***! 50729 \*******************************************/ 50730/*! no static exports found */ 50731/***/ (function(module, exports, __webpack_require__) { 50732 50733//! moment.js locale configuration 50734//! locale : Talossan [tzl] 50735//! author : Robin van der Vliet : https://github.com/robin0van0der0v 50736//! author : Iustì Canun 50737 50738;(function (global, factory) { 50739 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : 50740 undefined 50741}(this, (function (moment) { 'use strict'; 50742 50743 //! moment.js locale configuration 50744 50745 // After the year there should be a slash and the amount of years since December 26, 1979 in Roman numerals. 50746 // This is currently too difficult (maybe even impossible) to add. 50747 var tzl = moment.defineLocale('tzl', { 50748 months: 'Januar_Fevraglh_Març_Avrïu_Mai_Gün_Julia_Guscht_Setemvar_Listopäts_Noemvar_Zecemvar'.split( 50749 '_' 50750 ), 50751 monthsShort: 'Jan_Fev_Mar_Avr_Mai_Gün_Jul_Gus_Set_Lis_Noe_Zec'.split('_'), 50752 weekdays: 'Súladi_Lúneçi_Maitzi_Márcuri_Xhúadi_Viénerçi_Sáturi'.split('_'), 50753 weekdaysShort: 'Súl_Lún_Mai_Már_Xhú_Vié_Sát'.split('_'), 50754 weekdaysMin: 'Sú_Lú_Ma_Má_Xh_Vi_Sá'.split('_'), 50755 longDateFormat: { 50756 LT: 'HH.mm', 50757 LTS: 'HH.mm.ss', 50758 L: 'DD.MM.YYYY', 50759 LL: 'D. MMMM [dallas] YYYY', 50760 LLL: 'D. MMMM [dallas] YYYY HH.mm', 50761 LLLL: 'dddd, [li] D. MMMM [dallas] YYYY HH.mm', 50762 }, 50763 meridiemParse: /d\'o|d\'a/i, 50764 isPM: function (input) { 50765 return "d'o" === input.toLowerCase(); 50766 }, 50767 meridiem: function (hours, minutes, isLower) { 50768 if (hours > 11) { 50769 return isLower ? "d'o" : "D'O"; 50770 } else { 50771 return isLower ? "d'a" : "D'A"; 50772 } 50773 }, 50774 calendar: { 50775 sameDay: '[oxhi à ] LT', 50776 nextDay: '[demà à ] LT', 50777 nextWeek: 'dddd [à ] LT', 50778 lastDay: '[ieiri à ] LT', 50779 lastWeek: '[sür el] dddd [lasteu à ] LT', 50780 sameElse: 'L', 50781 }, 50782 relativeTime: { 50783 future: 'osprei %s', 50784 past: 'ja%s', 50785 s: processRelativeTime, 50786 ss: processRelativeTime, 50787 m: processRelativeTime, 50788 mm: processRelativeTime, 50789 h: processRelativeTime, 50790 hh: processRelativeTime, 50791 d: processRelativeTime, 50792 dd: processRelativeTime, 50793 M: processRelativeTime, 50794 MM: processRelativeTime, 50795 y: processRelativeTime, 50796 yy: processRelativeTime, 50797 }, 50798 dayOfMonthOrdinalParse: /\d{1,2}\./, 50799 ordinal: '%d.', 50800 week: { 50801 dow: 1, // Monday is the first day of the week. 50802 doy: 4, // The week that contains Jan 4th is the first week of the year. 50803 }, 50804 }); 50805 50806 function processRelativeTime(number, withoutSuffix, key, isFuture) { 50807 var format = { 50808 s: ['viensas secunds', "'iensas secunds"], 50809 ss: [number + ' secunds', '' + number + ' secunds'], 50810 m: ["'n mÃut", "'iens mÃut"], 50811 mm: [number + ' mÃuts', '' + number + ' mÃuts'], 50812 h: ["'n þora", "'iensa þora"], 50813 hh: [number + ' þoras', '' + number + ' þoras'], 50814 d: ["'n ziua", "'iensa ziua"], 50815 dd: [number + ' ziuas', '' + number + ' ziuas'], 50816 M: ["'n mes", "'iens mes"], 50817 MM: [number + ' mesen', '' + number + ' mesen'], 50818 y: ["'n ar", "'iens ar"], 50819 yy: [number + ' ars', '' + number + ' ars'], 50820 }; 50821 return isFuture 50822 ? format[key][0] 50823 : withoutSuffix 50824 ? format[key][0] 50825 : format[key][1]; 50826 } 50827 50828 return tzl; 50829 50830}))); 50831 50832 50833/***/ }), 50834
vendor: 2,411 bytes, lines 50835-50908
50835/***/ "./node_modules/moment/locale/tzm-latn.js": 50836/*!************************************************!*\ 50837 !*** ./node_modules/moment/locale/tzm-latn.js ***! 50838 \************************************************/ 50839/*! no static exports found */ 50840/***/ (function(module, exports, __webpack_require__) { 50841 50842//! moment.js locale configuration 50843//! locale : Central Atlas Tamazight Latin [tzm-latn] 50844//! author : Abdel Said : https://github.com/abdelsaid 50845 50846;(function (global, factory) { 50847 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : 50848 undefined 50849}(this, (function (moment) { 'use strict'; 50850 50851 //! moment.js locale configuration 50852 50853 var tzmLatn = moment.defineLocale('tzm-latn', { 50854 months: 'innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_É£wÅ¡t_Å¡wtanbir_ktˤwbrˤ_nwwanbir_dwjnbir'.split( 50855 '_' 50856 ), 50857 monthsShort: 50858 'innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_É£wÅ¡t_Å¡wtanbir_ktˤwbrˤ_nwwanbir_dwjnbir'.split( 50859 '_' 50860 ), 50861 weekdays: 'asamas_aynas_asinas_akras_akwas_asimwas_asiá¸yas'.split('_'), 50862 weekdaysShort: 'asamas_aynas_asinas_akras_akwas_asimwas_asiá¸yas'.split('_'), 50863 weekdaysMin: 'asamas_aynas_asinas_akras_akwas_asimwas_asiá¸yas'.split('_'), 50864 longDateFormat: { 50865 LT: 'HH:mm', 50866 LTS: 'HH:mm:ss', 50867 L: 'DD/MM/YYYY', 50868 LL: 'D MMMM YYYY', 50869 LLL: 'D MMMM YYYY HH:mm', 50870 LLLL: 'dddd D MMMM YYYY HH:mm', 50871 }, 50872 calendar: { 50873 sameDay: '[asdkh g] LT', 50874 nextDay: '[aska g] LT', 50875 nextWeek: 'dddd [g] LT', 50876 lastDay: '[assant g] LT', 50877 lastWeek: 'dddd [g] LT', 50878 sameElse: 'L', 50879 }, 50880 relativeTime: { 50881 future: 'dadkh s yan %s', 50882 past: 'yan %s', 50883 s: 'imik', 50884 ss: '%d imik', 50885 m: 'minuá¸', 50886 mm: '%d minuá¸', 50887 h: 'saÉa', 50888 hh: '%d tassaÉin', 50889 d: 'ass', 50890 dd: '%d ossan', 50891 M: 'ayowr', 50892 MM: '%d iyyirn', 50893 y: 'asgas', 50894 yy: '%d isgasn', 50895 }, 50896 week: { 50897 dow: 6, // Saturday is the first day of the week. 50898 doy: 12, // The week that contains Jan 12th is the first week of the year. 50899 }, 50900 }); 50901 50902 return tzmLatn; 50903 50904}))); 50905 50906 50907/***/ }), 50908
vendor: 3,014 bytes, lines 50909-50982
50909/***/ "./node_modules/moment/locale/tzm.js": 50910/*!*******************************************!*\ 50911 !*** ./node_modules/moment/locale/tzm.js ***! 50912 \*******************************************/ 50913/*! no static exports found */ 50914/***/ (function(module, exports, __webpack_require__) { 50915 50916//! moment.js locale configuration 50917//! locale : Central Atlas Tamazight [tzm] 50918//! author : Abdel Said : https://github.com/abdelsaid 50919 50920;(function (global, factory) { 50921 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : 50922 undefined 50923}(this, (function (moment) { 'use strict'; 50924 50925 //! moment.js locale configuration 50926 50927 var tzm = moment.defineLocale('tzm', { 50928 months: 'âµâµâµâ´°âµ¢âµ_â´±âµâ´°âµ¢âµ_âµâ´°âµâµ_âµâ´±âµâµâµ_âµâ´°âµ¢âµ¢âµ_âµ¢âµâµâµ¢âµ_âµ¢âµâµâµ¢âµâµ£_âµâµâµâµ_âµâµâµâ´°âµâ´±âµâµ_â´½âµâµâ´±âµ_âµâµâµ¡â´°âµâ´±âµâµ_â´·âµâµâµâ´±âµâµ'.split( 50929 '_' 50930 ), 50931 monthsShort: 50932 'âµâµâµâ´°âµ¢âµ_â´±âµâ´°âµ¢âµ_âµâ´°âµâµ_âµâ´±âµâµâµ_âµâ´°âµ¢âµ¢âµ_âµ¢âµâµâµ¢âµ_âµ¢âµâµâµ¢âµâµ£_âµâµâµâµ_âµâµâµâ´°âµâ´±âµâµ_â´½âµâµâ´±âµ_âµâµâµ¡â´°âµâ´±âµâµ_â´·âµâµâµâ´±âµâµ'.split( 50933 '_' 50934 ), 50935 weekdays: 'â´°âµâ´°âµâ´°âµ_â´°âµ¢âµâ´°âµ_â´°âµâµâµâ´°âµ_â´°â´½âµâ´°âµ_ⴰⴽⵡⴰâµ_â´°âµâµâµâµ¡â´°âµ_â´°âµâµâ´¹âµ¢â´°âµ'.split('_'), 50936 weekdaysShort: 'â´°âµâ´°âµâ´°âµ_â´°âµ¢âµâ´°âµ_â´°âµâµâµâ´°âµ_â´°â´½âµâ´°âµ_ⴰⴽⵡⴰâµ_â´°âµâµâµâµ¡â´°âµ_â´°âµâµâ´¹âµ¢â´°âµ'.split('_'), 50937 weekdaysMin: 'â´°âµâ´°âµâ´°âµ_â´°âµ¢âµâ´°âµ_â´°âµâµâµâ´°âµ_â´°â´½âµâ´°âµ_ⴰⴽⵡⴰâµ_â´°âµâµâµâµ¡â´°âµ_â´°âµâµâ´¹âµ¢â´°âµ'.split('_'), 50938 longDateFormat: { 50939 LT: 'HH:mm', 50940 LTS: 'HH:mm:ss', 50941 L: 'DD/MM/YYYY', 50942 LL: 'D MMMM YYYY', 50943 LLL: 'D MMMM YYYY HH:mm', 50944 LLLL: 'dddd D MMMM YYYY HH:mm', 50945 }, 50946 calendar: { 50947 sameDay: '[â´°âµâ´·âµ â´´] LT', 50948 nextDay: '[â´°âµâ´½â´° â´´] LT', 50949 nextWeek: 'dddd [â´´] LT', 50950 lastDay: '[â´°âµâ´°âµâµ â´´] LT', 50951 lastWeek: 'dddd [â´´] LT', 50952 sameElse: 'L', 50953 }, 50954 relativeTime: { 50955 future: 'ⴷⴰⴷⵠⵠⵢⴰⵠ%s', 50956 past: 'ⵢⴰⵠ%s', 50957 s: 'âµâµâµâ´½', 50958 ss: '%d âµâµâµâ´½', 50959 m: 'âµâµâµâµâ´º', 50960 mm: '%d âµâµâµâµâ´º', 50961 h: 'âµâ´°âµâ´°', 50962 hh: '%d âµâ´°âµâµâ´°âµâµâµ', 50963 d: 'â´°âµâµ', 50964 dd: '%d oâµâµâ´°âµ', 50965 M: 'â´°âµ¢oâµâµ', 50966 MM: '%d âµâµ¢âµ¢âµâµâµ', 50967 y: 'â´°âµâ´³â´°âµ', 50968 yy: '%d âµâµâ´³â´°âµâµ', 50969 }, 50970 week: { 50971 dow: 6, // Saturday is the first day of the week. 50972 doy: 12, // The week that contains Jan 12th is the first week of the year. 50973 }, 50974 }); 50975 50976 return tzm; 50977 50978}))); 50979 50980 50981/***/ }), 50982
vendor: 4,806 bytes, lines 50983-51113
50983/***/ "./node_modules/moment/locale/ug-cn.js": 50984/*!*********************************************!*\ 50985 !*** ./node_modules/moment/locale/ug-cn.js ***! 50986 \*********************************************/ 50987/*! no static exports found */ 50988/***/ (function(module, exports, __webpack_require__) { 50989 50990//! moment.js locale configuration 50991//! locale : Uyghur (China) [ug-cn] 50992//! author: boyaq : https://github.com/boyaq 50993 50994;(function (global, factory) { 50995 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : 50996 undefined 50997}(this, (function (moment) { 'use strict'; 50998 50999 //! moment.js locale configuration 51000 51001 var ugCn = moment.defineLocale('ug-cn', { 51002 months: 'ÙØ§ÙÛØ§Ø±_ÙÛÛØ±Ø§Ù_٠ارت_ئاپرÛÙ_٠اÙ_ئÙÙÛÙ_ئÙÙÛÙ_Ø¦Ø§ÛØºÛست_سÛÙØªÛØ¨ÙØ±_ئÛÙØªÛØ¨ÙØ±_ÙÙÙØ§Ø¨Ùر_دÛÙØ§Ø¨Ùر'.split( 51003 '_' 51004 ), 51005 monthsShort: 51006 'ÙØ§ÙÛØ§Ø±_ÙÛÛØ±Ø§Ù_٠ارت_ئاپرÛÙ_٠اÙ_ئÙÙÛÙ_ئÙÙÛÙ_Ø¦Ø§ÛØºÛست_سÛÙØªÛØ¨ÙØ±_ئÛÙØªÛØ¨ÙØ±_ÙÙÙØ§Ø¨Ùر_دÛÙØ§Ø¨Ùر'.split( 51007 '_' 51008 ), 51009 weekdays: 'ÙÛÙØ´ÛÙØ¨Û_Ø¯ÛØ´ÛÙØ¨Û_سÛÙØ´ÛÙØ¨Û_ÚØ§Ø±Ø´ÛÙØ¨Û_Ù¾ÛÙØ´ÛÙØ¨Û_جÛÙ Û_Ø´ÛÙØ¨Û'.split( 51010 '_' 51011 ), 51012 weekdaysShort: 'ÙÛ_دÛ_سÛ_ÚØ§_Ù¾Û_جÛ_Ø´Û'.split('_'), 51013 weekdaysMin: 'ÙÛ_دÛ_سÛ_ÚØ§_Ù¾Û_جÛ_Ø´Û'.split('_'), 51014 longDateFormat: { 51015 LT: 'HH:mm', 51016 LTS: 'HH:mm:ss', 51017 L: 'YYYY-MM-DD', 51018 LL: 'YYYY-ÙÙÙÙM-ئاÙÙÙÚD-ÙÛÙÙ', 51019 LLL: 'YYYY-ÙÙÙÙM-ئاÙÙÙÚD-ÙÛÙÙØ HH:mm', 51020 LLLL: 'ddddØ YYYY-ÙÙÙÙM-ئاÙÙÙÚD-ÙÛÙÙØ HH:mm', 51021 }, 51022 meridiemParse: /ÙÛØ±ÙÙ ÙÛÚÛ|سÛÚ¾ÛØ±|ÚÛØ´ØªÙÙ Ø¨ÛØ±ÛÙ|ÚÛØ´|ÚÛØ´ØªÙÙ ÙÛÙÙÙ|ÙÛÚ/, 51023 meridiemHour: function (hour, meridiem) { 51024 if (hour === 12) { 51025 hour = 0; 51026 } 51027 if ( 51028 meridiem === 'ÙÛØ±ÙÙ ÙÛÚÛ' || 51029 meridiem === 'سÛÚ¾ÛØ±' || 51030 meridiem === 'ÚÛØ´ØªÙÙ Ø¨ÛØ±ÛÙ' 51031 ) { 51032 return hour; 51033 } else if (meridiem === 'ÚÛØ´ØªÙÙ ÙÛÙÙÙ' || meridiem === 'ÙÛÚ') { 51034 return hour + 12; 51035 } else { 51036 return hour >= 11 ? hour : hour + 12; 51037 } 51038 }, 51039 meridiem: function (hour, minute, isLower) { 51040 var hm = hour * 100 + minute; 51041 if (hm < 600) { 51042 return 'ÙÛØ±ÙÙ ÙÛÚÛ'; 51043 } else if (hm < 900) { 51044 return 'سÛÚ¾ÛØ±'; 51045 } else if (hm < 1130) { 51046 return 'ÚÛØ´ØªÙÙ Ø¨ÛØ±ÛÙ'; 51047 } else if (hm < 1230) { 51048 return 'ÚÛØ´'; 51049 } else if (hm < 1800) { 51050 return 'ÚÛØ´ØªÙÙ ÙÛÙÙÙ'; 51051 } else { 51052 return 'ÙÛÚ'; 51053 } 51054 }, 51055 calendar: { 51056 sameDay: '[بÛÚ¯ÛÙ Ø³Ø§Ø¦ÛØª] LT', 51057 nextDay: '[Ø¦ÛØªÛ Ø³Ø§Ø¦ÛØª] LT', 51058 nextWeek: '[ÙÛÙÛØ±ÙÙ] dddd [Ø³Ø§Ø¦ÛØª] LT', 51059 lastDay: '[تÛÙÛÚ¯ÛÙ] LT', 51060 lastWeek: '[Ø¦Ø§ÙØ¯ÙÙÙÙ] dddd [Ø³Ø§Ø¦ÛØª] LT', 51061 sameElse: 'L', 51062 }, 51063 relativeTime: { 51064 future: '%s ÙÛÙÙÙ', 51065 past: '%s Ø¨ÛØ±ÛÙ', 51066 s: 'ÙÛÚÚÛ Ø³ÛÙÙÙØª', 51067 ss: '%d سÛÙÙÙØª', 51068 m: 'Ø¨ÙØ± Ù ÙÙÛØª', 51069 mm: '%d Ù ÙÙÛØª', 51070 h: 'Ø¨ÙØ± Ø³Ø§Ø¦ÛØª', 51071 hh: '%d Ø³Ø§Ø¦ÛØª', 51072 d: 'Ø¨ÙØ± ÙÛÙ', 51073 dd: '%d ÙÛÙ', 51074 M: 'Ø¨ÙØ± ئاÙ', 51075 MM: '%d ئاÙ', 51076 y: 'Ø¨ÙØ± ÙÙÙ', 51077 yy: '%d ÙÙÙ', 51078 }, 51079 51080 dayOfMonthOrdinalParse: /\d{1,2}(-ÙÛÙÙ|-ئاÙ|-Ú¾ÛپتÛ)/, 51081 ordinal: function (number, period) { 51082 switch (period) { 51083 case 'd': 51084 case 'D': 51085 case 'DDD': 51086 return number + '-ÙÛÙÙ'; 51087 case 'w': 51088 case 'W': 51089 return number + '-Ú¾ÛپتÛ'; 51090 default: 51091 return number; 51092 } 51093 }, 51094 preparse: function (string) { 51095 return string.replace(/Ø/g, ','); 51096 }, 51097 postformat: function (string) { 51098 return string.replace(/,/g, 'Ø'); 51099 }, 51100 week: { 51101 // GB/T 7408-1994ãæ°æ®å åäº¤æ¢æ ¼å¼Â·ä¿¡æ¯äº¤æ¢Â·æ¥æåæ¶é´è¡¨ç¤ºæ³ãä¸ISO 8601:1988çæ 51102 dow: 1, // Monday is the first day of the week. 51103 doy: 7, // The week that contains Jan 1st is the first week of the year. 51104 }, 51105 }); 51106 51107 return ugCn; 51108 51109}))); 51110 51111 51112/***/ }), 51113
vendor: 7,085 bytes, lines 51114-51300
51114/***/ "./node_modules/moment/locale/uk.js": 51115/*!******************************************!*\ 51116 !*** ./node_modules/moment/locale/uk.js ***! 51117 \******************************************/ 51118/*! no static exports found */ 51119/***/ (function(module, exports, __webpack_require__) { 51120 51121//! moment.js locale configuration 51122//! locale : Ukrainian [uk] 51123//! author : zemlanin : https://github.com/zemlanin 51124//! Author : Menelion Elensúle : https://github.com/Oire 51125 51126;(function (global, factory) { 51127 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : 51128 undefined 51129}(this, (function (moment) { 'use strict'; 51130 51131 //! moment.js locale configuration 51132 51133 function plural(word, num) { 51134 var forms = word.split('_'); 51135 return num % 10 === 1 && num % 100 !== 11 51136 ? forms[0] 51137 : num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20) 51138 ? forms[1] 51139 : forms[2]; 51140 } 51141 function relativeTimeWithPlural(number, withoutSuffix, key) { 51142 var format = { 51143 ss: withoutSuffix ? 'ÑекÑнда_ÑекÑнди_ÑекÑнд' : 'ÑекÑндÑ_ÑекÑнди_ÑекÑнд', 51144 mm: withoutSuffix ? 'Ñ Ð²Ð¸Ð»Ð¸Ð½Ð°_Ñ Ð²Ð¸Ð»Ð¸Ð½Ð¸_Ñ Ð²Ð¸Ð»Ð¸Ð½' : 'Ñ Ð²Ð¸Ð»Ð¸Ð½Ñ_Ñ Ð²Ð¸Ð»Ð¸Ð½Ð¸_Ñ Ð²Ð¸Ð»Ð¸Ð½', 51145 hh: withoutSuffix ? 'година_години_годин' : 'годинÑ_години_годин', 51146 dd: 'денÑ_днÑ_днÑв', 51147 MM: 'мÑÑÑÑÑ_мÑÑÑÑÑ_мÑÑÑÑÑв', 51148 yy: 'ÑÑк_Ñоки_ÑокÑв', 51149 }; 51150 if (key === 'm') { 51151 return withoutSuffix ? 'Ñ Ð²Ð¸Ð»Ð¸Ð½Ð°' : 'Ñ Ð²Ð¸Ð»Ð¸Ð½Ñ'; 51152 } else if (key === 'h') { 51153 return withoutSuffix ? 'година' : 'годинÑ'; 51154 } else { 51155 return number + ' ' + plural(format[key], +number); 51156 } 51157 } 51158 function weekdaysCaseReplace(m, format) { 51159 var weekdays = { 51160 nominative: 51161 'недÑлÑ_понедÑлок_вÑвÑоÑок_ÑеÑеда_ÑеÑвеÑ_пâÑÑниÑÑ_ÑÑбоÑа'.split( 51162 '_' 51163 ), 51164 accusative: 51165 'недÑлÑ_понедÑлок_вÑвÑоÑок_ÑеÑедÑ_ÑеÑвеÑ_пâÑÑниÑÑ_ÑÑбоÑÑ'.split( 51166 '_' 51167 ), 51168 genitive: 51169 'недÑлÑ_понедÑлка_вÑвÑоÑка_ÑеÑеди_ÑеÑвеÑга_пâÑÑниÑÑ_ÑÑбоÑи'.split( 51170 '_' 51171 ), 51172 }, 51173 nounCase; 51174 51175 if (m === true) { 51176 return weekdays['nominative'] 51177 .slice(1, 7) 51178 .concat(weekdays['nominative'].slice(0, 1)); 51179 } 51180 if (!m) { 51181 return weekdays['nominative']; 51182 } 51183 51184 nounCase = /(\[[ÐвУÑ]\]) ?dddd/.test(format) 51185 ? 'accusative' 51186 : /\[?(?:минÑлоÑ|наÑÑÑпноÑ)? ?\] ?dddd/.test(format) 51187 ? 'genitive' 51188 : 'nominative'; 51189 return weekdays[nounCase][m.day()]; 51190 } 51191 function processHoursFunction(str) { 51192 return function () { 51193 return str + 'о' + (this.hours() === 11 ? 'б' : '') + '] LT'; 51194 }; 51195 } 51196 51197 var uk = moment.defineLocale('uk', { 51198 months: { 51199 format: 'ÑÑÑнÑ_лÑÑого_беÑезнÑ_квÑÑнÑ_ÑÑавнÑ_ÑеÑвнÑ_липнÑ_ÑеÑпнÑ_веÑеÑнÑ_жовÑнÑ_лиÑÑопада_гÑÑднÑ'.split( 51200 '_' 51201 ), 51202 standalone: 51203 'ÑÑÑенÑ_лÑÑий_беÑезенÑ_квÑÑенÑ_ÑÑавенÑ_ÑеÑвенÑ_липенÑ_ÑеÑпенÑ_веÑеÑенÑ_жовÑенÑ_лиÑÑопад_гÑÑденÑ'.split( 51204 '_' 51205 ), 51206 }, 51207 monthsShort: 'ÑÑÑ_лÑÑ_беÑ_квÑÑ_ÑÑав_ÑеÑв_лип_ÑеÑп_веÑ_жовÑ_лиÑÑ_гÑÑд'.split( 51208 '_' 51209 ), 51210 weekdays: weekdaysCaseReplace, 51211 weekdaysShort: 'нд_пн_вÑ_ÑÑ_ÑÑ_пÑ_Ñб'.split('_'), 51212 weekdaysMin: 'нд_пн_вÑ_ÑÑ_ÑÑ_пÑ_Ñб'.split('_'), 51213 longDateFormat: { 51214 LT: 'HH:mm', 51215 LTS: 'HH:mm:ss', 51216 L: 'DD.MM.YYYY', 51217 LL: 'D MMMM YYYY Ñ.', 51218 LLL: 'D MMMM YYYY Ñ., HH:mm', 51219 LLLL: 'dddd, D MMMM YYYY Ñ., HH:mm', 51220 }, 51221 calendar: { 51222 sameDay: processHoursFunction('[СÑÐ¾Ð³Ð¾Ð´Ð½Ñ '), 51223 nextDay: processHoursFunction('[ÐавÑÑа '), 51224 lastDay: processHoursFunction('[ÐÑоÑа '), 51225 nextWeek: processHoursFunction('[У] dddd ['), 51226 lastWeek: function () { 51227 switch (this.day()) { 51228 case 0: 51229 case 3: 51230 case 5: 51231 case 6: 51232 return processHoursFunction('[ÐинÑлоÑ] dddd [').call(this); 51233 case 1: 51234 case 2: 51235 case 4: 51236 return processHoursFunction('[ÐинÑлого] dddd [').call(this); 51237 } 51238 }, 51239 sameElse: 'L', 51240 }, 51241 relativeTime: { 51242 future: 'за %s', 51243 past: '%s ÑомÑ', 51244 s: 'декÑлÑка ÑекÑнд', 51245 ss: relativeTimeWithPlural, 51246 m: relativeTimeWithPlural, 51247 mm: relativeTimeWithPlural, 51248 h: 'годинÑ', 51249 hh: relativeTimeWithPlural, 51250 d: 'денÑ', 51251 dd: relativeTimeWithPlural, 51252 M: 'мÑÑÑÑÑ', 51253 MM: relativeTimeWithPlural, 51254 y: 'ÑÑк', 51255 yy: relativeTimeWithPlural, 51256 }, 51257 // M. E.: those two are virtually unused but a user might want to implement them for his/her website for some reason 51258 meridiemParse: /ноÑÑ|ÑанкÑ|днÑ|веÑоÑа/, 51259 isPM: function (input) { 51260 return /^(днÑ|веÑоÑа)$/.test(input); 51261 }, 51262 meridiem: function (hour, minute, isLower) { 51263 if (hour < 4) { 51264 return 'ноÑÑ'; 51265 } else if (hour < 12) { 51266 return 'ÑанкÑ'; 51267 } else if (hour < 17) { 51268 return 'днÑ'; 51269 } else { 51270 return 'веÑоÑа'; 51271 } 51272 }, 51273 dayOfMonthOrdinalParse: /\d{1,2}-(й|го)/, 51274 ordinal: function (number, period) { 51275 switch (period) { 51276 case 'M': 51277 case 'd': 51278 case 'DDD': 51279 case 'w': 51280 case 'W': 51281 return number + '-й'; 51282 case 'D': 51283 return number + '-го'; 51284 default: 51285 return number; 51286 } 51287 }, 51288 week: { 51289 dow: 1, // Monday is the first day of the week. 51290 doy: 7, // The week that contains Jan 7th is the first week of the year. 51291 }, 51292 }); 51293 51294 return uk; 51295 51296}))); 51297 51298 51299/***/ }), 51300
vendor: 2,990 bytes, lines 51301-51402
51301/***/ "./node_modules/moment/locale/ur.js": 51302/*!******************************************!*\ 51303 !*** ./node_modules/moment/locale/ur.js ***! 51304 \******************************************/ 51305/*! no static exports found */ 51306/***/ (function(module, exports, __webpack_require__) { 51307 51308//! moment.js locale configuration 51309//! locale : Urdu [ur] 51310//! author : Sawood Alam : https://github.com/ibnesayeed 51311//! author : Zack : https://github.com/ZackVision 51312 51313;(function (global, factory) { 51314 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : 51315 undefined 51316}(this, (function (moment) { 'use strict'; 51317 51318 //! moment.js locale configuration 51319 51320 var months = [ 51321 'جÙÙØ±Û', 51322 'ÙØ±ÙرÛ', 51323 '٠ارÚ', 51324 'اپرÛÙ', 51325 '٠ئÛ', 51326 'جÙÙ', 51327 'جÙÙØ§Ø¦Û', 51328 'اگست', 51329 'ست٠بر', 51330 'Ø§Ú©ØªÙØ¨Ø±', 51331 'ÙÙ٠بر', 51332 'دس٠بر', 51333 ], 51334 days = ['Ø§ØªÙØ§Ø±', 'Ù¾ÛØ±', 'Ù ÙÚ¯Ù', 'بدھ', 'ج٠عرات', 'ج٠عÛ', 'ÛÙØªÛ']; 51335 51336 var ur = moment.defineLocale('ur', { 51337 months: months, 51338 monthsShort: months, 51339 weekdays: days, 51340 weekdaysShort: days, 51341 weekdaysMin: days, 51342 longDateFormat: { 51343 LT: 'HH:mm', 51344 LTS: 'HH:mm:ss', 51345 L: 'DD/MM/YYYY', 51346 LL: 'D MMMM YYYY', 51347 LLL: 'D MMMM YYYY HH:mm', 51348 LLLL: 'ddddØ D MMMM YYYY HH:mm', 51349 }, 51350 meridiemParse: /صبØ|شا٠/, 51351 isPM: function (input) { 51352 return 'شا٠' === input; 51353 }, 51354 meridiem: function (hour, minute, isLower) { 51355 if (hour < 12) { 51356 return 'صبØ'; 51357 } 51358 return 'شا٠'; 51359 }, 51360 calendar: { 51361 sameDay: '[آج بÙÙØª] LT', 51362 nextDay: '[ک٠بÙÙØª] LT', 51363 nextWeek: 'dddd [بÙÙØª] LT', 51364 lastDay: '[Ú¯Ø°Ø´ØªÛ Ø±ÙØ² بÙÙØª] LT', 51365 lastWeek: '[گذشتÛ] dddd [بÙÙØª] LT', 51366 sameElse: 'L', 51367 }, 51368 relativeTime: { 51369 future: '%s بعد', 51370 past: '%s ÙØ¨Ù', 51371 s: 'ÚÙØ¯ سÛÚ©ÙÚ', 51372 ss: '%d سÛÚ©ÙÚ', 51373 m: 'اÛÚ© Ù ÙÙ¹', 51374 mm: '%d Ù ÙÙ¹', 51375 h: 'اÛÚ© Ú¯Ú¾ÙÙ¹Û', 51376 hh: '%d Ú¯Ú¾ÙÙ¹Û', 51377 d: 'اÛÚ© دÙ', 51378 dd: '%d دÙ', 51379 M: 'اÛÚ© ٠اÛ', 51380 MM: '%d ٠اÛ', 51381 y: 'اÛÚ© ساÙ', 51382 yy: '%d ساÙ', 51383 }, 51384 preparse: function (string) { 51385 return string.replace(/Ø/g, ','); 51386 }, 51387 postformat: function (string) { 51388 return string.replace(/,/g, 'Ø'); 51389 }, 51390 week: { 51391 dow: 1, // Monday is the first day of the week. 51392 doy: 4, // The week that contains Jan 4th is the first week of the year. 51393 }, 51394 }); 51395 51396 return ur; 51397 51398}))); 51399 51400 51401/***/ }), 51402
vendor: 2,353 bytes, lines 51403-51476
51403/***/ "./node_modules/moment/locale/uz-latn.js": 51404/*!***********************************************!*\ 51405 !*** ./node_modules/moment/locale/uz-latn.js ***! 51406 \***********************************************/ 51407/*! no static exports found */ 51408/***/ (function(module, exports, __webpack_require__) { 51409 51410//! moment.js locale configuration 51411//! locale : Uzbek Latin [uz-latn] 51412//! author : Rasulbek Mirzayev : github.com/Rasulbeeek 51413 51414;(function (global, factory) { 51415 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : 51416 undefined 51417}(this, (function (moment) { 'use strict'; 51418 51419 //! moment.js locale configuration 51420 51421 var uzLatn = moment.defineLocale('uz-latn', { 51422 months: 'Yanvar_Fevral_Mart_Aprel_May_Iyun_Iyul_Avgust_Sentabr_Oktabr_Noyabr_Dekabr'.split( 51423 '_' 51424 ), 51425 monthsShort: 'Yan_Fev_Mar_Apr_May_Iyun_Iyul_Avg_Sen_Okt_Noy_Dek'.split('_'), 51426 weekdays: 51427 'Yakshanba_Dushanba_Seshanba_Chorshanba_Payshanba_Juma_Shanba'.split( 51428 '_' 51429 ), 51430 weekdaysShort: 'Yak_Dush_Sesh_Chor_Pay_Jum_Shan'.split('_'), 51431 weekdaysMin: 'Ya_Du_Se_Cho_Pa_Ju_Sha'.split('_'), 51432 longDateFormat: { 51433 LT: 'HH:mm', 51434 LTS: 'HH:mm:ss', 51435 L: 'DD/MM/YYYY', 51436 LL: 'D MMMM YYYY', 51437 LLL: 'D MMMM YYYY HH:mm', 51438 LLLL: 'D MMMM YYYY, dddd HH:mm', 51439 }, 51440 calendar: { 51441 sameDay: '[Bugun soat] LT [da]', 51442 nextDay: '[Ertaga] LT [da]', 51443 nextWeek: 'dddd [kuni soat] LT [da]', 51444 lastDay: '[Kecha soat] LT [da]', 51445 lastWeek: "[O'tgan] dddd [kuni soat] LT [da]", 51446 sameElse: 'L', 51447 }, 51448 relativeTime: { 51449 future: 'Yaqin %s ichida', 51450 past: 'Bir necha %s oldin', 51451 s: 'soniya', 51452 ss: '%d soniya', 51453 m: 'bir daqiqa', 51454 mm: '%d daqiqa', 51455 h: 'bir soat', 51456 hh: '%d soat', 51457 d: 'bir kun', 51458 dd: '%d kun', 51459 M: 'bir oy', 51460 MM: '%d oy', 51461 y: 'bir yil', 51462 yy: '%d yil', 51463 }, 51464 week: { 51465 dow: 1, // Monday is the first day of the week. 51466 doy: 7, // The week that contains Jan 7th is the first week of the year. 51467 }, 51468 }); 51469 51470 return uzLatn; 51471 51472}))); 51473 51474 51475/***/ }), 51476
vendor: 2,559 bytes, lines 51477-51547
51477/***/ "./node_modules/moment/locale/uz.js": 51478/*!******************************************!*\ 51479 !*** ./node_modules/moment/locale/uz.js ***! 51480 \******************************************/ 51481/*! no static exports found */ 51482/***/ (function(module, exports, __webpack_require__) { 51483 51484//! moment.js locale configuration 51485//! locale : Uzbek [uz] 51486//! author : Sardor Muminov : https://github.com/muminoff 51487 51488;(function (global, factory) { 51489 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : 51490 undefined 51491}(this, (function (moment) { 'use strict'; 51492 51493 //! moment.js locale configuration 51494 51495 var uz = moment.defineLocale('uz', { 51496 months: 'ÑнваÑ_ÑевÑал_маÑÑ_апÑел_май_иÑн_иÑл_авгÑÑÑ_ÑенÑÑбÑ_окÑÑбÑ_ноÑбÑ_декабÑ'.split( 51497 '_' 51498 ), 51499 monthsShort: 'Ñнв_Ñев_маÑ_апÑ_май_иÑн_иÑл_авг_Ñен_окÑ_ноÑ_дек'.split('_'), 51500 weekdays: 'ЯкÑанба_ÐÑÑанба_СеÑанба_ЧоÑÑанба_ÐайÑанба_ÐÑма_Шанба'.split('_'), 51501 weekdaysShort: 'ЯкÑ_ÐÑÑ_СеÑ_ЧоÑ_Ðай_ÐÑм_Шан'.split('_'), 51502 weekdaysMin: 'Як_ÐÑ_Се_Чо_Ðа_ÐÑ_Ша'.split('_'), 51503 longDateFormat: { 51504 LT: 'HH:mm', 51505 LTS: 'HH:mm:ss', 51506 L: 'DD/MM/YYYY', 51507 LL: 'D MMMM YYYY', 51508 LLL: 'D MMMM YYYY HH:mm', 51509 LLLL: 'D MMMM YYYY, dddd HH:mm', 51510 }, 51511 calendar: { 51512 sameDay: '[ÐÑгÑн ÑоаÑ] LT [да]', 51513 nextDay: '[ÐÑÑага] LT [да]', 51514 nextWeek: 'dddd [кÑни ÑоаÑ] LT [да]', 51515 lastDay: '[ÐеÑа ÑоаÑ] LT [да]', 51516 lastWeek: '[УÑган] dddd [кÑни ÑоаÑ] LT [да]', 51517 sameElse: 'L', 51518 }, 51519 relativeTime: { 51520 future: 'Якин %s иÑида', 51521 past: 'ÐÐ¸Ñ Ð½ÐµÑа %s олдин', 51522 s: 'ÑÑÑÑаÑ', 51523 ss: '%d ÑÑÑÑаÑ', 51524 m: 'Ð±Ð¸Ñ Ð´Ð°ÐºÐ¸ÐºÐ°', 51525 mm: '%d дакика', 51526 h: 'Ð±Ð¸Ñ ÑоаÑ', 51527 hh: '%d ÑоаÑ', 51528 d: 'Ð±Ð¸Ñ ÐºÑн', 51529 dd: '%d кÑн', 51530 M: 'Ð±Ð¸Ñ Ð¾Ð¹', 51531 MM: '%d ой', 51532 y: 'Ð±Ð¸Ñ Ð¹Ð¸Ð»', 51533 yy: '%d йил', 51534 }, 51535 week: { 51536 dow: 1, // Monday is the first day of the week. 51537 doy: 7, // The week that contains Jan 4th is the first week of the year. 51538 }, 51539 }); 51540 51541 return uz; 51542 51543}))); 51544 51545 51546/***/ }), 51547
vendor: 3,216 bytes, lines 51548-51647
51548/***/ "./node_modules/moment/locale/vi.js": 51549/*!******************************************!*\ 51550 !*** ./node_modules/moment/locale/vi.js ***! 51551 \******************************************/ 51552/*! no static exports found */ 51553/***/ (function(module, exports, __webpack_require__) { 51554 51555//! moment.js locale configuration 51556//! locale : Vietnamese [vi] 51557//! author : Bang Nguyen : https://github.com/bangnk 51558//! author : Chien Kira : https://github.com/chienkira 51559 51560;(function (global, factory) { 51561 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : 51562 undefined 51563}(this, (function (moment) { 'use strict'; 51564 51565 //! moment.js locale configuration 51566 51567 var vi = moment.defineLocale('vi', { 51568 months: 'tháng 1_tháng 2_tháng 3_tháng 4_tháng 5_tháng 6_tháng 7_tháng 8_tháng 9_tháng 10_tháng 11_tháng 12'.split( 51569 '_' 51570 ), 51571 monthsShort: 51572 'Thg 01_Thg 02_Thg 03_Thg 04_Thg 05_Thg 06_Thg 07_Thg 08_Thg 09_Thg 10_Thg 11_Thg 12'.split( 51573 '_' 51574 ), 51575 monthsParseExact: true, 51576 weekdays: 'chá»§ nháºt_thứ hai_thứ ba_thứ tư_thứ nÄm_thứ sáu_thứ bảy'.split( 51577 '_' 51578 ), 51579 weekdaysShort: 'CN_T2_T3_T4_T5_T6_T7'.split('_'), 51580 weekdaysMin: 'CN_T2_T3_T4_T5_T6_T7'.split('_'), 51581 weekdaysParseExact: true, 51582 meridiemParse: /sa|ch/i, 51583 isPM: function (input) { 51584 return /^ch$/i.test(input); 51585 }, 51586 meridiem: function (hours, minutes, isLower) { 51587 if (hours < 12) { 51588 return isLower ? 'sa' : 'SA'; 51589 } else { 51590 return isLower ? 'ch' : 'CH'; 51591 } 51592 }, 51593 longDateFormat: { 51594 LT: 'HH:mm', 51595 LTS: 'HH:mm:ss', 51596 L: 'DD/MM/YYYY', 51597 LL: 'D MMMM [nÄm] YYYY', 51598 LLL: 'D MMMM [nÄm] YYYY HH:mm', 51599 LLLL: 'dddd, D MMMM [nÄm] YYYY HH:mm', 51600 l: 'DD/M/YYYY', 51601 ll: 'D MMM YYYY', 51602 lll: 'D MMM YYYY HH:mm', 51603 llll: 'ddd, D MMM YYYY HH:mm', 51604 }, 51605 calendar: { 51606 sameDay: '[Hôm nay lúc] LT', 51607 nextDay: '[Ngà y mai lúc] LT', 51608 nextWeek: 'dddd [tuần tá»i lúc] LT', 51609 lastDay: '[Hôm qua lúc] LT', 51610 lastWeek: 'dddd [tuần trưá»c lúc] LT', 51611 sameElse: 'L', 51612 }, 51613 relativeTime: { 51614 future: '%s tá»i', 51615 past: '%s trưá»c', 51616 s: 'và i giây', 51617 ss: '%d giây', 51618 m: 'má»t phút', 51619 mm: '%d phút', 51620 h: 'má»t giá»', 51621 hh: '%d giá»', 51622 d: 'má»t ngà y', 51623 dd: '%d ngà y', 51624 w: 'má»t tuần', 51625 ww: '%d tuần', 51626 M: 'má»t tháng', 51627 MM: '%d tháng', 51628 y: 'má»t nÄm', 51629 yy: '%d nÄm', 51630 }, 51631 dayOfMonthOrdinalParse: /\d{1,2}/, 51632 ordinal: function (number) { 51633 return number; 51634 }, 51635 week: { 51636 dow: 1, // Monday is the first day of the week. 51637 doy: 4, // The week that contains Jan 4th is the first week of the year. 51638 }, 51639 }); 51640 51641 return vi; 51642 51643}))); 51644 51645 51646/***/ }), 51647
vendor: 3,168 bytes, lines 51648-51740
51648/***/ "./node_modules/moment/locale/x-pseudo.js": 51649/*!************************************************!*\ 51650 !*** ./node_modules/moment/locale/x-pseudo.js ***! 51651 \************************************************/ 51652/*! no static exports found */ 51653/***/ (function(module, exports, __webpack_require__) { 51654 51655//! moment.js locale configuration 51656//! locale : Pseudo [x-pseudo] 51657//! author : Andrew Hood : https://github.com/andrewhood125 51658 51659;(function (global, factory) { 51660 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : 51661 undefined 51662}(this, (function (moment) { 'use strict'; 51663 51664 //! moment.js locale configuration 51665 51666 var xPseudo = moment.defineLocale('x-pseudo', { 51667 months: 'J~áñúá~rý_F~ébrú~árý_~Márc~h_Ãp~rÃl_~Máý_~Júñé~_Júl~ý_Ãú~gúst~_Sép~témb~ér_Ã~ctób~ér_Ã~óvém~bér_~Décé~mbér'.split( 51668 '_' 51669 ), 51670 monthsShort: 51671 'J~áñ_~Féb_~Már_~Ãpr_~Máý_~Júñ_~Júl_~Ãúg_~Sép_~Ãct_~Ãóv_~Déc'.split( 51672 '_' 51673 ), 51674 monthsParseExact: true, 51675 weekdays: 51676 'S~úñdá~ý_Mó~ñdáý~_Túé~sdáý~_Wéd~ñésd~áý_T~húrs~dáý_~FrÃd~áý_S~átúr~dáý'.split( 51677 '_' 51678 ), 51679 weekdaysShort: 'S~úñ_~Móñ_~Túé_~Wéd_~Thú_~FrÃ_~Sát'.split('_'), 51680 weekdaysMin: 'S~ú_Mó~_Tú_~Wé_T~h_Fr~_Sá'.split('_'), 51681 weekdaysParseExact: true, 51682 longDateFormat: { 51683 LT: 'HH:mm', 51684 L: 'DD/MM/YYYY', 51685 LL: 'D MMMM YYYY', 51686 LLL: 'D MMMM YYYY HH:mm', 51687 LLLL: 'dddd, D MMMM YYYY HH:mm', 51688 }, 51689 calendar: { 51690 sameDay: '[T~ódá~ý át] LT', 51691 nextDay: '[T~ómó~rró~w át] LT', 51692 nextWeek: 'dddd [át] LT', 51693 lastDay: '[Ã~ést~érdá~ý át] LT', 51694 lastWeek: '[L~ást] dddd [át] LT', 51695 sameElse: 'L', 51696 }, 51697 relativeTime: { 51698 future: 'Ã~ñ %s', 51699 past: '%s á~gó', 51700 s: 'á ~féw ~sécó~ñds', 51701 ss: '%d s~écóñ~ds', 51702 m: 'á ~mÃñ~úté', 51703 mm: '%d m~Ãñú~tés', 51704 h: 'á~ñ hó~úr', 51705 hh: '%d h~óúrs', 51706 d: 'á ~dáý', 51707 dd: '%d d~áýs', 51708 M: 'á ~móñ~th', 51709 MM: '%d m~óñt~hs', 51710 y: 'á ~ýéár', 51711 yy: '%d ý~éárs', 51712 }, 51713 dayOfMonthOrdinalParse: /\d{1,2}(th|st|nd|rd)/, 51714 ordinal: function (number) { 51715 var b = number % 10, 51716 output = 51717 ~~((number % 100) / 10) === 1 51718 ? 'th' 51719 : b === 1 51720 ? 'st' 51721 : b === 2 51722 ? 'nd' 51723 : b === 3 51724 ? 'rd' 51725 : 'th'; 51726 return number + output; 51727 }, 51728 week: { 51729 dow: 1, // Monday is the first day of the week. 51730 doy: 4, // The week that contains Jan 4th is the first week of the year. 51731 }, 51732 }); 51733 51734 return xPseudo; 51735 51736}))); 51737 51738 51739/***/ }), 51740
vendor: 2,569 bytes, lines 51741-51813
51741/***/ "./node_modules/moment/locale/yo.js": 51742/*!******************************************!*\ 51743 !*** ./node_modules/moment/locale/yo.js ***! 51744 \******************************************/ 51745/*! no static exports found */ 51746/***/ (function(module, exports, __webpack_require__) { 51747 51748//! moment.js locale configuration 51749//! locale : Yoruba Nigeria [yo] 51750//! author : Atolagbe Abisoye : https://github.com/andela-batolagbe 51751 51752;(function (global, factory) { 51753 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : 51754 undefined 51755}(this, (function (moment) { 'use strict'; 51756 51757 //! moment.js locale configuration 51758 51759 var yo = moment.defineLocale('yo', { 51760 months: 'SẹÌrẹÌ_EÌreÌleÌ_ẸrẹÌnaÌ_IÌgbeÌ_EÌbibi_OÌkuÌdu_Agẹmo_OÌguÌn_Owewe_á»ÌwaÌraÌ_BeÌluÌ_á»ÌpẹÌÌ'.split( 51761 '_' 51762 ), 51763 monthsShort: 'SẹÌr_EÌrl_Ẹrn_IÌgb_EÌbi_OÌkuÌ_Agẹ_OÌguÌ_Owe_á»ÌwaÌ_BeÌl_á»ÌpẹÌÌ'.split('_'), 51764 weekdays: 'AÌiÌkuÌ_AjeÌ_IÌsẹÌgun_á»já»ÌruÌ_á»já»Ìbá»_ẸtiÌ_AÌbaÌmẹÌta'.split('_'), 51765 weekdaysShort: 'AÌiÌk_AjeÌ_IÌsẹÌ_á»jr_á»jb_ẸtiÌ_AÌbaÌ'.split('_'), 51766 weekdaysMin: 'AÌiÌ_Aj_IÌs_á»r_á»b_Ẹt_AÌb'.split('_'), 51767 longDateFormat: { 51768 LT: 'h:mm A', 51769 LTS: 'h:mm:ss A', 51770 L: 'DD/MM/YYYY', 51771 LL: 'D MMMM YYYY', 51772 LLL: 'D MMMM YYYY h:mm A', 51773 LLLL: 'dddd, D MMMM YYYY h:mm A', 51774 }, 51775 calendar: { 51776 sameDay: '[OÌniÌ ni] LT', 51777 nextDay: '[á»Ìla ni] LT', 51778 nextWeek: "dddd [á»sáº¹Ì toÌn'bá»] [ni] LT", 51779 lastDay: '[AÌna ni] LT', 51780 lastWeek: 'dddd [á»sáº¹Ì toÌlá»Ì] [ni] LT', 51781 sameElse: 'L', 51782 }, 51783 relativeTime: { 51784 future: 'niÌ %s', 51785 past: '%s ká»jaÌ', 51786 s: 'iÌsẹjuÌ aayaÌ die', 51787 ss: 'aayaÌ %d', 51788 m: 'iÌsẹjuÌ kan', 51789 mm: 'iÌsẹjuÌ %d', 51790 h: 'waÌkati kan', 51791 hh: 'waÌkati %d', 51792 d: 'á»já»Ì kan', 51793 dd: 'á»já»Ì %d', 51794 M: 'osuÌ kan', 51795 MM: 'osuÌ %d', 51796 y: 'á»duÌn kan', 51797 yy: 'á»duÌn %d', 51798 }, 51799 dayOfMonthOrdinalParse: /á»já»Ì\s\d{1,2}/, 51800 ordinal: 'á»já»Ì %d', 51801 week: { 51802 dow: 1, // Monday is the first day of the week. 51803 doy: 4, // The week that contains Jan 4th is the first week of the year. 51804 }, 51805 }); 51806 51807 return yo; 51808 51809}))); 51810 51811 51812/***/ }), 51813
vendor: 4,669 bytes, lines 51814-51953
51814/***/ "./node_modules/moment/locale/zh-cn.js": 51815/*!*********************************************!*\ 51816 !*** ./node_modules/moment/locale/zh-cn.js ***! 51817 \*********************************************/ 51818/*! no static exports found */ 51819/***/ (function(module, exports, __webpack_require__) { 51820 51821//! moment.js locale configuration 51822//! locale : Chinese (China) [zh-cn] 51823//! author : suupic : https://github.com/suupic 51824//! author : Zeno Zeng : https://github.com/zenozeng 51825//! author : uu109 : https://github.com/uu109 51826 51827;(function (global, factory) { 51828 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : 51829 undefined 51830}(this, (function (moment) { 'use strict'; 51831 51832 //! moment.js locale configuration 51833 51834 var zhCn = moment.defineLocale('zh-cn', { 51835 months: '䏿_äºæ_䏿_åæ_äºæ_å æ_䏿_å «æ_乿_åæ_å䏿_åäºæ'.split( 51836 '_' 51837 ), 51838 monthsShort: '1æ_2æ_3æ_4æ_5æ_6æ_7æ_8æ_9æ_10æ_11æ_12æ'.split( 51839 '_' 51840 ), 51841 weekdays: 'æææ¥_ææä¸_ææäº_ææä¸_ææå_ææäº_ææå '.split('_'), 51842 weekdaysShort: '卿¥_å¨ä¸_å¨äº_å¨ä¸_å¨å_å¨äº_å¨å '.split('_'), 51843 weekdaysMin: 'æ¥_ä¸_äº_ä¸_å_äº_å '.split('_'), 51844 longDateFormat: { 51845 LT: 'HH:mm', 51846 LTS: 'HH:mm:ss', 51847 L: 'YYYY/MM/DD', 51848 LL: 'YYYYå¹´MæDæ¥', 51849 LLL: 'YYYYå¹´MæDæ¥Ahç¹mmå', 51850 LLLL: 'YYYYå¹´MæDæ¥ddddAhç¹mmå', 51851 l: 'YYYY/M/D', 51852 ll: 'YYYYå¹´MæDæ¥', 51853 lll: 'YYYYå¹´MæDæ¥ HH:mm', 51854 llll: 'YYYYå¹´MæDæ¥dddd HH:mm', 51855 }, 51856 meridiemParse: /忍|æ©ä¸|ä¸å|ä¸å|ä¸å|æä¸/, 51857 meridiemHour: function (hour, meridiem) { 51858 if (hour === 12) { 51859 hour = 0; 51860 } 51861 if (meridiem === '忍' || meridiem === 'æ©ä¸' || meridiem === 'ä¸å') { 51862 return hour; 51863 } else if (meridiem === 'ä¸å' || meridiem === 'æä¸') { 51864 return hour + 12; 51865 } else { 51866 // 'ä¸å' 51867 return hour >= 11 ? hour : hour + 12; 51868 } 51869 }, 51870 meridiem: function (hour, minute, isLower) { 51871 var hm = hour * 100 + minute; 51872 if (hm < 600) { 51873 return '忍'; 51874 } else if (hm < 900) { 51875 return 'æ©ä¸'; 51876 } else if (hm < 1130) { 51877 return 'ä¸å'; 51878 } else if (hm < 1230) { 51879 return 'ä¸å'; 51880 } else if (hm < 1800) { 51881 return 'ä¸å'; 51882 } else { 51883 return 'æä¸'; 51884 } 51885 }, 51886 calendar: { 51887 sameDay: '[ä»å¤©]LT', 51888 nextDay: '[æå¤©]LT', 51889 nextWeek: function (now) { 51890 if (now.week() !== this.week()) { 51891 return '[ä¸]dddLT'; 51892 } else { 51893 return '[æ¬]dddLT'; 51894 } 51895 }, 51896 lastDay: '[æ¨å¤©]LT', 51897 lastWeek: function (now) { 51898 if (this.week() !== now.week()) { 51899 return '[ä¸]dddLT'; 51900 } else { 51901 return '[æ¬]dddLT'; 51902 } 51903 }, 51904 sameElse: 'L', 51905 }, 51906 dayOfMonthOrdinalParse: /\d{1,2}(æ¥|æ|å¨)/, 51907 ordinal: function (number, period) { 51908 switch (period) { 51909 case 'd': 51910 case 'D': 51911 case 'DDD': 51912 return number + 'æ¥'; 51913 case 'M': 51914 return number + 'æ'; 51915 case 'w': 51916 case 'W': 51917 return number + 'å¨'; 51918 default: 51919 return number; 51920 } 51921 }, 51922 relativeTime: { 51923 future: '%så', 51924 past: '%så', 51925 s: 'å ç§', 51926 ss: '%d ç§', 51927 m: '1 åé', 51928 mm: '%d åé', 51929 h: '1 å°æ¶', 51930 hh: '%d å°æ¶', 51931 d: '1 天', 51932 dd: '%d 天', 51933 w: '1 å¨', 51934 ww: '%d å¨', 51935 M: '1 个æ', 51936 MM: '%d 个æ', 51937 y: '1 å¹´', 51938 yy: '%d å¹´', 51939 }, 51940 week: { 51941 // GB/T 7408-1994ãæ°æ®å åäº¤æ¢æ ¼å¼Â·ä¿¡æ¯äº¤æ¢Â·æ¥æåæ¶é´è¡¨ç¤ºæ³ãä¸ISO 8601:1988çæ 51942 dow: 1, // Monday is the first day of the week. 51943 doy: 4, // The week that contains Jan 4th is the first week of the year. 51944 }, 51945 }); 51946 51947 return zhCn; 51948 51949}))); 51950 51951 51952/***/ }), 51953
vendor: 3,994 bytes, lines 51954-52074
51954/***/ "./node_modules/moment/locale/zh-hk.js": 51955/*!*********************************************!*\ 51956 !*** ./node_modules/moment/locale/zh-hk.js ***! 51957 \*********************************************/ 51958/*! no static exports found */ 51959/***/ (function(module, exports, __webpack_require__) { 51960 51961//! moment.js locale configuration 51962//! locale : Chinese (Hong Kong) [zh-hk] 51963//! author : Ben : https://github.com/ben-lin 51964//! author : Chris Lam : https://github.com/hehachris 51965//! author : Konstantin : https://github.com/skfd 51966//! author : Anthony : https://github.com/anthonylau 51967 51968;(function (global, factory) { 51969 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : 51970 undefined 51971}(this, (function (moment) { 'use strict'; 51972 51973 //! moment.js locale configuration 51974 51975 var zhHk = moment.defineLocale('zh-hk', { 51976 months: '䏿_äºæ_䏿_åæ_äºæ_å æ_䏿_å «æ_乿_åæ_å䏿_åäºæ'.split( 51977 '_' 51978 ), 51979 monthsShort: '1æ_2æ_3æ_4æ_5æ_6æ_7æ_8æ_9æ_10æ_11æ_12æ'.split( 51980 '_' 51981 ), 51982 weekdays: 'æææ¥_ææä¸_ææäº_ææä¸_ææå_ææäº_ææå '.split('_'), 51983 weekdaysShort: '鱿¥_é±ä¸_é±äº_é±ä¸_é±å_é±äº_é±å '.split('_'), 51984 weekdaysMin: 'æ¥_ä¸_äº_ä¸_å_äº_å '.split('_'), 51985 longDateFormat: { 51986 LT: 'HH:mm', 51987 LTS: 'HH:mm:ss', 51988 L: 'YYYY/MM/DD', 51989 LL: 'YYYYå¹´MæDæ¥', 51990 LLL: 'YYYYå¹´MæDæ¥ HH:mm', 51991 LLLL: 'YYYYå¹´MæDæ¥dddd HH:mm', 51992 l: 'YYYY/M/D', 51993 ll: 'YYYYå¹´MæDæ¥', 51994 lll: 'YYYYå¹´MæDæ¥ HH:mm', 51995 llll: 'YYYYå¹´MæDæ¥dddd HH:mm', 51996 }, 51997 meridiemParse: /忍|æ©ä¸|ä¸å|ä¸å|ä¸å|æä¸/, 51998 meridiemHour: function (hour, meridiem) { 51999 if (hour === 12) { 52000 hour = 0; 52001 } 52002 if (meridiem === '忍' || meridiem === 'æ©ä¸' || meridiem === 'ä¸å') { 52003 return hour; 52004 } else if (meridiem === 'ä¸å') { 52005 return hour >= 11 ? hour : hour + 12; 52006 } else if (meridiem === 'ä¸å' || meridiem === 'æä¸') { 52007 return hour + 12; 52008 } 52009 }, 52010 meridiem: function (hour, minute, isLower) { 52011 var hm = hour * 100 + minute; 52012 if (hm < 600) { 52013 return '忍'; 52014 } else if (hm < 900) { 52015 return 'æ©ä¸'; 52016 } else if (hm < 1200) { 52017 return 'ä¸å'; 52018 } else if (hm === 1200) { 52019 return 'ä¸å'; 52020 } else if (hm < 1800) { 52021 return 'ä¸å'; 52022 } else { 52023 return 'æä¸'; 52024 } 52025 }, 52026 calendar: { 52027 sameDay: '[ä»å¤©]LT', 52028 nextDay: '[æå¤©]LT', 52029 nextWeek: '[ä¸]ddddLT', 52030 lastDay: '[æ¨å¤©]LT', 52031 lastWeek: '[ä¸]ddddLT', 52032 sameElse: 'L', 52033 }, 52034 dayOfMonthOrdinalParse: /\d{1,2}(æ¥|æ|é±)/, 52035 ordinal: function (number, period) { 52036 switch (period) { 52037 case 'd': 52038 case 'D': 52039 case 'DDD': 52040 return number + 'æ¥'; 52041 case 'M': 52042 return number + 'æ'; 52043 case 'w': 52044 case 'W': 52045 return number + 'é±'; 52046 default: 52047 return number; 52048 } 52049 }, 52050 relativeTime: { 52051 future: '%så¾', 52052 past: '%så', 52053 s: 'å¹¾ç§', 52054 ss: '%d ç§', 52055 m: '1 åé', 52056 mm: '%d åé', 52057 h: '1 å°æ', 52058 hh: '%d å°æ', 52059 d: '1 天', 52060 dd: '%d 天', 52061 M: '1 åæ', 52062 MM: '%d åæ', 52063 y: '1 å¹´', 52064 yy: '%d å¹´', 52065 }, 52066 }); 52067 52068 return zhHk; 52069 52070}))); 52071 52072 52073/***/ }), 52074
vendor: 3,944 bytes, lines 52075-52194
52075/***/ "./node_modules/moment/locale/zh-mo.js": 52076/*!*********************************************!*\ 52077 !*** ./node_modules/moment/locale/zh-mo.js ***! 52078 \*********************************************/ 52079/*! no static exports found */ 52080/***/ (function(module, exports, __webpack_require__) { 52081 52082//! moment.js locale configuration 52083//! locale : Chinese (Macau) [zh-mo] 52084//! author : Ben : https://github.com/ben-lin 52085//! author : Chris Lam : https://github.com/hehachris 52086//! author : Tan Yuanhong : https://github.com/le0tan 52087 52088;(function (global, factory) { 52089 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : 52090 undefined 52091}(this, (function (moment) { 'use strict'; 52092 52093 //! moment.js locale configuration 52094 52095 var zhMo = moment.defineLocale('zh-mo', { 52096 months: '䏿_äºæ_䏿_åæ_äºæ_å æ_䏿_å «æ_乿_åæ_å䏿_åäºæ'.split( 52097 '_' 52098 ), 52099 monthsShort: '1æ_2æ_3æ_4æ_5æ_6æ_7æ_8æ_9æ_10æ_11æ_12æ'.split( 52100 '_' 52101 ), 52102 weekdays: 'æææ¥_ææä¸_ææäº_ææä¸_ææå_ææäº_ææå '.split('_'), 52103 weekdaysShort: '鱿¥_é±ä¸_é±äº_é±ä¸_é±å_é±äº_é±å '.split('_'), 52104 weekdaysMin: 'æ¥_ä¸_äº_ä¸_å_äº_å '.split('_'), 52105 longDateFormat: { 52106 LT: 'HH:mm', 52107 LTS: 'HH:mm:ss', 52108 L: 'DD/MM/YYYY', 52109 LL: 'YYYYå¹´MæDæ¥', 52110 LLL: 'YYYYå¹´MæDæ¥ HH:mm', 52111 LLLL: 'YYYYå¹´MæDæ¥dddd HH:mm', 52112 l: 'D/M/YYYY', 52113 ll: 'YYYYå¹´MæDæ¥', 52114 lll: 'YYYYå¹´MæDæ¥ HH:mm', 52115 llll: 'YYYYå¹´MæDæ¥dddd HH:mm', 52116 }, 52117 meridiemParse: /忍|æ©ä¸|ä¸å|ä¸å|ä¸å|æä¸/, 52118 meridiemHour: function (hour, meridiem) { 52119 if (hour === 12) { 52120 hour = 0; 52121 } 52122 if (meridiem === '忍' || meridiem === 'æ©ä¸' || meridiem === 'ä¸å') { 52123 return hour; 52124 } else if (meridiem === 'ä¸å') { 52125 return hour >= 11 ? hour : hour + 12; 52126 } else if (meridiem === 'ä¸å' || meridiem === 'æä¸') { 52127 return hour + 12; 52128 } 52129 }, 52130 meridiem: function (hour, minute, isLower) { 52131 var hm = hour * 100 + minute; 52132 if (hm < 600) { 52133 return '忍'; 52134 } else if (hm < 900) { 52135 return 'æ©ä¸'; 52136 } else if (hm < 1130) { 52137 return 'ä¸å'; 52138 } else if (hm < 1230) { 52139 return 'ä¸å'; 52140 } else if (hm < 1800) { 52141 return 'ä¸å'; 52142 } else { 52143 return 'æä¸'; 52144 } 52145 }, 52146 calendar: { 52147 sameDay: '[ä»å¤©] LT', 52148 nextDay: '[æå¤©] LT', 52149 nextWeek: '[ä¸]dddd LT', 52150 lastDay: '[æ¨å¤©] LT', 52151 lastWeek: '[ä¸]dddd LT', 52152 sameElse: 'L', 52153 }, 52154 dayOfMonthOrdinalParse: /\d{1,2}(æ¥|æ|é±)/, 52155 ordinal: function (number, period) { 52156 switch (period) { 52157 case 'd': 52158 case 'D': 52159 case 'DDD': 52160 return number + 'æ¥'; 52161 case 'M': 52162 return number + 'æ'; 52163 case 'w': 52164 case 'W': 52165 return number + 'é±'; 52166 default: 52167 return number; 52168 } 52169 }, 52170 relativeTime: { 52171 future: '%så §', 52172 past: '%så', 52173 s: 'å¹¾ç§', 52174 ss: '%d ç§', 52175 m: '1 åé', 52176 mm: '%d åé', 52177 h: '1 å°æ', 52178 hh: '%d å°æ', 52179 d: '1 天', 52180 dd: '%d 天', 52181 M: '1 åæ', 52182 MM: '%d åæ', 52183 y: '1 å¹´', 52184 yy: '%d å¹´', 52185 }, 52186 }); 52187 52188 return zhMo; 52189 52190}))); 52191 52192 52193/***/ }), 52194
vendor: 3,891 bytes, lines 52195-52313
52195/***/ "./node_modules/moment/locale/zh-tw.js": 52196/*!*********************************************!*\ 52197 !*** ./node_modules/moment/locale/zh-tw.js ***! 52198 \*********************************************/ 52199/*! no static exports found */ 52200/***/ (function(module, exports, __webpack_require__) { 52201 52202//! moment.js locale configuration 52203//! locale : Chinese (Taiwan) [zh-tw] 52204//! author : Ben : https://github.com/ben-lin 52205//! author : Chris Lam : https://github.com/hehachris 52206 52207;(function (global, factory) { 52208 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : 52209 undefined 52210}(this, (function (moment) { 'use strict'; 52211 52212 //! moment.js locale configuration 52213 52214 var zhTw = moment.defineLocale('zh-tw', { 52215 months: '䏿_äºæ_䏿_åæ_äºæ_å æ_䏿_å «æ_乿_åæ_å䏿_åäºæ'.split( 52216 '_' 52217 ), 52218 monthsShort: '1æ_2æ_3æ_4æ_5æ_6æ_7æ_8æ_9æ_10æ_11æ_12æ'.split( 52219 '_' 52220 ), 52221 weekdays: 'æææ¥_ææä¸_ææäº_ææä¸_ææå_ææäº_ææå '.split('_'), 52222 weekdaysShort: '鱿¥_é±ä¸_é±äº_é±ä¸_é±å_é±äº_é±å '.split('_'), 52223 weekdaysMin: 'æ¥_ä¸_äº_ä¸_å_äº_å '.split('_'), 52224 longDateFormat: { 52225 LT: 'HH:mm', 52226 LTS: 'HH:mm:ss', 52227 L: 'YYYY/MM/DD', 52228 LL: 'YYYYå¹´MæDæ¥', 52229 LLL: 'YYYYå¹´MæDæ¥ HH:mm', 52230 LLLL: 'YYYYå¹´MæDæ¥dddd HH:mm', 52231 l: 'YYYY/M/D', 52232 ll: 'YYYYå¹´MæDæ¥', 52233 lll: 'YYYYå¹´MæDæ¥ HH:mm', 52234 llll: 'YYYYå¹´MæDæ¥dddd HH:mm', 52235 }, 52236 meridiemParse: /忍|æ©ä¸|ä¸å|ä¸å|ä¸å|æä¸/, 52237 meridiemHour: function (hour, meridiem) { 52238 if (hour === 12) { 52239 hour = 0; 52240 } 52241 if (meridiem === '忍' || meridiem === 'æ©ä¸' || meridiem === 'ä¸å') { 52242 return hour; 52243 } else if (meridiem === 'ä¸å') { 52244 return hour >= 11 ? hour : hour + 12; 52245 } else if (meridiem === 'ä¸å' || meridiem === 'æä¸') { 52246 return hour + 12; 52247 } 52248 }, 52249 meridiem: function (hour, minute, isLower) { 52250 var hm = hour * 100 + minute; 52251 if (hm < 600) { 52252 return '忍'; 52253 } else if (hm < 900) { 52254 return 'æ©ä¸'; 52255 } else if (hm < 1130) { 52256 return 'ä¸å'; 52257 } else if (hm < 1230) { 52258 return 'ä¸å'; 52259 } else if (hm < 1800) { 52260 return 'ä¸å'; 52261 } else { 52262 return 'æä¸'; 52263 } 52264 }, 52265 calendar: { 52266 sameDay: '[ä»å¤©] LT', 52267 nextDay: '[æå¤©] LT', 52268 nextWeek: '[ä¸]dddd LT', 52269 lastDay: '[æ¨å¤©] LT', 52270 lastWeek: '[ä¸]dddd LT', 52271 sameElse: 'L', 52272 }, 52273 dayOfMonthOrdinalParse: /\d{1,2}(æ¥|æ|é±)/, 52274 ordinal: function (number, period) { 52275 switch (period) { 52276 case 'd': 52277 case 'D': 52278 case 'DDD': 52279 return number + 'æ¥'; 52280 case 'M': 52281 return number + 'æ'; 52282 case 'w': 52283 case 'W': 52284 return number + 'é±'; 52285 default: 52286 return number; 52287 } 52288 }, 52289 relativeTime: { 52290 future: '%så¾', 52291 past: '%så', 52292 s: 'å¹¾ç§', 52293 ss: '%d ç§', 52294 m: '1 åé', 52295 mm: '%d åé', 52296 h: '1 å°æ', 52297 hh: '%d å°æ', 52298 d: '1 天', 52299 dd: '%d 天', 52300 M: '1 åæ', 52301 MM: '%d åæ', 52302 y: '1 å¹´', 52303 yy: '%d å¹´', 52304 }, 52305 }); 52306 52307 return zhTw; 52308 52309}))); 52310 52311 52312/***/ }), 52313
vendor: 176,839 bytes, lines 52314-58012
52314/***/ "./node_modules/moment/moment.js": 52315/*!***************************************!*\ 52316 !*** ./node_modules/moment/moment.js ***! 52317 \***************************************/ 52318/*! no static exports found */ 52319/***/ (function(module, exports, __webpack_require__) { 52320 52321/* WEBPACK VAR INJECTION */(function(module) {var require;//! moment.js 52322//! version : 2.30.1 52323//! authors : Tim Wood, Iskren Chernev, Moment.js contributors 52324//! license : MIT 52325//! momentjs.com 52326 52327;(function (global, factory) { 52328 true ? module.exports = factory() : 52329 undefined 52330}(this, (function () { 'use strict'; 52331 52332 var hookCallback; 52333 52334 function hooks() { 52335 return hookCallback.apply(null, arguments); 52336 } 52337 52338 // This is done to register the method called with moment() 52339 // without creating circular dependencies. 52340 function setHookCallback(callback) { 52341 hookCallback = callback; 52342 } 52343 52344 function isArray(input) { 52345 return ( 52346 input instanceof Array || 52347 Object.prototype.toString.call(input) === '[object Array]' 52348 ); 52349 } 52350 52351 function isObject(input) { 52352 // IE8 will treat undefined and null as object if it wasn't for 52353 // input != null 52354 return ( 52355 input != null && 52356 Object.prototype.toString.call(input) === '[object Object]' 52357 ); 52358 } 52359 52360 function hasOwnProp(a, b) { 52361 return Object.prototype.hasOwnProperty.call(a, b); 52362 } 52363 52364 function isObjectEmpty(obj) { 52365 if (Object.getOwnPropertyNames) { 52366 return Object.getOwnPropertyNames(obj).length === 0; 52367 } else { 52368 var k; 52369 for (k in obj) { 52370 if (hasOwnProp(obj, k)) { 52371 return false; 52372 } 52373 } 52374 return true; 52375 } 52376 } 52377 52378 function isUndefined(input) { 52379 return input === void 0; 52380 } 52381 52382 function isNumber(input) { 52383 return ( 52384 typeof input === 'number' || 52385 Object.prototype.toString.call(input) === '[object Number]' 52386 ); 52387 } 52388 52389 function isDate(input) { 52390 return ( 52391 input instanceof Date || 52392 Object.prototype.toString.call(input) === '[object Date]' 52393 ); 52394 } 52395 52396 function map(arr, fn) { 52397 var res = [], 52398 i, 52399 arrLen = arr.length; 52400 for (i = 0; i < arrLen; ++i) { 52401 res.push(fn(arr[i], i)); 52402 } 52403 return res; 52404 } 52405 52406 function extend(a, b) { 52407 for (var i in b) { 52408 if (hasOwnProp(b, i)) { 52409 a[i] = b[i]; 52410 } 52411 } 52412 52413 if (hasOwnProp(b, 'toString')) { 52414 a.toString = b.toString; 52415 } 52416 52417 if (hasOwnProp(b, 'valueOf')) { 52418 a.valueOf = b.valueOf; 52419 } 52420 52421 return a; 52422 } 52423 52424 function createUTC(input, format, locale, strict) { 52425 return createLocalOrUTC(input, format, locale, strict, true).utc(); 52426 } 52427 52428 function defaultParsingFlags() { 52429 // We need to deep clone this object. 52430 return { 52431 empty: false, 52432 unusedTokens: [], 52433 unusedInput: [], 52434 overflow: -2, 52435 charsLeftOver: 0, 52436 nullInput: false, 52437 invalidEra: null, 52438 invalidMonth: null, 52439 invalidFormat: false, 52440 userInvalidated: false, 52441 iso: false, 52442 parsedDateParts: [], 52443 era: null, 52444 meridiem: null, 52445 rfc2822: false, 52446 weekdayMismatch: false, 52447 }; 52448 } 52449 52450 function getParsingFlags(m) { 52451 if (m._pf == null) { 52452 m._pf = defaultParsingFlags(); 52453 } 52454 return m._pf; 52455 } 52456 52457 var some; 52458 if (Array.prototype.some) { 52459 some = Array.prototype.some; 52460 } else { 52461 some = function (fun) { 52462 var t = Object(this), 52463 len = t.length >>> 0, 52464 i; 52465 52466 for (i = 0; i < len; i++) { 52467 if (i in t && fun.call(this, t[i], i, t)) { 52468 return true; 52469 } 52470 } 52471 52472 return false; 52473 }; 52474 } 52475 52476 function isValid(m) { 52477 var flags = null, 52478 parsedParts = false, 52479 isNowValid = m._d && !isNaN(m._d.getTime()); 52480 if (isNowValid) { 52481 flags = getParsingFlags(m); 52482 parsedParts = some.call(flags.parsedDateParts, function (i) { 52483 return i != null; 52484 }); 52485 isNowValid = 52486 flags.overflow < 0 && 52487 !flags.empty && 52488 !flags.invalidEra && 52489 !flags.invalidMonth && 52490 !flags.invalidWeekday && 52491 !flags.weekdayMismatch && 52492 !flags.nullInput && 52493 !flags.invalidFormat && 52494 !flags.userInvalidated && 52495 (!flags.meridiem || (flags.meridiem && parsedParts)); 52496 if (m._strict) { 52497 isNowValid = 52498 isNowValid && 52499 flags.charsLeftOver === 0 && 52500 flags.unusedTokens.length === 0 && 52501 flags.bigHour === undefined; 52502 } 52503 } 52504 if (Object.isFrozen == null || !Object.isFrozen(m)) { 52505 m._isValid = isNowValid; 52506 } else { 52507 return isNowValid; 52508 } 52509 return m._isValid; 52510 } 52511 52512 function createInvalid(flags) { 52513 var m = createUTC(NaN); 52514 if (flags != null) { 52515 extend(getParsingFlags(m), flags); 52516 } else { 52517 getParsingFlags(m).userInvalidated = true; 52518 } 52519 52520 return m; 52521 } 52522 52523 // Plugins that add properties should also add the key here (null value), 52524 // so we can properly clone ourselves. 52525 var momentProperties = (hooks.momentProperties = []), 52526 updateInProgress = false; 52527 52528 function copyConfig(to, from) { 52529 var i, 52530 prop, 52531 val, 52532 momentPropertiesLen = momentProperties.length; 52533 52534 if (!isUndefined(from._isAMomentObject)) { 52535 to._isAMomentObject = from._isAMomentObject; 52536 } 52537 if (!isUndefined(from._i)) { 52538 to._i = from._i; 52539 } 52540 if (!isUndefined(from._f)) { 52541 to._f = from._f; 52542 } 52543 if (!isUndefined(from._l)) { 52544 to._l = from._l; 52545 } 52546 if (!isUndefined(from._strict)) { 52547 to._strict = from._strict; 52548 } 52549 if (!isUndefined(from._tzm)) { 52550 to._tzm = from._tzm; 52551 } 52552 if (!isUndefined(from._isUTC)) { 52553 to._isUTC = from._isUTC; 52554 } 52555 if (!isUndefined(from._offset)) { 52556 to._offset = from._offset; 52557 } 52558 if (!isUndefined(from._pf)) { 52559 to._pf = getParsingFlags(from); 52560 } 52561 if (!isUndefined(from._locale)) { 52562 to._locale = from._locale; 52563 } 52564 52565 if (momentPropertiesLen > 0) { 52566 for (i = 0; i < momentPropertiesLen; i++) { 52567 prop = momentProperties[i]; 52568 val = from[prop]; 52569 if (!isUndefined(val)) { 52570 to[prop] = val; 52571 } 52572 } 52573 } 52574 52575 return to; 52576 } 52577 52578 // Moment prototype object 52579 function Moment(config) { 52580 copyConfig(this, config); 52581 this._d = new Date(config._d != null ? config._d.getTime() : NaN); 52582 if (!this.isValid()) { 52583 this._d = new Date(NaN); 52584 } 52585 // Prevent infinite loop in case updateOffset creates new moment 52586 // objects. 52587 if (updateInProgress === false) { 52588 updateInProgress = true; 52589 hooks.updateOffset(this); 52590 updateInProgress = false; 52591 } 52592 } 52593 52594 function isMoment(obj) { 52595 return ( 52596 obj instanceof Moment || (obj != null && obj._isAMomentObject != null) 52597 ); 52598 } 52599 52600 function warn(msg) { 52601 if ( 52602 hooks.suppressDeprecationWarnings === false && 52603 typeof console !== 'undefined' && 52604 console.warn 52605 ) { 52606 console.warn('Deprecation warning: ' + msg); 52607 } 52608 } 52609 52610 function deprecate(msg, fn) { 52611 var firstTime = true; 52612 52613 return extend(function () { 52614 if (hooks.deprecationHandler != null) { 52615 hooks.deprecationHandler(null, msg); 52616 } 52617 if (firstTime) { 52618 var args = [], 52619 arg, 52620 i, 52621 key, 52622 argLen = arguments.length; 52623 for (i = 0; i < argLen; i++) { 52624 arg = ''; 52625 if (typeof arguments[i] === 'object') { 52626 arg += '\n[' + i + '] '; 52627 for (key in arguments[0]) { 52628 if (hasOwnProp(arguments[0], key)) { 52629 arg += key + ': ' + arguments[0][key] + ', '; 52630 } 52631 } 52632 arg = arg.slice(0, -2); // Remove trailing comma and space 52633 } else { 52634 arg = arguments[i]; 52635 } 52636 args.push(arg); 52637 } 52638 warn( 52639 msg + 52640 '\nArguments: ' + 52641 Array.prototype.slice.call(args).join('') + 52642 '\n' + 52643 new Error().stack 52644 ); 52645 firstTime = false; 52646 } 52647 return fn.apply(this, arguments); 52648 }, fn); 52649 } 52650 52651 var deprecations = {}; 52652 52653 function deprecateSimple(name, msg) { 52654 if (hooks.deprecationHandler != null) { 52655 hooks.deprecationHandler(name, msg); 52656 } 52657 if (!deprecations[name]) { 52658 warn(msg); 52659 deprecations[name] = true; 52660 } 52661 } 52662 52663 hooks.suppressDeprecationWarnings = false; 52664 hooks.deprecationHandler = null; 52665 52666 function isFunction(input) { 52667 return ( 52668 (typeof Function !== 'undefined' && input instanceof Function) || 52669 Object.prototype.toString.call(input) === '[object Function]' 52670 ); 52671 } 52672 52673 function set(config) { 52674 var prop, i; 52675 for (i in config) { 52676 if (hasOwnProp(config, i)) { 52677 prop = config[i]; 52678 if (isFunction(prop)) { 52679 this[i] = prop; 52680 } else { 52681 this['_' + i] = prop; 52682 } 52683 } 52684 } 52685 this._config = config; 52686 // Lenient ordinal parsing accepts just a number in addition to 52687 // number + (possibly) stuff coming from _dayOfMonthOrdinalParse. 52688 // TODO: Remove "ordinalParse" fallback in next major release. 52689 this._dayOfMonthOrdinalParseLenient = new RegExp( 52690 (this._dayOfMonthOrdinalParse.source || this._ordinalParse.source) + 52691 '|' + 52692 /\d{1,2}/.source 52693 ); 52694 } 52695 52696 function mergeConfigs(parentConfig, childConfig) { 52697 var res = extend({}, parentConfig), 52698 prop; 52699 for (prop in childConfig) { 52700 if (hasOwnProp(childConfig, prop)) { 52701 if (isObject(parentConfig[prop]) && isObject(childConfig[prop])) { 52702 res[prop] = {}; 52703 extend(res[prop], parentConfig[prop]); 52704 extend(res[prop], childConfig[prop]); 52705 } else if (childConfig[prop] != null) { 52706 res[prop] = childConfig[prop]; 52707 } else { 52708 delete res[prop]; 52709 } 52710 } 52711 } 52712 for (prop in parentConfig) { 52713 if ( 52714 hasOwnProp(parentConfig, prop) && 52715 !hasOwnProp(childConfig, prop) && 52716 isObject(parentConfig[prop]) 52717 ) { 52718 // make sure changes to properties don't modify parent config 52719 res[prop] = extend({}, res[prop]); 52720 } 52721 } 52722 return res; 52723 } 52724 52725 function Locale(config) { 52726 if (config != null) { 52727 this.set(config); 52728 } 52729 } 52730 52731 var keys; 52732 52733 if (Object.keys) { 52734 keys = Object.keys; 52735 } else { 52736 keys = function (obj) { 52737 var i, 52738 res = []; 52739 for (i in obj) { 52740 if (hasOwnProp(obj, i)) { 52741 res.push(i); 52742 } 52743 } 52744 return res; 52745 }; 52746 } 52747 52748 var defaultCalendar = { 52749 sameDay: '[Today at] LT', 52750 nextDay: '[Tomorrow at] LT', 52751 nextWeek: 'dddd [at] LT', 52752 lastDay: '[Yesterday at] LT', 52753 lastWeek: '[Last] dddd [at] LT', 52754 sameElse: 'L', 52755 }; 52756 52757 function calendar(key, mom, now) { 52758 var output = this._calendar[key] || this._calendar['sameElse']; 52759 return isFunction(output) ? output.call(mom, now) : output; 52760 } 52761 52762 function zeroFill(number, targetLength, forceSign) { 52763 var absNumber = '' + Math.abs(number), 52764 zerosToFill = targetLength - absNumber.length, 52765 sign = number >= 0; 52766 return ( 52767 (sign ? (forceSign ? '+' : '') : '-') + 52768 Math.pow(10, Math.max(0, zerosToFill)).toString().substr(1) + 52769 absNumber 52770 ); 52771 } 52772 52773 var formattingTokens = 52774 /(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|N{1,5}|YYYYYY|YYYYY|YYYY|YY|y{2,4}|yo?|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g, 52775 localFormattingTokens = /(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g, 52776 formatFunctions = {}, 52777 formatTokenFunctions = {}; 52778 52779 // token: 'M' 52780 // padded: ['MM', 2] 52781 // ordinal: 'Mo' 52782 // callback: function () { this.month() + 1 } 52783 function addFormatToken(token, padded, ordinal, callback) { 52784 var func = callback; 52785 if (typeof callback === 'string') { 52786 func = function () { 52787 return this[callback](); 52788 }; 52789 } 52790 if (token) { 52791 formatTokenFunctions[token] = func; 52792 } 52793 if (padded) { 52794 formatTokenFunctions[padded[0]] = function () { 52795 return zeroFill(func.apply(this, arguments), padded[1], padded[2]); 52796 }; 52797 } 52798 if (ordinal) { 52799 formatTokenFunctions[ordinal] = function () { 52800 return this.localeData().ordinal( 52801 func.apply(this, arguments), 52802 token 52803 ); 52804 }; 52805 } 52806 } 52807 52808 function removeFormattingTokens(input) { 52809 if (input.match(/\[[\s\S]/)) { 52810 return input.replace(/^\[|\]$/g, ''); 52811 } 52812 return input.replace(/\\/g, ''); 52813 } 52814 52815 function makeFormatFunction(format) { 52816 var array = format.match(formattingTokens), 52817 i, 52818 length; 52819 52820 for (i = 0, length = array.length; i < length; i++) { 52821 if (formatTokenFunctions[array[i]]) { 52822 array[i] = formatTokenFunctions[array[i]]; 52823 } else { 52824 array[i] = removeFormattingTokens(array[i]); 52825 } 52826 } 52827 52828 return function (mom) { 52829 var output = '', 52830 i; 52831 for (i = 0; i < length; i++) { 52832 output += isFunction(array[i]) 52833 ? array[i].call(mom, format) 52834 : array[i]; 52835 } 52836 return output; 52837 }; 52838 } 52839 52840 // format date using native date object 52841 function formatMoment(m, format) { 52842 if (!m.isValid()) { 52843 return m.localeData().invalidDate(); 52844 } 52845 52846 format = expandFormat(format, m.localeData()); 52847 formatFunctions[format] = 52848 formatFunctions[format] || makeFormatFunction(format); 52849 52850 return formatFunctions[format](m); 52851 } 52852 52853 function expandFormat(format, locale) { 52854 var i = 5; 52855 52856 function replaceLongDateFormatTokens(input) { 52857 return locale.longDateFormat(input) || input; 52858 } 52859 52860 localFormattingTokens.lastIndex = 0; 52861 while (i >= 0 && localFormattingTokens.test(format)) { 52862 format = format.replace( 52863 localFormattingTokens, 52864 replaceLongDateFormatTokens 52865 ); 52866 localFormattingTokens.lastIndex = 0; 52867 i -= 1; 52868 } 52869 52870 return format; 52871 } 52872 52873 var defaultLongDateFormat = { 52874 LTS: 'h:mm:ss A', 52875 LT: 'h:mm A', 52876 L: 'MM/DD/YYYY', 52877 LL: 'MMMM D, YYYY', 52878 LLL: 'MMMM D, YYYY h:mm A', 52879 LLLL: 'dddd, MMMM D, YYYY h:mm A', 52880 }; 52881 52882 function longDateFormat(key) { 52883 var format = this._longDateFormat[key], 52884 formatUpper = this._longDateFormat[key.toUpperCase()]; 52885 52886 if (format || !formatUpper) { 52887 return format; 52888 } 52889 52890 this._longDateFormat[key] = formatUpper 52891 .match(formattingTokens) 52892 .map(function (tok) { 52893 if ( 52894 tok === 'MMMM' || 52895 tok === 'MM' || 52896 tok === 'DD' || 52897 tok === 'dddd' 52898 ) { 52899 return tok.slice(1); 52900 } 52901 return tok; 52902 }) 52903 .join(''); 52904 52905 return this._longDateFormat[key]; 52906 } 52907 52908 var defaultInvalidDate = 'Invalid date'; 52909 52910 function invalidDate() { 52911 return this._invalidDate; 52912 } 52913 52914 var defaultOrdinal = '%d', 52915 defaultDayOfMonthOrdinalParse = /\d{1,2}/; 52916 52917 function ordinal(number) { 52918 return this._ordinal.replace('%d', number); 52919 } 52920 52921 var defaultRelativeTime = { 52922 future: 'in %s', 52923 past: '%s ago', 52924 s: 'a few seconds', 52925 ss: '%d seconds', 52926 m: 'a minute', 52927 mm: '%d minutes', 52928 h: 'an hour', 52929 hh: '%d hours', 52930 d: 'a day', 52931 dd: '%d days', 52932 w: 'a week', 52933 ww: '%d weeks', 52934 M: 'a month', 52935 MM: '%d months', 52936 y: 'a year', 52937 yy: '%d years', 52938 }; 52939 52940 function relativeTime(number, withoutSuffix, string, isFuture) { 52941 var output = this._relativeTime[string]; 52942 return isFunction(output) 52943 ? output(number, withoutSuffix, string, isFuture) 52944 : output.replace(/%d/i, number); 52945 } 52946 52947 function pastFuture(diff, output) { 52948 var format = this._relativeTime[diff > 0 ? 'future' : 'past']; 52949 return isFunction(format) ? format(output) : format.replace(/%s/i, output); 52950 } 52951 52952 var aliases = { 52953 D: 'date', 52954 dates: 'date', 52955 date: 'date', 52956 d: 'day', 52957 days: 'day', 52958 day: 'day', 52959 e: 'weekday', 52960 weekdays: 'weekday', 52961 weekday: 'weekday', 52962 E: 'isoWeekday', 52963 isoweekdays: 'isoWeekday', 52964 isoweekday: 'isoWeekday', 52965 DDD: 'dayOfYear', 52966 dayofyears: 'dayOfYear', 52967 dayofyear: 'dayOfYear', 52968 h: 'hour', 52969 hours: 'hour', 52970 hour: 'hour', 52971 ms: 'millisecond', 52972 milliseconds: 'millisecond', 52973 millisecond: 'millisecond', 52974 m: 'minute', 52975 minutes: 'minute', 52976 minute: 'minute', 52977 M: 'month', 52978 months: 'month', 52979 month: 'month', 52980 Q: 'quarter', 52981 quarters: 'quarter', 52982 quarter: 'quarter', 52983 s: 'second', 52984 seconds: 'second', 52985 second: 'second', 52986 gg: 'weekYear', 52987 weekyears: 'weekYear', 52988 weekyear: 'weekYear', 52989 GG: 'isoWeekYear', 52990 isoweekyears: 'isoWeekYear', 52991 isoweekyear: 'isoWeekYear', 52992 w: 'week', 52993 weeks: 'week', 52994 week: 'week', 52995 W: 'isoWeek', 52996 isoweeks: 'isoWeek', 52997 isoweek: 'isoWeek', 52998 y: 'year', 52999 years: 'year', 53000 year: 'year', 53001 }; 53002 53003 function normalizeUnits(units) { 53004 return typeof units === 'string' 53005 ? aliases[units] || aliases[units.toLowerCase()] 53006 : undefined; 53007 } 53008 53009 function normalizeObjectUnits(inputObject) { 53010 var normalizedInput = {}, 53011 normalizedProp, 53012 prop; 53013 53014 for (prop in inputObject) { 53015 if (hasOwnProp(inputObject, prop)) { 53016 normalizedProp = normalizeUnits(prop); 53017 if (normalizedProp) { 53018 normalizedInput[normalizedProp] = inputObject[prop]; 53019 } 53020 } 53021 } 53022 53023 return normalizedInput; 53024 } 53025 53026 var priorities = { 53027 date: 9, 53028 day: 11, 53029 weekday: 11, 53030 isoWeekday: 11, 53031 dayOfYear: 4, 53032 hour: 13, 53033 millisecond: 16, 53034 minute: 14, 53035 month: 8, 53036 quarter: 7, 53037 second: 15, 53038 weekYear: 1, 53039 isoWeekYear: 1, 53040 week: 5, 53041 isoWeek: 5, 53042 year: 1, 53043 }; 53044 53045 function getPrioritizedUnits(unitsObj) { 53046 var units = [], 53047 u; 53048 for (u in unitsObj) { 53049 if (hasOwnProp(unitsObj, u)) { 53050 units.push({ unit: u, priority: priorities[u] }); 53051 } 53052 } 53053 units.sort(function (a, b) { 53054 return a.priority - b.priority; 53055 }); 53056 return units; 53057 } 53058 53059 var match1 = /\d/, // 0 - 9 53060 match2 = /\d\d/, // 00 - 99 53061 match3 = /\d{3}/, // 000 - 999 53062 match4 = /\d{4}/, // 0000 - 9999 53063 match6 = /[+-]?\d{6}/, // -999999 - 999999 53064 match1to2 = /\d\d?/, // 0 - 99 53065 match3to4 = /\d\d\d\d?/, // 999 - 9999 53066 match5to6 = /\d\d\d\d\d\d?/, // 99999 - 999999 53067 match1to3 = /\d{1,3}/, // 0 - 999 53068 match1to4 = /\d{1,4}/, // 0 - 9999 53069 match1to6 = /[+-]?\d{1,6}/, // -999999 - 999999 53070 matchUnsigned = /\d+/, // 0 - inf 53071 matchSigned = /[+-]?\d+/, // -inf - inf 53072 matchOffset = /Z|[+-]\d\d:?\d\d/gi, // +00:00 -00:00 +0000 -0000 or Z 53073 matchShortOffset = /Z|[+-]\d\d(?::?\d\d)?/gi, // +00 -00 +00:00 -00:00 +0000 -0000 or Z 53074 matchTimestamp = /[+-]?\d+(\.\d{1,3})?/, // 123456789 123456789.123 53075 // any word (or two) characters or numbers including two/three word month in arabic. 53076 // includes scottish gaelic two word and hyphenated months 53077 matchWord = 53078 /[0-9]{0,256}['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFF07\uFF10-\uFFEF]{1,256}|[\u0600-\u06FF\/]{1,256}(\s*?[\u0600-\u06FF]{1,256}){1,2}/i, 53079 match1to2NoLeadingZero = /^[1-9]\d?/, // 1-99 53080 match1to2HasZero = /^([1-9]\d|\d)/, // 0-99 53081 regexes; 53082 53083 regexes = {}; 53084 53085 function addRegexToken(token, regex, strictRegex) { 53086 regexes[token] = isFunction(regex) 53087 ? regex 53088 : function (isStrict, localeData) { 53089 return isStrict && strictRegex ? strictRegex : regex; 53090 }; 53091 } 53092 53093 function getParseRegexForToken(token, config) { 53094 if (!hasOwnProp(regexes, token)) { 53095 return new RegExp(unescapeFormat(token)); 53096 } 53097 53098 return regexes[token](config._strict, config._locale); 53099 } 53100 53101 // Code from http://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript 53102 function unescapeFormat(s) { 53103 return regexEscape( 53104 s 53105 .replace('\\', '') 53106 .replace( 53107 /\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g, 53108 function (matched, p1, p2, p3, p4) { 53109 return p1 || p2 || p3 || p4; 53110 } 53111 ) 53112 ); 53113 } 53114 53115 function regexEscape(s) { 53116 return s.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&'); 53117 } 53118 53119 function absFloor(number) { 53120 if (number < 0) { 53121 // -0 -> 0 53122 return Math.ceil(number) || 0; 53123 } else { 53124 return Math.floor(number); 53125 } 53126 } 53127 53128 function toInt(argumentForCoercion) { 53129 var coercedNumber = +argumentForCoercion, 53130 value = 0; 53131 53132 if (coercedNumber !== 0 && isFinite(coercedNumber)) { 53133 value = absFloor(coercedNumber); 53134 } 53135 53136 return value; 53137 } 53138 53139 var tokens = {}; 53140 53141 function addParseToken(token, callback) { 53142 var i, 53143 func = callback, 53144 tokenLen; 53145 if (typeof token === 'string') { 53146 token = [token]; 53147 } 53148 if (isNumber(callback)) { 53149 func = function (input, array) { 53150 array[callback] = toInt(input); 53151 }; 53152 } 53153 tokenLen = token.length; 53154 for (i = 0; i < tokenLen; i++) { 53155 tokens[token[i]] = func; 53156 } 53157 } 53158 53159 function addWeekParseToken(token, callback) { 53160 addParseToken(token, function (input, array, config, token) { 53161 config._w = config._w || {}; 53162 callback(input, config._w, config, token); 53163 }); 53164 } 53165 53166 function addTimeToArrayFromToken(token, input, config) { 53167 if (input != null && hasOwnProp(tokens, token)) { 53168 tokens[token](input, config._a, config, token); 53169 } 53170 } 53171 53172 function isLeapYear(year) { 53173 return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0; 53174 } 53175 53176 var YEAR = 0, 53177 MONTH = 1, 53178 DATE = 2, 53179 HOUR = 3, 53180 MINUTE = 4, 53181 SECOND = 5, 53182 MILLISECOND = 6, 53183 WEEK = 7, 53184 WEEKDAY = 8; 53185 53186 // FORMATTING 53187 53188 addFormatToken('Y', 0, 0, function () { 53189 var y = this.year(); 53190 return y <= 9999 ? zeroFill(y, 4) : '+' + y; 53191 }); 53192 53193 addFormatToken(0, ['YY', 2], 0, function () { 53194 return this.year() % 100; 53195 }); 53196 53197 addFormatToken(0, ['YYYY', 4], 0, 'year'); 53198 addFormatToken(0, ['YYYYY', 5], 0, 'year'); 53199 addFormatToken(0, ['YYYYYY', 6, true], 0, 'year'); 53200 53201 // PARSING 53202 53203 addRegexToken('Y', matchSigned); 53204 addRegexToken('YY', match1to2, match2); 53205 addRegexToken('YYYY', match1to4, match4); 53206 addRegexToken('YYYYY', match1to6, match6); 53207 addRegexToken('YYYYYY', match1to6, match6); 53208 53209 addParseToken(['YYYYY', 'YYYYYY'], YEAR); 53210 addParseToken('YYYY', function (input, array) { 53211 array[YEAR] = 53212 input.length === 2 ? hooks.parseTwoDigitYear(input) : toInt(input); 53213 }); 53214 addParseToken('YY', function (input, array) { 53215 array[YEAR] = hooks.parseTwoDigitYear(input); 53216 }); 53217 addParseToken('Y', function (input, array) { 53218 array[YEAR] = parseInt(input, 10); 53219 }); 53220 53221 // HELPERS 53222 53223 function daysInYear(year) { 53224 return isLeapYear(year) ? 366 : 365; 53225 } 53226 53227 // HOOKS 53228 53229 hooks.parseTwoDigitYear = function (input) { 53230 return toInt(input) + (toInt(input) > 68 ? 1900 : 2000); 53231 }; 53232 53233 // MOMENTS 53234 53235 var getSetYear = makeGetSet('FullYear', true); 53236 53237 function getIsLeapYear() { 53238 return isLeapYear(this.year()); 53239 } 53240 53241 function makeGetSet(unit, keepTime) { 53242 return function (value) { 53243 if (value != null) { 53244 set$1(this, unit, value); 53245 hooks.updateOffset(this, keepTime); 53246 return this; 53247 } else { 53248 return get(this, unit); 53249 } 53250 }; 53251 } 53252 53253 function get(mom, unit) { 53254 if (!mom.isValid()) { 53255 return NaN; 53256 } 53257 53258 var d = mom._d, 53259 isUTC = mom._isUTC; 53260 53261 switch (unit) { 53262 case 'Milliseconds': 53263 return isUTC ? d.getUTCMilliseconds() : d.getMilliseconds(); 53264 case 'Seconds': 53265 return isUTC ? d.getUTCSeconds() : d.getSeconds(); 53266 case 'Minutes': 53267 return isUTC ? d.getUTCMinutes() : d.getMinutes(); 53268 case 'Hours': 53269 return isUTC ? d.getUTCHours() : d.getHours(); 53270 case 'Date': 53271 return isUTC ? d.getUTCDate() : d.getDate(); 53272 case 'Day': 53273 return isUTC ? d.getUTCDay() : d.getDay(); 53274 case 'Month': 53275 return isUTC ? d.getUTCMonth() : d.getMonth(); 53276 case 'FullYear': 53277 return isUTC ? d.getUTCFullYear() : d.getFullYear(); 53278 default: 53279 return NaN; // Just in case 53280 } 53281 } 53282 53283 function set$1(mom, unit, value) { 53284 var d, isUTC, year, month, date; 53285 53286 if (!mom.isValid() || isNaN(value)) { 53287 return; 53288 } 53289 53290 d = mom._d; 53291 isUTC = mom._isUTC; 53292 53293 switch (unit) { 53294 case 'Milliseconds': 53295 return void (isUTC 53296 ? d.setUTCMilliseconds(value) 53297 : d.setMilliseconds(value)); 53298 case 'Seconds': 53299 return void (isUTC ? d.setUTCSeconds(value) : d.setSeconds(value)); 53300 case 'Minutes': 53301 return void (isUTC ? d.setUTCMinutes(value) : d.setMinutes(value)); 53302 case 'Hours': 53303 return void (isUTC ? d.setUTCHours(value) : d.setHours(value)); 53304 case 'Date': 53305 return void (isUTC ? d.setUTCDate(value) : d.setDate(value)); 53306 // case 'Day': // Not real 53307 // return void (isUTC ? d.setUTCDay(value) : d.setDay(value)); 53308 // case 'Month': // Not used because we need to pass two variables 53309 // return void (isUTC ? d.setUTCMonth(value) : d.setMonth(value)); 53310 case 'FullYear': 53311 break; // See below ... 53312 default: 53313 return; // Just in case 53314 } 53315 53316 year = value; 53317 month = mom.month(); 53318 date = mom.date(); 53319 date = date === 29 && month === 1 && !isLeapYear(year) ? 28 : date; 53320 void (isUTC 53321 ? d.setUTCFullYear(year, month, date) 53322 : d.setFullYear(year, month, date)); 53323 } 53324 53325 // MOMENTS 53326 53327 function stringGet(units) { 53328 units = normalizeUnits(units); 53329 if (isFunction(this[units])) { 53330 return this[units](); 53331 } 53332 return this; 53333 } 53334 53335 function stringSet(units, value) { 53336 if (typeof units === 'object') { 53337 units = normalizeObjectUnits(units); 53338 var prioritized = getPrioritizedUnits(units), 53339 i, 53340 prioritizedLen = prioritized.length; 53341 for (i = 0; i < prioritizedLen; i++) { 53342 this[prioritized[i].unit](units[prioritized[i].unit]); 53343 } 53344 } else { 53345 units = normalizeUnits(units); 53346 if (isFunction(this[units])) { 53347 return this[units](value); 53348 } 53349 } 53350 return this; 53351 } 53352 53353 function mod(n, x) { 53354 return ((n % x) + x) % x; 53355 } 53356 53357 var indexOf; 53358 53359 if (Array.prototype.indexOf) { 53360 indexOf = Array.prototype.indexOf; 53361 } else { 53362 indexOf = function (o) { 53363 // I know 53364 var i; 53365 for (i = 0; i < this.length; ++i) { 53366 if (this[i] === o) { 53367 return i; 53368 } 53369 } 53370 return -1; 53371 }; 53372 } 53373 53374 function daysInMonth(year, month) { 53375 if (isNaN(year) || isNaN(month)) { 53376 return NaN; 53377 } 53378 var modMonth = mod(month, 12); 53379 year += (month - modMonth) / 12; 53380 return modMonth === 1 53381 ? isLeapYear(year) 53382 ? 29 53383 : 28 53384 : 31 - ((modMonth % 7) % 2); 53385 } 53386 53387 // FORMATTING 53388 53389 addFormatToken('M', ['MM', 2], 'Mo', function () { 53390 return this.month() + 1; 53391 }); 53392 53393 addFormatToken('MMM', 0, 0, function (format) { 53394 return this.localeData().monthsShort(this, format); 53395 }); 53396 53397 addFormatToken('MMMM', 0, 0, function (format) { 53398 return this.localeData().months(this, format); 53399 }); 53400 53401 // PARSING 53402 53403 addRegexToken('M', match1to2, match1to2NoLeadingZero); 53404 addRegexToken('MM', match1to2, match2); 53405 addRegexToken('MMM', function (isStrict, locale) { 53406 return locale.monthsShortRegex(isStrict); 53407 }); 53408 addRegexToken('MMMM', function (isStrict, locale) { 53409 return locale.monthsRegex(isStrict); 53410 }); 53411 53412 addParseToken(['M', 'MM'], function (input, array) { 53413 array[MONTH] = toInt(input) - 1; 53414 }); 53415 53416 addParseToken(['MMM', 'MMMM'], function (input, array, config, token) { 53417 var month = config._locale.monthsParse(input, token, config._strict); 53418 // if we didn't find a month name, mark the date as invalid. 53419 if (month != null) { 53420 array[MONTH] = month; 53421 } else { 53422 getParsingFlags(config).invalidMonth = input; 53423 } 53424 }); 53425 53426 // LOCALES 53427 53428 var defaultLocaleMonths = 53429 'January_February_March_April_May_June_July_August_September_October_November_December'.split( 53430 '_' 53431 ), 53432 defaultLocaleMonthsShort = 53433 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'), 53434 MONTHS_IN_FORMAT = /D[oD]?(\[[^\[\]]*\]|\s)+MMMM?/, 53435 defaultMonthsShortRegex = matchWord, 53436 defaultMonthsRegex = matchWord; 53437 53438 function localeMonths(m, format) { 53439 if (!m) { 53440 return isArray(this._months) 53441 ? this._months 53442 : this._months['standalone']; 53443 } 53444 return isArray(this._months) 53445 ? this._months[m.month()] 53446 : this._months[ 53447 (this._months.isFormat || MONTHS_IN_FORMAT).test(format) 53448 ? 'format' 53449 : 'standalone' 53450 ][m.month()]; 53451 } 53452 53453 function localeMonthsShort(m, format) { 53454 if (!m) { 53455 return isArray(this._monthsShort) 53456 ? this._monthsShort 53457 : this._monthsShort['standalone']; 53458 } 53459 return isArray(this._monthsShort) 53460 ? this._monthsShort[m.month()] 53461 : this._monthsShort[ 53462 MONTHS_IN_FORMAT.test(format) ? 'format' : 'standalone' 53463 ][m.month()]; 53464 } 53465 53466 function handleStrictParse(monthName, format, strict) { 53467 var i, 53468 ii, 53469 mom, 53470 llc = monthName.toLocaleLowerCase(); 53471 if (!this._monthsParse) { 53472 // this is not used 53473 this._monthsParse = []; 53474 this._longMonthsParse = []; 53475 this._shortMonthsParse = []; 53476 for (i = 0; i < 12; ++i) { 53477 mom = createUTC([2000, i]); 53478 this._shortMonthsParse[i] = this.monthsShort( 53479 mom, 53480 '' 53481 ).toLocaleLowerCase(); 53482 this._longMonthsParse[i] = this.months(mom, '').toLocaleLowerCase(); 53483 } 53484 } 53485 53486 if (strict) { 53487 if (format === 'MMM') { 53488 ii = indexOf.call(this._shortMonthsParse, llc); 53489 return ii !== -1 ? ii : null; 53490 } else { 53491 ii = indexOf.call(this._longMonthsParse, llc); 53492 return ii !== -1 ? ii : null; 53493 } 53494 } else { 53495 if (format === 'MMM') { 53496 ii = indexOf.call(this._shortMonthsParse, llc); 53497 if (ii !== -1) { 53498 return ii; 53499 } 53500 ii = indexOf.call(this._longMonthsParse, llc); 53501 return ii !== -1 ? ii : null; 53502 } else { 53503 ii = indexOf.call(this._longMonthsParse, llc); 53504 if (ii !== -1) { 53505 return ii; 53506 } 53507 ii = indexOf.call(this._shortMonthsParse, llc); 53508 return ii !== -1 ? ii : null; 53509 } 53510 } 53511 } 53512 53513 function localeMonthsParse(monthName, format, strict) { 53514 var i, mom, regex; 53515 53516 if (this._monthsParseExact) { 53517 return handleStrictParse.call(this, monthName, format, strict); 53518 } 53519 53520 if (!this._monthsParse) { 53521 this._monthsParse = []; 53522 this._longMonthsParse = []; 53523 this._shortMonthsParse = []; 53524 } 53525 53526 // TODO: add sorting 53527 // Sorting makes sure if one month (or abbr) is a prefix of another 53528 // see sorting in computeMonthsParse 53529 for (i = 0; i < 12; i++) { 53530 // make the regex if we don't have it already 53531 mom = createUTC([2000, i]); 53532 if (strict && !this._longMonthsParse[i]) { 53533 this._longMonthsParse[i] = new RegExp( 53534 '^' + this.months(mom, '').replace('.', '') + '$', 53535 'i' 53536 ); 53537 this._shortMonthsParse[i] = new RegExp( 53538 '^' + this.monthsShort(mom, '').replace('.', '') + '$', 53539 'i' 53540 ); 53541 } 53542 if (!strict && !this._monthsParse[i]) { 53543 regex = 53544 '^' + this.months(mom, '') + '|^' + this.monthsShort(mom, ''); 53545 this._monthsParse[i] = new RegExp(regex.replace('.', ''), 'i'); 53546 } 53547 // test the regex 53548 if ( 53549 strict && 53550 format === 'MMMM' && 53551 this._longMonthsParse[i].test(monthName) 53552 ) { 53553 return i; 53554 } else if ( 53555 strict && 53556 format === 'MMM' && 53557 this._shortMonthsParse[i].test(monthName) 53558 ) { 53559 return i; 53560 } else if (!strict && this._monthsParse[i].test(monthName)) { 53561 return i; 53562 } 53563 } 53564 } 53565 53566 // MOMENTS 53567 53568 function setMonth(mom, value) { 53569 if (!mom.isValid()) { 53570 // No op 53571 return mom; 53572 } 53573 53574 if (typeof value === 'string') { 53575 if (/^\d+$/.test(value)) { 53576 value = toInt(value); 53577 } else { 53578 value = mom.localeData().monthsParse(value); 53579 // TODO: Another silent failure? 53580 if (!isNumber(value)) { 53581 return mom; 53582 } 53583 } 53584 } 53585 53586 var month = value, 53587 date = mom.date(); 53588 53589 date = date < 29 ? date : Math.min(date, daysInMonth(mom.year(), month)); 53590 void (mom._isUTC 53591 ? mom._d.setUTCMonth(month, date) 53592 : mom._d.setMonth(month, date)); 53593 return mom; 53594 } 53595 53596 function getSetMonth(value) { 53597 if (value != null) { 53598 setMonth(this, value); 53599 hooks.updateOffset(this, true); 53600 return this; 53601 } else { 53602 return get(this, 'Month'); 53603 } 53604 } 53605 53606 function getDaysInMonth() { 53607 return daysInMonth(this.year(), this.month()); 53608 } 53609 53610 function monthsShortRegex(isStrict) { 53611 if (this._monthsParseExact) { 53612 if (!hasOwnProp(this, '_monthsRegex')) { 53613 computeMonthsParse.call(this); 53614 } 53615 if (isStrict) { 53616 return this._monthsShortStrictRegex; 53617 } else { 53618 return this._monthsShortRegex; 53619 } 53620 } else { 53621 if (!hasOwnProp(this, '_monthsShortRegex')) { 53622 this._monthsShortRegex = defaultMonthsShortRegex; 53623 } 53624 return this._monthsShortStrictRegex && isStrict 53625 ? this._monthsShortStrictRegex 53626 : this._monthsShortRegex; 53627 } 53628 } 53629 53630 function monthsRegex(isStrict) { 53631 if (this._monthsParseExact) { 53632 if (!hasOwnProp(this, '_monthsRegex')) { 53633 computeMonthsParse.call(this); 53634 } 53635 if (isStrict) { 53636 return this._monthsStrictRegex; 53637 } else { 53638 return this._monthsRegex; 53639 } 53640 } else { 53641 if (!hasOwnProp(this, '_monthsRegex')) { 53642 this._monthsRegex = defaultMonthsRegex; 53643 } 53644 return this._monthsStrictRegex && isStrict 53645 ? this._monthsStrictRegex 53646 : this._monthsRegex; 53647 } 53648 } 53649 53650 function computeMonthsParse() { 53651 function cmpLenRev(a, b) { 53652 return b.length - a.length; 53653 } 53654 53655 var shortPieces = [], 53656 longPieces = [], 53657 mixedPieces = [], 53658 i, 53659 mom, 53660 shortP, 53661 longP; 53662 for (i = 0; i < 12; i++) { 53663 // make the regex if we don't have it already 53664 mom = createUTC([2000, i]); 53665 shortP = regexEscape(this.monthsShort(mom, '')); 53666 longP = regexEscape(this.months(mom, '')); 53667 shortPieces.push(shortP); 53668 longPieces.push(longP); 53669 mixedPieces.push(longP); 53670 mixedPieces.push(shortP); 53671 } 53672 // Sorting makes sure if one month (or abbr) is a prefix of another it 53673 // will match the longer piece. 53674 shortPieces.sort(cmpLenRev); 53675 longPieces.sort(cmpLenRev); 53676 mixedPieces.sort(cmpLenRev); 53677 53678 this._monthsRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i'); 53679 this._monthsShortRegex = this._monthsRegex; 53680 this._monthsStrictRegex = new RegExp( 53681 '^(' + longPieces.join('|') + ')', 53682 'i' 53683 ); 53684 this._monthsShortStrictRegex = new RegExp( 53685 '^(' + shortPieces.join('|') + ')', 53686 'i' 53687 ); 53688 } 53689 53690 function createDate(y, m, d, h, M, s, ms) { 53691 // can't just apply() to create a date: 53692 // https://stackoverflow.com/q/181348 53693 var date; 53694 // the date constructor remaps years 0-99 to 1900-1999 53695 if (y < 100 && y >= 0) { 53696 // preserve leap years using a full 400 year cycle, then reset 53697 date = new Date(y + 400, m, d, h, M, s, ms); 53698 if (isFinite(date.getFullYear())) { 53699 date.setFullYear(y); 53700 } 53701 } else { 53702 date = new Date(y, m, d, h, M, s, ms); 53703 } 53704 53705 return date; 53706 } 53707 53708 function createUTCDate(y) { 53709 var date, args; 53710 // the Date.UTC function remaps years 0-99 to 1900-1999 53711 if (y < 100 && y >= 0) { 53712 args = Array.prototype.slice.call(arguments); 53713 // preserve leap years using a full 400 year cycle, then reset 53714 args[0] = y + 400; 53715 date = new Date(Date.UTC.apply(null, args)); 53716 if (isFinite(date.getUTCFullYear())) { 53717 date.setUTCFullYear(y); 53718 } 53719 } else { 53720 date = new Date(Date.UTC.apply(null, arguments)); 53721 } 53722 53723 return date; 53724 } 53725 53726 // start-of-first-week - start-of-year 53727 function firstWeekOffset(year, dow, doy) { 53728 var // first-week day -- which january is always in the first week (4 for iso, 1 for other) 53729 fwd = 7 + dow - doy, 53730 // first-week day local weekday -- which local weekday is fwd 53731 fwdlw = (7 + createUTCDate(year, 0, fwd).getUTCDay() - dow) % 7; 53732 53733 return -fwdlw + fwd - 1; 53734 } 53735 53736 // https://en.wikipedia.org/wiki/ISO_week_date#Calculating_a_date_given_the_year.2C_week_number_and_weekday 53737 function dayOfYearFromWeeks(year, week, weekday, dow, doy) { 53738 var localWeekday = (7 + weekday - dow) % 7, 53739 weekOffset = firstWeekOffset(year, dow, doy), 53740 dayOfYear = 1 + 7 * (week - 1) + localWeekday + weekOffset, 53741 resYear, 53742 resDayOfYear; 53743 53744 if (dayOfYear <= 0) { 53745 resYear = year - 1; 53746 resDayOfYear = daysInYear(resYear) + dayOfYear; 53747 } else if (dayOfYear > daysInYear(year)) { 53748 resYear = year + 1; 53749 resDayOfYear = dayOfYear - daysInYear(year); 53750 } else { 53751 resYear = year; 53752 resDayOfYear = dayOfYear; 53753 } 53754 53755 return { 53756 year: resYear, 53757 dayOfYear: resDayOfYear, 53758 }; 53759 } 53760 53761 function weekOfYear(mom, dow, doy) { 53762 var weekOffset = firstWeekOffset(mom.year(), dow, doy), 53763 week = Math.floor((mom.dayOfYear() - weekOffset - 1) / 7) + 1, 53764 resWeek, 53765 resYear; 53766 53767 if (week < 1) { 53768 resYear = mom.year() - 1; 53769 resWeek = week + weeksInYear(resYear, dow, doy); 53770 } else if (week > weeksInYear(mom.year(), dow, doy)) { 53771 resWeek = week - weeksInYear(mom.year(), dow, doy); 53772 resYear = mom.year() + 1; 53773 } else { 53774 resYear = mom.year(); 53775 resWeek = week; 53776 } 53777 53778 return { 53779 week: resWeek, 53780 year: resYear, 53781 }; 53782 } 53783 53784 function weeksInYear(year, dow, doy) { 53785 var weekOffset = firstWeekOffset(year, dow, doy), 53786 weekOffsetNext = firstWeekOffset(year + 1, dow, doy); 53787 return (daysInYear(year) - weekOffset + weekOffsetNext) / 7; 53788 } 53789 53790 // FORMATTING 53791 53792 addFormatToken('w', ['ww', 2], 'wo', 'week'); 53793 addFormatToken('W', ['WW', 2], 'Wo', 'isoWeek'); 53794 53795 // PARSING 53796 53797 addRegexToken('w', match1to2, match1to2NoLeadingZero); 53798 addRegexToken('ww', match1to2, match2); 53799 addRegexToken('W', match1to2, match1to2NoLeadingZero); 53800 addRegexToken('WW', match1to2, match2); 53801 53802 addWeekParseToken( 53803 ['w', 'ww', 'W', 'WW'], 53804 function (input, week, config, token) { 53805 week[token.substr(0, 1)] = toInt(input); 53806 } 53807 ); 53808 53809 // HELPERS 53810 53811 // LOCALES 53812 53813 function localeWeek(mom) { 53814 return weekOfYear(mom, this._week.dow, this._week.doy).week; 53815 } 53816 53817 var defaultLocaleWeek = { 53818 dow: 0, // Sunday is the first day of the week. 53819 doy: 6, // The week that contains Jan 6th is the first week of the year. 53820 }; 53821 53822 function localeFirstDayOfWeek() { 53823 return this._week.dow; 53824 } 53825 53826 function localeFirstDayOfYear() { 53827 return this._week.doy; 53828 } 53829 53830 // MOMENTS 53831 53832 function getSetWeek(input) { 53833 var week = this.localeData().week(this); 53834 return input == null ? week : this.add((input - week) * 7, 'd'); 53835 } 53836 53837 function getSetISOWeek(input) { 53838 var week = weekOfYear(this, 1, 4).week; 53839 return input == null ? week : this.add((input - week) * 7, 'd'); 53840 } 53841 53842 // FORMATTING 53843 53844 addFormatToken('d', 0, 'do', 'day'); 53845 53846 addFormatToken('dd', 0, 0, function (format) { 53847 return this.localeData().weekdaysMin(this, format); 53848 }); 53849 53850 addFormatToken('ddd', 0, 0, function (format) { 53851 return this.localeData().weekdaysShort(this, format); 53852 }); 53853 53854 addFormatToken('dddd', 0, 0, function (format) { 53855 return this.localeData().weekdays(this, format); 53856 }); 53857 53858 addFormatToken('e', 0, 0, 'weekday'); 53859 addFormatToken('E', 0, 0, 'isoWeekday'); 53860 53861 // PARSING 53862 53863 addRegexToken('d', match1to2); 53864 addRegexToken('e', match1to2); 53865 addRegexToken('E', match1to2); 53866 addRegexToken('dd', function (isStrict, locale) { 53867 return locale.weekdaysMinRegex(isStrict); 53868 }); 53869 addRegexToken('ddd', function (isStrict, locale) { 53870 return locale.weekdaysShortRegex(isStrict); 53871 }); 53872 addRegexToken('dddd', function (isStrict, locale) { 53873 return locale.weekdaysRegex(isStrict); 53874 }); 53875 53876 addWeekParseToken(['dd', 'ddd', 'dddd'], function (input, week, config, token) { 53877 var weekday = config._locale.weekdaysParse(input, token, config._strict); 53878 // if we didn't get a weekday name, mark the date as invalid 53879 if (weekday != null) { 53880 week.d = weekday; 53881 } else { 53882 getParsingFlags(config).invalidWeekday = input; 53883 } 53884 }); 53885 53886 addWeekParseToken(['d', 'e', 'E'], function (input, week, config, token) { 53887 week[token] = toInt(input); 53888 }); 53889 53890 // HELPERS 53891 53892 function parseWeekday(input, locale) { 53893 if (typeof input !== 'string') { 53894 return input; 53895 } 53896 53897 if (!isNaN(input)) { 53898 return parseInt(input, 10); 53899 } 53900 53901 input = locale.weekdaysParse(input); 53902 if (typeof input === 'number') { 53903 return input; 53904 } 53905 53906 return null; 53907 } 53908 53909 function parseIsoWeekday(input, locale) { 53910 if (typeof input === 'string') { 53911 return locale.weekdaysParse(input) % 7 || 7; 53912 } 53913 return isNaN(input) ? null : input; 53914 } 53915 53916 // LOCALES 53917 function shiftWeekdays(ws, n) { 53918 return ws.slice(n, 7).concat(ws.slice(0, n)); 53919 } 53920 53921 var defaultLocaleWeekdays = 53922 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'), 53923 defaultLocaleWeekdaysShort = 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'), 53924 defaultLocaleWeekdaysMin = 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'), 53925 defaultWeekdaysRegex = matchWord, 53926 defaultWeekdaysShortRegex = matchWord, 53927 defaultWeekdaysMinRegex = matchWord; 53928 53929 function localeWeekdays(m, format) { 53930 var weekdays = isArray(this._weekdays) 53931 ? this._weekdays 53932 : this._weekdays[ 53933 m && m !== true && this._weekdays.isFormat.test(format) 53934 ? 'format' 53935 : 'standalone' 53936 ]; 53937 return m === true 53938 ? shiftWeekdays(weekdays, this._week.dow) 53939 : m 53940 ? weekdays[m.day()] 53941 : weekdays; 53942 } 53943 53944 function localeWeekdaysShort(m) { 53945 return m === true 53946 ? shiftWeekdays(this._weekdaysShort, this._week.dow) 53947 : m 53948 ? this._weekdaysShort[m.day()] 53949 : this._weekdaysShort; 53950 } 53951 53952 function localeWeekdaysMin(m) { 53953 return m === true 53954 ? shiftWeekdays(this._weekdaysMin, this._week.dow) 53955 : m 53956 ? this._weekdaysMin[m.day()] 53957 : this._weekdaysMin; 53958 } 53959 53960 function handleStrictParse$1(weekdayName, format, strict) { 53961 var i, 53962 ii, 53963 mom, 53964 llc = weekdayName.toLocaleLowerCase(); 53965 if (!this._weekdaysParse) { 53966 this._weekdaysParse = []; 53967 this._shortWeekdaysParse = []; 53968 this._minWeekdaysParse = []; 53969 53970 for (i = 0; i < 7; ++i) { 53971 mom = createUTC([2000, 1]).day(i); 53972 this._minWeekdaysParse[i] = this.weekdaysMin( 53973 mom, 53974 '' 53975 ).toLocaleLowerCase(); 53976 this._shortWeekdaysParse[i] = this.weekdaysShort( 53977 mom, 53978 '' 53979 ).toLocaleLowerCase(); 53980 this._weekdaysParse[i] = this.weekdays(mom, '').toLocaleLowerCase(); 53981 } 53982 } 53983 53984 if (strict) { 53985 if (format === 'dddd') { 53986 ii = indexOf.call(this._weekdaysParse, llc); 53987 return ii !== -1 ? ii : null; 53988 } else if (format === 'ddd') { 53989 ii = indexOf.call(this._shortWeekdaysParse, llc); 53990 return ii !== -1 ? ii : null; 53991 } else { 53992 ii = indexOf.call(this._minWeekdaysParse, llc); 53993 return ii !== -1 ? ii : null; 53994 } 53995 } else { 53996 if (format === 'dddd') { 53997 ii = indexOf.call(this._weekdaysParse, llc); 53998 if (ii !== -1) { 53999 return ii; 54000 } 54001 ii = indexOf.call(this._shortWeekdaysParse, llc); 54002 if (ii !== -1) { 54003 return ii; 54004 } 54005 ii = indexOf.call(this._minWeekdaysParse, llc); 54006 return ii !== -1 ? ii : null; 54007 } else if (format === 'ddd') { 54008 ii = indexOf.call(this._shortWeekdaysParse, llc); 54009 if (ii !== -1) { 54010 return ii; 54011 } 54012 ii = indexOf.call(this._weekdaysParse, llc); 54013 if (ii !== -1) { 54014 return ii; 54015 } 54016 ii = indexOf.call(this._minWeekdaysParse, llc); 54017 return ii !== -1 ? ii : null; 54018 } else { 54019 ii = indexOf.call(this._minWeekdaysParse, llc); 54020 if (ii !== -1) { 54021 return ii; 54022 } 54023 ii = indexOf.call(this._weekdaysParse, llc); 54024 if (ii !== -1) { 54025 return ii; 54026 } 54027 ii = indexOf.call(this._shortWeekdaysParse, llc); 54028 return ii !== -1 ? ii : null; 54029 } 54030 } 54031 } 54032 54033 function localeWeekdaysParse(weekdayName, format, strict) { 54034 var i, mom, regex; 54035 54036 if (this._weekdaysParseExact) { 54037 return handleStrictParse$1.call(this, weekdayName, format, strict); 54038 } 54039 54040 if (!this._weekdaysParse) { 54041 this._weekdaysParse = []; 54042 this._minWeekdaysParse = []; 54043 this._shortWeekdaysParse = []; 54044 this._fullWeekdaysParse = []; 54045 } 54046 54047 for (i = 0; i < 7; i++) { 54048 // make the regex if we don't have it already 54049 54050 mom = createUTC([2000, 1]).day(i); 54051 if (strict && !this._fullWeekdaysParse[i]) { 54052 this._fullWeekdaysParse[i] = new RegExp( 54053 '^' + this.weekdays(mom, '').replace('.', '\\.?') + '$', 54054 'i' 54055 ); 54056 this._shortWeekdaysParse[i] = new RegExp( 54057 '^' + this.weekdaysShort(mom, '').replace('.', '\\.?') + '$', 54058 'i' 54059 ); 54060 this._minWeekdaysParse[i] = new RegExp( 54061 '^' + this.weekdaysMin(mom, '').replace('.', '\\.?') + '$', 54062 'i' 54063 ); 54064 } 54065 if (!this._weekdaysParse[i]) { 54066 regex = 54067 '^' + 54068 this.weekdays(mom, '') + 54069 '|^' + 54070 this.weekdaysShort(mom, '') + 54071 '|^' + 54072 this.weekdaysMin(mom, ''); 54073 this._weekdaysParse[i] = new RegExp(regex.replace('.', ''), 'i'); 54074 } 54075 // test the regex 54076 if ( 54077 strict && 54078 format === 'dddd' && 54079 this._fullWeekdaysParse[i].test(weekdayName) 54080 ) { 54081 return i; 54082 } else if ( 54083 strict && 54084 format === 'ddd' && 54085 this._shortWeekdaysParse[i].test(weekdayName) 54086 ) { 54087 return i; 54088 } else if ( 54089 strict && 54090 format === 'dd' && 54091 this._minWeekdaysParse[i].test(weekdayName) 54092 ) { 54093 return i; 54094 } else if (!strict && this._weekdaysParse[i].test(weekdayName)) { 54095 return i; 54096 } 54097 } 54098 } 54099 54100 // MOMENTS 54101 54102 function getSetDayOfWeek(input) { 54103 if (!this.isValid()) { 54104 return input != null ? this : NaN; 54105 } 54106 54107 var day = get(this, 'Day'); 54108 if (input != null) { 54109 input = parseWeekday(input, this.localeData()); 54110 return this.add(input - day, 'd'); 54111 } else { 54112 return day; 54113 } 54114 } 54115 54116 function getSetLocaleDayOfWeek(input) { 54117 if (!this.isValid()) { 54118 return input != null ? this : NaN; 54119 } 54120 var weekday = (this.day() + 7 - this.localeData()._week.dow) % 7; 54121 return input == null ? weekday : this.add(input - weekday, 'd'); 54122 } 54123 54124 function getSetISODayOfWeek(input) { 54125 if (!this.isValid()) { 54126 return input != null ? this : NaN; 54127 } 54128 54129 // behaves the same as moment#day except 54130 // as a getter, returns 7 instead of 0 (1-7 range instead of 0-6) 54131 // as a setter, sunday should belong to the previous week. 54132 54133 if (input != null) { 54134 var weekday = parseIsoWeekday(input, this.localeData()); 54135 return this.day(this.day() % 7 ? weekday : weekday - 7); 54136 } else { 54137 return this.day() || 7; 54138 } 54139 } 54140 54141 function weekdaysRegex(isStrict) { 54142 if (this._weekdaysParseExact) { 54143 if (!hasOwnProp(this, '_weekdaysRegex')) { 54144 computeWeekdaysParse.call(this); 54145 } 54146 if (isStrict) { 54147 return this._weekdaysStrictRegex; 54148 } else { 54149 return this._weekdaysRegex; 54150 } 54151 } else { 54152 if (!hasOwnProp(this, '_weekdaysRegex')) { 54153 this._weekdaysRegex = defaultWeekdaysRegex; 54154 } 54155 return this._weekdaysStrictRegex && isStrict 54156 ? this._weekdaysStrictRegex 54157 : this._weekdaysRegex; 54158 } 54159 } 54160 54161 function weekdaysShortRegex(isStrict) { 54162 if (this._weekdaysParseExact) { 54163 if (!hasOwnProp(this, '_weekdaysRegex')) { 54164 computeWeekdaysParse.call(this); 54165 } 54166 if (isStrict) { 54167 return this._weekdaysShortStrictRegex; 54168 } else { 54169 return this._weekdaysShortRegex; 54170 } 54171 } else { 54172 if (!hasOwnProp(this, '_weekdaysShortRegex')) { 54173 this._weekdaysShortRegex = defaultWeekdaysShortRegex; 54174 } 54175 return this._weekdaysShortStrictRegex && isStrict 54176 ? this._weekdaysShortStrictRegex 54177 : this._weekdaysShortRegex; 54178 } 54179 } 54180 54181 function weekdaysMinRegex(isStrict) { 54182 if (this._weekdaysParseExact) { 54183 if (!hasOwnProp(this, '_weekdaysRegex')) { 54184 computeWeekdaysParse.call(this); 54185 } 54186 if (isStrict) { 54187 return this._weekdaysMinStrictRegex; 54188 } else { 54189 return this._weekdaysMinRegex; 54190 } 54191 } else { 54192 if (!hasOwnProp(this, '_weekdaysMinRegex')) { 54193 this._weekdaysMinRegex = defaultWeekdaysMinRegex; 54194 } 54195 return this._weekdaysMinStrictRegex && isStrict 54196 ? this._weekdaysMinStrictRegex 54197 : this._weekdaysMinRegex; 54198 } 54199 } 54200 54201 function computeWeekdaysParse() { 54202 function cmpLenRev(a, b) { 54203 return b.length - a.length; 54204 } 54205 54206 var minPieces = [], 54207 shortPieces = [], 54208 longPieces = [], 54209 mixedPieces = [], 54210 i, 54211 mom, 54212 minp, 54213 shortp, 54214 longp; 54215 for (i = 0; i < 7; i++) { 54216 // make the regex if we don't have it already 54217 mom = createUTC([2000, 1]).day(i); 54218 minp = regexEscape(this.weekdaysMin(mom, '')); 54219 shortp = regexEscape(this.weekdaysShort(mom, '')); 54220 longp = regexEscape(this.weekdays(mom, '')); 54221 minPieces.push(minp); 54222 shortPieces.push(shortp); 54223 longPieces.push(longp); 54224 mixedPieces.push(minp); 54225 mixedPieces.push(shortp); 54226 mixedPieces.push(longp); 54227 } 54228 // Sorting makes sure if one weekday (or abbr) is a prefix of another it 54229 // will match the longer piece. 54230 minPieces.sort(cmpLenRev); 54231 shortPieces.sort(cmpLenRev); 54232 longPieces.sort(cmpLenRev); 54233 mixedPieces.sort(cmpLenRev); 54234 54235 this._weekdaysRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i'); 54236 this._weekdaysShortRegex = this._weekdaysRegex; 54237 this._weekdaysMinRegex = this._weekdaysRegex; 54238 54239 this._weekdaysStrictRegex = new RegExp( 54240 '^(' + longPieces.join('|') + ')', 54241 'i' 54242 ); 54243 this._weekdaysShortStrictRegex = new RegExp( 54244 '^(' + shortPieces.join('|') + ')', 54245 'i' 54246 ); 54247 this._weekdaysMinStrictRegex = new RegExp( 54248 '^(' + minPieces.join('|') + ')', 54249 'i' 54250 ); 54251 } 54252 54253 // FORMATTING 54254 54255 function hFormat() { 54256 return this.hours() % 12 || 12; 54257 } 54258 54259 function kFormat() { 54260 return this.hours() || 24; 54261 } 54262 54263 addFormatToken('H', ['HH', 2], 0, 'hour'); 54264 addFormatToken('h', ['hh', 2], 0, hFormat); 54265 addFormatToken('k', ['kk', 2], 0, kFormat); 54266 54267 addFormatToken('hmm', 0, 0, function () { 54268 return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2); 54269 }); 54270 54271 addFormatToken('hmmss', 0, 0, function () { 54272 return ( 54273 '' + 54274 hFormat.apply(this) + 54275 zeroFill(this.minutes(), 2) + 54276 zeroFill(this.seconds(), 2) 54277 ); 54278 }); 54279 54280 addFormatToken('Hmm', 0, 0, function () { 54281 return '' + this.hours() + zeroFill(this.minutes(), 2); 54282 }); 54283 54284 addFormatToken('Hmmss', 0, 0, function () { 54285 return ( 54286 '' + 54287 this.hours() + 54288 zeroFill(this.minutes(), 2) + 54289 zeroFill(this.seconds(), 2) 54290 ); 54291 }); 54292 54293 function meridiem(token, lowercase) { 54294 addFormatToken(token, 0, 0, function () { 54295 return this.localeData().meridiem( 54296 this.hours(), 54297 this.minutes(), 54298 lowercase 54299 ); 54300 }); 54301 } 54302 54303 meridiem('a', true); 54304 meridiem('A', false); 54305 54306 // PARSING 54307 54308 function matchMeridiem(isStrict, locale) { 54309 return locale._meridiemParse; 54310 } 54311 54312 addRegexToken('a', matchMeridiem); 54313 addRegexToken('A', matchMeridiem); 54314 addRegexToken('H', match1to2, match1to2HasZero); 54315 addRegexToken('h', match1to2, match1to2NoLeadingZero); 54316 addRegexToken('k', match1to2, match1to2NoLeadingZero); 54317 addRegexToken('HH', match1to2, match2); 54318 addRegexToken('hh', match1to2, match2); 54319 addRegexToken('kk', match1to2, match2); 54320 54321 addRegexToken('hmm', match3to4); 54322 addRegexToken('hmmss', match5to6); 54323 addRegexToken('Hmm', match3to4); 54324 addRegexToken('Hmmss', match5to6); 54325 54326 addParseToken(['H', 'HH'], HOUR); 54327 addParseToken(['k', 'kk'], function (input, array, config) { 54328 var kInput = toInt(input); 54329 array[HOUR] = kInput === 24 ? 0 : kInput; 54330 }); 54331 addParseToken(['a', 'A'], function (input, array, config) { 54332 config._isPm = config._locale.isPM(input); 54333 config._meridiem = input; 54334 }); 54335 addParseToken(['h', 'hh'], function (input, array, config) { 54336 array[HOUR] = toInt(input); 54337 getParsingFlags(config).bigHour = true; 54338 }); 54339 addParseToken('hmm', function (input, array, config) { 54340 var pos = input.length - 2; 54341 array[HOUR] = toInt(input.substr(0, pos)); 54342 array[MINUTE] = toInt(input.substr(pos)); 54343 getParsingFlags(config).bigHour = true; 54344 }); 54345 addParseToken('hmmss', function (input, array, config) { 54346 var pos1 = input.length - 4, 54347 pos2 = input.length - 2; 54348 array[HOUR] = toInt(input.substr(0, pos1)); 54349 array[MINUTE] = toInt(input.substr(pos1, 2)); 54350 array[SECOND] = toInt(input.substr(pos2)); 54351 getParsingFlags(config).bigHour = true; 54352 }); 54353 addParseToken('Hmm', function (input, array, config) { 54354 var pos = input.length - 2; 54355 array[HOUR] = toInt(input.substr(0, pos)); 54356 array[MINUTE] = toInt(input.substr(pos)); 54357 }); 54358 addParseToken('Hmmss', function (input, array, config) { 54359 var pos1 = input.length - 4, 54360 pos2 = input.length - 2; 54361 array[HOUR] = toInt(input.substr(0, pos1)); 54362 array[MINUTE] = toInt(input.substr(pos1, 2)); 54363 array[SECOND] = toInt(input.substr(pos2)); 54364 }); 54365 54366 // LOCALES 54367 54368 function localeIsPM(input) { 54369 // IE8 Quirks Mode & IE7 Standards Mode do not allow accessing strings like arrays 54370 // Using charAt should be more compatible. 54371 return (input + '').toLowerCase().charAt(0) === 'p'; 54372 } 54373 54374 var defaultLocaleMeridiemParse = /[ap]\.?m?\.?/i, 54375 // Setting the hour should keep the time, because the user explicitly 54376 // specified which hour they want. So trying to maintain the same hour (in 54377 // a new timezone) makes sense. Adding/subtracting hours does not follow 54378 // this rule. 54379 getSetHour = makeGetSet('Hours', true); 54380 54381 function localeMeridiem(hours, minutes, isLower) { 54382 if (hours > 11) { 54383 return isLower ? 'pm' : 'PM'; 54384 } else { 54385 return isLower ? 'am' : 'AM'; 54386 } 54387 } 54388 54389 var baseConfig = { 54390 calendar: defaultCalendar, 54391 longDateFormat: defaultLongDateFormat, 54392 invalidDate: defaultInvalidDate, 54393 ordinal: defaultOrdinal, 54394 dayOfMonthOrdinalParse: defaultDayOfMonthOrdinalParse, 54395 relativeTime: defaultRelativeTime, 54396 54397 months: defaultLocaleMonths, 54398 monthsShort: defaultLocaleMonthsShort, 54399 54400 week: defaultLocaleWeek, 54401 54402 weekdays: defaultLocaleWeekdays, 54403 weekdaysMin: defaultLocaleWeekdaysMin, 54404 weekdaysShort: defaultLocaleWeekdaysShort, 54405 54406 meridiemParse: defaultLocaleMeridiemParse, 54407 }; 54408 54409 // internal storage for locale config files 54410 var locales = {}, 54411 localeFamilies = {}, 54412 globalLocale; 54413 54414 function commonPrefix(arr1, arr2) { 54415 var i, 54416 minl = Math.min(arr1.length, arr2.length); 54417 for (i = 0; i < minl; i += 1) { 54418 if (arr1[i] !== arr2[i]) { 54419 return i; 54420 } 54421 } 54422 return minl; 54423 } 54424 54425 function normalizeLocale(key) { 54426 return key ? key.toLowerCase().replace('_', '-') : key; 54427 } 54428 54429 // pick the locale from the array 54430 // try ['en-au', 'en-gb'] as 'en-au', 'en-gb', 'en', as in move through the list trying each 54431 // substring from most specific to least, but move to the next array item if it's a more specific variant than the current root 54432 function chooseLocale(names) { 54433 var i = 0, 54434 j, 54435 next, 54436 locale, 54437 split; 54438 54439 while (i < names.length) { 54440 split = normalizeLocale(names[i]).split('-'); 54441 j = split.length; 54442 next = normalizeLocale(names[i + 1]); 54443 next = next ? next.split('-') : null; 54444 while (j > 0) { 54445 locale = loadLocale(split.slice(0, j).join('-')); 54446 if (locale) { 54447 return locale; 54448 } 54449 if ( 54450 next && 54451 next.length >= j && 54452 commonPrefix(split, next) >= j - 1 54453 ) { 54454 //the next array item is better than a shallower substring of this one 54455 break; 54456 } 54457 j--; 54458 } 54459 i++; 54460 } 54461 return globalLocale; 54462 } 54463 54464 function isLocaleNameSane(name) { 54465 // Prevent names that look like filesystem paths, i.e contain '/' or '\' 54466 // Ensure name is available and function returns boolean 54467 return !!(name && name.match('^[^/\\\\]*$')); 54468 } 54469 54470 function loadLocale(name) { 54471 var oldLocale = null, 54472 aliasedRequire; 54473 // TODO: Find a better way to register and load all the locales in Node 54474 if ( 54475 locales[name] === undefined && 54476 typeof module !== 'undefined' && 54477 module && 54478 module.exports && 54479 isLocaleNameSane(name) 54480 ) { 54481 try { 54482 oldLocale = globalLocale._abbr; 54483 aliasedRequire = require; 54484 __webpack_require__("./node_modules/moment/locale sync recursive ^\\.\\/.*$")("./" + name); 54485 getSetGlobalLocale(oldLocale); 54486 } catch (e) { 54487 // mark as not found to avoid repeating expensive file require call causing high CPU 54488 // when trying to find en-US, en_US, en-us for every format call 54489 locales[name] = null; // null means not found 54490 } 54491 } 54492 return locales[name]; 54493 } 54494 54495 // This function will load locale and then set the global locale. If 54496 // no arguments are passed in, it will simply return the current global 54497 // locale key. 54498 function getSetGlobalLocale(key, values) { 54499 var data; 54500 if (key) { 54501 if (isUndefined(values)) { 54502 data = getLocale(key); 54503 } else { 54504 data = defineLocale(key, values); 54505 } 54506 54507 if (data) { 54508 // moment.duration._locale = moment._locale = data; 54509 globalLocale = data; 54510 } else { 54511 if (typeof console !== 'undefined' && console.warn) { 54512 //warn user if arguments are passed but the locale could not be set 54513 console.warn( 54514 'Locale ' + key + ' not found. Did you forget to load it?' 54515 ); 54516 } 54517 } 54518 } 54519 54520 return globalLocale._abbr; 54521 } 54522 54523 function defineLocale(name, config) { 54524 if (config !== null) { 54525 var locale, 54526 parentConfig = baseConfig; 54527 config.abbr = name; 54528 if (locales[name] != null) { 54529 deprecateSimple( 54530 'defineLocaleOverride', 54531 'use moment.updateLocale(localeName, config) to change ' + 54532 'an existing locale. moment.defineLocale(localeName, ' + 54533 'config) should only be used for creating a new locale ' + 54534 'See http://momentjs.com/guides/#/warnings/define-locale/ for more info.' 54535 ); 54536 parentConfig = locales[name]._config; 54537 } else if (config.parentLocale != null) { 54538 if (locales[config.parentLocale] != null) { 54539 parentConfig = locales[config.parentLocale]._config; 54540 } else { 54541 locale = loadLocale(config.parentLocale); 54542 if (locale != null) { 54543 parentConfig = locale._config; 54544 } else { 54545 if (!localeFamilies[config.parentLocale]) { 54546 localeFamilies[config.parentLocale] = []; 54547 } 54548 localeFamilies[config.parentLocale].push({ 54549 name: name, 54550 config: config, 54551 }); 54552 return null; 54553 } 54554 } 54555 } 54556 locales[name] = new Locale(mergeConfigs(parentConfig, config)); 54557 54558 if (localeFamilies[name]) { 54559 localeFamilies[name].forEach(function (x) { 54560 defineLocale(x.name, x.config); 54561 }); 54562 } 54563 54564 // backwards compat for now: also set the locale 54565 // make sure we set the locale AFTER all child locales have been 54566 // created, so we won't end up with the child locale set. 54567 getSetGlobalLocale(name); 54568 54569 return locales[name]; 54570 } else { 54571 // useful for testing 54572 delete locales[name]; 54573 return null; 54574 } 54575 } 54576 54577 function updateLocale(name, config) { 54578 if (config != null) { 54579 var locale, 54580 tmpLocale, 54581 parentConfig = baseConfig; 54582 54583 if (locales[name] != null && locales[name].parentLocale != null) { 54584 // Update existing child locale in-place to avoid memory-leaks 54585 locales[name].set(mergeConfigs(locales[name]._config, config)); 54586 } else { 54587 // MERGE 54588 tmpLocale = loadLocale(name); 54589 if (tmpLocale != null) { 54590 parentConfig = tmpLocale._config; 54591 } 54592 config = mergeConfigs(parentConfig, config); 54593 if (tmpLocale == null) { 54594 // updateLocale is called for creating a new locale 54595 // Set abbr so it will have a name (getters return 54596 // undefined otherwise). 54597 config.abbr = name; 54598 } 54599 locale = new Locale(config); 54600 locale.parentLocale = locales[name]; 54601 locales[name] = locale; 54602 } 54603 54604 // backwards compat for now: also set the locale 54605 getSetGlobalLocale(name); 54606 } else { 54607 // pass null for config to unupdate, useful for tests 54608 if (locales[name] != null) { 54609 if (locales[name].parentLocale != null) { 54610 locales[name] = locales[name].parentLocale; 54611 if (name === getSetGlobalLocale()) { 54612 getSetGlobalLocale(name); 54613 } 54614 } else if (locales[name] != null) { 54615 delete locales[name]; 54616 } 54617 } 54618 } 54619 return locales[name]; 54620 } 54621 54622 // returns locale data 54623 function getLocale(key) { 54624 var locale; 54625 54626 if (key && key._locale && key._locale._abbr) { 54627 key = key._locale._abbr; 54628 } 54629 54630 if (!key) { 54631 return globalLocale; 54632 } 54633 54634 if (!isArray(key)) { 54635 //short-circuit everything else 54636 locale = loadLocale(key); 54637 if (locale) { 54638 return locale; 54639 } 54640 key = [key]; 54641 } 54642 54643 return chooseLocale(key); 54644 } 54645 54646 function listLocales() { 54647 return keys(locales); 54648 } 54649 54650 function checkOverflow(m) { 54651 var overflow, 54652 a = m._a; 54653 54654 if (a && getParsingFlags(m).overflow === -2) { 54655 overflow = 54656 a[MONTH] < 0 || a[MONTH] > 11 54657 ? MONTH 54658 : a[DATE] < 1 || a[DATE] > daysInMonth(a[YEAR], a[MONTH]) 54659 ? DATE 54660 : a[HOUR] < 0 || 54661 a[HOUR] > 24 || 54662 (a[HOUR] === 24 && 54663 (a[MINUTE] !== 0 || 54664 a[SECOND] !== 0 || 54665 a[MILLISECOND] !== 0)) 54666 ? HOUR 54667 : a[MINUTE] < 0 || a[MINUTE] > 59 54668 ? MINUTE 54669 : a[SECOND] < 0 || a[SECOND] > 59 54670 ? SECOND 54671 : a[MILLISECOND] < 0 || a[MILLISECOND] > 999 54672 ? MILLISECOND 54673 : -1; 54674 54675 if ( 54676 getParsingFlags(m)._overflowDayOfYear && 54677 (overflow < YEAR || overflow > DATE) 54678 ) { 54679 overflow = DATE; 54680 } 54681 if (getParsingFlags(m)._overflowWeeks && overflow === -1) { 54682 overflow = WEEK; 54683 } 54684 if (getParsingFlags(m)._overflowWeekday && overflow === -1) { 54685 overflow = WEEKDAY; 54686 } 54687 54688 getParsingFlags(m).overflow = overflow; 54689 } 54690 54691 return m; 54692 } 54693 54694 // iso 8601 regex 54695 // 0000-00-00 0000-W00 or 0000-W00-0 + T + 00 or 00:00 or 00:00:00 or 00:00:00.000 + +00:00 or +0000 or +00) 54696 var extendedIsoRegex = 54697 /^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/, 54698 basicIsoRegex = 54699 /^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d|))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/, 54700 tzRegex = /Z|[+-]\d\d(?::?\d\d)?/, 54701 isoDates = [ 54702 ['YYYYYY-MM-DD', /[+-]\d{6}-\d\d-\d\d/], 54703 ['YYYY-MM-DD', /\d{4}-\d\d-\d\d/], 54704 ['GGGG-[W]WW-E', /\d{4}-W\d\d-\d/], 54705 ['GGGG-[W]WW', /\d{4}-W\d\d/, false], 54706 ['YYYY-DDD', /\d{4}-\d{3}/], 54707 ['YYYY-MM', /\d{4}-\d\d/, false], 54708 ['YYYYYYMMDD', /[+-]\d{10}/], 54709 ['YYYYMMDD', /\d{8}/], 54710 ['GGGG[W]WWE', /\d{4}W\d{3}/], 54711 ['GGGG[W]WW', /\d{4}W\d{2}/, false], 54712 ['YYYYDDD', /\d{7}/], 54713 ['YYYYMM', /\d{6}/, false], 54714 ['YYYY', /\d{4}/, false], 54715 ], 54716 // iso time formats and regexes 54717 isoTimes = [ 54718 ['HH:mm:ss.SSSS', /\d\d:\d\d:\d\d\.\d+/], 54719 ['HH:mm:ss,SSSS', /\d\d:\d\d:\d\d,\d+/], 54720 ['HH:mm:ss', /\d\d:\d\d:\d\d/], 54721 ['HH:mm', /\d\d:\d\d/], 54722 ['HHmmss.SSSS', /\d\d\d\d\d\d\.\d+/], 54723 ['HHmmss,SSSS', /\d\d\d\d\d\d,\d+/], 54724 ['HHmmss', /\d\d\d\d\d\d/], 54725 ['HHmm', /\d\d\d\d/], 54726 ['HH', /\d\d/], 54727 ], 54728 aspNetJsonRegex = /^\/?Date\((-?\d+)/i, 54729 // RFC 2822 regex: For details see https://tools.ietf.org/html/rfc2822#section-3.3 54730 rfc2822 = 54731 /^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\s)?(\d{1,2})\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(\d{2,4})\s(\d\d):(\d\d)(?::(\d\d))?\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\d{4}))$/, 54732 obsOffsets = { 54733 UT: 0, 54734 GMT: 0, 54735 EDT: -4 * 60, 54736 EST: -5 * 60, 54737 CDT: -5 * 60, 54738 CST: -6 * 60, 54739 MDT: -6 * 60, 54740 MST: -7 * 60, 54741 PDT: -7 * 60, 54742 PST: -8 * 60, 54743 }; 54744 54745 // date from iso format 54746 function configFromISO(config) { 54747 var i, 54748 l, 54749 string = config._i, 54750 match = extendedIsoRegex.exec(string) || basicIsoRegex.exec(string), 54751 allowTime, 54752 dateFormat, 54753 timeFormat, 54754 tzFormat, 54755 isoDatesLen = isoDates.length, 54756 isoTimesLen = isoTimes.length; 54757 54758 if (match) { 54759 getParsingFlags(config).iso = true; 54760 for (i = 0, l = isoDatesLen; i < l; i++) { 54761 if (isoDates[i][1].exec(match[1])) { 54762 dateFormat = isoDates[i][0]; 54763 allowTime = isoDates[i][2] !== false; 54764 break; 54765 } 54766 } 54767 if (dateFormat == null) { 54768 config._isValid = false; 54769 return; 54770 } 54771 if (match[3]) { 54772 for (i = 0, l = isoTimesLen; i < l; i++) { 54773 if (isoTimes[i][1].exec(match[3])) { 54774 // match[2] should be 'T' or space 54775 timeFormat = (match[2] || ' ') + isoTimes[i][0]; 54776 break; 54777 } 54778 } 54779 if (timeFormat == null) { 54780 config._isValid = false; 54781 return; 54782 } 54783 } 54784 if (!allowTime && timeFormat != null) { 54785 config._isValid = false; 54786 return; 54787 } 54788 if (match[4]) { 54789 if (tzRegex.exec(match[4])) { 54790 tzFormat = 'Z'; 54791 } else { 54792 config._isValid = false; 54793 return; 54794 } 54795 } 54796 config._f = dateFormat + (timeFormat || '') + (tzFormat || ''); 54797 configFromStringAndFormat(config); 54798 } else { 54799 config._isValid = false; 54800 } 54801 } 54802 54803 function extractFromRFC2822Strings( 54804 yearStr, 54805 monthStr, 54806 dayStr, 54807 hourStr, 54808 minuteStr, 54809 secondStr 54810 ) { 54811 var result = [ 54812 untruncateYear(yearStr), 54813 defaultLocaleMonthsShort.indexOf(monthStr), 54814 parseInt(dayStr, 10), 54815 parseInt(hourStr, 10), 54816 parseInt(minuteStr, 10), 54817 ]; 54818 54819 if (secondStr) { 54820 result.push(parseInt(secondStr, 10)); 54821 } 54822 54823 return result; 54824 } 54825 54826 function untruncateYear(yearStr) { 54827 var year = parseInt(yearStr, 10); 54828 if (year <= 49) { 54829 return 2000 + year; 54830 } else if (year <= 999) { 54831 return 1900 + year; 54832 } 54833 return year; 54834 } 54835 54836 function preprocessRFC2822(s) { 54837 // Remove comments and folding whitespace and replace multiple-spaces with a single space 54838 return s 54839 .replace(/\([^()]*\)|[\n\t]/g, ' ') 54840 .replace(/(\s\s+)/g, ' ') 54841 .replace(/^\s\s*/, '') 54842 .replace(/\s\s*$/, ''); 54843 } 54844 54845 function checkWeekday(weekdayStr, parsedInput, config) { 54846 if (weekdayStr) { 54847 // TODO: Replace the vanilla JS Date object with an independent day-of-week check. 54848 var weekdayProvided = defaultLocaleWeekdaysShort.indexOf(weekdayStr), 54849 weekdayActual = new Date( 54850 parsedInput[0], 54851 parsedInput[1], 54852 parsedInput[2] 54853 ).getDay(); 54854 if (weekdayProvided !== weekdayActual) { 54855 getParsingFlags(config).weekdayMismatch = true; 54856 config._isValid = false; 54857 return false; 54858 } 54859 } 54860 return true; 54861 } 54862 54863 function calculateOffset(obsOffset, militaryOffset, numOffset) { 54864 if (obsOffset) { 54865 return obsOffsets[obsOffset]; 54866 } else if (militaryOffset) { 54867 // the only allowed military tz is Z 54868 return 0; 54869 } else { 54870 var hm = parseInt(numOffset, 10), 54871 m = hm % 100, 54872 h = (hm - m) / 100; 54873 return h * 60 + m; 54874 } 54875 } 54876 54877 // date and time from ref 2822 format 54878 function configFromRFC2822(config) { 54879 var match = rfc2822.exec(preprocessRFC2822(config._i)), 54880 parsedArray; 54881 if (match) { 54882 parsedArray = extractFromRFC2822Strings( 54883 match[4], 54884 match[3], 54885 match[2], 54886 match[5], 54887 match[6], 54888 match[7] 54889 ); 54890 if (!checkWeekday(match[1], parsedArray, config)) { 54891 return; 54892 } 54893 54894 config._a = parsedArray; 54895 config._tzm = calculateOffset(match[8], match[9], match[10]); 54896 54897 config._d = createUTCDate.apply(null, config._a); 54898 config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm); 54899 54900 getParsingFlags(config).rfc2822 = true; 54901 } else { 54902 config._isValid = false; 54903 } 54904 } 54905 54906 // date from 1) ASP.NET, 2) ISO, 3) RFC 2822 formats, or 4) optional fallback if parsing isn't strict 54907 function configFromString(config) { 54908 var matched = aspNetJsonRegex.exec(config._i); 54909 if (matched !== null) { 54910 config._d = new Date(+matched[1]); 54911 return; 54912 } 54913 54914 configFromISO(config); 54915 if (config._isValid === false) { 54916 delete config._isValid; 54917 } else { 54918 return; 54919 } 54920 54921 configFromRFC2822(config); 54922 if (config._isValid === false) { 54923 delete config._isValid; 54924 } else { 54925 return; 54926 } 54927 54928 if (config._strict) { 54929 config._isValid = false; 54930 } else { 54931 // Final attempt, use Input Fallback 54932 hooks.createFromInputFallback(config); 54933 } 54934 } 54935 54936 hooks.createFromInputFallback = deprecate( 54937 'value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), ' + 54938 'which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are ' + 54939 'discouraged. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.', 54940 function (config) { 54941 config._d = new Date(config._i + (config._useUTC ? ' UTC' : '')); 54942 } 54943 ); 54944 54945 // Pick the first defined of two or three arguments. 54946 function defaults(a, b, c) { 54947 if (a != null) { 54948 return a; 54949 } 54950 if (b != null) { 54951 return b; 54952 } 54953 return c; 54954 } 54955 54956 function currentDateArray(config) { 54957 // hooks is actually the exported moment object 54958 var nowValue = new Date(hooks.now()); 54959 if (config._useUTC) { 54960 return [ 54961 nowValue.getUTCFullYear(), 54962 nowValue.getUTCMonth(), 54963 nowValue.getUTCDate(), 54964 ]; 54965 } 54966 return [nowValue.getFullYear(), nowValue.getMonth(), nowValue.getDate()]; 54967 } 54968 54969 // convert an array to a date. 54970 // the array should mirror the parameters below 54971 // note: all values past the year are optional and will default to the lowest possible value. 54972 // [year, month, day , hour, minute, second, millisecond] 54973 function configFromArray(config) { 54974 var i, 54975 date, 54976 input = [], 54977 currentDate, 54978 expectedWeekday, 54979 yearToUse; 54980 54981 if (config._d) { 54982 return; 54983 } 54984 54985 currentDate = currentDateArray(config); 54986 54987 //compute day of the year from weeks and weekdays 54988 if (config._w && config._a[DATE] == null && config._a[MONTH] == null) { 54989 dayOfYearFromWeekInfo(config); 54990 } 54991 54992 //if the day of the year is set, figure out what it is 54993 if (config._dayOfYear != null) { 54994 yearToUse = defaults(config._a[YEAR], currentDate[YEAR]); 54995 54996 if ( 54997 config._dayOfYear > daysInYear(yearToUse) || 54998 config._dayOfYear === 0 54999 ) { 55000 getParsingFlags(config)._overflowDayOfYear = true; 55001 } 55002 55003 date = createUTCDate(yearToUse, 0, config._dayOfYear); 55004 config._a[MONTH] = date.getUTCMonth(); 55005 config._a[DATE] = date.getUTCDate(); 55006 } 55007 55008 // Default to current date. 55009 // * if no year, month, day of month are given, default to today 55010 // * if day of month is given, default month and year 55011 // * if month is given, default only year 55012 // * if year is given, don't default anything 55013 for (i = 0; i < 3 && config._a[i] == null; ++i) { 55014 config._a[i] = input[i] = currentDate[i]; 55015 } 55016 55017 // Zero out whatever was not defaulted, including time 55018 for (; i < 7; i++) { 55019 config._a[i] = input[i] = 55020 config._a[i] == null ? (i === 2 ? 1 : 0) : config._a[i]; 55021 } 55022 55023 // Check for 24:00:00.000 55024 if ( 55025 config._a[HOUR] === 24 && 55026 config._a[MINUTE] === 0 && 55027 config._a[SECOND] === 0 && 55028 config._a[MILLISECOND] === 0 55029 ) { 55030 config._nextDay = true; 55031 config._a[HOUR] = 0; 55032 } 55033 55034 config._d = (config._useUTC ? createUTCDate : createDate).apply( 55035 null, 55036 input 55037 ); 55038 expectedWeekday = config._useUTC 55039 ? config._d.getUTCDay() 55040 : config._d.getDay(); 55041 55042 // Apply timezone offset from input. The actual utcOffset can be changed 55043 // with parseZone. 55044 if (config._tzm != null) { 55045 config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm); 55046 } 55047 55048 if (config._nextDay) { 55049 config._a[HOUR] = 24; 55050 } 55051 55052 // check for mismatching day of week 55053 if ( 55054 config._w && 55055 typeof config._w.d !== 'undefined' && 55056 config._w.d !== expectedWeekday 55057 ) { 55058 getParsingFlags(config).weekdayMismatch = true; 55059 } 55060 } 55061 55062 function dayOfYearFromWeekInfo(config) { 55063 var w, weekYear, week, weekday, dow, doy, temp, weekdayOverflow, curWeek; 55064 55065 w = config._w; 55066 if (w.GG != null || w.W != null || w.E != null) { 55067 dow = 1; 55068 doy = 4; 55069 55070 // TODO: We need to take the current isoWeekYear, but that depends on 55071 // how we interpret now (local, utc, fixed offset). So create 55072 // a now version of current config (take local/utc/offset flags, and 55073 // create now). 55074 weekYear = defaults( 55075 w.GG, 55076 config._a[YEAR], 55077 weekOfYear(createLocal(), 1, 4).year 55078 ); 55079 week = defaults(w.W, 1); 55080 weekday = defaults(w.E, 1); 55081 if (weekday < 1 || weekday > 7) { 55082 weekdayOverflow = true; 55083 } 55084 } else { 55085 dow = config._locale._week.dow; 55086 doy = config._locale._week.doy; 55087 55088 curWeek = weekOfYear(createLocal(), dow, doy); 55089 55090 weekYear = defaults(w.gg, config._a[YEAR], curWeek.year); 55091 55092 // Default to current week. 55093 week = defaults(w.w, curWeek.week); 55094 55095 if (w.d != null) { 55096 // weekday -- low day numbers are considered next week 55097 weekday = w.d; 55098 if (weekday < 0 || weekday > 6) { 55099 weekdayOverflow = true; 55100 } 55101 } else if (w.e != null) { 55102 // local weekday -- counting starts from beginning of week 55103 weekday = w.e + dow; 55104 if (w.e < 0 || w.e > 6) { 55105 weekdayOverflow = true; 55106 } 55107 } else { 55108 // default to beginning of week 55109 weekday = dow; 55110 } 55111 } 55112 if (week < 1 || week > weeksInYear(weekYear, dow, doy)) { 55113 getParsingFlags(config)._overflowWeeks = true; 55114 } else if (weekdayOverflow != null) { 55115 getParsingFlags(config)._overflowWeekday = true; 55116 } else { 55117 temp = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy); 55118 config._a[YEAR] = temp.year; 55119 config._dayOfYear = temp.dayOfYear; 55120 } 55121 } 55122 55123 // constant that refers to the ISO standard 55124 hooks.ISO_8601 = function () {}; 55125 55126 // constant that refers to the RFC 2822 form 55127 hooks.RFC_2822 = function () {}; 55128 55129 // date from string and format string 55130 function configFromStringAndFormat(config) { 55131 // TODO: Move this to another part of the creation flow to prevent circular deps 55132 if (config._f === hooks.ISO_8601) { 55133 configFromISO(config); 55134 return; 55135 } 55136 if (config._f === hooks.RFC_2822) { 55137 configFromRFC2822(config); 55138 return; 55139 } 55140 config._a = []; 55141 getParsingFlags(config).empty = true; 55142 55143 // This array is used to make a Date, either with `new Date` or `Date.UTC` 55144 var string = '' + config._i, 55145 i, 55146 parsedInput, 55147 tokens, 55148 token, 55149 skipped, 55150 stringLength = string.length, 55151 totalParsedInputLength = 0, 55152 era, 55153 tokenLen; 55154 55155 tokens = 55156 expandFormat(config._f, config._locale).match(formattingTokens) || []; 55157 tokenLen = tokens.length; 55158 for (i = 0; i < tokenLen; i++) { 55159 token = tokens[i]; 55160 parsedInput = (string.match(getParseRegexForToken(token, config)) || 55161 [])[0]; 55162 if (parsedInput) { 55163 skipped = string.substr(0, string.indexOf(parsedInput)); 55164 if (skipped.length > 0) { 55165 getParsingFlags(config).unusedInput.push(skipped); 55166 } 55167 string = string.slice( 55168 string.indexOf(parsedInput) + parsedInput.length 55169 ); 55170 totalParsedInputLength += parsedInput.length; 55171 } 55172 // don't parse if it's not a known token 55173 if (formatTokenFunctions[token]) { 55174 if (parsedInput) { 55175 getParsingFlags(config).empty = false; 55176 } else { 55177 getParsingFlags(config).unusedTokens.push(token); 55178 } 55179 addTimeToArrayFromToken(token, parsedInput, config); 55180 } else if (config._strict && !parsedInput) { 55181 getParsingFlags(config).unusedTokens.push(token); 55182 } 55183 } 55184 55185 // add remaining unparsed input length to the string 55186 getParsingFlags(config).charsLeftOver = 55187 stringLength - totalParsedInputLength; 55188 if (string.length > 0) { 55189 getParsingFlags(config).unusedInput.push(string); 55190 } 55191 55192 // clear _12h flag if hour is <= 12 55193 if ( 55194 config._a[HOUR] <= 12 && 55195 getParsingFlags(config).bigHour === true && 55196 config._a[HOUR] > 0 55197 ) { 55198 getParsingFlags(config).bigHour = undefined; 55199 } 55200 55201 getParsingFlags(config).parsedDateParts = config._a.slice(0); 55202 getParsingFlags(config).meridiem = config._meridiem; 55203 // handle meridiem 55204 config._a[HOUR] = meridiemFixWrap( 55205 config._locale, 55206 config._a[HOUR], 55207 config._meridiem 55208 ); 55209 55210 // handle era 55211 era = getParsingFlags(config).era; 55212 if (era !== null) { 55213 config._a[YEAR] = config._locale.erasConvertYear(era, config._a[YEAR]); 55214 } 55215 55216 configFromArray(config); 55217 checkOverflow(config); 55218 } 55219 55220 function meridiemFixWrap(locale, hour, meridiem) { 55221 var isPm; 55222 55223 if (meridiem == null) { 55224 // nothing to do 55225 return hour; 55226 } 55227 if (locale.meridiemHour != null) { 55228 return locale.meridiemHour(hour, meridiem); 55229 } else if (locale.isPM != null) { 55230 // Fallback 55231 isPm = locale.isPM(meridiem); 55232 if (isPm && hour < 12) { 55233 hour += 12; 55234 } 55235 if (!isPm && hour === 12) { 55236 hour = 0; 55237 } 55238 return hour; 55239 } else { 55240 // this is not supposed to happen 55241 return hour; 55242 } 55243 } 55244 55245 // date from string and array of format strings 55246 function configFromStringAndArray(config) { 55247 var tempConfig, 55248 bestMoment, 55249 scoreToBeat, 55250 i, 55251 currentScore, 55252 validFormatFound, 55253 bestFormatIsValid = false, 55254 configfLen = config._f.length; 55255 55256 if (configfLen === 0) { 55257 getParsingFlags(config).invalidFormat = true; 55258 config._d = new Date(NaN); 55259 return; 55260 } 55261 55262 for (i = 0; i < configfLen; i++) { 55263 currentScore = 0; 55264 validFormatFound = false; 55265 tempConfig = copyConfig({}, config); 55266 if (config._useUTC != null) { 55267 tempConfig._useUTC = config._useUTC; 55268 } 55269 tempConfig._f = config._f[i]; 55270 configFromStringAndFormat(tempConfig); 55271 55272 if (isValid(tempConfig)) { 55273 validFormatFound = true; 55274 } 55275 55276 // if there is any input that was not parsed add a penalty for that format 55277 currentScore += getParsingFlags(tempConfig).charsLeftOver; 55278 55279 //or tokens 55280 currentScore += getParsingFlags(tempConfig).unusedTokens.length * 10; 55281 55282 getParsingFlags(tempConfig).score = currentScore; 55283 55284 if (!bestFormatIsValid) { 55285 if ( 55286 scoreToBeat == null || 55287 currentScore < scoreToBeat || 55288 validFormatFound 55289 ) { 55290 scoreToBeat = currentScore; 55291 bestMoment = tempConfig; 55292 if (validFormatFound) { 55293 bestFormatIsValid = true; 55294 } 55295 } 55296 } else { 55297 if (currentScore < scoreToBeat) { 55298 scoreToBeat = currentScore; 55299 bestMoment = tempConfig; 55300 } 55301 } 55302 } 55303 55304 extend(config, bestMoment || tempConfig); 55305 } 55306 55307 function configFromObject(config) { 55308 if (config._d) { 55309 return; 55310 } 55311 55312 var i = normalizeObjectUnits(config._i), 55313 dayOrDate = i.day === undefined ? i.date : i.day; 55314 config._a = map( 55315 [i.year, i.month, dayOrDate, i.hour, i.minute, i.second, i.millisecond], 55316 function (obj) { 55317 return obj && parseInt(obj, 10); 55318 } 55319 ); 55320 55321 configFromArray(config); 55322 } 55323 55324 function createFromConfig(config) { 55325 var res = new Moment(checkOverflow(prepareConfig(config))); 55326 if (res._nextDay) { 55327 // Adding is smart enough around DST 55328 res.add(1, 'd'); 55329 res._nextDay = undefined; 55330 } 55331 55332 return res; 55333 } 55334 55335 function prepareConfig(config) { 55336 var input = config._i, 55337 format = config._f; 55338 55339 config._locale = config._locale || getLocale(config._l); 55340 55341 if (input === null || (format === undefined && input === '')) { 55342 return createInvalid({ nullInput: true }); 55343 } 55344 55345 if (typeof input === 'string') { 55346 config._i = input = config._locale.preparse(input); 55347 } 55348 55349 if (isMoment(input)) { 55350 return new Moment(checkOverflow(input)); 55351 } else if (isDate(input)) { 55352 config._d = input; 55353 } else if (isArray(format)) { 55354 configFromStringAndArray(config); 55355 } else if (format) { 55356 configFromStringAndFormat(config); 55357 } else { 55358 configFromInput(config); 55359 } 55360 55361 if (!isValid(config)) { 55362 config._d = null; 55363 } 55364 55365 return config; 55366 } 55367 55368 function configFromInput(config) { 55369 var input = config._i; 55370 if (isUndefined(input)) { 55371 config._d = new Date(hooks.now()); 55372 } else if (isDate(input)) { 55373 config._d = new Date(input.valueOf()); 55374 } else if (typeof input === 'string') { 55375 configFromString(config); 55376 } else if (isArray(input)) { 55377 config._a = map(input.slice(0), function (obj) { 55378 return parseInt(obj, 10); 55379 }); 55380 configFromArray(config); 55381 } else if (isObject(input)) { 55382 configFromObject(config); 55383 } else if (isNumber(input)) { 55384 // from milliseconds 55385 config._d = new Date(input); 55386 } else { 55387 hooks.createFromInputFallback(config); 55388 } 55389 } 55390 55391 function createLocalOrUTC(input, format, locale, strict, isUTC) { 55392 var c = {}; 55393 55394 if (format === true || format === false) { 55395 strict = format; 55396 format = undefined; 55397 } 55398 55399 if (locale === true || locale === false) { 55400 strict = locale; 55401 locale = undefined; 55402 } 55403 55404 if ( 55405 (isObject(input) && isObjectEmpty(input)) || 55406 (isArray(input) && input.length === 0) 55407 ) { 55408 input = undefined; 55409 } 55410 // object construction must be done this way. 55411 // https://github.com/moment/moment/issues/1423 55412 c._isAMomentObject = true; 55413 c._useUTC = c._isUTC = isUTC; 55414 c._l = locale; 55415 c._i = input; 55416 c._f = format; 55417 c._strict = strict; 55418 55419 return createFromConfig(c); 55420 } 55421 55422 function createLocal(input, format, locale, strict) { 55423 return createLocalOrUTC(input, format, locale, strict, false); 55424 } 55425 55426 var prototypeMin = deprecate( 55427 'moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/', 55428 function () { 55429 var other = createLocal.apply(null, arguments); 55430 if (this.isValid() && other.isValid()) { 55431 return other < this ? this : other; 55432 } else { 55433 return createInvalid(); 55434 } 55435 } 55436 ), 55437 prototypeMax = deprecate( 55438 'moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/', 55439 function () { 55440 var other = createLocal.apply(null, arguments); 55441 if (this.isValid() && other.isValid()) { 55442 return other > this ? this : other; 55443 } else { 55444 return createInvalid(); 55445 } 55446 } 55447 ); 55448 55449 // Pick a moment m from moments so that m[fn](other) is true for all 55450 // other. This relies on the function fn to be transitive. 55451 // 55452 // moments should either be an array of moment objects or an array, whose 55453 // first element is an array of moment objects. 55454 function pickBy(fn, moments) { 55455 var res, i; 55456 if (moments.length === 1 && isArray(moments[0])) { 55457 moments = moments[0]; 55458 } 55459 if (!moments.length) { 55460 return createLocal(); 55461 } 55462 res = moments[0]; 55463 for (i = 1; i < moments.length; ++i) { 55464 if (!moments[i].isValid() || moments[i][fn](res)) { 55465 res = moments[i]; 55466 } 55467 } 55468 return res; 55469 } 55470 55471 // TODO: Use [].sort instead? 55472 function min() { 55473 var args = [].slice.call(arguments, 0); 55474 55475 return pickBy('isBefore', args); 55476 } 55477 55478 function max() { 55479 var args = [].slice.call(arguments, 0); 55480 55481 return pickBy('isAfter', args); 55482 } 55483 55484 var now = function () { 55485 return Date.now ? Date.now() : +new Date(); 55486 }; 55487 55488 var ordering = [ 55489 'year', 55490 'quarter', 55491 'month', 55492 'week', 55493 'day', 55494 'hour', 55495 'minute', 55496 'second', 55497 'millisecond', 55498 ]; 55499 55500 function isDurationValid(m) { 55501 var key, 55502 unitHasDecimal = false, 55503 i, 55504 orderLen = ordering.length; 55505 for (key in m) { 55506 if ( 55507 hasOwnProp(m, key) && 55508 !( 55509 indexOf.call(ordering, key) !== -1 && 55510 (m[key] == null || !isNaN(m[key])) 55511 ) 55512 ) { 55513 return false; 55514 } 55515 } 55516 55517 for (i = 0; i < orderLen; ++i) { 55518 if (m[ordering[i]]) { 55519 if (unitHasDecimal) { 55520 return false; // only allow non-integers for smallest unit 55521 } 55522 if (parseFloat(m[ordering[i]]) !== toInt(m[ordering[i]])) { 55523 unitHasDecimal = true; 55524 } 55525 } 55526 } 55527 55528 return true; 55529 } 55530 55531 function isValid$1() { 55532 return this._isValid; 55533 } 55534 55535 function createInvalid$1() { 55536 return createDuration(NaN); 55537 } 55538 55539 function Duration(duration) { 55540 var normalizedInput = normalizeObjectUnits(duration), 55541 years = normalizedInput.year || 0, 55542 quarters = normalizedInput.quarter || 0, 55543 months = normalizedInput.month || 0, 55544 weeks = normalizedInput.week || normalizedInput.isoWeek || 0, 55545 days = normalizedInput.day || 0, 55546 hours = normalizedInput.hour || 0, 55547 minutes = normalizedInput.minute || 0, 55548 seconds = normalizedInput.second || 0, 55549 milliseconds = normalizedInput.millisecond || 0; 55550 55551 this._isValid = isDurationValid(normalizedInput); 55552 55553 // representation for dateAddRemove 55554 this._milliseconds = 55555 +milliseconds + 55556 seconds * 1e3 + // 1000 55557 minutes * 6e4 + // 1000 * 60 55558 hours * 1000 * 60 * 60; //using 1000 * 60 * 60 instead of 36e5 to avoid floating point rounding errors https://github.com/moment/moment/issues/2978 55559 // Because of dateAddRemove treats 24 hours as different from a 55560 // day when working around DST, we need to store them separately 55561 this._days = +days + weeks * 7; 55562 // It is impossible to translate months into days without knowing 55563 // which months you are are talking about, so we have to store 55564 // it separately. 55565 this._months = +months + quarters * 3 + years * 12; 55566 55567 this._data = {}; 55568 55569 this._locale = getLocale(); 55570 55571 this._bubble(); 55572 } 55573 55574 function isDuration(obj) { 55575 return obj instanceof Duration; 55576 } 55577 55578 function absRound(number) { 55579 if (number < 0) { 55580 return Math.round(-1 * number) * -1; 55581 } else { 55582 return Math.round(number); 55583 } 55584 } 55585 55586 // compare two arrays, return the number of differences 55587 function compareArrays(array1, array2, dontConvert) { 55588 var len = Math.min(array1.length, array2.length), 55589 lengthDiff = Math.abs(array1.length - array2.length), 55590 diffs = 0, 55591 i; 55592 for (i = 0; i < len; i++) { 55593 if ( 55594 (dontConvert && array1[i] !== array2[i]) || 55595 (!dontConvert && toInt(array1[i]) !== toInt(array2[i])) 55596 ) { 55597 diffs++; 55598 } 55599 } 55600 return diffs + lengthDiff; 55601 } 55602 55603 // FORMATTING 55604 55605 function offset(token, separator) { 55606 addFormatToken(token, 0, 0, function () { 55607 var offset = this.utcOffset(), 55608 sign = '+'; 55609 if (offset < 0) { 55610 offset = -offset; 55611 sign = '-'; 55612 } 55613 return ( 55614 sign + 55615 zeroFill(~~(offset / 60), 2) + 55616 separator + 55617 zeroFill(~~offset % 60, 2) 55618 ); 55619 }); 55620 } 55621 55622 offset('Z', ':'); 55623 offset('ZZ', ''); 55624 55625 // PARSING 55626 55627 addRegexToken('Z', matchShortOffset); 55628 addRegexToken('ZZ', matchShortOffset); 55629 addParseToken(['Z', 'ZZ'], function (input, array, config) { 55630 config._useUTC = true; 55631 config._tzm = offsetFromString(matchShortOffset, input); 55632 }); 55633 55634 // HELPERS 55635 55636 // timezone chunker 55637 // '+10:00' > ['10', '00'] 55638 // '-1530' > ['-15', '30'] 55639 var chunkOffset = /([\+\-]|\d\d)/gi; 55640 55641 function offsetFromString(matcher, string) { 55642 var matches = (string || '').match(matcher), 55643 chunk, 55644 parts, 55645 minutes; 55646 55647 if (matches === null) { 55648 return null; 55649 } 55650 55651 chunk = matches[matches.length - 1] || []; 55652 parts = (chunk + '').match(chunkOffset) || ['-', 0, 0]; 55653 minutes = +(parts[1] * 60) + toInt(parts[2]); 55654 55655 return minutes === 0 ? 0 : parts[0] === '+' ? minutes : -minutes; 55656 } 55657 55658 // Return a moment from input, that is local/utc/zone equivalent to model. 55659 function cloneWithOffset(input, model) { 55660 var res, diff; 55661 if (model._isUTC) { 55662 res = model.clone(); 55663 diff = 55664 (isMoment(input) || isDate(input) 55665 ? input.valueOf() 55666 : createLocal(input).valueOf()) - res.valueOf(); 55667 // Use low-level api, because this fn is low-level api. 55668 res._d.setTime(res._d.valueOf() + diff); 55669 hooks.updateOffset(res, false); 55670 return res; 55671 } else { 55672 return createLocal(input).local(); 55673 } 55674 } 55675 55676 function getDateOffset(m) { 55677 // On Firefox.24 Date#getTimezoneOffset returns a floating point. 55678 // https://github.com/moment/moment/pull/1871 55679 return -Math.round(m._d.getTimezoneOffset()); 55680 } 55681 55682 // HOOKS 55683 55684 // This function will be called whenever a moment is mutated. 55685 // It is intended to keep the offset in sync with the timezone. 55686 hooks.updateOffset = function () {}; 55687 55688 // MOMENTS 55689 55690 // keepLocalTime = true means only change the timezone, without 55691 // affecting the local hour. So 5:31:26 +0300 --[utcOffset(2, true)]--> 55692 // 5:31:26 +0200 It is possible that 5:31:26 doesn't exist with offset 55693 // +0200, so we adjust the time as needed, to be valid. 55694 // 55695 // Keeping the time actually adds/subtracts (one hour) 55696 // from the actual represented time. That is why we call updateOffset 55697 // a second time. In case it wants us to change the offset again 55698 // _changeInProgress == true case, then we have to adjust, because 55699 // there is no such time in the given timezone. 55700 function getSetOffset(input, keepLocalTime, keepMinutes) { 55701 var offset = this._offset || 0, 55702 localAdjust; 55703 if (!this.isValid()) { 55704 return input != null ? this : NaN; 55705 } 55706 if (input != null) { 55707 if (typeof input === 'string') { 55708 input = offsetFromString(matchShortOffset, input); 55709 if (input === null) { 55710 return this; 55711 } 55712 } else if (Math.abs(input) < 16 && !keepMinutes) { 55713 input = input * 60; 55714 } 55715 if (!this._isUTC && keepLocalTime) { 55716 localAdjust = getDateOffset(this); 55717 } 55718 this._offset = input; 55719 this._isUTC = true; 55720 if (localAdjust != null) { 55721 this.add(localAdjust, 'm'); 55722 } 55723 if (offset !== input) { 55724 if (!keepLocalTime || this._changeInProgress) { 55725 addSubtract( 55726 this, 55727 createDuration(input - offset, 'm'), 55728 1, 55729 false 55730 ); 55731 } else if (!this._changeInProgress) { 55732 this._changeInProgress = true; 55733 hooks.updateOffset(this, true); 55734 this._changeInProgress = null; 55735 } 55736 } 55737 return this; 55738 } else { 55739 return this._isUTC ? offset : getDateOffset(this); 55740 } 55741 } 55742 55743 function getSetZone(input, keepLocalTime) { 55744 if (input != null) { 55745 if (typeof input !== 'string') { 55746 input = -input; 55747 } 55748 55749 this.utcOffset(input, keepLocalTime); 55750 55751 return this; 55752 } else { 55753 return -this.utcOffset(); 55754 } 55755 } 55756 55757 function setOffsetToUTC(keepLocalTime) { 55758 return this.utcOffset(0, keepLocalTime); 55759 } 55760 55761 function setOffsetToLocal(keepLocalTime) { 55762 if (this._isUTC) { 55763 this.utcOffset(0, keepLocalTime); 55764 this._isUTC = false; 55765 55766 if (keepLocalTime) { 55767 this.subtract(getDateOffset(this), 'm'); 55768 } 55769 } 55770 return this; 55771 } 55772 55773 function setOffsetToParsedOffset() { 55774 if (this._tzm != null) { 55775 this.utcOffset(this._tzm, false, true); 55776 } else if (typeof this._i === 'string') { 55777 var tZone = offsetFromString(matchOffset, this._i); 55778 if (tZone != null) { 55779 this.utcOffset(tZone); 55780 } else { 55781 this.utcOffset(0, true); 55782 } 55783 } 55784 return this; 55785 } 55786 55787 function hasAlignedHourOffset(input) { 55788 if (!this.isValid()) { 55789 return false; 55790 } 55791 input = input ? createLocal(input).utcOffset() : 0; 55792 55793 return (this.utcOffset() - input) % 60 === 0; 55794 } 55795 55796 function isDaylightSavingTime() { 55797 return ( 55798 this.utcOffset() > this.clone().month(0).utcOffset() || 55799 this.utcOffset() > this.clone().month(5).utcOffset() 55800 ); 55801 } 55802 55803 function isDaylightSavingTimeShifted() { 55804 if (!isUndefined(this._isDSTShifted)) { 55805 return this._isDSTShifted; 55806 } 55807 55808 var c = {}, 55809 other; 55810 55811 copyConfig(c, this); 55812 c = prepareConfig(c); 55813 55814 if (c._a) { 55815 other = c._isUTC ? createUTC(c._a) : createLocal(c._a); 55816 this._isDSTShifted = 55817 this.isValid() && compareArrays(c._a, other.toArray()) > 0; 55818 } else { 55819 this._isDSTShifted = false; 55820 } 55821 55822 return this._isDSTShifted; 55823 } 55824 55825 function isLocal() { 55826 return this.isValid() ? !this._isUTC : false; 55827 } 55828 55829 function isUtcOffset() { 55830 return this.isValid() ? this._isUTC : false; 55831 } 55832 55833 function isUtc() { 55834 return this.isValid() ? this._isUTC && this._offset === 0 : false; 55835 } 55836 55837 // ASP.NET json date format regex 55838 var aspNetRegex = /^(-|\+)?(?:(\d*)[. ])?(\d+):(\d+)(?::(\d+)(\.\d*)?)?$/, 55839 // from http://docs.closure-library.googlecode.com/git/closure_goog_date_date.js.source.html 55840 // somewhat more in line with 4.4.3.2 2004 spec, but allows decimal anywhere 55841 // and further modified to allow for strings containing both week and day 55842 isoRegex = 55843 /^(-|\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/; 55844 55845 function createDuration(input, key) { 55846 var duration = input, 55847 // matching against regexp is expensive, do it on demand 55848 match = null, 55849 sign, 55850 ret, 55851 diffRes; 55852 55853 if (isDuration(input)) { 55854 duration = { 55855 ms: input._milliseconds, 55856 d: input._days, 55857 M: input._months, 55858 }; 55859 } else if (isNumber(input) || !isNaN(+input)) { 55860 duration = {}; 55861 if (key) { 55862 duration[key] = +input; 55863 } else { 55864 duration.milliseconds = +input; 55865 } 55866 } else if ((match = aspNetRegex.exec(input))) { 55867 sign = match[1] === '-' ? -1 : 1; 55868 duration = { 55869 y: 0, 55870 d: toInt(match[DATE]) * sign, 55871 h: toInt(match[HOUR]) * sign, 55872 m: toInt(match[MINUTE]) * sign, 55873 s: toInt(match[SECOND]) * sign, 55874 ms: toInt(absRound(match[MILLISECOND] * 1000)) * sign, // the millisecond decimal point is included in the match 55875 }; 55876 } else if ((match = isoRegex.exec(input))) { 55877 sign = match[1] === '-' ? -1 : 1; 55878 duration = { 55879 y: parseIso(match[2], sign), 55880 M: parseIso(match[3], sign), 55881 w: parseIso(match[4], sign), 55882 d: parseIso(match[5], sign), 55883 h: parseIso(match[6], sign), 55884 m: parseIso(match[7], sign), 55885 s: parseIso(match[8], sign), 55886 }; 55887 } else if (duration == null) { 55888 // checks for null or undefined 55889 duration = {}; 55890 } else if ( 55891 typeof duration === 'object' && 55892 ('from' in duration || 'to' in duration) 55893 ) { 55894 diffRes = momentsDifference( 55895 createLocal(duration.from), 55896 createLocal(duration.to) 55897 ); 55898 55899 duration = {}; 55900 duration.ms = diffRes.milliseconds; 55901 duration.M = diffRes.months; 55902 } 55903 55904 ret = new Duration(duration); 55905 55906 if (isDuration(input) && hasOwnProp(input, '_locale')) { 55907 ret._locale = input._locale; 55908 } 55909 55910 if (isDuration(input) && hasOwnProp(input, '_isValid')) { 55911 ret._isValid = input._isValid; 55912 } 55913 55914 return ret; 55915 } 55916 55917 createDuration.fn = Duration.prototype; 55918 createDuration.invalid = createInvalid$1; 55919 55920 function parseIso(inp, sign) { 55921 // We'd normally use ~~inp for this, but unfortunately it also 55922 // converts floats to ints. 55923 // inp may be undefined, so careful calling replace on it. 55924 var res = inp && parseFloat(inp.replace(',', '.')); 55925 // apply sign while we're at it 55926 return (isNaN(res) ? 0 : res) * sign; 55927 } 55928 55929 function positiveMomentsDifference(base, other) { 55930 var res = {}; 55931 55932 res.months = 55933 other.month() - base.month() + (other.year() - base.year()) * 12; 55934 if (base.clone().add(res.months, 'M').isAfter(other)) { 55935 --res.months; 55936 } 55937 55938 res.milliseconds = +other - +base.clone().add(res.months, 'M'); 55939 55940 return res; 55941 } 55942 55943 function momentsDifference(base, other) { 55944 var res; 55945 if (!(base.isValid() && other.isValid())) { 55946 return { milliseconds: 0, months: 0 }; 55947 } 55948 55949 other = cloneWithOffset(other, base); 55950 if (base.isBefore(other)) { 55951 res = positiveMomentsDifference(base, other); 55952 } else { 55953 res = positiveMomentsDifference(other, base); 55954 res.milliseconds = -res.milliseconds; 55955 res.months = -res.months; 55956 } 55957 55958 return res; 55959 } 55960 55961 // TODO: remove 'name' arg after deprecation is removed 55962 function createAdder(direction, name) { 55963 return function (val, period) { 55964 var dur, tmp; 55965 //invert the arguments, but complain about it 55966 if (period !== null && !isNaN(+period)) { 55967 deprecateSimple( 55968 name, 55969 'moment().' + 55970 name + 55971 '(period, number) is deprecated. Please use moment().' + 55972 name + 55973 '(number, period). ' + 55974 'See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info.' 55975 ); 55976 tmp = val; 55977 val = period; 55978 period = tmp; 55979 } 55980 55981 dur = createDuration(val, period); 55982 addSubtract(this, dur, direction); 55983 return this; 55984 }; 55985 } 55986 55987 function addSubtract(mom, duration, isAdding, updateOffset) { 55988 var milliseconds = duration._milliseconds, 55989 days = absRound(duration._days), 55990 months = absRound(duration._months); 55991 55992 if (!mom.isValid()) { 55993 // No op 55994 return; 55995 } 55996 55997 updateOffset = updateOffset == null ? true : updateOffset; 55998 55999 if (months) { 56000 setMonth(mom, get(mom, 'Month') + months * isAdding); 56001 } 56002 if (days) { 56003 set$1(mom, 'Date', get(mom, 'Date') + days * isAdding); 56004 } 56005 if (milliseconds) { 56006 mom._d.setTime(mom._d.valueOf() + milliseconds * isAdding); 56007 } 56008 if (updateOffset) { 56009 hooks.updateOffset(mom, days || months); 56010 } 56011 } 56012 56013 var add = createAdder(1, 'add'), 56014 subtract = createAdder(-1, 'subtract'); 56015 56016 function isString(input) { 56017 return typeof input === 'string' || input instanceof String; 56018 } 56019 56020 // type MomentInput = Moment | Date | string | number | (number | string)[] | MomentInputObject | void; // null | undefined 56021 function isMomentInput(input) { 56022 return ( 56023 isMoment(input) || 56024 isDate(input) || 56025 isString(input) || 56026 isNumber(input) || 56027 isNumberOrStringArray(input) || 56028 isMomentInputObject(input) || 56029 input === null || 56030 input === undefined 56031 ); 56032 } 56033 56034 function isMomentInputObject(input) { 56035 var objectTest = isObject(input) && !isObjectEmpty(input), 56036 propertyTest = false, 56037 properties = [ 56038 'years', 56039 'year', 56040 'y', 56041 'months', 56042 'month', 56043 'M', 56044 'days', 56045 'day', 56046 'd', 56047 'dates', 56048 'date', 56049 'D', 56050 'hours', 56051 'hour', 56052 'h', 56053 'minutes', 56054 'minute', 56055 'm', 56056 'seconds', 56057 'second', 56058 's', 56059 'milliseconds', 56060 'millisecond', 56061 'ms', 56062 ], 56063 i, 56064 property, 56065 propertyLen = properties.length; 56066 56067 for (i = 0; i < propertyLen; i += 1) { 56068 property = properties[i]; 56069 propertyTest = propertyTest || hasOwnProp(input, property); 56070 } 56071 56072 return objectTest && propertyTest; 56073 } 56074 56075 function isNumberOrStringArray(input) { 56076 var arrayTest = isArray(input), 56077 dataTypeTest = false; 56078 if (arrayTest) { 56079 dataTypeTest = 56080 input.filter(function (item) { 56081 return !isNumber(item) && isString(input); 56082 }).length === 0; 56083 } 56084 return arrayTest && dataTypeTest; 56085 } 56086 56087 function isCalendarSpec(input) { 56088 var objectTest = isObject(input) && !isObjectEmpty(input), 56089 propertyTest = false, 56090 properties = [ 56091 'sameDay', 56092 'nextDay', 56093 'lastDay', 56094 'nextWeek', 56095 'lastWeek', 56096 'sameElse', 56097 ], 56098 i, 56099 property; 56100 56101 for (i = 0; i < properties.length; i += 1) { 56102 property = properties[i]; 56103 propertyTest = propertyTest || hasOwnProp(input, property); 56104 } 56105 56106 return objectTest && propertyTest; 56107 } 56108 56109 function getCalendarFormat(myMoment, now) { 56110 var diff = myMoment.diff(now, 'days', true); 56111 return diff < -6 56112 ? 'sameElse' 56113 : diff < -1 56114 ? 'lastWeek' 56115 : diff < 0 56116 ? 'lastDay' 56117 : diff < 1 56118 ? 'sameDay' 56119 : diff < 2 56120 ? 'nextDay' 56121 : diff < 7 56122 ? 'nextWeek' 56123 : 'sameElse'; 56124 } 56125 56126 function calendar$1(time, formats) { 56127 // Support for single parameter, formats only overload to the calendar function 56128 if (arguments.length === 1) { 56129 if (!arguments[0]) { 56130 time = undefined; 56131 formats = undefined; 56132 } else if (isMomentInput(arguments[0])) { 56133 time = arguments[0]; 56134 formats = undefined; 56135 } else if (isCalendarSpec(arguments[0])) { 56136 formats = arguments[0]; 56137 time = undefined; 56138 } 56139 } 56140 // We want to compare the start of today, vs this. 56141 // Getting start-of-today depends on whether we're local/utc/offset or not. 56142 var now = time || createLocal(), 56143 sod = cloneWithOffset(now, this).startOf('day'), 56144 format = hooks.calendarFormat(this, sod) || 'sameElse', 56145 output = 56146 formats && 56147 (isFunction(formats[format]) 56148 ? formats[format].call(this, now) 56149 : formats[format]); 56150 56151 return this.format( 56152 output || this.localeData().calendar(format, this, createLocal(now)) 56153 ); 56154 } 56155 56156 function clone() { 56157 return new Moment(this); 56158 } 56159 56160 function isAfter(input, units) { 56161 var localInput = isMoment(input) ? input : createLocal(input); 56162 if (!(this.isValid() && localInput.isValid())) { 56163 return false; 56164 } 56165 units = normalizeUnits(units) || 'millisecond'; 56166 if (units === 'millisecond') { 56167 return this.valueOf() > localInput.valueOf(); 56168 } else { 56169 return localInput.valueOf() < this.clone().startOf(units).valueOf(); 56170 } 56171 } 56172 56173 function isBefore(input, units) { 56174 var localInput = isMoment(input) ? input : createLocal(input); 56175 if (!(this.isValid() && localInput.isValid())) { 56176 return false; 56177 } 56178 units = normalizeUnits(units) || 'millisecond'; 56179 if (units === 'millisecond') { 56180 return this.valueOf() < localInput.valueOf(); 56181 } else { 56182 return this.clone().endOf(units).valueOf() < localInput.valueOf(); 56183 } 56184 } 56185 56186 function isBetween(from, to, units, inclusivity) { 56187 var localFrom = isMoment(from) ? from : createLocal(from), 56188 localTo = isMoment(to) ? to : createLocal(to); 56189 if (!(this.isValid() && localFrom.isValid() && localTo.isValid())) { 56190 return false; 56191 } 56192 inclusivity = inclusivity || '()'; 56193 return ( 56194 (inclusivity[0] === '(' 56195 ? this.isAfter(localFrom, units) 56196 : !this.isBefore(localFrom, units)) && 56197 (inclusivity[1] === ')' 56198 ? this.isBefore(localTo, units) 56199 : !this.isAfter(localTo, units)) 56200 ); 56201 } 56202 56203 function isSame(input, units) { 56204 var localInput = isMoment(input) ? input : createLocal(input), 56205 inputMs; 56206 if (!(this.isValid() && localInput.isValid())) { 56207 return false; 56208 } 56209 units = normalizeUnits(units) || 'millisecond'; 56210 if (units === 'millisecond') { 56211 return this.valueOf() === localInput.valueOf(); 56212 } else { 56213 inputMs = localInput.valueOf(); 56214 return ( 56215 this.clone().startOf(units).valueOf() <= inputMs && 56216 inputMs <= this.clone().endOf(units).valueOf() 56217 ); 56218 } 56219 } 56220 56221 function isSameOrAfter(input, units) { 56222 return this.isSame(input, units) || this.isAfter(input, units); 56223 } 56224 56225 function isSameOrBefore(input, units) { 56226 return this.isSame(input, units) || this.isBefore(input, units); 56227 } 56228 56229 function diff(input, units, asFloat) { 56230 var that, zoneDelta, output; 56231 56232 if (!this.isValid()) { 56233 return NaN; 56234 } 56235 56236 that = cloneWithOffset(input, this); 56237 56238 if (!that.isValid()) { 56239 return NaN; 56240 } 56241 56242 zoneDelta = (that.utcOffset() - this.utcOffset()) * 6e4; 56243 56244 units = normalizeUnits(units); 56245 56246 switch (units) { 56247 case 'year': 56248 output = monthDiff(this, that) / 12; 56249 break; 56250 case 'month': 56251 output = monthDiff(this, that); 56252 break; 56253 case 'quarter': 56254 output = monthDiff(this, that) / 3; 56255 break; 56256 case 'second': 56257 output = (this - that) / 1e3; 56258 break; // 1000 56259 case 'minute': 56260 output = (this - that) / 6e4; 56261 break; // 1000 * 60 56262 case 'hour': 56263 output = (this - that) / 36e5; 56264 break; // 1000 * 60 * 60 56265 case 'day': 56266 output = (this - that - zoneDelta) / 864e5; 56267 break; // 1000 * 60 * 60 * 24, negate dst 56268 case 'week': 56269 output = (this - that - zoneDelta) / 6048e5; 56270 break; // 1000 * 60 * 60 * 24 * 7, negate dst 56271 default: 56272 output = this - that; 56273 } 56274 56275 return asFloat ? output : absFloor(output); 56276 } 56277 56278 function monthDiff(a, b) { 56279 if (a.date() < b.date()) { 56280 // end-of-month calculations work correct when the start month has more 56281 // days than the end month. 56282 return -monthDiff(b, a); 56283 } 56284 // difference in months 56285 var wholeMonthDiff = (b.year() - a.year()) * 12 + (b.month() - a.month()), 56286 // b is in (anchor - 1 month, anchor + 1 month) 56287 anchor = a.clone().add(wholeMonthDiff, 'months'), 56288 anchor2, 56289 adjust; 56290 56291 if (b - anchor < 0) { 56292 anchor2 = a.clone().add(wholeMonthDiff - 1, 'months'); 56293 // linear across the month 56294 adjust = (b - anchor) / (anchor - anchor2); 56295 } else { 56296 anchor2 = a.clone().add(wholeMonthDiff + 1, 'months'); 56297 // linear across the month 56298 adjust = (b - anchor) / (anchor2 - anchor); 56299 } 56300 56301 //check for negative zero, return zero if negative zero 56302 return -(wholeMonthDiff + adjust) || 0; 56303 } 56304 56305 hooks.defaultFormat = 'YYYY-MM-DDTHH:mm:ssZ'; 56306 hooks.defaultFormatUtc = 'YYYY-MM-DDTHH:mm:ss[Z]'; 56307 56308 function toString() { 56309 return this.clone().locale('en').format('ddd MMM DD YYYY HH:mm:ss [GMT]ZZ'); 56310 } 56311 56312 function toISOString(keepOffset) { 56313 if (!this.isValid()) { 56314 return null; 56315 } 56316 var utc = keepOffset !== true, 56317 m = utc ? this.clone().utc() : this; 56318 if (m.year() < 0 || m.year() > 9999) { 56319 return formatMoment( 56320 m, 56321 utc 56322 ? 'YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]' 56323 : 'YYYYYY-MM-DD[T]HH:mm:ss.SSSZ' 56324 ); 56325 } 56326 if (isFunction(Date.prototype.toISOString)) { 56327 // native implementation is ~50x faster, use it when we can 56328 if (utc) { 56329 return this.toDate().toISOString(); 56330 } else { 56331 return new Date(this.valueOf() + this.utcOffset() * 60 * 1000) 56332 .toISOString() 56333 .replace('Z', formatMoment(m, 'Z')); 56334 } 56335 } 56336 return formatMoment( 56337 m, 56338 utc ? 'YYYY-MM-DD[T]HH:mm:ss.SSS[Z]' : 'YYYY-MM-DD[T]HH:mm:ss.SSSZ' 56339 ); 56340 } 56341 56342 /** 56343 * Return a human readable representation of a moment that can 56344 * also be evaluated to get a new moment which is the same 56345 * 56346 * @link https://nodejs.org/dist/latest/docs/api/util.html#util_custom_inspect_function_on_objects 56347 */ 56348 function inspect() { 56349 if (!this.isValid()) { 56350 return 'moment.invalid(/* ' + this._i + ' */)'; 56351 } 56352 var func = 'moment', 56353 zone = '', 56354 prefix, 56355 year, 56356 datetime, 56357 suffix; 56358 if (!this.isLocal()) { 56359 func = this.utcOffset() === 0 ? 'moment.utc' : 'moment.parseZone'; 56360 zone = 'Z'; 56361 } 56362 prefix = '[' + func + '("]'; 56363 year = 0 <= this.year() && this.year() <= 9999 ? 'YYYY' : 'YYYYYY'; 56364 datetime = '-MM-DD[T]HH:mm:ss.SSS'; 56365 suffix = zone + '[")]'; 56366 56367 return this.format(prefix + year + datetime + suffix); 56368 } 56369 56370 function format(inputString) { 56371 if (!inputString) { 56372 inputString = this.isUtc() 56373 ? hooks.defaultFormatUtc 56374 : hooks.defaultFormat; 56375 } 56376 var output = formatMoment(this, inputString); 56377 return this.localeData().postformat(output); 56378 } 56379 56380 function from(time, withoutSuffix) { 56381 if ( 56382 this.isValid() && 56383 ((isMoment(time) && time.isValid()) || createLocal(time).isValid()) 56384 ) { 56385 return createDuration({ to: this, from: time }) 56386 .locale(this.locale()) 56387 .humanize(!withoutSuffix); 56388 } else { 56389 return this.localeData().invalidDate(); 56390 } 56391 } 56392 56393 function fromNow(withoutSuffix) { 56394 return this.from(createLocal(), withoutSuffix); 56395 } 56396 56397 function to(time, withoutSuffix) { 56398 if ( 56399 this.isValid() && 56400 ((isMoment(time) && time.isValid()) || createLocal(time).isValid()) 56401 ) { 56402 return createDuration({ from: this, to: time }) 56403 .locale(this.locale()) 56404 .humanize(!withoutSuffix); 56405 } else { 56406 return this.localeData().invalidDate(); 56407 } 56408 } 56409 56410 function toNow(withoutSuffix) { 56411 return this.to(createLocal(), withoutSuffix); 56412 } 56413 56414 // If passed a locale key, it will set the locale for this 56415 // instance. Otherwise, it will return the locale configuration 56416 // variables for this instance. 56417 function locale(key) { 56418 var newLocaleData; 56419 56420 if (key === undefined) { 56421 return this._locale._abbr; 56422 } else { 56423 newLocaleData = getLocale(key); 56424 if (newLocaleData != null) { 56425 this._locale = newLocaleData; 56426 } 56427 return this; 56428 } 56429 } 56430 56431 var lang = deprecate( 56432 'moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.', 56433 function (key) { 56434 if (key === undefined) { 56435 return this.localeData(); 56436 } else { 56437 return this.locale(key); 56438 } 56439 } 56440 ); 56441 56442 function localeData() { 56443 return this._locale; 56444 } 56445 56446 var MS_PER_SECOND = 1000, 56447 MS_PER_MINUTE = 60 * MS_PER_SECOND, 56448 MS_PER_HOUR = 60 * MS_PER_MINUTE, 56449 MS_PER_400_YEARS = (365 * 400 + 97) * 24 * MS_PER_HOUR; 56450 56451 // actual modulo - handles negative numbers (for dates before 1970): 56452 function mod$1(dividend, divisor) { 56453 return ((dividend % divisor) + divisor) % divisor; 56454 } 56455 56456 function localStartOfDate(y, m, d) { 56457 // the date constructor remaps years 0-99 to 1900-1999 56458 if (y < 100 && y >= 0) { 56459 // preserve leap years using a full 400 year cycle, then reset 56460 return new Date(y + 400, m, d) - MS_PER_400_YEARS; 56461 } else { 56462 return new Date(y, m, d).valueOf(); 56463 } 56464 } 56465 56466 function utcStartOfDate(y, m, d) { 56467 // Date.UTC remaps years 0-99 to 1900-1999 56468 if (y < 100 && y >= 0) { 56469 // preserve leap years using a full 400 year cycle, then reset 56470 return Date.UTC(y + 400, m, d) - MS_PER_400_YEARS; 56471 } else { 56472 return Date.UTC(y, m, d); 56473 } 56474 } 56475 56476 function startOf(units) { 56477 var time, startOfDate; 56478 units = normalizeUnits(units); 56479 if (units === undefined || units === 'millisecond' || !this.isValid()) { 56480 return this; 56481 } 56482 56483 startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate; 56484 56485 switch (units) { 56486 case 'year': 56487 time = startOfDate(this.year(), 0, 1); 56488 break; 56489 case 'quarter': 56490 time = startOfDate( 56491 this.year(), 56492 this.month() - (this.month() % 3), 56493 1 56494 ); 56495 break; 56496 case 'month': 56497 time = startOfDate(this.year(), this.month(), 1); 56498 break; 56499 case 'week': 56500 time = startOfDate( 56501 this.year(), 56502 this.month(), 56503 this.date() - this.weekday() 56504 ); 56505 break; 56506 case 'isoWeek': 56507 time = startOfDate( 56508 this.year(), 56509 this.month(), 56510 this.date() - (this.isoWeekday() - 1) 56511 ); 56512 break; 56513 case 'day': 56514 case 'date': 56515 time = startOfDate(this.year(), this.month(), this.date()); 56516 break; 56517 case 'hour': 56518 time = this._d.valueOf(); 56519 time -= mod$1( 56520 time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE), 56521 MS_PER_HOUR 56522 ); 56523 break; 56524 case 'minute': 56525 time = this._d.valueOf(); 56526 time -= mod$1(time, MS_PER_MINUTE); 56527 break; 56528 case 'second': 56529 time = this._d.valueOf(); 56530 time -= mod$1(time, MS_PER_SECOND); 56531 break; 56532 } 56533 56534 this._d.setTime(time); 56535 hooks.updateOffset(this, true); 56536 return this; 56537 } 56538 56539 function endOf(units) { 56540 var time, startOfDate; 56541 units = normalizeUnits(units); 56542 if (units === undefined || units === 'millisecond' || !this.isValid()) { 56543 return this; 56544 } 56545 56546 startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate; 56547 56548 switch (units) { 56549 case 'year': 56550 time = startOfDate(this.year() + 1, 0, 1) - 1; 56551 break; 56552 case 'quarter': 56553 time = 56554 startOfDate( 56555 this.year(), 56556 this.month() - (this.month() % 3) + 3, 56557 1 56558 ) - 1; 56559 break; 56560 case 'month': 56561 time = startOfDate(this.year(), this.month() + 1, 1) - 1; 56562 break; 56563 case 'week': 56564 time = 56565 startOfDate( 56566 this.year(), 56567 this.month(), 56568 this.date() - this.weekday() + 7 56569 ) - 1; 56570 break; 56571 case 'isoWeek': 56572 time = 56573 startOfDate( 56574 this.year(), 56575 this.month(), 56576 this.date() - (this.isoWeekday() - 1) + 7 56577 ) - 1; 56578 break; 56579 case 'day': 56580 case 'date': 56581 time = startOfDate(this.year(), this.month(), this.date() + 1) - 1; 56582 break; 56583 case 'hour': 56584 time = this._d.valueOf(); 56585 time += 56586 MS_PER_HOUR - 56587 mod$1( 56588 time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE), 56589 MS_PER_HOUR 56590 ) - 56591 1; 56592 break; 56593 case 'minute': 56594 time = this._d.valueOf(); 56595 time += MS_PER_MINUTE - mod$1(time, MS_PER_MINUTE) - 1; 56596 break; 56597 case 'second': 56598 time = this._d.valueOf(); 56599 time += MS_PER_SECOND - mod$1(time, MS_PER_SECOND) - 1; 56600 break; 56601 } 56602 56603 this._d.setTime(time); 56604 hooks.updateOffset(this, true); 56605 return this; 56606 } 56607 56608 function valueOf() { 56609 return this._d.valueOf() - (this._offset || 0) * 60000; 56610 } 56611 56612 function unix() { 56613 return Math.floor(this.valueOf() / 1000); 56614 } 56615 56616 function toDate() { 56617 return new Date(this.valueOf()); 56618 } 56619 56620 function toArray() { 56621 var m = this; 56622 return [ 56623 m.year(), 56624 m.month(), 56625 m.date(), 56626 m.hour(), 56627 m.minute(), 56628 m.second(), 56629 m.millisecond(), 56630 ]; 56631 } 56632 56633 function toObject() { 56634 var m = this; 56635 return { 56636 years: m.year(), 56637 months: m.month(), 56638 date: m.date(), 56639 hours: m.hours(), 56640 minutes: m.minutes(), 56641 seconds: m.seconds(), 56642 milliseconds: m.milliseconds(), 56643 }; 56644 } 56645 56646 function toJSON() { 56647 // new Date(NaN).toJSON() === null 56648 return this.isValid() ? this.toISOString() : null; 56649 } 56650 56651 function isValid$2() { 56652 return isValid(this); 56653 } 56654 56655 function parsingFlags() { 56656 return extend({}, getParsingFlags(this)); 56657 } 56658 56659 function invalidAt() { 56660 return getParsingFlags(this).overflow; 56661 } 56662 56663 function creationData() { 56664 return { 56665 input: this._i, 56666 format: this._f, 56667 locale: this._locale, 56668 isUTC: this._isUTC, 56669 strict: this._strict, 56670 }; 56671 } 56672 56673 addFormatToken('N', 0, 0, 'eraAbbr'); 56674 addFormatToken('NN', 0, 0, 'eraAbbr'); 56675 addFormatToken('NNN', 0, 0, 'eraAbbr'); 56676 addFormatToken('NNNN', 0, 0, 'eraName'); 56677 addFormatToken('NNNNN', 0, 0, 'eraNarrow'); 56678 56679 addFormatToken('y', ['y', 1], 'yo', 'eraYear'); 56680 addFormatToken('y', ['yy', 2], 0, 'eraYear'); 56681 addFormatToken('y', ['yyy', 3], 0, 'eraYear'); 56682 addFormatToken('y', ['yyyy', 4], 0, 'eraYear'); 56683 56684 addRegexToken('N', matchEraAbbr); 56685 addRegexToken('NN', matchEraAbbr); 56686 addRegexToken('NNN', matchEraAbbr); 56687 addRegexToken('NNNN', matchEraName); 56688 addRegexToken('NNNNN', matchEraNarrow); 56689 56690 addParseToken( 56691 ['N', 'NN', 'NNN', 'NNNN', 'NNNNN'], 56692 function (input, array, config, token) { 56693 var era = config._locale.erasParse(input, token, config._strict); 56694 if (era) { 56695 getParsingFlags(config).era = era; 56696 } else { 56697 getParsingFlags(config).invalidEra = input; 56698 } 56699 } 56700 ); 56701 56702 addRegexToken('y', matchUnsigned); 56703 addRegexToken('yy', matchUnsigned); 56704 addRegexToken('yyy', matchUnsigned); 56705 addRegexToken('yyyy', matchUnsigned); 56706 addRegexToken('yo', matchEraYearOrdinal); 56707 56708 addParseToken(['y', 'yy', 'yyy', 'yyyy'], YEAR); 56709 addParseToken(['yo'], function (input, array, config, token) { 56710 var match; 56711 if (config._locale._eraYearOrdinalRegex) { 56712 match = input.match(config._locale._eraYearOrdinalRegex); 56713 } 56714 56715 if (config._locale.eraYearOrdinalParse) { 56716 array[YEAR] = config._locale.eraYearOrdinalParse(input, match); 56717 } else { 56718 array[YEAR] = parseInt(input, 10); 56719 } 56720 }); 56721 56722 function localeEras(m, format) { 56723 var i, 56724 l, 56725 date, 56726 eras = this._eras || getLocale('en')._eras; 56727 for (i = 0, l = eras.length; i < l; ++i) { 56728 switch (typeof eras[i].since) { 56729 case 'string': 56730 // truncate time 56731 date = hooks(eras[i].since).startOf('day'); 56732 eras[i].since = date.valueOf(); 56733 break; 56734 } 56735 56736 switch (typeof eras[i].until) { 56737 case 'undefined': 56738 eras[i].until = +Infinity; 56739 break; 56740 case 'string': 56741 // truncate time 56742 date = hooks(eras[i].until).startOf('day').valueOf(); 56743 eras[i].until = date.valueOf(); 56744 break; 56745 } 56746 } 56747 return eras; 56748 } 56749 56750 function localeErasParse(eraName, format, strict) { 56751 var i, 56752 l, 56753 eras = this.eras(), 56754 name, 56755 abbr, 56756 narrow; 56757 eraName = eraName.toUpperCase(); 56758 56759 for (i = 0, l = eras.length; i < l; ++i) { 56760 name = eras[i].name.toUpperCase(); 56761 abbr = eras[i].abbr.toUpperCase(); 56762 narrow = eras[i].narrow.toUpperCase(); 56763 56764 if (strict) { 56765 switch (format) { 56766 case 'N': 56767 case 'NN': 56768 case 'NNN': 56769 if (abbr === eraName) { 56770 return eras[i]; 56771 } 56772 break; 56773 56774 case 'NNNN': 56775 if (name === eraName) { 56776 return eras[i]; 56777 } 56778 break; 56779 56780 case 'NNNNN': 56781 if (narrow === eraName) { 56782 return eras[i]; 56783 } 56784 break; 56785 } 56786 } else if ([name, abbr, narrow].indexOf(eraName) >= 0) { 56787 return eras[i]; 56788 } 56789 } 56790 } 56791 56792 function localeErasConvertYear(era, year) { 56793 var dir = era.since <= era.until ? +1 : -1; 56794 if (year === undefined) { 56795 return hooks(era.since).year(); 56796 } else { 56797 return hooks(era.since).year() + (year - era.offset) * dir; 56798 } 56799 } 56800 56801 function getEraName() { 56802 var i, 56803 l, 56804 val, 56805 eras = this.localeData().eras(); 56806 for (i = 0, l = eras.length; i < l; ++i) { 56807 // truncate time 56808 val = this.clone().startOf('day').valueOf(); 56809 56810 if (eras[i].since <= val && val <= eras[i].until) { 56811 return eras[i].name; 56812 } 56813 if (eras[i].until <= val && val <= eras[i].since) { 56814 return eras[i].name; 56815 } 56816 } 56817 56818 return ''; 56819 } 56820 56821 function getEraNarrow() { 56822 var i, 56823 l, 56824 val, 56825 eras = this.localeData().eras(); 56826 for (i = 0, l = eras.length; i < l; ++i) { 56827 // truncate time 56828 val = this.clone().startOf('day').valueOf(); 56829 56830 if (eras[i].since <= val && val <= eras[i].until) { 56831 return eras[i].narrow; 56832 } 56833 if (eras[i].until <= val && val <= eras[i].since) { 56834 return eras[i].narrow; 56835 } 56836 } 56837 56838 return ''; 56839 } 56840 56841 function getEraAbbr() { 56842 var i, 56843 l, 56844 val, 56845 eras = this.localeData().eras(); 56846 for (i = 0, l = eras.length; i < l; ++i) { 56847 // truncate time 56848 val = this.clone().startOf('day').valueOf(); 56849 56850 if (eras[i].since <= val && val <= eras[i].until) { 56851 return eras[i].abbr; 56852 } 56853 if (eras[i].until <= val && val <= eras[i].since) { 56854 return eras[i].abbr; 56855 } 56856 } 56857 56858 return ''; 56859 } 56860 56861 function getEraYear() { 56862 var i, 56863 l, 56864 dir, 56865 val, 56866 eras = this.localeData().eras(); 56867 for (i = 0, l = eras.length; i < l; ++i) { 56868 dir = eras[i].since <= eras[i].until ? +1 : -1; 56869 56870 // truncate time 56871 val = this.clone().startOf('day').valueOf(); 56872 56873 if ( 56874 (eras[i].since <= val && val <= eras[i].until) || 56875 (eras[i].until <= val && val <= eras[i].since) 56876 ) { 56877 return ( 56878 (this.year() - hooks(eras[i].since).year()) * dir + 56879 eras[i].offset 56880 ); 56881 } 56882 } 56883 56884 return this.year(); 56885 } 56886 56887 function erasNameRegex(isStrict) { 56888 if (!hasOwnProp(this, '_erasNameRegex')) { 56889 computeErasParse.call(this); 56890 } 56891 return isStrict ? this._erasNameRegex : this._erasRegex; 56892 } 56893 56894 function erasAbbrRegex(isStrict) { 56895 if (!hasOwnProp(this, '_erasAbbrRegex')) { 56896 computeErasParse.call(this); 56897 } 56898 return isStrict ? this._erasAbbrRegex : this._erasRegex; 56899 } 56900 56901 function erasNarrowRegex(isStrict) { 56902 if (!hasOwnProp(this, '_erasNarrowRegex')) { 56903 computeErasParse.call(this); 56904 } 56905 return isStrict ? this._erasNarrowRegex : this._erasRegex; 56906 } 56907 56908 function matchEraAbbr(isStrict, locale) { 56909 return locale.erasAbbrRegex(isStrict); 56910 } 56911 56912 function matchEraName(isStrict, locale) { 56913 return locale.erasNameRegex(isStrict); 56914 } 56915 56916 function matchEraNarrow(isStrict, locale) { 56917 return locale.erasNarrowRegex(isStrict); 56918 } 56919 56920 function matchEraYearOrdinal(isStrict, locale) { 56921 return locale._eraYearOrdinalRegex || matchUnsigned; 56922 } 56923 56924 function computeErasParse() { 56925 var abbrPieces = [], 56926 namePieces = [], 56927 narrowPieces = [], 56928 mixedPieces = [], 56929 i, 56930 l, 56931 erasName, 56932 erasAbbr, 56933 erasNarrow, 56934 eras = this.eras(); 56935 56936 for (i = 0, l = eras.length; i < l; ++i) { 56937 erasName = regexEscape(eras[i].name); 56938 erasAbbr = regexEscape(eras[i].abbr); 56939 erasNarrow = regexEscape(eras[i].narrow); 56940 56941 namePieces.push(erasName); 56942 abbrPieces.push(erasAbbr); 56943 narrowPieces.push(erasNarrow); 56944 mixedPieces.push(erasName); 56945 mixedPieces.push(erasAbbr); 56946 mixedPieces.push(erasNarrow); 56947 } 56948 56949 this._erasRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i'); 56950 this._erasNameRegex = new RegExp('^(' + namePieces.join('|') + ')', 'i'); 56951 this._erasAbbrRegex = new RegExp('^(' + abbrPieces.join('|') + ')', 'i'); 56952 this._erasNarrowRegex = new RegExp( 56953 '^(' + narrowPieces.join('|') + ')', 56954 'i' 56955 ); 56956 } 56957 56958 // FORMATTING 56959 56960 addFormatToken(0, ['gg', 2], 0, function () { 56961 return this.weekYear() % 100; 56962 }); 56963 56964 addFormatToken(0, ['GG', 2], 0, function () { 56965 return this.isoWeekYear() % 100; 56966 }); 56967 56968 function addWeekYearFormatToken(token, getter) { 56969 addFormatToken(0, [token, token.length], 0, getter); 56970 } 56971 56972 addWeekYearFormatToken('gggg', 'weekYear'); 56973 addWeekYearFormatToken('ggggg', 'weekYear'); 56974 addWeekYearFormatToken('GGGG', 'isoWeekYear'); 56975 addWeekYearFormatToken('GGGGG', 'isoWeekYear'); 56976 56977 // ALIASES 56978 56979 // PARSING 56980 56981 addRegexToken('G', matchSigned); 56982 addRegexToken('g', matchSigned); 56983 addRegexToken('GG', match1to2, match2); 56984 addRegexToken('gg', match1to2, match2); 56985 addRegexToken('GGGG', match1to4, match4); 56986 addRegexToken('gggg', match1to4, match4); 56987 addRegexToken('GGGGG', match1to6, match6); 56988 addRegexToken('ggggg', match1to6, match6); 56989 56990 addWeekParseToken( 56991 ['gggg', 'ggggg', 'GGGG', 'GGGGG'], 56992 function (input, week, config, token) { 56993 week[token.substr(0, 2)] = toInt(input); 56994 } 56995 ); 56996 56997 addWeekParseToken(['gg', 'GG'], function (input, week, config, token) { 56998 week[token] = hooks.parseTwoDigitYear(input); 56999 }); 57000 57001 // MOMENTS 57002 57003 function getSetWeekYear(input) { 57004 return getSetWeekYearHelper.call( 57005 this, 57006 input, 57007 this.week(), 57008 this.weekday() + this.localeData()._week.dow, 57009 this.localeData()._week.dow, 57010 this.localeData()._week.doy 57011 ); 57012 } 57013 57014 function getSetISOWeekYear(input) { 57015 return getSetWeekYearHelper.call( 57016 this, 57017 input, 57018 this.isoWeek(), 57019 this.isoWeekday(), 57020 1, 57021 4 57022 ); 57023 } 57024 57025 function getISOWeeksInYear() { 57026 return weeksInYear(this.year(), 1, 4); 57027 } 57028 57029 function getISOWeeksInISOWeekYear() { 57030 return weeksInYear(this.isoWeekYear(), 1, 4); 57031 } 57032 57033 function getWeeksInYear() { 57034 var weekInfo = this.localeData()._week; 57035 return weeksInYear(this.year(), weekInfo.dow, weekInfo.doy); 57036 } 57037 57038 function getWeeksInWeekYear() { 57039 var weekInfo = this.localeData()._week; 57040 return weeksInYear(this.weekYear(), weekInfo.dow, weekInfo.doy); 57041 } 57042 57043 function getSetWeekYearHelper(input, week, weekday, dow, doy) { 57044 var weeksTarget; 57045 if (input == null) { 57046 return weekOfYear(this, dow, doy).year; 57047 } else { 57048 weeksTarget = weeksInYear(input, dow, doy); 57049 if (week > weeksTarget) { 57050 week = weeksTarget; 57051 } 57052 return setWeekAll.call(this, input, week, weekday, dow, doy); 57053 } 57054 } 57055 57056 function setWeekAll(weekYear, week, weekday, dow, doy) { 57057 var dayOfYearData = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy), 57058 date = createUTCDate(dayOfYearData.year, 0, dayOfYearData.dayOfYear); 57059 57060 this.year(date.getUTCFullYear()); 57061 this.month(date.getUTCMonth()); 57062 this.date(date.getUTCDate()); 57063 return this; 57064 } 57065 57066 // FORMATTING 57067 57068 addFormatToken('Q', 0, 'Qo', 'quarter'); 57069 57070 // PARSING 57071 57072 addRegexToken('Q', match1); 57073 addParseToken('Q', function (input, array) { 57074 array[MONTH] = (toInt(input) - 1) * 3; 57075 }); 57076 57077 // MOMENTS 57078 57079 function getSetQuarter(input) { 57080 return input == null 57081 ? Math.ceil((this.month() + 1) / 3) 57082 : this.month((input - 1) * 3 + (this.month() % 3)); 57083 } 57084 57085 // FORMATTING 57086 57087 addFormatToken('D', ['DD', 2], 'Do', 'date'); 57088 57089 // PARSING 57090 57091 addRegexToken('D', match1to2, match1to2NoLeadingZero); 57092 addRegexToken('DD', match1to2, match2); 57093 addRegexToken('Do', function (isStrict, locale) { 57094 // TODO: Remove "ordinalParse" fallback in next major release. 57095 return isStrict 57096 ? locale._dayOfMonthOrdinalParse || locale._ordinalParse 57097 : locale._dayOfMonthOrdinalParseLenient; 57098 }); 57099 57100 addParseToken(['D', 'DD'], DATE); 57101 addParseToken('Do', function (input, array) { 57102 array[DATE] = toInt(input.match(match1to2)[0]); 57103 }); 57104 57105 // MOMENTS 57106 57107 var getSetDayOfMonth = makeGetSet('Date', true); 57108 57109 // FORMATTING 57110 57111 addFormatToken('DDD', ['DDDD', 3], 'DDDo', 'dayOfYear'); 57112 57113 // PARSING 57114 57115 addRegexToken('DDD', match1to3); 57116 addRegexToken('DDDD', match3); 57117 addParseToken(['DDD', 'DDDD'], function (input, array, config) { 57118 config._dayOfYear = toInt(input); 57119 }); 57120 57121 // HELPERS 57122 57123 // MOMENTS 57124 57125 function getSetDayOfYear(input) { 57126 var dayOfYear = 57127 Math.round( 57128 (this.clone().startOf('day') - this.clone().startOf('year')) / 864e5 57129 ) + 1; 57130 return input == null ? dayOfYear : this.add(input - dayOfYear, 'd'); 57131 } 57132 57133 // FORMATTING 57134 57135 addFormatToken('m', ['mm', 2], 0, 'minute'); 57136 57137 // PARSING 57138 57139 addRegexToken('m', match1to2, match1to2HasZero); 57140 addRegexToken('mm', match1to2, match2); 57141 addParseToken(['m', 'mm'], MINUTE); 57142 57143 // MOMENTS 57144 57145 var getSetMinute = makeGetSet('Minutes', false); 57146 57147 // FORMATTING 57148 57149 addFormatToken('s', ['ss', 2], 0, 'second'); 57150 57151 // PARSING 57152 57153 addRegexToken('s', match1to2, match1to2HasZero); 57154 addRegexToken('ss', match1to2, match2); 57155 addParseToken(['s', 'ss'], SECOND); 57156 57157 // MOMENTS 57158 57159 var getSetSecond = makeGetSet('Seconds', false); 57160 57161 // FORMATTING 57162 57163 addFormatToken('S', 0, 0, function () { 57164 return ~~(this.millisecond() / 100); 57165 }); 57166 57167 addFormatToken(0, ['SS', 2], 0, function () { 57168 return ~~(this.millisecond() / 10); 57169 }); 57170 57171 addFormatToken(0, ['SSS', 3], 0, 'millisecond'); 57172 addFormatToken(0, ['SSSS', 4], 0, function () { 57173 return this.millisecond() * 10; 57174 }); 57175 addFormatToken(0, ['SSSSS', 5], 0, function () { 57176 return this.millisecond() * 100; 57177 }); 57178 addFormatToken(0, ['SSSSSS', 6], 0, function () { 57179 return this.millisecond() * 1000; 57180 }); 57181 addFormatToken(0, ['SSSSSSS', 7], 0, function () { 57182 return this.millisecond() * 10000; 57183 }); 57184 addFormatToken(0, ['SSSSSSSS', 8], 0, function () { 57185 return this.millisecond() * 100000; 57186 }); 57187 addFormatToken(0, ['SSSSSSSSS', 9], 0, function () { 57188 return this.millisecond() * 1000000; 57189 }); 57190 57191 // PARSING 57192 57193 addRegexToken('S', match1to3, match1); 57194 addRegexToken('SS', match1to3, match2); 57195 addRegexToken('SSS', match1to3, match3); 57196 57197 var token, getSetMillisecond; 57198 for (token = 'SSSS'; token.length <= 9; token += 'S') { 57199 addRegexToken(token, matchUnsigned); 57200 } 57201 57202 function parseMs(input, array) { 57203 array[MILLISECOND] = toInt(('0.' + input) * 1000); 57204 } 57205 57206 for (token = 'S'; token.length <= 9; token += 'S') { 57207 addParseToken(token, parseMs); 57208 } 57209 57210 getSetMillisecond = makeGetSet('Milliseconds', false); 57211 57212 // FORMATTING 57213 57214 addFormatToken('z', 0, 0, 'zoneAbbr'); 57215 addFormatToken('zz', 0, 0, 'zoneName'); 57216 57217 // MOMENTS 57218 57219 function getZoneAbbr() { 57220 return this._isUTC ? 'UTC' : ''; 57221 } 57222 57223 function getZoneName() { 57224 return this._isUTC ? 'Coordinated Universal Time' : ''; 57225 } 57226 57227 var proto = Moment.prototype; 57228 57229 proto.add = add; 57230 proto.calendar = calendar$1; 57231 proto.clone = clone; 57232 proto.diff = diff; 57233 proto.endOf = endOf; 57234 proto.format = format; 57235 proto.from = from; 57236 proto.fromNow = fromNow; 57237 proto.to = to; 57238 proto.toNow = toNow; 57239 proto.get = stringGet; 57240 proto.invalidAt = invalidAt; 57241 proto.isAfter = isAfter; 57242 proto.isBefore = isBefore; 57243 proto.isBetween = isBetween; 57244 proto.isSame = isSame; 57245 proto.isSameOrAfter = isSameOrAfter; 57246 proto.isSameOrBefore = isSameOrBefore; 57247 proto.isValid = isValid$2; 57248 proto.lang = lang; 57249 proto.locale = locale; 57250 proto.localeData = localeData; 57251 proto.max = prototypeMax; 57252 proto.min = prototypeMin; 57253 proto.parsingFlags = parsingFlags; 57254 proto.set = stringSet; 57255 proto.startOf = startOf; 57256 proto.subtract = subtract; 57257 proto.toArray = toArray; 57258 proto.toObject = toObject; 57259 proto.toDate = toDate; 57260 proto.toISOString = toISOString; 57261 proto.inspect = inspect; 57262 if (typeof Symbol !== 'undefined' && Symbol.for != null) { 57263 proto[Symbol.for('nodejs.util.inspect.custom')] = function () { 57264 return 'Moment<' + this.format() + '>'; 57265 }; 57266 } 57267 proto.toJSON = toJSON; 57268 proto.toString = toString; 57269 proto.unix = unix; 57270 proto.valueOf = valueOf; 57271 proto.creationData = creationData; 57272 proto.eraName = getEraName; 57273 proto.eraNarrow = getEraNarrow; 57274 proto.eraAbbr = getEraAbbr; 57275 proto.eraYear = getEraYear; 57276 proto.year = getSetYear; 57277 proto.isLeapYear = getIsLeapYear; 57278 proto.weekYear = getSetWeekYear; 57279 proto.isoWeekYear = getSetISOWeekYear; 57280 proto.quarter = proto.quarters = getSetQuarter; 57281 proto.month = getSetMonth; 57282 proto.daysInMonth = getDaysInMonth; 57283 proto.week = proto.weeks = getSetWeek; 57284 proto.isoWeek = proto.isoWeeks = getSetISOWeek; 57285 proto.weeksInYear = getWeeksInYear; 57286 proto.weeksInWeekYear = getWeeksInWeekYear; 57287 proto.isoWeeksInYear = getISOWeeksInYear; 57288 proto.isoWeeksInISOWeekYear = getISOWeeksInISOWeekYear; 57289 proto.date = getSetDayOfMonth; 57290 proto.day = proto.days = getSetDayOfWeek; 57291 proto.weekday = getSetLocaleDayOfWeek; 57292 proto.isoWeekday = getSetISODayOfWeek; 57293 proto.dayOfYear = getSetDayOfYear; 57294 proto.hour = proto.hours = getSetHour; 57295 proto.minute = proto.minutes = getSetMinute; 57296 proto.second = proto.seconds = getSetSecond; 57297 proto.millisecond = proto.milliseconds = getSetMillisecond; 57298 proto.utcOffset = getSetOffset; 57299 proto.utc = setOffsetToUTC; 57300 proto.local = setOffsetToLocal; 57301 proto.parseZone = setOffsetToParsedOffset; 57302 proto.hasAlignedHourOffset = hasAlignedHourOffset; 57303 proto.isDST = isDaylightSavingTime; 57304 proto.isLocal = isLocal; 57305 proto.isUtcOffset = isUtcOffset; 57306 proto.isUtc = isUtc; 57307 proto.isUTC = isUtc; 57308 proto.zoneAbbr = getZoneAbbr; 57309 proto.zoneName = getZoneName; 57310 proto.dates = deprecate( 57311 'dates accessor is deprecated. Use date instead.', 57312 getSetDayOfMonth 57313 ); 57314 proto.months = deprecate( 57315 'months accessor is deprecated. Use month instead', 57316 getSetMonth 57317 ); 57318 proto.years = deprecate( 57319 'years accessor is deprecated. Use year instead', 57320 getSetYear 57321 ); 57322 proto.zone = deprecate( 57323 'moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/', 57324 getSetZone 57325 ); 57326 proto.isDSTShifted = deprecate( 57327 'isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information', 57328 isDaylightSavingTimeShifted 57329 ); 57330 57331 function createUnix(input) { 57332 return createLocal(input * 1000); 57333 } 57334 57335 function createInZone() { 57336 return createLocal.apply(null, arguments).parseZone(); 57337 } 57338 57339 function preParsePostFormat(string) { 57340 return string; 57341 } 57342 57343 var proto$1 = Locale.prototype; 57344 57345 proto$1.calendar = calendar; 57346 proto$1.longDateFormat = longDateFormat; 57347 proto$1.invalidDate = invalidDate; 57348 proto$1.ordinal = ordinal; 57349 proto$1.preparse = preParsePostFormat; 57350 proto$1.postformat = preParsePostFormat; 57351 proto$1.relativeTime = relativeTime; 57352 proto$1.pastFuture = pastFuture; 57353 proto$1.set = set; 57354 proto$1.eras = localeEras; 57355 proto$1.erasParse = localeErasParse; 57356 proto$1.erasConvertYear = localeErasConvertYear; 57357 proto$1.erasAbbrRegex = erasAbbrRegex; 57358 proto$1.erasNameRegex = erasNameRegex; 57359 proto$1.erasNarrowRegex = erasNarrowRegex; 57360 57361 proto$1.months = localeMonths; 57362 proto$1.monthsShort = localeMonthsShort; 57363 proto$1.monthsParse = localeMonthsParse; 57364 proto$1.monthsRegex = monthsRegex; 57365 proto$1.monthsShortRegex = monthsShortRegex; 57366 proto$1.week = localeWeek; 57367 proto$1.firstDayOfYear = localeFirstDayOfYear; 57368 proto$1.firstDayOfWeek = localeFirstDayOfWeek; 57369 57370 proto$1.weekdays = localeWeekdays; 57371 proto$1.weekdaysMin = localeWeekdaysMin; 57372 proto$1.weekdaysShort = localeWeekdaysShort; 57373 proto$1.weekdaysParse = localeWeekdaysParse; 57374 57375 proto$1.weekdaysRegex = weekdaysRegex; 57376 proto$1.weekdaysShortRegex = weekdaysShortRegex; 57377 proto$1.weekdaysMinRegex = weekdaysMinRegex; 57378 57379 proto$1.isPM = localeIsPM; 57380 proto$1.meridiem = localeMeridiem; 57381 57382 function get$1(format, index, field, setter) { 57383 var locale = getLocale(), 57384 utc = createUTC().set(setter, index); 57385 return locale[field](utc, format); 57386 } 57387 57388 function listMonthsImpl(format, index, field) { 57389 if (isNumber(format)) { 57390 index = format; 57391 format = undefined; 57392 } 57393 57394 format = format || ''; 57395 57396 if (index != null) { 57397 return get$1(format, index, field, 'month'); 57398 } 57399 57400 var i, 57401 out = []; 57402 for (i = 0; i < 12; i++) { 57403 out[i] = get$1(format, i, field, 'month'); 57404 } 57405 return out; 57406 } 57407 57408 // () 57409 // (5) 57410 // (fmt, 5) 57411 // (fmt) 57412 // (true) 57413 // (true, 5) 57414 // (true, fmt, 5) 57415 // (true, fmt) 57416 function listWeekdaysImpl(localeSorted, format, index, field) { 57417 if (typeof localeSorted === 'boolean') { 57418 if (isNumber(format)) { 57419 index = format; 57420 format = undefined; 57421 } 57422 57423 format = format || ''; 57424 } else { 57425 format = localeSorted; 57426 index = format; 57427 localeSorted = false; 57428 57429 if (isNumber(format)) { 57430 index = format; 57431 format = undefined; 57432 } 57433 57434 format = format || ''; 57435 } 57436 57437 var locale = getLocale(), 57438 shift = localeSorted ? locale._week.dow : 0, 57439 i, 57440 out = []; 57441 57442 if (index != null) { 57443 return get$1(format, (index + shift) % 7, field, 'day'); 57444 } 57445 57446 for (i = 0; i < 7; i++) { 57447 out[i] = get$1(format, (i + shift) % 7, field, 'day'); 57448 } 57449 return out; 57450 } 57451 57452 function listMonths(format, index) { 57453 return listMonthsImpl(format, index, 'months'); 57454 } 57455 57456 function listMonthsShort(format, index) { 57457 return listMonthsImpl(format, index, 'monthsShort'); 57458 } 57459 57460 function listWeekdays(localeSorted, format, index) { 57461 return listWeekdaysImpl(localeSorted, format, index, 'weekdays'); 57462 } 57463 57464 function listWeekdaysShort(localeSorted, format, index) { 57465 return listWeekdaysImpl(localeSorted, format, index, 'weekdaysShort'); 57466 } 57467 57468 function listWeekdaysMin(localeSorted, format, index) { 57469 return listWeekdaysImpl(localeSorted, format, index, 'weekdaysMin'); 57470 } 57471 57472 getSetGlobalLocale('en', { 57473 eras: [ 57474 { 57475 since: '0001-01-01', 57476 until: +Infinity, 57477 offset: 1, 57478 name: 'Anno Domini', 57479 narrow: 'AD', 57480 abbr: 'AD', 57481 }, 57482 { 57483 since: '0000-12-31', 57484 until: -Infinity, 57485 offset: 1, 57486 name: 'Before Christ', 57487 narrow: 'BC', 57488 abbr: 'BC', 57489 }, 57490 ], 57491 dayOfMonthOrdinalParse: /\d{1,2}(th|st|nd|rd)/, 57492 ordinal: function (number) { 57493 var b = number % 10, 57494 output = 57495 toInt((number % 100) / 10) === 1 57496 ? 'th' 57497 : b === 1 57498 ? 'st' 57499 : b === 2 57500 ? 'nd' 57501 : b === 3 57502 ? 'rd' 57503 : 'th'; 57504 return number + output; 57505 }, 57506 }); 57507 57508 // Side effect imports 57509 57510 hooks.lang = deprecate( 57511 'moment.lang is deprecated. Use moment.locale instead.', 57512 getSetGlobalLocale 57513 ); 57514 hooks.langData = deprecate( 57515 'moment.langData is deprecated. Use moment.localeData instead.', 57516 getLocale 57517 ); 57518 57519 var mathAbs = Math.abs; 57520 57521 function abs() { 57522 var data = this._data; 57523 57524 this._milliseconds = mathAbs(this._milliseconds); 57525 this._days = mathAbs(this._days); 57526 this._months = mathAbs(this._months); 57527 57528 data.milliseconds = mathAbs(data.milliseconds); 57529 data.seconds = mathAbs(data.seconds); 57530 data.minutes = mathAbs(data.minutes); 57531 data.hours = mathAbs(data.hours); 57532 data.months = mathAbs(data.months); 57533 data.years = mathAbs(data.years); 57534 57535 return this; 57536 } 57537 57538 function addSubtract$1(duration, input, value, direction) { 57539 var other = createDuration(input, value); 57540 57541 duration._milliseconds += direction * other._milliseconds; 57542 duration._days += direction * other._days; 57543 duration._months += direction * other._months; 57544 57545 return duration._bubble(); 57546 } 57547 57548 // supports only 2.0-style add(1, 's') or add(duration) 57549 function add$1(input, value) { 57550 return addSubtract$1(this, input, value, 1); 57551 } 57552 57553 // supports only 2.0-style subtract(1, 's') or subtract(duration) 57554 function subtract$1(input, value) { 57555 return addSubtract$1(this, input, value, -1); 57556 } 57557 57558 function absCeil(number) { 57559 if (number < 0) { 57560 return Math.floor(number); 57561 } else { 57562 return Math.ceil(number); 57563 } 57564 } 57565 57566 function bubble() { 57567 var milliseconds = this._milliseconds, 57568 days = this._days, 57569 months = this._months, 57570 data = this._data, 57571 seconds, 57572 minutes, 57573 hours, 57574 years, 57575 monthsFromDays; 57576 57577 // if we have a mix of positive and negative values, bubble down first 57578 // check: https://github.com/moment/moment/issues/2166 57579 if ( 57580 !( 57581 (milliseconds >= 0 && days >= 0 && months >= 0) || 57582 (milliseconds <= 0 && days <= 0 && months <= 0) 57583 ) 57584 ) { 57585 milliseconds += absCeil(monthsToDays(months) + days) * 864e5; 57586 days = 0; 57587 months = 0; 57588 } 57589 57590 // The following code bubbles up values, see the tests for 57591 // examples of what that means. 57592 data.milliseconds = milliseconds % 1000; 57593 57594 seconds = absFloor(milliseconds / 1000); 57595 data.seconds = seconds % 60; 57596 57597 minutes = absFloor(seconds / 60); 57598 data.minutes = minutes % 60; 57599 57600 hours = absFloor(minutes / 60); 57601 data.hours = hours % 24; 57602 57603 days += absFloor(hours / 24); 57604 57605 // convert days to months 57606 monthsFromDays = absFloor(daysToMonths(days)); 57607 months += monthsFromDays; 57608 days -= absCeil(monthsToDays(monthsFromDays)); 57609 57610 // 12 months -> 1 year 57611 years = absFloor(months / 12); 57612 months %= 12; 57613 57614 data.days = days; 57615 data.months = months; 57616 data.years = years; 57617 57618 return this; 57619 } 57620 57621 function daysToMonths(days) { 57622 // 400 years have 146097 days (taking into account leap year rules) 57623 // 400 years have 12 months === 4800 57624 return (days * 4800) / 146097; 57625 } 57626 57627 function monthsToDays(months) { 57628 // the reverse of daysToMonths 57629 return (months * 146097) / 4800; 57630 } 57631 57632 function as(units) { 57633 if (!this.isValid()) { 57634 return NaN; 57635 } 57636 var days, 57637 months, 57638 milliseconds = this._milliseconds; 57639 57640 units = normalizeUnits(units); 57641 57642 if (units === 'month' || units === 'quarter' || units === 'year') { 57643 days = this._days + milliseconds / 864e5; 57644 months = this._months + daysToMonths(days); 57645 switch (units) { 57646 case 'month': 57647 return months; 57648 case 'quarter': 57649 return months / 3; 57650 case 'year': 57651 return months / 12; 57652 } 57653 } else { 57654 // handle milliseconds separately because of floating point math errors (issue #1867) 57655 days = this._days + Math.round(monthsToDays(this._months)); 57656 switch (units) { 57657 case 'week': 57658 return days / 7 + milliseconds / 6048e5; 57659 case 'day': 57660 return days + milliseconds / 864e5; 57661 case 'hour': 57662 return days * 24 + milliseconds / 36e5; 57663 case 'minute': 57664 return days * 1440 + milliseconds / 6e4; 57665 case 'second': 57666 return days * 86400 + milliseconds / 1000; 57667 // Math.floor prevents floating point math errors here 57668 case 'millisecond': 57669 return Math.floor(days * 864e5) + milliseconds; 57670 default: 57671 throw new Error('Unknown unit ' + units); 57672 } 57673 } 57674 } 57675 57676 function makeAs(alias) { 57677 return function () { 57678 return this.as(alias); 57679 }; 57680 } 57681 57682 var asMilliseconds = makeAs('ms'), 57683 asSeconds = makeAs('s'), 57684 asMinutes = makeAs('m'), 57685 asHours = makeAs('h'), 57686 asDays = makeAs('d'), 57687 asWeeks = makeAs('w'), 57688 asMonths = makeAs('M'), 57689 asQuarters = makeAs('Q'), 57690 asYears = makeAs('y'), 57691 valueOf$1 = asMilliseconds; 57692 57693 function clone$1() { 57694 return createDuration(this); 57695 } 57696 57697 function get$2(units) { 57698 units = normalizeUnits(units); 57699 return this.isValid() ? this[units + 's']() : NaN; 57700 } 57701 57702 function makeGetter(name) { 57703 return function () { 57704 return this.isValid() ? this._data[name] : NaN; 57705 }; 57706 } 57707 57708 var milliseconds = makeGetter('milliseconds'), 57709 seconds = makeGetter('seconds'), 57710 minutes = makeGetter('minutes'), 57711 hours = makeGetter('hours'), 57712 days = makeGetter('days'), 57713 months = makeGetter('months'), 57714 years = makeGetter('years'); 57715 57716 function weeks() { 57717 return absFloor(this.days() / 7); 57718 } 57719 57720 var round = Math.round, 57721 thresholds = { 57722 ss: 44, // a few seconds to seconds 57723 s: 45, // seconds to minute 57724 m: 45, // minutes to hour 57725 h: 22, // hours to day 57726 d: 26, // days to month/week 57727 w: null, // weeks to month 57728 M: 11, // months to year 57729 }; 57730 57731 // helper function for moment.fn.from, moment.fn.fromNow, and moment.duration.fn.humanize 57732 function substituteTimeAgo(string, number, withoutSuffix, isFuture, locale) { 57733 return locale.relativeTime(number || 1, !!withoutSuffix, string, isFuture); 57734 } 57735 57736 function relativeTime$1(posNegDuration, withoutSuffix, thresholds, locale) { 57737 var duration = createDuration(posNegDuration).abs(), 57738 seconds = round(duration.as('s')), 57739 minutes = round(duration.as('m')), 57740 hours = round(duration.as('h')), 57741 days = round(duration.as('d')), 57742 months = round(duration.as('M')), 57743 weeks = round(duration.as('w')), 57744 years = round(duration.as('y')), 57745 a = 57746 (seconds <= thresholds.ss && ['s', seconds]) || 57747 (seconds < thresholds.s && ['ss', seconds]) || 57748 (minutes <= 1 && ['m']) || 57749 (minutes < thresholds.m && ['mm', minutes]) || 57750 (hours <= 1 && ['h']) || 57751 (hours < thresholds.h && ['hh', hours]) || 57752 (days <= 1 && ['d']) || 57753 (days < thresholds.d && ['dd', days]); 57754 57755 if (thresholds.w != null) { 57756 a = 57757 a || 57758 (weeks <= 1 && ['w']) || 57759 (weeks < thresholds.w && ['ww', weeks]); 57760 } 57761 a = a || 57762 (months <= 1 && ['M']) || 57763 (months < thresholds.M && ['MM', months]) || 57764 (years <= 1 && ['y']) || ['yy', years]; 57765 57766 a[2] = withoutSuffix; 57767 a[3] = +posNegDuration > 0; 57768 a[4] = locale; 57769 return substituteTimeAgo.apply(null, a); 57770 } 57771 57772 // This function allows you to set the rounding function for relative time strings 57773 function getSetRelativeTimeRounding(roundingFunction) { 57774 if (roundingFunction === undefined) { 57775 return round; 57776 } 57777 if (typeof roundingFunction === 'function') { 57778 round = roundingFunction; 57779 return true; 57780 } 57781 return false; 57782 } 57783 57784 // This function allows you to set a threshold for relative time strings 57785 function getSetRelativeTimeThreshold(threshold, limit) { 57786 if (thresholds[threshold] === undefined) { 57787 return false; 57788 } 57789 if (limit === undefined) { 57790 return thresholds[threshold]; 57791 } 57792 thresholds[threshold] = limit; 57793 if (threshold === 's') { 57794 thresholds.ss = limit - 1; 57795 } 57796 return true; 57797 } 57798 57799 function humanize(argWithSuffix, argThresholds) { 57800 if (!this.isValid()) { 57801 return this.localeData().invalidDate(); 57802 } 57803 57804 var withSuffix = false, 57805 th = thresholds, 57806 locale, 57807 output; 57808 57809 if (typeof argWithSuffix === 'object') { 57810 argThresholds = argWithSuffix; 57811 argWithSuffix = false; 57812 } 57813 if (typeof argWithSuffix === 'boolean') { 57814 withSuffix = argWithSuffix; 57815 } 57816 if (typeof argThresholds === 'object') { 57817 th = Object.assign({}, thresholds, argThresholds); 57818 if (argThresholds.s != null && argThresholds.ss == null) { 57819 th.ss = argThresholds.s - 1; 57820 } 57821 } 57822 57823 locale = this.localeData(); 57824 output = relativeTime$1(this, !withSuffix, th, locale); 57825 57826 if (withSuffix) { 57827 output = locale.pastFuture(+this, output); 57828 } 57829 57830 return locale.postformat(output); 57831 } 57832 57833 var abs$1 = Math.abs; 57834 57835 function sign(x) { 57836 return (x > 0) - (x < 0) || +x; 57837 } 57838 57839 function toISOString$1() { 57840 // for ISO strings we do not use the normal bubbling rules: 57841 // * milliseconds bubble up until they become hours 57842 // * days do not bubble at all 57843 // * months bubble up until they become years 57844 // This is because there is no context-free conversion between hours and days 57845 // (think of clock changes) 57846 // and also not between days and months (28-31 days per month) 57847 if (!this.isValid()) { 57848 return this.localeData().invalidDate(); 57849 } 57850 57851 var seconds = abs$1(this._milliseconds) / 1000, 57852 days = abs$1(this._days), 57853 months = abs$1(this._months), 57854 minutes, 57855 hours, 57856 years, 57857 s, 57858 total = this.asSeconds(), 57859 totalSign, 57860 ymSign, 57861 daysSign, 57862 hmsSign; 57863 57864 if (!total) { 57865 // this is the same as C#'s (Noda) and python (isodate)... 57866 // but not other JS (goog.date) 57867 return 'P0D'; 57868 } 57869 57870 // 3600 seconds -> 60 minutes -> 1 hour 57871 minutes = absFloor(seconds / 60); 57872 hours = absFloor(minutes / 60); 57873 seconds %= 60; 57874 minutes %= 60; 57875 57876 // 12 months -> 1 year 57877 years = absFloor(months / 12); 57878 months %= 12; 57879 57880 // inspired by https://github.com/dordille/moment-isoduration/blob/master/moment.isoduration.js 57881 s = seconds ? seconds.toFixed(3).replace(/\.?0+$/, '') : ''; 57882 57883 totalSign = total < 0 ? '-' : ''; 57884 ymSign = sign(this._months) !== sign(total) ? '-' : ''; 57885 daysSign = sign(this._days) !== sign(total) ? '-' : ''; 57886 hmsSign = sign(this._milliseconds) !== sign(total) ? '-' : ''; 57887 57888 return ( 57889 totalSign + 57890 'P' + 57891 (years ? ymSign + years + 'Y' : '') + 57892 (months ? ymSign + months + 'M' : '') + 57893 (days ? daysSign + days + 'D' : '') + 57894 (hours || minutes || seconds ? 'T' : '') + 57895 (hours ? hmsSign + hours + 'H' : '') + 57896 (minutes ? hmsSign + minutes + 'M' : '') + 57897 (seconds ? hmsSign + s + 'S' : '') 57898 ); 57899 } 57900 57901 var proto$2 = Duration.prototype; 57902 57903 proto$2.isValid = isValid$1; 57904 proto$2.abs = abs; 57905 proto$2.add = add$1; 57906 proto$2.subtract = subtract$1; 57907 proto$2.as = as; 57908 proto$2.asMilliseconds = asMilliseconds; 57909 proto$2.asSeconds = asSeconds; 57910 proto$2.asMinutes = asMinutes; 57911 proto$2.asHours = asHours; 57912 proto$2.asDays = asDays; 57913 proto$2.asWeeks = asWeeks; 57914 proto$2.asMonths = asMonths; 57915 proto$2.asQuarters = asQuarters; 57916 proto$2.asYears = asYears; 57917 proto$2.valueOf = valueOf$1; 57918 proto$2._bubble = bubble; 57919 proto$2.clone = clone$1; 57920 proto$2.get = get$2; 57921 proto$2.milliseconds = milliseconds; 57922 proto$2.seconds = seconds; 57923 proto$2.minutes = minutes; 57924 proto$2.hours = hours; 57925 proto$2.days = days; 57926 proto$2.weeks = weeks; 57927 proto$2.months = months; 57928 proto$2.years = years; 57929 proto$2.humanize = humanize; 57930 proto$2.toISOString = toISOString$1; 57931 proto$2.toString = toISOString$1; 57932 proto$2.toJSON = toISOString$1; 57933 proto$2.locale = locale; 57934 proto$2.localeData = localeData; 57935 57936 proto$2.toIsoString = deprecate( 57937 'toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)', 57938 toISOString$1 57939 ); 57940 proto$2.lang = lang; 57941 57942 // FORMATTING 57943 57944 addFormatToken('X', 0, 0, 'unix'); 57945 addFormatToken('x', 0, 0, 'valueOf'); 57946 57947 // PARSING 57948 57949 addRegexToken('x', matchSigned); 57950 addRegexToken('X', matchTimestamp); 57951 addParseToken('X', function (input, array, config) { 57952 config._d = new Date(parseFloat(input) * 1000); 57953 }); 57954 addParseToken('x', function (input, array, config) { 57955 config._d = new Date(toInt(input)); 57956 }); 57957 57958 //! moment.js 57959 57960 hooks.version = '2.30.1'; 57961 57962 setHookCallback(createLocal); 57963 57964 hooks.fn = proto; 57965 hooks.min = min; 57966 hooks.max = max; 57967 hooks.now = now; 57968 hooks.utc = createUTC; 57969 hooks.unix = createUnix; 57970 hooks.months = listMonths; 57971 hooks.isDate = isDate; 57972 hooks.locale = getSetGlobalLocale; 57973 hooks.invalid = createInvalid; 57974 hooks.duration = createDuration; 57975 hooks.isMoment = isMoment; 57976 hooks.weekdays = listWeekdays; 57977 hooks.parseZone = createInZone; 57978 hooks.localeData = getLocale; 57979 hooks.isDuration = isDuration; 57980 hooks.monthsShort = listMonthsShort; 57981 hooks.weekdaysMin = listWeekdaysMin; 57982 hooks.defineLocale = defineLocale; 57983 hooks.updateLocale = updateLocale; 57984 hooks.locales = listLocales; 57985 hooks.weekdaysShort = listWeekdaysShort; 57986 hooks.normalizeUnits = normalizeUnits; 57987 hooks.relativeTimeRounding = getSetRelativeTimeRounding; 57988 hooks.relativeTimeThreshold = getSetRelativeTimeThreshold; 57989 hooks.calendarFormat = getCalendarFormat; 57990 hooks.prototype = proto; 57991 57992 // currently HTML5 input type only supports 24-hour formats 57993 hooks.HTML5_FMT = { 57994 DATETIME_LOCAL: 'YYYY-MM-DDTHH:mm', // <input type="datetime-local" /> 57995 DATETIME_LOCAL_SECONDS: 'YYYY-MM-DDTHH:mm:ss', // <input type="datetime-local" step="1" /> 57996 DATETIME_LOCAL_MS: 'YYYY-MM-DDTHH:mm:ss.SSS', // <input type="datetime-local" step="0.001" /> 57997 DATE: 'YYYY-MM-DD', // <input type="date" /> 57998 TIME: 'HH:mm', // <input type="time" /> 57999 TIME_SECONDS: 'HH:mm:ss', // <input type="time" step="1" /> 58000 TIME_MS: 'HH:mm:ss.SSS', // <input type="time" step="0.001" /> 58001 WEEK: 'GGGG-[W]WW', // <input type="week" /> 58002 MONTH: 'YYYY-MM', // <input type="month" /> 58003 }; 58004 58005 return hooks; 58006 58007}))); 58008 58009/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../webpack/buildin/module.js */ "./node_modules/webpack/buildin/module.js")(module))) 58010 58011/***/ }), 58012
vendor: 89,123 bytes, lines 58013-60642
58013/***/ "./node_modules/popper.js/dist/esm/popper.js": 58014/*!***************************************************!*\ 58015 !*** ./node_modules/popper.js/dist/esm/popper.js ***! 58016 \***************************************************/ 58017/*! exports provided: default */ 58018/***/ (function(module, __webpack_exports__, __webpack_require__) { 58019 58020"use strict"; 58021__webpack_require__.r(__webpack_exports__); 58022/* WEBPACK VAR INJECTION */(function(global) {/**! 58023 * @fileOverview Kickass library to create and place poppers near their reference elements. 58024 * @version 1.16.1 58025 * @license 58026 * Copyright (c) 2016 Federico Zivolo and contributors 58027 * 58028 * Permission is hereby granted, free of charge, to any person obtaining a copy 58029 * of this software and associated documentation files (the "Software"), to deal 58030 * in the Software without restriction, including without limitation the rights 58031 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 58032 * copies of the Software, and to permit persons to whom the Software is 58033 * furnished to do so, subject to the following conditions: 58034 * 58035 * The above copyright notice and this permission notice shall be included in all 58036 * copies or substantial portions of the Software. 58037 * 58038 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 58039 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 58040 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 58041 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 58042 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 58043 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 58044 * SOFTWARE. 58045 */ 58046var isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined' && typeof navigator !== 'undefined'; 58047 58048var timeoutDuration = function () { 58049 var longerTimeoutBrowsers = ['Edge', 'Trident', 'Firefox']; 58050 for (var i = 0; i < longerTimeoutBrowsers.length; i += 1) { 58051 if (isBrowser && navigator.userAgent.indexOf(longerTimeoutBrowsers[i]) >= 0) { 58052 return 1; 58053 } 58054 } 58055 return 0; 58056}(); 58057 58058function microtaskDebounce(fn) { 58059 var called = false; 58060 return function () { 58061 if (called) { 58062 return; 58063 } 58064 called = true; 58065 window.Promise.resolve().then(function () { 58066 called = false; 58067 fn(); 58068 }); 58069 }; 58070} 58071 58072function taskDebounce(fn) { 58073 var scheduled = false; 58074 return function () { 58075 if (!scheduled) { 58076 scheduled = true; 58077 setTimeout(function () { 58078 scheduled = false; 58079 fn(); 58080 }, timeoutDuration); 58081 } 58082 }; 58083} 58084 58085var supportsMicroTasks = isBrowser && window.Promise; 58086 58087/** 58088* Create a debounced version of a method, that's asynchronously deferred 58089* but called in the minimum time possible. 58090* 58091* @method 58092* @memberof Popper.Utils 58093* @argument {Function} fn 58094* @returns {Function} 58095*/ 58096var debounce = supportsMicroTasks ? microtaskDebounce : taskDebounce; 58097 58098/** 58099 * Check if the given variable is a function 58100 * @method 58101 * @memberof Popper.Utils 58102 * @argument {Any} functionToCheck - variable to check 58103 * @returns {Boolean} answer to: is a function? 58104 */ 58105function isFunction(functionToCheck) { 58106 var getType = {}; 58107 return functionToCheck && getType.toString.call(functionToCheck) === '[object Function]'; 58108} 58109 58110/** 58111 * Get CSS computed property of the given element 58112 * @method 58113 * @memberof Popper.Utils 58114 * @argument {Eement} element 58115 * @argument {String} property 58116 */ 58117function getStyleComputedProperty(element, property) { 58118 if (element.nodeType !== 1) { 58119 return []; 58120 } 58121 // NOTE: 1 DOM access here 58122 var window = element.ownerDocument.defaultView; 58123 var css = window.getComputedStyle(element, null); 58124 return property ? css[property] : css; 58125} 58126 58127/** 58128 * Returns the parentNode or the host of the element 58129 * @method 58130 * @memberof Popper.Utils 58131 * @argument {Element} element 58132 * @returns {Element} parent 58133 */ 58134function getParentNode(element) { 58135 if (element.nodeName === 'HTML') { 58136 return element; 58137 } 58138 return element.parentNode || element.host; 58139} 58140 58141/** 58142 * Returns the scrolling parent of the given element 58143 * @method 58144 * @memberof Popper.Utils 58145 * @argument {Element} element 58146 * @returns {Element} scroll parent 58147 */ 58148function getScrollParent(element) { 58149 // Return body, `getScroll` will take care to get the correct `scrollTop` from it 58150 if (!element) { 58151 return document.body; 58152 } 58153 58154 switch (element.nodeName) { 58155 case 'HTML': 58156 case 'BODY': 58157 return element.ownerDocument.body; 58158 case '#document': 58159 return element.body; 58160 } 58161 58162 // Firefox want us to check `-x` and `-y` variations as well 58163 58164 var _getStyleComputedProp = getStyleComputedProperty(element), 58165 overflow = _getStyleComputedProp.overflow, 58166 overflowX = _getStyleComputedProp.overflowX, 58167 overflowY = _getStyleComputedProp.overflowY; 58168 58169 if (/(auto|scroll|overlay)/.test(overflow + overflowY + overflowX)) { 58170 return element; 58171 } 58172 58173 return getScrollParent(getParentNode(element)); 58174} 58175 58176/** 58177 * Returns the reference node of the reference object, or the reference object itself. 58178 * @method 58179 * @memberof Popper.Utils 58180 * @param {Element|Object} reference - the reference element (the popper will be relative to this) 58181 * @returns {Element} parent 58182 */ 58183function getReferenceNode(reference) { 58184 return reference && reference.referenceNode ? reference.referenceNode : reference; 58185} 58186 58187var isIE11 = isBrowser && !!(window.MSInputMethodContext && document.documentMode); 58188var isIE10 = isBrowser && /MSIE 10/.test(navigator.userAgent); 58189 58190/** 58191 * Determines if the browser is Internet Explorer 58192 * @method 58193 * @memberof Popper.Utils 58194 * @param {Number} version to check 58195 * @returns {Boolean} isIE 58196 */ 58197function isIE(version) { 58198 if (version === 11) { 58199 return isIE11; 58200 } 58201 if (version === 10) { 58202 return isIE10; 58203 } 58204 return isIE11 || isIE10; 58205} 58206 58207/** 58208 * Returns the offset parent of the given element 58209 * @method 58210 * @memberof Popper.Utils 58211 * @argument {Element} element 58212 * @returns {Element} offset parent 58213 */ 58214function getOffsetParent(element) { 58215 if (!element) { 58216 return document.documentElement; 58217 } 58218 58219 var noOffsetParent = isIE(10) ? document.body : null; 58220 58221 // NOTE: 1 DOM access here 58222 var offsetParent = element.offsetParent || null; 58223 // Skip hidden elements which don't have an offsetParent 58224 while (offsetParent === noOffsetParent && element.nextElementSibling) { 58225 offsetParent = (element = element.nextElementSibling).offsetParent; 58226 } 58227 58228 var nodeName = offsetParent && offsetParent.nodeName; 58229 58230 if (!nodeName || nodeName === 'BODY' || nodeName === 'HTML') { 58231 return element ? element.ownerDocument.documentElement : document.documentElement; 58232 } 58233 58234 // .offsetParent will return the closest TH, TD or TABLE in case 58235 // no offsetParent is present, I hate this job... 58236 if (['TH', 'TD', 'TABLE'].indexOf(offsetParent.nodeName) !== -1 && getStyleComputedProperty(offsetParent, 'position') === 'static') { 58237 return getOffsetParent(offsetParent); 58238 } 58239 58240 return offsetParent; 58241} 58242 58243function isOffsetContainer(element) { 58244 var nodeName = element.nodeName; 58245 58246 if (nodeName === 'BODY') { 58247 return false; 58248 } 58249 return nodeName === 'HTML' || getOffsetParent(element.firstElementChild) === element; 58250} 58251 58252/** 58253 * Finds the root node (document, shadowDOM root) of the given element 58254 * @method 58255 * @memberof Popper.Utils 58256 * @argument {Element} node 58257 * @returns {Element} root node 58258 */ 58259function getRoot(node) { 58260 if (node.parentNode !== null) { 58261 return getRoot(node.parentNode); 58262 } 58263 58264 return node; 58265} 58266 58267/** 58268 * Finds the offset parent common to the two provided nodes 58269 * @method 58270 * @memberof Popper.Utils 58271 * @argument {Element} element1 58272 * @argument {Element} element2 58273 * @returns {Element} common offset parent 58274 */ 58275function findCommonOffsetParent(element1, element2) { 58276 // This check is needed to avoid errors in case one of the elements isn't defined for any reason 58277 if (!element1 || !element1.nodeType || !element2 || !element2.nodeType) { 58278 return document.documentElement; 58279 } 58280 58281 // Here we make sure to give as "start" the element that comes first in the DOM 58282 var order = element1.compareDocumentPosition(element2) & Node.DOCUMENT_POSITION_FOLLOWING; 58283 var start = order ? element1 : element2; 58284 var end = order ? element2 : element1; 58285 58286 // Get common ancestor container 58287 var range = document.createRange(); 58288 range.setStart(start, 0); 58289 range.setEnd(end, 0); 58290 var commonAncestorContainer = range.commonAncestorContainer; 58291 58292 // Both nodes are inside #document 58293 58294 if (element1 !== commonAncestorContainer && element2 !== commonAncestorContainer || start.contains(end)) { 58295 if (isOffsetContainer(commonAncestorContainer)) { 58296 return commonAncestorContainer; 58297 } 58298 58299 return getOffsetParent(commonAncestorContainer); 58300 } 58301 58302 // one of the nodes is inside shadowDOM, find which one 58303 var element1root = getRoot(element1); 58304 if (element1root.host) { 58305 return findCommonOffsetParent(element1root.host, element2); 58306 } else { 58307 return findCommonOffsetParent(element1, getRoot(element2).host); 58308 } 58309} 58310 58311/** 58312 * Gets the scroll value of the given element in the given side (top and left) 58313 * @method 58314 * @memberof Popper.Utils 58315 * @argument {Element} element 58316 * @argument {String} side `top` or `left` 58317 * @returns {number} amount of scrolled pixels 58318 */ 58319function getScroll(element) { 58320 var side = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'top'; 58321 58322 var upperSide = side === 'top' ? 'scrollTop' : 'scrollLeft'; 58323 var nodeName = element.nodeName; 58324 58325 if (nodeName === 'BODY' || nodeName === 'HTML') { 58326 var html = element.ownerDocument.documentElement; 58327 var scrollingElement = element.ownerDocument.scrollingElement || html; 58328 return scrollingElement[upperSide]; 58329 } 58330 58331 return element[upperSide]; 58332} 58333 58334/* 58335 * Sum or subtract the element scroll values (left and top) from a given rect object 58336 * @method 58337 * @memberof Popper.Utils 58338 * @param {Object} rect - Rect object you want to change 58339 * @param {HTMLElement} element - The element from the function reads the scroll values 58340 * @param {Boolean} subtract - set to true if you want to subtract the scroll values 58341 * @return {Object} rect - The modifier rect object 58342 */ 58343function includeScroll(rect, element) { 58344 var subtract = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; 58345 58346 var scrollTop = getScroll(element, 'top'); 58347 var scrollLeft = getScroll(element, 'left'); 58348 var modifier = subtract ? -1 : 1; 58349 rect.top += scrollTop * modifier; 58350 rect.bottom += scrollTop * modifier; 58351 rect.left += scrollLeft * modifier; 58352 rect.right += scrollLeft * modifier; 58353 return rect; 58354} 58355 58356/* 58357 * Helper to detect borders of a given element 58358 * @method 58359 * @memberof Popper.Utils 58360 * @param {CSSStyleDeclaration} styles 58361 * Result of `getStyleComputedProperty` on the given element 58362 * @param {String} axis - `x` or `y` 58363 * @return {number} borders - The borders size of the given axis 58364 */ 58365 58366function getBordersSize(styles, axis) { 58367 var sideA = axis === 'x' ? 'Left' : 'Top'; 58368 var sideB = sideA === 'Left' ? 'Right' : 'Bottom'; 58369 58370 return parseFloat(styles['border' + sideA + 'Width']) + parseFloat(styles['border' + sideB + 'Width']); 58371} 58372 58373function getSize(axis, body, html, computedStyle) { 58374 return Math.max(body['offset' + axis], body['scroll' + axis], html['client' + axis], html['offset' + axis], html['scroll' + axis], isIE(10) ? parseInt(html['offset' + axis]) + parseInt(computedStyle['margin' + (axis === 'Height' ? 'Top' : 'Left')]) + parseInt(computedStyle['margin' + (axis === 'Height' ? 'Bottom' : 'Right')]) : 0); 58375} 58376 58377function getWindowSizes(document) { 58378 var body = document.body; 58379 var html = document.documentElement; 58380 var computedStyle = isIE(10) && getComputedStyle(html); 58381 58382 return { 58383 height: getSize('Height', body, html, computedStyle), 58384 width: getSize('Width', body, html, computedStyle) 58385 }; 58386} 58387 58388var classCallCheck = function (instance, Constructor) { 58389 if (!(instance instanceof Constructor)) { 58390 throw new TypeError("Cannot call a class as a function"); 58391 } 58392}; 58393 58394var createClass = function () { 58395 function defineProperties(target, props) { 58396 for (var i = 0; i < props.length; i++) { 58397 var descriptor = props[i]; 58398 descriptor.enumerable = descriptor.enumerable || false; 58399 descriptor.configurable = true; 58400 if ("value" in descriptor) descriptor.writable = true; 58401 Object.defineProperty(target, descriptor.key, descriptor); 58402 } 58403 } 58404 58405 return function (Constructor, protoProps, staticProps) { 58406 if (protoProps) defineProperties(Constructor.prototype, protoProps); 58407 if (staticProps) defineProperties(Constructor, staticProps); 58408 return Constructor; 58409 }; 58410}(); 58411 58412 58413 58414 58415 58416var defineProperty = function (obj, key, value) { 58417 if (key in obj) { 58418 Object.defineProperty(obj, key, { 58419 value: value, 58420 enumerable: true, 58421 configurable: true, 58422 writable: true 58423 }); 58424 } else { 58425 obj[key] = value; 58426 } 58427 58428 return obj; 58429}; 58430 58431var _extends = Object.assign || function (target) { 58432 for (var i = 1; i < arguments.length; i++) { 58433 var source = arguments[i]; 58434 58435 for (var key in source) { 58436 if (Object.prototype.hasOwnProperty.call(source, key)) { 58437 target[key] = source[key]; 58438 } 58439 } 58440 } 58441 58442 return target; 58443}; 58444 58445/** 58446 * Given element offsets, generate an output similar to getBoundingClientRect 58447 * @method 58448 * @memberof Popper.Utils 58449 * @argument {Object} offsets 58450 * @returns {Object} ClientRect like output 58451 */ 58452function getClientRect(offsets) { 58453 return _extends({}, offsets, { 58454 right: offsets.left + offsets.width, 58455 bottom: offsets.top + offsets.height 58456 }); 58457} 58458 58459/** 58460 * Get bounding client rect of given element 58461 * @method 58462 * @memberof Popper.Utils 58463 * @param {HTMLElement} element 58464 * @return {Object} client rect 58465 */ 58466function getBoundingClientRect(element) { 58467 var rect = {}; 58468 58469 // IE10 10 FIX: Please, don't ask, the element isn't 58470 // considered in DOM in some circumstances... 58471 // This isn't reproducible in IE10 compatibility mode of IE11 58472 try { 58473 if (isIE(10)) { 58474 rect = element.getBoundingClientRect(); 58475 var scrollTop = getScroll(element, 'top'); 58476 var scrollLeft = getScroll(element, 'left'); 58477 rect.top += scrollTop; 58478 rect.left += scrollLeft; 58479 rect.bottom += scrollTop; 58480 rect.right += scrollLeft; 58481 } else { 58482 rect = element.getBoundingClientRect(); 58483 } 58484 } catch (e) {} 58485 58486 var result = { 58487 left: rect.left, 58488 top: rect.top, 58489 width: rect.right - rect.left, 58490 height: rect.bottom - rect.top 58491 }; 58492 58493 // subtract scrollbar size from sizes 58494 var sizes = element.nodeName === 'HTML' ? getWindowSizes(element.ownerDocument) : {}; 58495 var width = sizes.width || element.clientWidth || result.width; 58496 var height = sizes.height || element.clientHeight || result.height; 58497 58498 var horizScrollbar = element.offsetWidth - width; 58499 var vertScrollbar = element.offsetHeight - height; 58500 58501 // if an hypothetical scrollbar is detected, we must be sure it's not a `border` 58502 // we make this check conditional for performance reasons 58503 if (horizScrollbar || vertScrollbar) { 58504 var styles = getStyleComputedProperty(element); 58505 horizScrollbar -= getBordersSize(styles, 'x'); 58506 vertScrollbar -= getBordersSize(styles, 'y'); 58507 58508 result.width -= horizScrollbar; 58509 result.height -= vertScrollbar; 58510 } 58511 58512 return getClientRect(result); 58513} 58514 58515function getOffsetRectRelativeToArbitraryNode(children, parent) { 58516 var fixedPosition = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; 58517 58518 var isIE10 = isIE(10); 58519 var isHTML = parent.nodeName === 'HTML'; 58520 var childrenRect = getBoundingClientRect(children); 58521 var parentRect = getBoundingClientRect(parent); 58522 var scrollParent = getScrollParent(children); 58523 58524 var styles = getStyleComputedProperty(parent); 58525 var borderTopWidth = parseFloat(styles.borderTopWidth); 58526 var borderLeftWidth = parseFloat(styles.borderLeftWidth); 58527 58528 // In cases where the parent is fixed, we must ignore negative scroll in offset calc 58529 if (fixedPosition && isHTML) { 58530 parentRect.top = Math.max(parentRect.top, 0); 58531 parentRect.left = Math.max(parentRect.left, 0); 58532 } 58533 var offsets = getClientRect({ 58534 top: childrenRect.top - parentRect.top - borderTopWidth, 58535 left: childrenRect.left - parentRect.left - borderLeftWidth, 58536 width: childrenRect.width, 58537 height: childrenRect.height 58538 }); 58539 offsets.marginTop = 0; 58540 offsets.marginLeft = 0; 58541 58542 // Subtract margins of documentElement in case it's being used as parent 58543 // we do this only on HTML because it's the only element that behaves 58544 // differently when margins are applied to it. The margins are included in 58545 // the box of the documentElement, in the other cases not. 58546 if (!isIE10 && isHTML) { 58547 var marginTop = parseFloat(styles.marginTop); 58548 var marginLeft = parseFloat(styles.marginLeft); 58549 58550 offsets.top -= borderTopWidth - marginTop; 58551 offsets.bottom -= borderTopWidth - marginTop; 58552 offsets.left -= borderLeftWidth - marginLeft; 58553 offsets.right -= borderLeftWidth - marginLeft; 58554 58555 // Attach marginTop and marginLeft because in some circumstances we may need them 58556 offsets.marginTop = marginTop; 58557 offsets.marginLeft = marginLeft; 58558 } 58559 58560 if (isIE10 && !fixedPosition ? parent.contains(scrollParent) : parent === scrollParent && scrollParent.nodeName !== 'BODY') { 58561 offsets = includeScroll(offsets, parent); 58562 } 58563 58564 return offsets; 58565} 58566 58567function getViewportOffsetRectRelativeToArtbitraryNode(element) { 58568 var excludeScroll = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; 58569 58570 var html = element.ownerDocument.documentElement; 58571 var relativeOffset = getOffsetRectRelativeToArbitraryNode(element, html); 58572 var width = Math.max(html.clientWidth, window.innerWidth || 0); 58573 var height = Math.max(html.clientHeight, window.innerHeight || 0); 58574 58575 var scrollTop = !excludeScroll ? getScroll(html) : 0; 58576 var scrollLeft = !excludeScroll ? getScroll(html, 'left') : 0; 58577 58578 var offset = { 58579 top: scrollTop - relativeOffset.top + relativeOffset.marginTop, 58580 left: scrollLeft - relativeOffset.left + relativeOffset.marginLeft, 58581 width: width, 58582 height: height 58583 }; 58584 58585 return getClientRect(offset); 58586} 58587 58588/** 58589 * Check if the given element is fixed or is inside a fixed parent 58590 * @method 58591 * @memberof Popper.Utils 58592 * @argument {Element} element 58593 * @argument {Element} customContainer 58594 * @returns {Boolean} answer to "isFixed?" 58595 */ 58596function isFixed(element) { 58597 var nodeName = element.nodeName; 58598 if (nodeName === 'BODY' || nodeName === 'HTML') { 58599 return false; 58600 } 58601 if (getStyleComputedProperty(element, 'position') === 'fixed') { 58602 return true; 58603 } 58604 var parentNode = getParentNode(element); 58605 if (!parentNode) { 58606 return false; 58607 } 58608 return isFixed(parentNode); 58609} 58610 58611/** 58612 * Finds the first parent of an element that has a transformed property defined 58613 * @method 58614 * @memberof Popper.Utils 58615 * @argument {Element} element 58616 * @returns {Element} first transformed parent or documentElement 58617 */ 58618 58619function getFixedPositionOffsetParent(element) { 58620 // This check is needed to avoid errors in case one of the elements isn't defined for any reason 58621 if (!element || !element.parentElement || isIE()) { 58622 return document.documentElement; 58623 } 58624 var el = element.parentElement; 58625 while (el && getStyleComputedProperty(el, 'transform') === 'none') { 58626 el = el.parentElement; 58627 } 58628 return el || document.documentElement; 58629} 58630 58631/** 58632 * Computed the boundaries limits and return them 58633 * @method 58634 * @memberof Popper.Utils 58635 * @param {HTMLElement} popper 58636 * @param {HTMLElement} reference 58637 * @param {number} padding 58638 * @param {HTMLElement} boundariesElement - Element used to define the boundaries 58639 * @param {Boolean} fixedPosition - Is in fixed position mode 58640 * @returns {Object} Coordinates of the boundaries 58641 */ 58642function getBoundaries(popper, reference, padding, boundariesElement) { 58643 var fixedPosition = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false; 58644 58645 // NOTE: 1 DOM access here 58646 58647 var boundaries = { top: 0, left: 0 }; 58648 var offsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, getReferenceNode(reference)); 58649 58650 // Handle viewport case 58651 if (boundariesElement === 'viewport') { 58652 boundaries = getViewportOffsetRectRelativeToArtbitraryNode(offsetParent, fixedPosition); 58653 } else { 58654 // Handle other cases based on DOM element used as boundaries 58655 var boundariesNode = void 0; 58656 if (boundariesElement === 'scrollParent') { 58657 boundariesNode = getScrollParent(getParentNode(reference)); 58658 if (boundariesNode.nodeName === 'BODY') { 58659 boundariesNode = popper.ownerDocument.documentElement; 58660 } 58661 } else if (boundariesElement === 'window') { 58662 boundariesNode = popper.ownerDocument.documentElement; 58663 } else { 58664 boundariesNode = boundariesElement; 58665 } 58666 58667 var offsets = getOffsetRectRelativeToArbitraryNode(boundariesNode, offsetParent, fixedPosition); 58668 58669 // In case of HTML, we need a different computation 58670 if (boundariesNode.nodeName === 'HTML' && !isFixed(offsetParent)) { 58671 var _getWindowSizes = getWindowSizes(popper.ownerDocument), 58672 height = _getWindowSizes.height, 58673 width = _getWindowSizes.width; 58674 58675 boundaries.top += offsets.top - offsets.marginTop; 58676 boundaries.bottom = height + offsets.top; 58677 boundaries.left += offsets.left - offsets.marginLeft; 58678 boundaries.right = width + offsets.left; 58679 } else { 58680 // for all the other DOM elements, this one is good 58681 boundaries = offsets; 58682 } 58683 } 58684 58685 // Add paddings 58686 padding = padding || 0; 58687 var isPaddingNumber = typeof padding === 'number'; 58688 boundaries.left += isPaddingNumber ? padding : padding.left || 0; 58689 boundaries.top += isPaddingNumber ? padding : padding.top || 0; 58690 boundaries.right -= isPaddingNumber ? padding : padding.right || 0; 58691 boundaries.bottom -= isPaddingNumber ? padding : padding.bottom || 0; 58692 58693 return boundaries; 58694} 58695 58696function getArea(_ref) { 58697 var width = _ref.width, 58698 height = _ref.height; 58699 58700 return width * height; 58701} 58702 58703/** 58704 * Utility used to transform the `auto` placement to the placement with more 58705 * available space. 58706 * @method 58707 * @memberof Popper.Utils 58708 * @argument {Object} data - The data object generated by update method 58709 * @argument {Object} options - Modifiers configuration and options 58710 * @returns {Object} The data object, properly modified 58711 */ 58712function computeAutoPlacement(placement, refRect, popper, reference, boundariesElement) { 58713 var padding = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 0; 58714 58715 if (placement.indexOf('auto') === -1) { 58716 return placement; 58717 } 58718 58719 var boundaries = getBoundaries(popper, reference, padding, boundariesElement); 58720 58721 var rects = { 58722 top: { 58723 width: boundaries.width, 58724 height: refRect.top - boundaries.top 58725 }, 58726 right: { 58727 width: boundaries.right - refRect.right, 58728 height: boundaries.height 58729 }, 58730 bottom: { 58731 width: boundaries.width, 58732 height: boundaries.bottom - refRect.bottom 58733 }, 58734 left: { 58735 width: refRect.left - boundaries.left, 58736 height: boundaries.height 58737 } 58738 }; 58739 58740 var sortedAreas = Object.keys(rects).map(function (key) { 58741 return _extends({ 58742 key: key 58743 }, rects[key], { 58744 area: getArea(rects[key]) 58745 }); 58746 }).sort(function (a, b) { 58747 return b.area - a.area; 58748 }); 58749 58750 var filteredAreas = sortedAreas.filter(function (_ref2) { 58751 var width = _ref2.width, 58752 height = _ref2.height; 58753 return width >= popper.clientWidth && height >= popper.clientHeight; 58754 }); 58755 58756 var computedPlacement = filteredAreas.length > 0 ? filteredAreas[0].key : sortedAreas[0].key; 58757 58758 var variation = placement.split('-')[1]; 58759 58760 return computedPlacement + (variation ? '-' + variation : ''); 58761} 58762 58763/** 58764 * Get offsets to the reference element 58765 * @method 58766 * @memberof Popper.Utils 58767 * @param {Object} state 58768 * @param {Element} popper - the popper element 58769 * @param {Element} reference - the reference element (the popper will be relative to this) 58770 * @param {Element} fixedPosition - is in fixed position mode 58771 * @returns {Object} An object containing the offsets which will be applied to the popper 58772 */ 58773function getReferenceOffsets(state, popper, reference) { 58774 var fixedPosition = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null; 58775 58776 var commonOffsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, getReferenceNode(reference)); 58777 return getOffsetRectRelativeToArbitraryNode(reference, commonOffsetParent, fixedPosition); 58778} 58779 58780/** 58781 * Get the outer sizes of the given element (offset size + margins) 58782 * @method 58783 * @memberof Popper.Utils 58784 * @argument {Element} element 58785 * @returns {Object} object containing width and height properties 58786 */ 58787function getOuterSizes(element) { 58788 var window = element.ownerDocument.defaultView; 58789 var styles = window.getComputedStyle(element); 58790 var x = parseFloat(styles.marginTop || 0) + parseFloat(styles.marginBottom || 0); 58791 var y = parseFloat(styles.marginLeft || 0) + parseFloat(styles.marginRight || 0); 58792 var result = { 58793 width: element.offsetWidth + y, 58794 height: element.offsetHeight + x 58795 }; 58796 return result; 58797} 58798 58799/** 58800 * Get the opposite placement of the given one 58801 * @method 58802 * @memberof Popper.Utils 58803 * @argument {String} placement 58804 * @returns {String} flipped placement 58805 */ 58806function getOppositePlacement(placement) { 58807 var hash = { left: 'right', right: 'left', bottom: 'top', top: 'bottom' }; 58808 return placement.replace(/left|right|bottom|top/g, function (matched) { 58809 return hash[matched]; 58810 }); 58811} 58812 58813/** 58814 * Get offsets to the popper 58815 * @method 58816 * @memberof Popper.Utils 58817 * @param {Object} position - CSS position the Popper will get applied 58818 * @param {HTMLElement} popper - the popper element 58819 * @param {Object} referenceOffsets - the reference offsets (the popper will be relative to this) 58820 * @param {String} placement - one of the valid placement options 58821 * @returns {Object} popperOffsets - An object containing the offsets which will be applied to the popper 58822 */ 58823function getPopperOffsets(popper, referenceOffsets, placement) { 58824 placement = placement.split('-')[0]; 58825 58826 // Get popper node sizes 58827 var popperRect = getOuterSizes(popper); 58828 58829 // Add position, width and height to our offsets object 58830 var popperOffsets = { 58831 width: popperRect.width, 58832 height: popperRect.height 58833 }; 58834 58835 // depending by the popper placement we have to compute its offsets slightly differently 58836 var isHoriz = ['right', 'left'].indexOf(placement) !== -1; 58837 var mainSide = isHoriz ? 'top' : 'left'; 58838 var secondarySide = isHoriz ? 'left' : 'top'; 58839 var measurement = isHoriz ? 'height' : 'width'; 58840 var secondaryMeasurement = !isHoriz ? 'height' : 'width'; 58841 58842 popperOffsets[mainSide] = referenceOffsets[mainSide] + referenceOffsets[measurement] / 2 - popperRect[measurement] / 2; 58843 if (placement === secondarySide) { 58844 popperOffsets[secondarySide] = referenceOffsets[secondarySide] - popperRect[secondaryMeasurement]; 58845 } else { 58846 popperOffsets[secondarySide] = referenceOffsets[getOppositePlacement(secondarySide)]; 58847 } 58848 58849 return popperOffsets; 58850} 58851 58852/** 58853 * Mimics the `find` method of Array 58854 * @method 58855 * @memberof Popper.Utils 58856 * @argument {Array} arr 58857 * @argument prop 58858 * @argument value 58859 * @returns index or -1 58860 */ 58861function find(arr, check) { 58862 // use native find if supported 58863 if (Array.prototype.find) { 58864 return arr.find(check); 58865 } 58866 58867 // use `filter` to obtain the same behavior of `find` 58868 return arr.filter(check)[0]; 58869} 58870 58871/** 58872 * Return the index of the matching object 58873 * @method 58874 * @memberof Popper.Utils 58875 * @argument {Array} arr 58876 * @argument prop 58877 * @argument value 58878 * @returns index or -1 58879 */ 58880function findIndex(arr, prop, value) { 58881 // use native findIndex if supported 58882 if (Array.prototype.findIndex) { 58883 return arr.findIndex(function (cur) { 58884 return cur[prop] === value; 58885 }); 58886 } 58887 58888 // use `find` + `indexOf` if `findIndex` isn't supported 58889 var match = find(arr, function (obj) { 58890 return obj[prop] === value; 58891 }); 58892 return arr.indexOf(match); 58893} 58894 58895/** 58896 * Loop trough the list of modifiers and run them in order, 58897 * each of them will then edit the data object. 58898 * @method 58899 * @memberof Popper.Utils 58900 * @param {dataObject} data 58901 * @param {Array} modifiers 58902 * @param {String} ends - Optional modifier name used as stopper 58903 * @returns {dataObject} 58904 */ 58905function runModifiers(modifiers, data, ends) { 58906 var modifiersToRun = ends === undefined ? modifiers : modifiers.slice(0, findIndex(modifiers, 'name', ends)); 58907 58908 modifiersToRun.forEach(function (modifier) { 58909 if (modifier['function']) { 58910 // eslint-disable-line dot-notation 58911 console.warn('`modifier.function` is deprecated, use `modifier.fn`!'); 58912 } 58913 var fn = modifier['function'] || modifier.fn; // eslint-disable-line dot-notation 58914 if (modifier.enabled && isFunction(fn)) { 58915 // Add properties to offsets to make them a complete clientRect object 58916 // we do this before each modifier to make sure the previous one doesn't 58917 // mess with these values 58918 data.offsets.popper = getClientRect(data.offsets.popper); 58919 data.offsets.reference = getClientRect(data.offsets.reference); 58920 58921 data = fn(data, modifier); 58922 } 58923 }); 58924 58925 return data; 58926} 58927 58928/** 58929 * Updates the position of the popper, computing the new offsets and applying 58930 * the new style.<br /> 58931 * Prefer `scheduleUpdate` over `update` because of performance reasons. 58932 * @method 58933 * @memberof Popper 58934 */ 58935function update() { 58936 // if popper is destroyed, don't perform any further update 58937 if (this.state.isDestroyed) { 58938 return; 58939 } 58940 58941 var data = { 58942 instance: this, 58943 styles: {}, 58944 arrowStyles: {}, 58945 attributes: {}, 58946 flipped: false, 58947 offsets: {} 58948 }; 58949 58950 // compute reference element offsets 58951 data.offsets.reference = getReferenceOffsets(this.state, this.popper, this.reference, this.options.positionFixed); 58952 58953 // compute auto placement, store placement inside the data object, 58954 // modifiers will be able to edit `placement` if needed 58955 // and refer to originalPlacement to know the original value 58956 data.placement = computeAutoPlacement(this.options.placement, data.offsets.reference, this.popper, this.reference, this.options.modifiers.flip.boundariesElement, this.options.modifiers.flip.padding); 58957 58958 // store the computed placement inside `originalPlacement` 58959 data.originalPlacement = data.placement; 58960 58961 data.positionFixed = this.options.positionFixed; 58962 58963 // compute the popper offsets 58964 data.offsets.popper = getPopperOffsets(this.popper, data.offsets.reference, data.placement); 58965 58966 data.offsets.popper.position = this.options.positionFixed ? 'fixed' : 'absolute'; 58967 58968 // run the modifiers 58969 data = runModifiers(this.modifiers, data); 58970 58971 // the first `update` will call `onCreate` callback 58972 // the other ones will call `onUpdate` callback 58973 if (!this.state.isCreated) { 58974 this.state.isCreated = true; 58975 this.options.onCreate(data); 58976 } else { 58977 this.options.onUpdate(data); 58978 } 58979} 58980 58981/** 58982 * Helper used to know if the given modifier is enabled. 58983 * @method 58984 * @memberof Popper.Utils 58985 * @returns {Boolean} 58986 */ 58987function isModifierEnabled(modifiers, modifierName) { 58988 return modifiers.some(function (_ref) { 58989 var name = _ref.name, 58990 enabled = _ref.enabled; 58991 return enabled && name === modifierName; 58992 }); 58993} 58994 58995/** 58996 * Get the prefixed supported property name 58997 * @method 58998 * @memberof Popper.Utils 58999 * @argument {String} property (camelCase) 59000 * @returns {String} prefixed property (camelCase or PascalCase, depending on the vendor prefix) 59001 */ 59002function getSupportedPropertyName(property) { 59003 var prefixes = [false, 'ms', 'Webkit', 'Moz', 'O']; 59004 var upperProp = property.charAt(0).toUpperCase() + property.slice(1); 59005 59006 for (var i = 0; i < prefixes.length; i++) { 59007 var prefix = prefixes[i]; 59008 var toCheck = prefix ? '' + prefix + upperProp : property; 59009 if (typeof document.body.style[toCheck] !== 'undefined') { 59010 return toCheck; 59011 } 59012 } 59013 return null; 59014} 59015 59016/** 59017 * Destroys the popper. 59018 * @method 59019 * @memberof Popper 59020 */ 59021function destroy() { 59022 this.state.isDestroyed = true; 59023 59024 // touch DOM only if `applyStyle` modifier is enabled 59025 if (isModifierEnabled(this.modifiers, 'applyStyle')) { 59026 this.popper.removeAttribute('x-placement'); 59027 this.popper.style.position = ''; 59028 this.popper.style.top = ''; 59029 this.popper.style.left = ''; 59030 this.popper.style.right = ''; 59031 this.popper.style.bottom = ''; 59032 this.popper.style.willChange = ''; 59033 this.popper.style[getSupportedPropertyName('transform')] = ''; 59034 } 59035 59036 this.disableEventListeners(); 59037 59038 // remove the popper if user explicitly asked for the deletion on destroy 59039 // do not use `remove` because IE11 doesn't support it 59040 if (this.options.removeOnDestroy) { 59041 this.popper.parentNode.removeChild(this.popper); 59042 } 59043 return this; 59044} 59045 59046/** 59047 * Get the window associated with the element 59048 * @argument {Element} element 59049 * @returns {Window} 59050 */ 59051function getWindow(element) { 59052 var ownerDocument = element.ownerDocument; 59053 return ownerDocument ? ownerDocument.defaultView : window; 59054} 59055 59056function attachToScrollParents(scrollParent, event, callback, scrollParents) { 59057 var isBody = scrollParent.nodeName === 'BODY'; 59058 var target = isBody ? scrollParent.ownerDocument.defaultView : scrollParent; 59059 target.addEventListener(event, callback, { passive: true }); 59060 59061 if (!isBody) { 59062 attachToScrollParents(getScrollParent(target.parentNode), event, callback, scrollParents); 59063 } 59064 scrollParents.push(target); 59065} 59066 59067/** 59068 * Setup needed event listeners used to update the popper position 59069 * @method 59070 * @memberof Popper.Utils 59071 * @private 59072 */ 59073function setupEventListeners(reference, options, state, updateBound) { 59074 // Resize event listener on window 59075 state.updateBound = updateBound; 59076 getWindow(reference).addEventListener('resize', state.updateBound, { passive: true }); 59077 59078 // Scroll event listener on scroll parents 59079 var scrollElement = getScrollParent(reference); 59080 attachToScrollParents(scrollElement, 'scroll', state.updateBound, state.scrollParents); 59081 state.scrollElement = scrollElement; 59082 state.eventsEnabled = true; 59083 59084 return state; 59085} 59086 59087/** 59088 * It will add resize/scroll events and start recalculating 59089 * position of the popper element when they are triggered. 59090 * @method 59091 * @memberof Popper 59092 */ 59093function enableEventListeners() { 59094 if (!this.state.eventsEnabled) { 59095 this.state = setupEventListeners(this.reference, this.options, this.state, this.scheduleUpdate); 59096 } 59097} 59098 59099/** 59100 * Remove event listeners used to update the popper position 59101 * @method 59102 * @memberof Popper.Utils 59103 * @private 59104 */ 59105function removeEventListeners(reference, state) { 59106 // Remove resize event listener on window 59107 getWindow(reference).removeEventListener('resize', state.updateBound); 59108 59109 // Remove scroll event listener on scroll parents 59110 state.scrollParents.forEach(function (target) { 59111 target.removeEventListener('scroll', state.updateBound); 59112 }); 59113 59114 // Reset state 59115 state.updateBound = null; 59116 state.scrollParents = []; 59117 state.scrollElement = null; 59118 state.eventsEnabled = false; 59119 return state; 59120} 59121 59122/** 59123 * It will remove resize/scroll events and won't recalculate popper position 59124 * when they are triggered. It also won't trigger `onUpdate` callback anymore, 59125 * unless you call `update` method manually. 59126 * @method 59127 * @memberof Popper 59128 */ 59129function disableEventListeners() { 59130 if (this.state.eventsEnabled) { 59131 cancelAnimationFrame(this.scheduleUpdate); 59132 this.state = removeEventListeners(this.reference, this.state); 59133 } 59134} 59135 59136/** 59137 * Tells if a given input is a number 59138 * @method 59139 * @memberof Popper.Utils 59140 * @param {*} input to check 59141 * @return {Boolean} 59142 */ 59143function isNumeric(n) { 59144 return n !== '' && !isNaN(parseFloat(n)) && isFinite(n); 59145} 59146 59147/** 59148 * Set the style to the given popper 59149 * @method 59150 * @memberof Popper.Utils 59151 * @argument {Element} element - Element to apply the style to 59152 * @argument {Object} styles 59153 * Object with a list of properties and values which will be applied to the element 59154 */ 59155function setStyles(element, styles) { 59156 Object.keys(styles).forEach(function (prop) { 59157 var unit = ''; 59158 // add unit if the value is numeric and is one of the following 59159 if (['width', 'height', 'top', 'right', 'bottom', 'left'].indexOf(prop) !== -1 && isNumeric(styles[prop])) { 59160 unit = 'px'; 59161 } 59162 element.style[prop] = styles[prop] + unit; 59163 }); 59164} 59165 59166/** 59167 * Set the attributes to the given popper 59168 * @method 59169 * @memberof Popper.Utils 59170 * @argument {Element} element - Element to apply the attributes to 59171 * @argument {Object} styles 59172 * Object with a list of properties and values which will be applied to the element 59173 */ 59174function setAttributes(element, attributes) { 59175 Object.keys(attributes).forEach(function (prop) { 59176 var value = attributes[prop]; 59177 if (value !== false) { 59178 element.setAttribute(prop, attributes[prop]); 59179 } else { 59180 element.removeAttribute(prop); 59181 } 59182 }); 59183} 59184 59185/** 59186 * @function 59187 * @memberof Modifiers 59188 * @argument {Object} data - The data object generated by `update` method 59189 * @argument {Object} data.styles - List of style properties - values to apply to popper element 59190 * @argument {Object} data.attributes - List of attribute properties - values to apply to popper element 59191 * @argument {Object} options - Modifiers configuration and options 59192 * @returns {Object} The same data object 59193 */ 59194function applyStyle(data) { 59195 // any property present in `data.styles` will be applied to the popper, 59196 // in this way we can make the 3rd party modifiers add custom styles to it 59197 // Be aware, modifiers could override the properties defined in the previous 59198 // lines of this modifier! 59199 setStyles(data.instance.popper, data.styles); 59200 59201 // any property present in `data.attributes` will be applied to the popper, 59202 // they will be set as HTML attributes of the element 59203 setAttributes(data.instance.popper, data.attributes); 59204 59205 // if arrowElement is defined and arrowStyles has some properties 59206 if (data.arrowElement && Object.keys(data.arrowStyles).length) { 59207 setStyles(data.arrowElement, data.arrowStyles); 59208 } 59209 59210 return data; 59211} 59212 59213/** 59214 * Set the x-placement attribute before everything else because it could be used 59215 * to add margins to the popper margins needs to be calculated to get the 59216 * correct popper offsets. 59217 * @method 59218 * @memberof Popper.modifiers 59219 * @param {HTMLElement} reference - The reference element used to position the popper 59220 * @param {HTMLElement} popper - The HTML element used as popper 59221 * @param {Object} options - Popper.js options 59222 */ 59223function applyStyleOnLoad(reference, popper, options, modifierOptions, state) { 59224 // compute reference element offsets 59225 var referenceOffsets = getReferenceOffsets(state, popper, reference, options.positionFixed); 59226 59227 // compute auto placement, store placement inside the data object, 59228 // modifiers will be able to edit `placement` if needed 59229 // and refer to originalPlacement to know the original value 59230 var placement = computeAutoPlacement(options.placement, referenceOffsets, popper, reference, options.modifiers.flip.boundariesElement, options.modifiers.flip.padding); 59231 59232 popper.setAttribute('x-placement', placement); 59233 59234 // Apply `position` to popper before anything else because 59235 // without the position applied we can't guarantee correct computations 59236 setStyles(popper, { position: options.positionFixed ? 'fixed' : 'absolute' }); 59237 59238 return options; 59239} 59240 59241/** 59242 * @function 59243 * @memberof Popper.Utils 59244 * @argument {Object} data - The data object generated by `update` method 59245 * @argument {Boolean} shouldRound - If the offsets should be rounded at all 59246 * @returns {Object} The popper's position offsets rounded 59247 * 59248 * The tale of pixel-perfect positioning. It's still not 100% perfect, but as 59249 * good as it can be within reason. 59250 * Discussion here: https://github.com/FezVrasta/popper.js/pull/715 59251 * 59252 * Low DPI screens cause a popper to be blurry if not using full pixels (Safari 59253 * as well on High DPI screens). 59254 * 59255 * Firefox prefers no rounding for positioning and does not have blurriness on 59256 * high DPI screens. 59257 * 59258 * Only horizontal placement and left/right values need to be considered. 59259 */ 59260function getRoundedOffsets(data, shouldRound) { 59261 var _data$offsets = data.offsets, 59262 popper = _data$offsets.popper, 59263 reference = _data$offsets.reference; 59264 var round = Math.round, 59265 floor = Math.floor; 59266 59267 var noRound = function noRound(v) { 59268 return v; 59269 }; 59270 59271 var referenceWidth = round(reference.width); 59272 var popperWidth = round(popper.width); 59273 59274 var isVertical = ['left', 'right'].indexOf(data.placement) !== -1; 59275 var isVariation = data.placement.indexOf('-') !== -1; 59276 var sameWidthParity = referenceWidth % 2 === popperWidth % 2; 59277 var bothOddWidth = referenceWidth % 2 === 1 && popperWidth % 2 === 1; 59278 59279 var horizontalToInteger = !shouldRound ? noRound : isVertical || isVariation || sameWidthParity ? round : floor; 59280 var verticalToInteger = !shouldRound ? noRound : round; 59281 59282 return { 59283 left: horizontalToInteger(bothOddWidth && !isVariation && shouldRound ? popper.left - 1 : popper.left), 59284 top: verticalToInteger(popper.top), 59285 bottom: verticalToInteger(popper.bottom), 59286 right: horizontalToInteger(popper.right) 59287 }; 59288} 59289 59290var isFirefox = isBrowser && /Firefox/i.test(navigator.userAgent); 59291 59292/** 59293 * @function 59294 * @memberof Modifiers 59295 * @argument {Object} data - The data object generated by `update` method 59296 * @argument {Object} options - Modifiers configuration and options 59297 * @returns {Object} The data object, properly modified 59298 */ 59299function computeStyle(data, options) { 59300 var x = options.x, 59301 y = options.y; 59302 var popper = data.offsets.popper; 59303 59304 // Remove this legacy support in Popper.js v2 59305 59306 var legacyGpuAccelerationOption = find(data.instance.modifiers, function (modifier) { 59307 return modifier.name === 'applyStyle'; 59308 }).gpuAcceleration; 59309 if (legacyGpuAccelerationOption !== undefined) { 59310 console.warn('WARNING: `gpuAcceleration` option moved to `computeStyle` modifier and will not be supported in future versions of Popper.js!'); 59311 } 59312 var gpuAcceleration = legacyGpuAccelerationOption !== undefined ? legacyGpuAccelerationOption : options.gpuAcceleration; 59313 59314 var offsetParent = getOffsetParent(data.instance.popper); 59315 var offsetParentRect = getBoundingClientRect(offsetParent); 59316 59317 // Styles 59318 var styles = { 59319 position: popper.position 59320 }; 59321 59322 var offsets = getRoundedOffsets(data, window.devicePixelRatio < 2 || !isFirefox); 59323 59324 var sideA = x === 'bottom' ? 'top' : 'bottom'; 59325 var sideB = y === 'right' ? 'left' : 'right'; 59326 59327 // if gpuAcceleration is set to `true` and transform is supported, 59328 // we use `translate3d` to apply the position to the popper we 59329 // automatically use the supported prefixed version if needed 59330 var prefixedProperty = getSupportedPropertyName('transform'); 59331 59332 // now, let's make a step back and look at this code closely (wtf?) 59333 // If the content of the popper grows once it's been positioned, it 59334 // may happen that the popper gets misplaced because of the new content 59335 // overflowing its reference element 59336 // To avoid this problem, we provide two options (x and y), which allow 59337 // the consumer to define the offset origin. 59338 // If we position a popper on top of a reference element, we can set 59339 // `x` to `top` to make the popper grow towards its top instead of 59340 // its bottom. 59341 var left = void 0, 59342 top = void 0; 59343 if (sideA === 'bottom') { 59344 // when offsetParent is <html> the positioning is relative to the bottom of the screen (excluding the scrollbar) 59345 // and not the bottom of the html element 59346 if (offsetParent.nodeName === 'HTML') { 59347 top = -offsetParent.clientHeight + offsets.bottom; 59348 } else { 59349 top = -offsetParentRect.height + offsets.bottom; 59350 } 59351 } else { 59352 top = offsets.top; 59353 } 59354 if (sideB === 'right') { 59355 if (offsetParent.nodeName === 'HTML') { 59356 left = -offsetParent.clientWidth + offsets.right; 59357 } else { 59358 left = -offsetParentRect.width + offsets.right; 59359 } 59360 } else { 59361 left = offsets.left; 59362 } 59363 if (gpuAcceleration && prefixedProperty) { 59364 styles[prefixedProperty] = 'translate3d(' + left + 'px, ' + top + 'px, 0)'; 59365 styles[sideA] = 0; 59366 styles[sideB] = 0; 59367 styles.willChange = 'transform'; 59368 } else { 59369 // othwerise, we use the standard `top`, `left`, `bottom` and `right` properties 59370 var invertTop = sideA === 'bottom' ? -1 : 1; 59371 var invertLeft = sideB === 'right' ? -1 : 1; 59372 styles[sideA] = top * invertTop; 59373 styles[sideB] = left * invertLeft; 59374 styles.willChange = sideA + ', ' + sideB; 59375 } 59376 59377 // Attributes 59378 var attributes = { 59379 'x-placement': data.placement 59380 }; 59381 59382 // Update `data` attributes, styles and arrowStyles 59383 data.attributes = _extends({}, attributes, data.attributes); 59384 data.styles = _extends({}, styles, data.styles); 59385 data.arrowStyles = _extends({}, data.offsets.arrow, data.arrowStyles); 59386 59387 return data; 59388} 59389 59390/** 59391 * Helper used to know if the given modifier depends from another one.<br /> 59392 * It checks if the needed modifier is listed and enabled. 59393 * @method 59394 * @memberof Popper.Utils 59395 * @param {Array} modifiers - list of modifiers 59396 * @param {String} requestingName - name of requesting modifier 59397 * @param {String} requestedName - name of requested modifier 59398 * @returns {Boolean} 59399 */ 59400function isModifierRequired(modifiers, requestingName, requestedName) { 59401 var requesting = find(modifiers, function (_ref) { 59402 var name = _ref.name; 59403 return name === requestingName; 59404 }); 59405 59406 var isRequired = !!requesting && modifiers.some(function (modifier) { 59407 return modifier.name === requestedName && modifier.enabled && modifier.order < requesting.order; 59408 }); 59409 59410 if (!isRequired) { 59411 var _requesting = '`' + requestingName + '`'; 59412 var requested = '`' + requestedName + '`'; 59413 console.warn(requested + ' modifier is required by ' + _requesting + ' modifier in order to work, be sure to include it before ' + _requesting + '!'); 59414 } 59415 return isRequired; 59416} 59417 59418/** 59419 * @function 59420 * @memberof Modifiers 59421 * @argument {Object} data - The data object generated by update method 59422 * @argument {Object} options - Modifiers configuration and options 59423 * @returns {Object} The data object, properly modified 59424 */ 59425function arrow(data, options) { 59426 var _data$offsets$arrow; 59427 59428 // arrow depends on keepTogether in order to work 59429 if (!isModifierRequired(data.instance.modifiers, 'arrow', 'keepTogether')) { 59430 return data; 59431 } 59432 59433 var arrowElement = options.element; 59434 59435 // if arrowElement is a string, suppose it's a CSS selector 59436 if (typeof arrowElement === 'string') { 59437 arrowElement = data.instance.popper.querySelector(arrowElement); 59438 59439 // if arrowElement is not found, don't run the modifier 59440 if (!arrowElement) { 59441 return data; 59442 } 59443 } else { 59444 // if the arrowElement isn't a query selector we must check that the 59445 // provided DOM node is child of its popper node 59446 if (!data.instance.popper.contains(arrowElement)) { 59447 console.warn('WARNING: `arrow.element` must be child of its popper element!'); 59448 return data; 59449 } 59450 } 59451 59452 var placement = data.placement.split('-')[0]; 59453 var _data$offsets = data.offsets, 59454 popper = _data$offsets.popper, 59455 reference = _data$offsets.reference; 59456 59457 var isVertical = ['left', 'right'].indexOf(placement) !== -1; 59458 59459 var len = isVertical ? 'height' : 'width'; 59460 var sideCapitalized = isVertical ? 'Top' : 'Left'; 59461 var side = sideCapitalized.toLowerCase(); 59462 var altSide = isVertical ? 'left' : 'top'; 59463 var opSide = isVertical ? 'bottom' : 'right'; 59464 var arrowElementSize = getOuterSizes(arrowElement)[len]; 59465 59466 // 59467 // extends keepTogether behavior making sure the popper and its 59468 // reference have enough pixels in conjunction 59469 // 59470 59471 // top/left side 59472 if (reference[opSide] - arrowElementSize < popper[side]) { 59473 data.offsets.popper[side] -= popper[side] - (reference[opSide] - arrowElementSize); 59474 } 59475 // bottom/right side 59476 if (reference[side] + arrowElementSize > popper[opSide]) { 59477 data.offsets.popper[side] += reference[side] + arrowElementSize - popper[opSide]; 59478 } 59479 data.offsets.popper = getClientRect(data.offsets.popper); 59480 59481 // compute center of the popper 59482 var center = reference[side] + reference[len] / 2 - arrowElementSize / 2; 59483 59484 // Compute the sideValue using the updated popper offsets 59485 // take popper margin in account because we don't have this info available 59486 var css = getStyleComputedProperty(data.instance.popper); 59487 var popperMarginSide = parseFloat(css['margin' + sideCapitalized]); 59488 var popperBorderSide = parseFloat(css['border' + sideCapitalized + 'Width']); 59489 var sideValue = center - data.offsets.popper[side] - popperMarginSide - popperBorderSide; 59490 59491 // prevent arrowElement from being placed not contiguously to its popper 59492 sideValue = Math.max(Math.min(popper[len] - arrowElementSize, sideValue), 0); 59493 59494 data.arrowElement = arrowElement; 59495 data.offsets.arrow = (_data$offsets$arrow = {}, defineProperty(_data$offsets$arrow, side, Math.round(sideValue)), defineProperty(_data$offsets$arrow, altSide, ''), _data$offsets$arrow); 59496 59497 return data; 59498} 59499 59500/** 59501 * Get the opposite placement variation of the given one 59502 * @method 59503 * @memberof Popper.Utils 59504 * @argument {String} placement variation 59505 * @returns {String} flipped placement variation 59506 */ 59507function getOppositeVariation(variation) { 59508 if (variation === 'end') { 59509 return 'start'; 59510 } else if (variation === 'start') { 59511 return 'end'; 59512 } 59513 return variation; 59514} 59515 59516/** 59517 * List of accepted placements to use as values of the `placement` option.<br /> 59518 * Valid placements are: 59519 * - `auto` 59520 * - `top` 59521 * - `right` 59522 * - `bottom` 59523 * - `left` 59524 * 59525 * Each placement can have a variation from this list: 59526 * - `-start` 59527 * - `-end` 59528 * 59529 * Variations are interpreted easily if you think of them as the left to right 59530 * written languages. Horizontally (`top` and `bottom`), `start` is left and `end` 59531 * is right.<br /> 59532 * Vertically (`left` and `right`), `start` is top and `end` is bottom. 59533 * 59534 * Some valid examples are: 59535 * - `top-end` (on top of reference, right aligned) 59536 * - `right-start` (on right of reference, top aligned) 59537 * - `bottom` (on bottom, centered) 59538 * - `auto-end` (on the side with more space available, alignment depends by placement) 59539 * 59540 * @static 59541 * @type {Array} 59542 * @enum {String} 59543 * @readonly 59544 * @method placements 59545 * @memberof Popper 59546 */ 59547var placements = ['auto-start', 'auto', 'auto-end', 'top-start', 'top', 'top-end', 'right-start', 'right', 'right-end', 'bottom-end', 'bottom', 'bottom-start', 'left-end', 'left', 'left-start']; 59548 59549// Get rid of `auto` `auto-start` and `auto-end` 59550var validPlacements = placements.slice(3); 59551 59552/** 59553 * Given an initial placement, returns all the subsequent placements 59554 * clockwise (or counter-clockwise). 59555 * 59556 * @method 59557 * @memberof Popper.Utils 59558 * @argument {String} placement - A valid placement (it accepts variations) 59559 * @argument {Boolean} counter - Set to true to walk the placements counterclockwise 59560 * @returns {Array} placements including their variations 59561 */ 59562function clockwise(placement) { 59563 var counter = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; 59564 59565 var index = validPlacements.indexOf(placement); 59566 var arr = validPlacements.slice(index + 1).concat(validPlacements.slice(0, index)); 59567 return counter ? arr.reverse() : arr; 59568} 59569 59570var BEHAVIORS = { 59571 FLIP: 'flip', 59572 CLOCKWISE: 'clockwise', 59573 COUNTERCLOCKWISE: 'counterclockwise' 59574}; 59575 59576/** 59577 * @function 59578 * @memberof Modifiers 59579 * @argument {Object} data - The data object generated by update method 59580 * @argument {Object} options - Modifiers configuration and options 59581 * @returns {Object} The data object, properly modified 59582 */ 59583function flip(data, options) { 59584 // if `inner` modifier is enabled, we can't use the `flip` modifier 59585 if (isModifierEnabled(data.instance.modifiers, 'inner')) { 59586 return data; 59587 } 59588 59589 if (data.flipped && data.placement === data.originalPlacement) { 59590 // seems like flip is trying to loop, probably there's not enough space on any of the flippable sides 59591 return data; 59592 } 59593 59594 var boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, options.boundariesElement, data.positionFixed); 59595 59596 var placement = data.placement.split('-')[0]; 59597 var placementOpposite = getOppositePlacement(placement); 59598 var variation = data.placement.split('-')[1] || ''; 59599 59600 var flipOrder = []; 59601 59602 switch (options.behavior) { 59603 case BEHAVIORS.FLIP: 59604 flipOrder = [placement, placementOpposite]; 59605 break; 59606 case BEHAVIORS.CLOCKWISE: 59607 flipOrder = clockwise(placement); 59608 break; 59609 case BEHAVIORS.COUNTERCLOCKWISE: 59610 flipOrder = clockwise(placement, true); 59611 break; 59612 default: 59613 flipOrder = options.behavior; 59614 } 59615 59616 flipOrder.forEach(function (step, index) { 59617 if (placement !== step || flipOrder.length === index + 1) { 59618 return data; 59619 } 59620 59621 placement = data.placement.split('-')[0]; 59622 placementOpposite = getOppositePlacement(placement); 59623 59624 var popperOffsets = data.offsets.popper; 59625 var refOffsets = data.offsets.reference; 59626 59627 // using floor because the reference offsets may contain decimals we are not going to consider here 59628 var floor = Math.floor; 59629 var overlapsRef = placement === 'left' && floor(popperOffsets.right) > floor(refOffsets.left) || placement === 'right' && floor(popperOffsets.left) < floor(refOffsets.right) || placement === 'top' && floor(popperOffsets.bottom) > floor(refOffsets.top) || placement === 'bottom' && floor(popperOffsets.top) < floor(refOffsets.bottom); 59630 59631 var overflowsLeft = floor(popperOffsets.left) < floor(boundaries.left); 59632 var overflowsRight = floor(popperOffsets.right) > floor(boundaries.right); 59633 var overflowsTop = floor(popperOffsets.top) < floor(boundaries.top); 59634 var overflowsBottom = floor(popperOffsets.bottom) > floor(boundaries.bottom); 59635 59636 var overflowsBoundaries = placement === 'left' && overflowsLeft || placement === 'right' && overflowsRight || placement === 'top' && overflowsTop || placement === 'bottom' && overflowsBottom; 59637 59638 // flip the variation if required 59639 var isVertical = ['top', 'bottom'].indexOf(placement) !== -1; 59640 59641 // flips variation if reference element overflows boundaries 59642 var flippedVariationByRef = !!options.flipVariations && (isVertical && variation === 'start' && overflowsLeft || isVertical && variation === 'end' && overflowsRight || !isVertical && variation === 'start' && overflowsTop || !isVertical && variation === 'end' && overflowsBottom); 59643 59644 // flips variation if popper content overflows boundaries 59645 var flippedVariationByContent = !!options.flipVariationsByContent && (isVertical && variation === 'start' && overflowsRight || isVertical && variation === 'end' && overflowsLeft || !isVertical && variation === 'start' && overflowsBottom || !isVertical && variation === 'end' && overflowsTop); 59646 59647 var flippedVariation = flippedVariationByRef || flippedVariationByContent; 59648 59649 if (overlapsRef || overflowsBoundaries || flippedVariation) { 59650 // this boolean to detect any flip loop 59651 data.flipped = true; 59652 59653 if (overlapsRef || overflowsBoundaries) { 59654 placement = flipOrder[index + 1]; 59655 } 59656 59657 if (flippedVariation) { 59658 variation = getOppositeVariation(variation); 59659 } 59660 59661 data.placement = placement + (variation ? '-' + variation : ''); 59662 59663 // this object contains `position`, we want to preserve it along with 59664 // any additional property we may add in the future 59665 data.offsets.popper = _extends({}, data.offsets.popper, getPopperOffsets(data.instance.popper, data.offsets.reference, data.placement)); 59666 59667 data = runModifiers(data.instance.modifiers, data, 'flip'); 59668 } 59669 }); 59670 return data; 59671} 59672 59673/** 59674 * @function 59675 * @memberof Modifiers 59676 * @argument {Object} data - The data object generated by update method 59677 * @argument {Object} options - Modifiers configuration and options 59678 * @returns {Object} The data object, properly modified 59679 */ 59680function keepTogether(data) { 59681 var _data$offsets = data.offsets, 59682 popper = _data$offsets.popper, 59683 reference = _data$offsets.reference; 59684 59685 var placement = data.placement.split('-')[0]; 59686 var floor = Math.floor; 59687 var isVertical = ['top', 'bottom'].indexOf(placement) !== -1; 59688 var side = isVertical ? 'right' : 'bottom'; 59689 var opSide = isVertical ? 'left' : 'top'; 59690 var measurement = isVertical ? 'width' : 'height'; 59691 59692 if (popper[side] < floor(reference[opSide])) { 59693 data.offsets.popper[opSide] = floor(reference[opSide]) - popper[measurement]; 59694 } 59695 if (popper[opSide] > floor(reference[side])) { 59696 data.offsets.popper[opSide] = floor(reference[side]); 59697 } 59698 59699 return data; 59700} 59701 59702/** 59703 * Converts a string containing value + unit into a px value number 59704 * @function 59705 * @memberof {modifiers~offset} 59706 * @private 59707 * @argument {String} str - Value + unit string 59708 * @argument {String} measurement - `height` or `width` 59709 * @argument {Object} popperOffsets 59710 * @argument {Object} referenceOffsets 59711 * @returns {Number|String} 59712 * Value in pixels, or original string if no values were extracted 59713 */ 59714function toValue(str, measurement, popperOffsets, referenceOffsets) { 59715 // separate value from unit 59716 var split = str.match(/((?:\-|\+)?\d*\.?\d*)(.*)/); 59717 var value = +split[1]; 59718 var unit = split[2]; 59719 59720 // If it's not a number it's an operator, I guess 59721 if (!value) { 59722 return str; 59723 } 59724 59725 if (unit.indexOf('%') === 0) { 59726 var element = void 0; 59727 switch (unit) { 59728 case '%p': 59729 element = popperOffsets; 59730 break; 59731 case '%': 59732 case '%r': 59733 default: 59734 element = referenceOffsets; 59735 } 59736 59737 var rect = getClientRect(element); 59738 return rect[measurement] / 100 * value; 59739 } else if (unit === 'vh' || unit === 'vw') { 59740 // if is a vh or vw, we calculate the size based on the viewport 59741 var size = void 0; 59742 if (unit === 'vh') { 59743 size = Math.max(document.documentElement.clientHeight, window.innerHeight || 0); 59744 } else { 59745 size = Math.max(document.documentElement.clientWidth, window.innerWidth || 0); 59746 } 59747 return size / 100 * value; 59748 } else { 59749 // if is an explicit pixel unit, we get rid of the unit and keep the value 59750 // if is an implicit unit, it's px, and we return just the value 59751 return value; 59752 } 59753} 59754 59755/** 59756 * Parse an `offset` string to extrapolate `x` and `y` numeric offsets. 59757 * @function 59758 * @memberof {modifiers~offset} 59759 * @private 59760 * @argument {String} offset 59761 * @argument {Object} popperOffsets 59762 * @argument {Object} referenceOffsets 59763 * @argument {String} basePlacement 59764 * @returns {Array} a two cells array with x and y offsets in numbers 59765 */ 59766function parseOffset(offset, popperOffsets, referenceOffsets, basePlacement) { 59767 var offsets = [0, 0]; 59768 59769 // Use height if placement is left or right and index is 0 otherwise use width 59770 // in this way the first offset will use an axis and the second one 59771 // will use the other one 59772 var useHeight = ['right', 'left'].indexOf(basePlacement) !== -1; 59773 59774 // Split the offset string to obtain a list of values and operands 59775 // The regex addresses values with the plus or minus sign in front (+10, -20, etc) 59776 var fragments = offset.split(/(\+|\-)/).map(function (frag) { 59777 return frag.trim(); 59778 }); 59779 59780 // Detect if the offset string contains a pair of values or a single one 59781 // they could be separated by comma or space 59782 var divider = fragments.indexOf(find(fragments, function (frag) { 59783 return frag.search(/,|\s/) !== -1; 59784 })); 59785 59786 if (fragments[divider] && fragments[divider].indexOf(',') === -1) { 59787 console.warn('Offsets separated by white space(s) are deprecated, use a comma (,) instead.'); 59788 } 59789 59790 // If divider is found, we divide the list of values and operands to divide 59791 // them by ofset X and Y. 59792 var splitRegex = /\s*,\s*|\s+/; 59793 var ops = divider !== -1 ? [fragments.slice(0, divider).concat([fragments[divider].split(splitRegex)[0]]), [fragments[divider].split(splitRegex)[1]].concat(fragments.slice(divider + 1))] : [fragments]; 59794 59795 // Convert the values with units to absolute pixels to allow our computations 59796 ops = ops.map(function (op, index) { 59797 // Most of the units rely on the orientation of the popper 59798 var measurement = (index === 1 ? !useHeight : useHeight) ? 'height' : 'width'; 59799 var mergeWithPrevious = false; 59800 return op 59801 // This aggregates any `+` or `-` sign that aren't considered operators 59802 // e.g.: 10 + +5 => [10, +, +5] 59803 .reduce(function (a, b) { 59804 if (a[a.length - 1] === '' && ['+', '-'].indexOf(b) !== -1) { 59805 a[a.length - 1] = b; 59806 mergeWithPrevious = true; 59807 return a; 59808 } else if (mergeWithPrevious) { 59809 a[a.length - 1] += b; 59810 mergeWithPrevious = false; 59811 return a; 59812 } else { 59813 return a.concat(b); 59814 } 59815 }, []) 59816 // Here we convert the string values into number values (in px) 59817 .map(function (str) { 59818 return toValue(str, measurement, popperOffsets, referenceOffsets); 59819 }); 59820 }); 59821 59822 // Loop trough the offsets arrays and execute the operations 59823 ops.forEach(function (op, index) { 59824 op.forEach(function (frag, index2) { 59825 if (isNumeric(frag)) { 59826 offsets[index] += frag * (op[index2 - 1] === '-' ? -1 : 1); 59827 } 59828 }); 59829 }); 59830 return offsets; 59831} 59832 59833/** 59834 * @function 59835 * @memberof Modifiers 59836 * @argument {Object} data - The data object generated by update method 59837 * @argument {Object} options - Modifiers configuration and options 59838 * @argument {Number|String} options.offset=0 59839 * The offset value as described in the modifier description 59840 * @returns {Object} The data object, properly modified 59841 */ 59842function offset(data, _ref) { 59843 var offset = _ref.offset; 59844 var placement = data.placement, 59845 _data$offsets = data.offsets, 59846 popper = _data$offsets.popper, 59847 reference = _data$offsets.reference; 59848 59849 var basePlacement = placement.split('-')[0]; 59850 59851 var offsets = void 0; 59852 if (isNumeric(+offset)) { 59853 offsets = [+offset, 0]; 59854 } else { 59855 offsets = parseOffset(offset, popper, reference, basePlacement); 59856 } 59857 59858 if (basePlacement === 'left') { 59859 popper.top += offsets[0]; 59860 popper.left -= offsets[1]; 59861 } else if (basePlacement === 'right') { 59862 popper.top += offsets[0]; 59863 popper.left += offsets[1]; 59864 } else if (basePlacement === 'top') { 59865 popper.left += offsets[0]; 59866 popper.top -= offsets[1]; 59867 } else if (basePlacement === 'bottom') { 59868 popper.left += offsets[0]; 59869 popper.top += offsets[1]; 59870 } 59871 59872 data.popper = popper; 59873 return data; 59874} 59875 59876/** 59877 * @function 59878 * @memberof Modifiers 59879 * @argument {Object} data - The data object generated by `update` method 59880 * @argument {Object} options - Modifiers configuration and options 59881 * @returns {Object} The data object, properly modified 59882 */ 59883function preventOverflow(data, options) { 59884 var boundariesElement = options.boundariesElement || getOffsetParent(data.instance.popper); 59885 59886 // If offsetParent is the reference element, we really want to 59887 // go one step up and use the next offsetParent as reference to 59888 // avoid to make this modifier completely useless and look like broken 59889 if (data.instance.reference === boundariesElement) { 59890 boundariesElement = getOffsetParent(boundariesElement); 59891 } 59892 59893 // NOTE: DOM access here 59894 // resets the popper's position so that the document size can be calculated excluding 59895 // the size of the popper element itself 59896 var transformProp = getSupportedPropertyName('transform'); 59897 var popperStyles = data.instance.popper.style; // assignment to help minification 59898 var top = popperStyles.top, 59899 left = popperStyles.left, 59900 transform = popperStyles[transformProp]; 59901 59902 popperStyles.top = ''; 59903 popperStyles.left = ''; 59904 popperStyles[transformProp] = ''; 59905 59906 var boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, boundariesElement, data.positionFixed); 59907 59908 // NOTE: DOM access here 59909 // restores the original style properties after the offsets have been computed 59910 popperStyles.top = top; 59911 popperStyles.left = left; 59912 popperStyles[transformProp] = transform; 59913 59914 options.boundaries = boundaries; 59915 59916 var order = options.priority; 59917 var popper = data.offsets.popper; 59918 59919 var check = { 59920 primary: function primary(placement) { 59921 var value = popper[placement]; 59922 if (popper[placement] < boundaries[placement] && !options.escapeWithReference) { 59923 value = Math.max(popper[placement], boundaries[placement]); 59924 } 59925 return defineProperty({}, placement, value); 59926 }, 59927 secondary: function secondary(placement) { 59928 var mainSide = placement === 'right' ? 'left' : 'top'; 59929 var value = popper[mainSide]; 59930 if (popper[placement] > boundaries[placement] && !options.escapeWithReference) { 59931 value = Math.min(popper[mainSide], boundaries[placement] - (placement === 'right' ? popper.width : popper.height)); 59932 } 59933 return defineProperty({}, mainSide, value); 59934 } 59935 }; 59936 59937 order.forEach(function (placement) { 59938 var side = ['left', 'top'].indexOf(placement) !== -1 ? 'primary' : 'secondary'; 59939 popper = _extends({}, popper, check[side](placement)); 59940 }); 59941 59942 data.offsets.popper = popper; 59943 59944 return data; 59945} 59946 59947/** 59948 * @function 59949 * @memberof Modifiers 59950 * @argument {Object} data - The data object generated by `update` method 59951 * @argument {Object} options - Modifiers configuration and options 59952 * @returns {Object} The data object, properly modified 59953 */ 59954function shift(data) { 59955 var placement = data.placement; 59956 var basePlacement = placement.split('-')[0]; 59957 var shiftvariation = placement.split('-')[1]; 59958 59959 // if shift shiftvariation is specified, run the modifier 59960 if (shiftvariation) { 59961 var _data$offsets = data.offsets, 59962 reference = _data$offsets.reference, 59963 popper = _data$offsets.popper; 59964 59965 var isVertical = ['bottom', 'top'].indexOf(basePlacement) !== -1; 59966 var side = isVertical ? 'left' : 'top'; 59967 var measurement = isVertical ? 'width' : 'height'; 59968 59969 var shiftOffsets = { 59970 start: defineProperty({}, side, reference[side]), 59971 end: defineProperty({}, side, reference[side] + reference[measurement] - popper[measurement]) 59972 }; 59973 59974 data.offsets.popper = _extends({}, popper, shiftOffsets[shiftvariation]); 59975 } 59976 59977 return data; 59978} 59979 59980/** 59981 * @function 59982 * @memberof Modifiers 59983 * @argument {Object} data - The data object generated by update method 59984 * @argument {Object} options - Modifiers configuration and options 59985 * @returns {Object} The data object, properly modified 59986 */ 59987function hide(data) { 59988 if (!isModifierRequired(data.instance.modifiers, 'hide', 'preventOverflow')) { 59989 return data; 59990 } 59991 59992 var refRect = data.offsets.reference; 59993 var bound = find(data.instance.modifiers, function (modifier) { 59994 return modifier.name === 'preventOverflow'; 59995 }).boundaries; 59996 59997 if (refRect.bottom < bound.top || refRect.left > bound.right || refRect.top > bound.bottom || refRect.right < bound.left) { 59998 // Avoid unnecessary DOM access if visibility hasn't changed 59999 if (data.hide === true) { 60000 return data; 60001 } 60002 60003 data.hide = true; 60004 data.attributes['x-out-of-boundaries'] = ''; 60005 } else { 60006 // Avoid unnecessary DOM access if visibility hasn't changed 60007 if (data.hide === false) { 60008 return data; 60009 } 60010 60011 data.hide = false; 60012 data.attributes['x-out-of-boundaries'] = false; 60013 } 60014 60015 return data; 60016} 60017 60018/** 60019 * @function 60020 * @memberof Modifiers 60021 * @argument {Object} data - The data object generated by `update` method 60022 * @argument {Object} options - Modifiers configuration and options 60023 * @returns {Object} The data object, properly modified 60024 */ 60025function inner(data) { 60026 var placement = data.placement; 60027 var basePlacement = placement.split('-')[0]; 60028 var _data$offsets = data.offsets, 60029 popper = _data$offsets.popper, 60030 reference = _data$offsets.reference; 60031 60032 var isHoriz = ['left', 'right'].indexOf(basePlacement) !== -1; 60033 60034 var subtractLength = ['top', 'left'].indexOf(basePlacement) === -1; 60035 60036 popper[isHoriz ? 'left' : 'top'] = reference[basePlacement] - (subtractLength ? popper[isHoriz ? 'width' : 'height'] : 0); 60037 60038 data.placement = getOppositePlacement(placement); 60039 data.offsets.popper = getClientRect(popper); 60040 60041 return data; 60042} 60043 60044/** 60045 * Modifier function, each modifier can have a function of this type assigned 60046 * to its `fn` property.<br /> 60047 * These functions will be called on each update, this means that you must 60048 * make sure they are performant enough to avoid performance bottlenecks. 60049 * 60050 * @function ModifierFn 60051 * @argument {dataObject} data - The data object generated by `update` method 60052 * @argument {Object} options - Modifiers configuration and options 60053 * @returns {dataObject} The data object, properly modified 60054 */ 60055 60056/** 60057 * Modifiers are plugins used to alter the behavior of your poppers.<br /> 60058 * Popper.js uses a set of 9 modifiers to provide all the basic functionalities 60059 * needed by the library. 60060 * 60061 * Usually you don't want to override the `order`, `fn` and `onLoad` props. 60062 * All the other properties are configurations that could be tweaked. 60063 * @namespace modifiers 60064 */ 60065var modifiers = { 60066 /** 60067 * Modifier used to shift the popper on the start or end of its reference 60068 * element.<br /> 60069 * It will read the variation of the `placement` property.<br /> 60070 * It can be one either `-end` or `-start`. 60071 * @memberof modifiers 60072 * @inner 60073 */ 60074 shift: { 60075 /** @prop {number} order=100 - Index used to define the order of execution */ 60076 order: 100, 60077 /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */ 60078 enabled: true, 60079 /** @prop {ModifierFn} */ 60080 fn: shift 60081 }, 60082 60083 /** 60084 * The `offset` modifier can shift your popper on both its axis. 60085 * 60086 * It accepts the following units: 60087 * - `px` or unit-less, interpreted as pixels 60088 * - `%` or `%r`, percentage relative to the length of the reference element 60089 * - `%p`, percentage relative to the length of the popper element 60090 * - `vw`, CSS viewport width unit 60091 * - `vh`, CSS viewport height unit 60092 * 60093 * For length is intended the main axis relative to the placement of the popper.<br /> 60094 * This means that if the placement is `top` or `bottom`, the length will be the 60095 * `width`. In case of `left` or `right`, it will be the `height`. 60096 * 60097 * You can provide a single value (as `Number` or `String`), or a pair of values 60098 * as `String` divided by a comma or one (or more) white spaces.<br /> 60099 * The latter is a deprecated method because it leads to confusion and will be 60100 * removed in v2.<br /> 60101 * Additionally, it accepts additions and subtractions between different units. 60102 * Note that multiplications and divisions aren't supported. 60103 * 60104 * Valid examples are: 60105 * ``` 60106 * 10 60107 * '10%' 60108 * '10, 10' 60109 * '10%, 10' 60110 * '10 + 10%' 60111 * '10 - 5vh + 3%' 60112 * '-10px + 5vh, 5px - 6%' 60113 * ``` 60114 * > **NB**: If you desire to apply offsets to your poppers in a way that may make them overlap 60115 * > with their reference element, unfortunately, you will have to disable the `flip` modifier. 60116 * > You can read more on this at this [issue](https://github.com/FezVrasta/popper.js/issues/373). 60117 * 60118 * @memberof modifiers 60119 * @inner 60120 */ 60121 offset: { 60122 /** @prop {number} order=200 - Index used to define the order of execution */ 60123 order: 200, 60124 /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */ 60125 enabled: true, 60126 /** @prop {ModifierFn} */ 60127 fn: offset, 60128 /** @prop {Number|String} offset=0 60129 * The offset value as described in the modifier description 60130 */ 60131 offset: 0 60132 }, 60133 60134 /** 60135 * Modifier used to prevent the popper from being positioned outside the boundary. 60136 * 60137 * A scenario exists where the reference itself is not within the boundaries.<br /> 60138 * We can say it has "escaped the boundaries" â or just "escaped".<br /> 60139 * In this case we need to decide whether the popper should either: 60140 * 60141 * - detach from the reference and remain "trapped" in the boundaries, or 60142 * - if it should ignore the boundary and "escape with its reference" 60143 * 60144 * When `escapeWithReference` is set to`true` and reference is completely 60145 * outside its boundaries, the popper will overflow (or completely leave) 60146 * the boundaries in order to remain attached to the edge of the reference. 60147 * 60148 * @memberof modifiers 60149 * @inner 60150 */ 60151 preventOverflow: { 60152 /** @prop {number} order=300 - Index used to define the order of execution */ 60153 order: 300, 60154 /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */ 60155 enabled: true, 60156 /** @prop {ModifierFn} */ 60157 fn: preventOverflow, 60158 /** 60159 * @prop {Array} [priority=['left','right','top','bottom']] 60160 * Popper will try to prevent overflow following these priorities by default, 60161 * then, it could overflow on the left and on top of the `boundariesElement` 60162 */ 60163 priority: ['left', 'right', 'top', 'bottom'], 60164 /** 60165 * @prop {number} padding=5 60166 * Amount of pixel used to define a minimum distance between the boundaries 60167 * and the popper. This makes sure the popper always has a little padding 60168 * between the edges of its container 60169 */ 60170 padding: 5, 60171 /** 60172 * @prop {String|HTMLElement} boundariesElement='scrollParent' 60173 * Boundaries used by the modifier. Can be `scrollParent`, `window`, 60174 * `viewport` or any DOM element. 60175 */ 60176 boundariesElement: 'scrollParent' 60177 }, 60178 60179 /** 60180 * Modifier used to make sure the reference and its popper stay near each other 60181 * without leaving any gap between the two. Especially useful when the arrow is 60182 * enabled and you want to ensure that it points to its reference element. 60183 * It cares only about the first axis. You can still have poppers with margin 60184 * between the popper and its reference element. 60185 * @memberof modifiers 60186 * @inner 60187 */ 60188 keepTogether: { 60189 /** @prop {number} order=400 - Index used to define the order of execution */ 60190 order: 400, 60191 /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */ 60192 enabled: true, 60193 /** @prop {ModifierFn} */ 60194 fn: keepTogether 60195 }, 60196 60197 /** 60198 * This modifier is used to move the `arrowElement` of the popper to make 60199 * sure it is positioned between the reference element and its popper element. 60200 * It will read the outer size of the `arrowElement` node to detect how many 60201 * pixels of conjunction are needed. 60202 * 60203 * It has no effect if no `arrowElement` is provided. 60204 * @memberof modifiers 60205 * @inner 60206 */ 60207 arrow: { 60208 /** @prop {number} order=500 - Index used to define the order of execution */ 60209 order: 500, 60210 /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */ 60211 enabled: true, 60212 /** @prop {ModifierFn} */ 60213 fn: arrow, 60214 /** @prop {String|HTMLElement} element='[x-arrow]' - Selector or node used as arrow */ 60215 element: '[x-arrow]' 60216 }, 60217 60218 /** 60219 * Modifier used to flip the popper's placement when it starts to overlap its 60220 * reference element. 60221 * 60222 * Requires the `preventOverflow` modifier before it in order to work. 60223 * 60224 * **NOTE:** this modifier will interrupt the current update cycle and will 60225 * restart it if it detects the need to flip the placement. 60226 * @memberof modifiers 60227 * @inner 60228 */ 60229 flip: { 60230 /** @prop {number} order=600 - Index used to define the order of execution */ 60231 order: 600, 60232 /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */ 60233 enabled: true, 60234 /** @prop {ModifierFn} */ 60235 fn: flip, 60236 /** 60237 * @prop {String|Array} behavior='flip' 60238 * The behavior used to change the popper's placement. It can be one of 60239 * `flip`, `clockwise`, `counterclockwise` or an array with a list of valid 60240 * placements (with optional variations) 60241 */ 60242 behavior: 'flip', 60243 /** 60244 * @prop {number} padding=5 60245 * The popper will flip if it hits the edges of the `boundariesElement` 60246 */ 60247 padding: 5, 60248 /** 60249 * @prop {String|HTMLElement} boundariesElement='viewport' 60250 * The element which will define the boundaries of the popper position. 60251 * The popper will never be placed outside of the defined boundaries 60252 * (except if `keepTogether` is enabled) 60253 */ 60254 boundariesElement: 'viewport', 60255 /** 60256 * @prop {Boolean} flipVariations=false 60257 * The popper will switch placement variation between `-start` and `-end` when 60258 * the reference element overlaps its boundaries. 60259 * 60260 * The original placement should have a set variation. 60261 */ 60262 flipVariations: false, 60263 /** 60264 * @prop {Boolean} flipVariationsByContent=false 60265 * The popper will switch placement variation between `-start` and `-end` when 60266 * the popper element overlaps its reference boundaries. 60267 * 60268 * The original placement should have a set variation. 60269 */ 60270 flipVariationsByContent: false 60271 }, 60272 60273 /** 60274 * Modifier used to make the popper flow toward the inner of the reference element. 60275 * By default, when this modifier is disabled, the popper will be placed outside 60276 * the reference element. 60277 * @memberof modifiers 60278 * @inner 60279 */ 60280 inner: { 60281 /** @prop {number} order=700 - Index used to define the order of execution */ 60282 order: 700, 60283 /** @prop {Boolean} enabled=false - Whether the modifier is enabled or not */ 60284 enabled: false, 60285 /** @prop {ModifierFn} */ 60286 fn: inner 60287 }, 60288 60289 /** 60290 * Modifier used to hide the popper when its reference element is outside of the 60291 * popper boundaries. It will set a `x-out-of-boundaries` attribute which can 60292 * be used to hide with a CSS selector the popper when its reference is 60293 * out of boundaries. 60294 * 60295 * Requires the `preventOverflow` modifier before it in order to work. 60296 * @memberof modifiers 60297 * @inner 60298 */ 60299 hide: { 60300 /** @prop {number} order=800 - Index used to define the order of execution */ 60301 order: 800, 60302 /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */ 60303 enabled: true, 60304 /** @prop {ModifierFn} */ 60305 fn: hide 60306 }, 60307 60308 /** 60309 * Computes the style that will be applied to the popper element to gets 60310 * properly positioned. 60311 * 60312 * Note that this modifier will not touch the DOM, it just prepares the styles 60313 * so that `applyStyle` modifier can apply it. This separation is useful 60314 * in case you need to replace `applyStyle` with a custom implementation. 60315 * 60316 * This modifier has `850` as `order` value to maintain backward compatibility 60317 * with previous versions of Popper.js. Expect the modifiers ordering method 60318 * to change in future major versions of the library. 60319 * 60320 * @memberof modifiers 60321 * @inner 60322 */ 60323 computeStyle: { 60324 /** @prop {number} order=850 - Index used to define the order of execution */ 60325 order: 850, 60326 /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */ 60327 enabled: true, 60328 /** @prop {ModifierFn} */ 60329 fn: computeStyle, 60330 /** 60331 * @prop {Boolean} gpuAcceleration=true 60332 * If true, it uses the CSS 3D transformation to position the popper. 60333 * Otherwise, it will use the `top` and `left` properties 60334 */ 60335 gpuAcceleration: true, 60336 /** 60337 * @prop {string} [x='bottom'] 60338 * Where to anchor the X axis (`bottom` or `top`). AKA X offset origin. 60339 * Change this if your popper should grow in a direction different from `bottom` 60340 */ 60341 x: 'bottom', 60342 /** 60343 * @prop {string} [x='left'] 60344 * Where to anchor the Y axis (`left` or `right`). AKA Y offset origin. 60345 * Change this if your popper should grow in a direction different from `right` 60346 */ 60347 y: 'right' 60348 }, 60349 60350 /** 60351 * Applies the computed styles to the popper element. 60352 * 60353 * All the DOM manipulations are limited to this modifier. This is useful in case 60354 * you want to integrate Popper.js inside a framework or view library and you 60355 * want to delegate all the DOM manipulations to it. 60356 * 60357 * Note that if you disable this modifier, you must make sure the popper element 60358 * has its position set to `absolute` before Popper.js can do its work! 60359 * 60360 * Just disable this modifier and define your own to achieve the desired effect. 60361 * 60362 * @memberof modifiers 60363 * @inner 60364 */ 60365 applyStyle: { 60366 /** @prop {number} order=900 - Index used to define the order of execution */ 60367 order: 900, 60368 /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */ 60369 enabled: true, 60370 /** @prop {ModifierFn} */ 60371 fn: applyStyle, 60372 /** @prop {Function} */ 60373 onLoad: applyStyleOnLoad, 60374 /** 60375 * @deprecated since version 1.10.0, the property moved to `computeStyle` modifier 60376 * @prop {Boolean} gpuAcceleration=true 60377 * If true, it uses the CSS 3D transformation to position the popper. 60378 * Otherwise, it will use the `top` and `left` properties 60379 */ 60380 gpuAcceleration: undefined 60381 } 60382}; 60383 60384/** 60385 * The `dataObject` is an object containing all the information used by Popper.js. 60386 * This object is passed to modifiers and to the `onCreate` and `onUpdate` callbacks. 60387 * @name dataObject 60388 * @property {Object} data.instance The Popper.js instance 60389 * @property {String} data.placement Placement applied to popper 60390 * @property {String} data.originalPlacement Placement originally defined on init 60391 * @property {Boolean} data.flipped True if popper has been flipped by flip modifier 60392 * @property {Boolean} data.hide True if the reference element is out of boundaries, useful to know when to hide the popper 60393 * @property {HTMLElement} data.arrowElement Node used as arrow by arrow modifier 60394 * @property {Object} data.styles Any CSS property defined here will be applied to the popper. It expects the JavaScript nomenclature (eg. `marginBottom`) 60395 * @property {Object} data.arrowStyles Any CSS property defined here will be applied to the popper arrow. It expects the JavaScript nomenclature (eg. `marginBottom`) 60396 * @property {Object} data.boundaries Offsets of the popper boundaries 60397 * @property {Object} data.offsets The measurements of popper, reference and arrow elements 60398 * @property {Object} data.offsets.popper `top`, `left`, `width`, `height` values 60399 * @property {Object} data.offsets.reference `top`, `left`, `width`, `height` values 60400 * @property {Object} data.offsets.arrow] `top` and `left` offsets, only one of them will be different from 0 60401 */ 60402 60403/** 60404 * Default options provided to Popper.js constructor.<br /> 60405 * These can be overridden using the `options` argument of Popper.js.<br /> 60406 * To override an option, simply pass an object with the same 60407 * structure of the `options` object, as the 3rd argument. For example: 60408 * ``` 60409 * new Popper(ref, pop, { 60410 * modifiers: { 60411 * preventOverflow: { enabled: false } 60412 * } 60413 * }) 60414 * ``` 60415 * @type {Object} 60416 * @static 60417 * @memberof Popper 60418 */ 60419var Defaults = { 60420 /** 60421 * Popper's placement. 60422 * @prop {Popper.placements} placement='bottom' 60423 */ 60424 placement: 'bottom', 60425 60426 /** 60427 * Set this to true if you want popper to position it self in 'fixed' mode 60428 * @prop {Boolean} positionFixed=false 60429 */ 60430 positionFixed: false, 60431 60432 /** 60433 * Whether events (resize, scroll) are initially enabled. 60434 * @prop {Boolean} eventsEnabled=true 60435 */ 60436 eventsEnabled: true, 60437 60438 /** 60439 * Set to true if you want to automatically remove the popper when 60440 * you call the `destroy` method. 60441 * @prop {Boolean} removeOnDestroy=false 60442 */ 60443 removeOnDestroy: false, 60444 60445 /** 60446 * Callback called when the popper is created.<br /> 60447 * By default, it is set to no-op.<br /> 60448 * Access Popper.js instance with `data.instance`. 60449 * @prop {onCreate} 60450 */ 60451 onCreate: function onCreate() {}, 60452 60453 /** 60454 * Callback called when the popper is updated. This callback is not called 60455 * on the initialization/creation of the popper, but only on subsequent 60456 * updates.<br /> 60457 * By default, it is set to no-op.<br /> 60458 * Access Popper.js instance with `data.instance`. 60459 * @prop {onUpdate} 60460 */ 60461 onUpdate: function onUpdate() {}, 60462 60463 /** 60464 * List of modifiers used to modify the offsets before they are applied to the popper. 60465 * They provide most of the functionalities of Popper.js. 60466 * @prop {modifiers} 60467 */ 60468 modifiers: modifiers 60469}; 60470 60471/** 60472 * @callback onCreate 60473 * @param {dataObject} data 60474 */ 60475 60476/** 60477 * @callback onUpdate 60478 * @param {dataObject} data 60479 */ 60480 60481// Utils 60482// Methods 60483var Popper = function () { 60484 /** 60485 * Creates a new Popper.js instance. 60486 * @class Popper 60487 * @param {Element|referenceObject} reference - The reference element used to position the popper 60488 * @param {Element} popper - The HTML / XML element used as the popper 60489 * @param {Object} options - Your custom options to override the ones defined in [Defaults](#defaults) 60490 * @return {Object} instance - The generated Popper.js instance 60491 */ 60492 function Popper(reference, popper) { 60493 var _this = this; 60494 60495 var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; 60496 classCallCheck(this, Popper); 60497 60498 this.scheduleUpdate = function () { 60499 return requestAnimationFrame(_this.update); 60500 }; 60501 60502 // make update() debounced, so that it only runs at most once-per-tick 60503 this.update = debounce(this.update.bind(this)); 60504 60505 // with {} we create a new object with the options inside it 60506 this.options = _extends({}, Popper.Defaults, options); 60507 60508 // init state 60509 this.state = { 60510 isDestroyed: false, 60511 isCreated: false, 60512 scrollParents: [] 60513 }; 60514 60515 // get reference and popper elements (allow jQuery wrappers) 60516 this.reference = reference && reference.jquery ? reference[0] : reference; 60517 this.popper = popper && popper.jquery ? popper[0] : popper; 60518 60519 // Deep merge modifiers options 60520 this.options.modifiers = {}; 60521 Object.keys(_extends({}, Popper.Defaults.modifiers, options.modifiers)).forEach(function (name) { 60522 _this.options.modifiers[name] = _extends({}, Popper.Defaults.modifiers[name] || {}, options.modifiers ? options.modifiers[name] : {}); 60523 }); 60524 60525 // Refactoring modifiers' list (Object => Array) 60526 this.modifiers = Object.keys(this.options.modifiers).map(function (name) { 60527 return _extends({ 60528 name: name 60529 }, _this.options.modifiers[name]); 60530 }) 60531 // sort the modifiers by order 60532 .sort(function (a, b) { 60533 return a.order - b.order; 60534 }); 60535 60536 // modifiers have the ability to execute arbitrary code when Popper.js get inited 60537 // such code is executed in the same order of its modifier 60538 // they could add new properties to their options configuration 60539 // BE AWARE: don't add options to `options.modifiers.name` but to `modifierOptions`! 60540 this.modifiers.forEach(function (modifierOptions) { 60541 if (modifierOptions.enabled && isFunction(modifierOptions.onLoad)) { 60542 modifierOptions.onLoad(_this.reference, _this.popper, _this.options, modifierOptions, _this.state); 60543 } 60544 }); 60545 60546 // fire the first update to position the popper in the right place 60547 this.update(); 60548 60549 var eventsEnabled = this.options.eventsEnabled; 60550 if (eventsEnabled) { 60551 // setup event listeners, they will take care of update the position in specific situations 60552 this.enableEventListeners(); 60553 } 60554 60555 this.state.eventsEnabled = eventsEnabled; 60556 } 60557 60558 // We can't use class properties because they don't get listed in the 60559 // class prototype and break stuff like Sinon stubs 60560 60561 60562 createClass(Popper, [{ 60563 key: 'update', 60564 value: function update$$1() { 60565 return update.call(this); 60566 } 60567 }, { 60568 key: 'destroy', 60569 value: function destroy$$1() { 60570 return destroy.call(this); 60571 } 60572 }, { 60573 key: 'enableEventListeners', 60574 value: function enableEventListeners$$1() { 60575 return enableEventListeners.call(this); 60576 } 60577 }, { 60578 key: 'disableEventListeners', 60579 value: function disableEventListeners$$1() { 60580 return disableEventListeners.call(this); 60581 } 60582 60583 /** 60584 * Schedules an update. It will run on the next UI update available. 60585 * @method scheduleUpdate 60586 * @memberof Popper 60587 */ 60588 60589 60590 /** 60591 * Collection of utilities useful when writing custom modifiers. 60592 * Starting from version 1.7, this method is available only if you 60593 * include `popper-utils.js` before `popper.js`. 60594 * 60595 * **DEPRECATION**: This way to access PopperUtils is deprecated 60596 * and will be removed in v2! Use the PopperUtils module directly instead. 60597 * Due to the high instability of the methods contained in Utils, we can't 60598 * guarantee them to follow semver. Use them at your own risk! 60599 * @static 60600 * @private 60601 * @type {Object} 60602 * @deprecated since version 1.8 60603 * @member Utils 60604 * @memberof Popper 60605 */ 60606 60607 }]); 60608 return Popper; 60609}(); 60610 60611/** 60612 * The `referenceObject` is an object that provides an interface compatible with Popper.js 60613 * and lets you use it as replacement of a real DOM node.<br /> 60614 * You can use this method to position a popper relatively to a set of coordinates 60615 * in case you don't have a DOM node to use as reference. 60616 * 60617 * ``` 60618 * new Popper(referenceObject, popperNode); 60619 * ``` 60620 * 60621 * NB: This feature isn't supported in Internet Explorer 10. 60622 * @name referenceObject 60623 * @property {Function} data.getBoundingClientRect 60624 * A function that returns a set of coordinates compatible with the native `getBoundingClientRect` method. 60625 * @property {number} data.clientWidth 60626 * An ES6 getter that will return the width of the virtual reference element. 60627 * @property {number} data.clientHeight 60628 * An ES6 getter that will return the height of the virtual reference element. 60629 */ 60630 60631 60632Popper.Utils = (typeof window !== 'undefined' ? window : global).PopperUtils; 60633Popper.placements = placements; 60634Popper.Defaults = Defaults; 60635 60636/* harmony default export */ __webpack_exports__["default"] = (Popper); 60637//# sourceMappingURL=popper.js.map 60638 60639/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../webpack/buildin/global.js */ "./node_modules/webpack/buildin/global.js"))) 60640 60641/***/ }), 60642
vendor: 5,681 bytes, lines 60643-60837
60643/***/ "./node_modules/process/browser.js": 60644/*!*****************************************!*\ 60645 !*** ./node_modules/process/browser.js ***! 60646 \*****************************************/ 60647/*! no static exports found */ 60648/***/ (function(module, exports) { 60649 60650// shim for using process in browser 60651var process = module.exports = {}; 60652 60653// cached from whatever global is present so that test runners that stub it 60654// don't break things. But we need to wrap it in a try catch in case it is 60655// wrapped in strict mode code which doesn't define any globals. It's inside a 60656// function because try/catches deoptimize in certain engines. 60657 60658var cachedSetTimeout; 60659var cachedClearTimeout; 60660 60661function defaultSetTimout() { 60662 throw new Error('setTimeout has not been defined'); 60663} 60664function defaultClearTimeout () { 60665 throw new Error('clearTimeout has not been defined'); 60666} 60667(function () { 60668 try { 60669 if (typeof setTimeout === 'function') { 60670 cachedSetTimeout = setTimeout; 60671 } else { 60672 cachedSetTimeout = defaultSetTimout; 60673 } 60674 } catch (e) { 60675 cachedSetTimeout = defaultSetTimout; 60676 } 60677 try { 60678 if (typeof clearTimeout === 'function') { 60679 cachedClearTimeout = clearTimeout; 60680 } else { 60681 cachedClearTimeout = defaultClearTimeout; 60682 } 60683 } catch (e) { 60684 cachedClearTimeout = defaultClearTimeout; 60685 } 60686} ()) 60687function runTimeout(fun) { 60688 if (cachedSetTimeout === setTimeout) { 60689 //normal enviroments in sane situations 60690 return setTimeout(fun, 0); 60691 } 60692 // if setTimeout wasn't available but was latter defined 60693 if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) { 60694 cachedSetTimeout = setTimeout; 60695 return setTimeout(fun, 0); 60696 } 60697 try { 60698 // when when somebody has screwed with setTimeout but no I.E. maddness 60699 return cachedSetTimeout(fun, 0); 60700 } catch(e){ 60701 try { 60702 // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally 60703 return cachedSetTimeout.call(null, fun, 0); 60704 } catch(e){ 60705 // 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 60706 return cachedSetTimeout.call(this, fun, 0); 60707 } 60708 } 60709 60710 60711} 60712function runClearTimeout(marker) { 60713 if (cachedClearTimeout === clearTimeout) { 60714 //normal enviroments in sane situations 60715 return clearTimeout(marker); 60716 } 60717 // if clearTimeout wasn't available but was latter defined 60718 if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) { 60719 cachedClearTimeout = clearTimeout; 60720 return clearTimeout(marker); 60721 } 60722 try { 60723 // when when somebody has screwed with setTimeout but no I.E. maddness 60724 return cachedClearTimeout(marker); 60725 } catch (e){ 60726 try { 60727 // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally 60728 return cachedClearTimeout.call(null, marker); 60729 } catch (e){ 60730 // 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. 60731 // Some versions of I.E. have different rules for clearTimeout vs setTimeout 60732 return cachedClearTimeout.call(this, marker); 60733 } 60734 } 60735 60736 60737 60738} 60739var queue = []; 60740var draining = false; 60741var currentQueue; 60742var queueIndex = -1; 60743 60744function cleanUpNextTick() { 60745 if (!draining || !currentQueue) { 60746 return; 60747 } 60748 draining = false; 60749 if (currentQueue.length) { 60750 queue = currentQueue.concat(queue); 60751 } else { 60752 queueIndex = -1; 60753 } 60754 if (queue.length) { 60755 drainQueue(); 60756 } 60757} 60758 60759function drainQueue() { 60760 if (draining) { 60761 return; 60762 } 60763 var timeout = runTimeout(cleanUpNextTick); 60764 draining = true; 60765 60766 var len = queue.length; 60767 while(len) { 60768 currentQueue = queue; 60769 queue = []; 60770 while (++queueIndex < len) { 60771 if (currentQueue) { 60772 currentQueue[queueIndex].run(); 60773 } 60774 } 60775 queueIndex = -1; 60776 len = queue.length; 60777 } 60778 currentQueue = null; 60779 draining = false; 60780 runClearTimeout(timeout); 60781} 60782 60783process.nextTick = function (fun) { 60784 var args = new Array(arguments.length - 1); 60785 if (arguments.length > 1) { 60786 for (var i = 1; i < arguments.length; i++) { 60787 args[i - 1] = arguments[i]; 60788 } 60789 } 60790 queue.push(new Item(fun, args)); 60791 if (queue.length === 1 && !draining) { 60792 runTimeout(drainQueue); 60793 } 60794}; 60795 60796// v8 likes predictible objects 60797function Item(fun, array) { 60798 this.fun = fun; 60799 this.array = array; 60800} 60801Item.prototype.run = function () { 60802 this.fun.apply(null, this.array); 60803}; 60804process.title = 'browser'; 60805process.browser = true; 60806process.env = {}; 60807process.argv = []; 60808process.version = ''; // empty string to avoid regexp issues 60809process.versions = {}; 60810 60811function noop() {} 60812 60813process.on = noop; 60814process.addListener = noop; 60815process.once = noop; 60816process.off = noop; 60817process.removeListener = noop; 60818process.removeAllListeners = noop; 60819process.emit = noop; 60820process.prependListener = noop; 60821process.prependOnceListener = noop; 60822 60823process.listeners = function (name) { return [] } 60824 60825process.binding = function (name) { 60826 throw new Error('process.binding is not supported'); 60827}; 60828 60829process.cwd = function () { return '/' }; 60830process.chdir = function (dir) { 60831 throw new Error('process.chdir is not supported'); 60832}; 60833process.umask = function() { return 0; }; 60834 60835 60836/***/ }), 60837
vendor: 381 bytes, lines 60838-60852
60838/***/ "./node_modules/promise/index.js": 60839/*!***************************************!*\ 60840 !*** ./node_modules/promise/index.js ***! 60841 \***************************************/ 60842/*! no static exports found */ 60843/***/ (function(module, exports, __webpack_require__) { 60844 60845"use strict"; 60846 60847 60848module.exports = __webpack_require__(/*! ./lib */ "./node_modules/promise/lib/index.js") 60849 60850 60851/***/ }), 60852
vendor: 5,205 bytes, lines 60853-61077
60853/***/ "./node_modules/promise/lib/core.js": 60854/*!******************************************!*\ 60855 !*** ./node_modules/promise/lib/core.js ***! 60856 \******************************************/ 60857/*! no static exports found */ 60858/***/ (function(module, exports, __webpack_require__) { 60859 60860"use strict"; 60861 60862 60863var asap = __webpack_require__(/*! asap/raw */ "./node_modules/asap/browser-raw.js"); 60864 60865function noop() {} 60866 60867// States: 60868// 60869// 0 - pending 60870// 1 - fulfilled with _value 60871// 2 - rejected with _value 60872// 3 - adopted the state of another promise, _value 60873// 60874// once the state is no longer pending (0) it is immutable 60875 60876// All `_` prefixed properties will be reduced to `_{random number}` 60877// at build time to obfuscate them and discourage their use. 60878// We don't use symbols or Object.defineProperty to fully hide them 60879// because the performance isn't good enough. 60880 60881 60882// to avoid using try/catch inside critical functions, we 60883// extract them to here. 60884var LAST_ERROR = null; 60885var IS_ERROR = {}; 60886function getThen(obj) { 60887 try { 60888 return obj.then; 60889 } catch (ex) { 60890 LAST_ERROR = ex; 60891 return IS_ERROR; 60892 } 60893} 60894 60895function tryCallOne(fn, a) { 60896 try { 60897 return fn(a); 60898 } catch (ex) { 60899 LAST_ERROR = ex; 60900 return IS_ERROR; 60901 } 60902} 60903function tryCallTwo(fn, a, b) { 60904 try { 60905 fn(a, b); 60906 } catch (ex) { 60907 LAST_ERROR = ex; 60908 return IS_ERROR; 60909 } 60910} 60911 60912module.exports = Promise; 60913 60914function Promise(fn) { 60915 if (typeof this !== 'object') { 60916 throw new TypeError('Promises must be constructed via new'); 60917 } 60918 if (typeof fn !== 'function') { 60919 throw new TypeError('Promise constructor\'s argument is not a function'); 60920 } 60921 this._40 = 0; 60922 this._65 = 0; 60923 this._55 = null; 60924 this._72 = null; 60925 if (fn === noop) return; 60926 doResolve(fn, this); 60927} 60928Promise._37 = null; 60929Promise._87 = null; 60930Promise._61 = noop; 60931 60932Promise.prototype.then = function(onFulfilled, onRejected) { 60933 if (this.constructor !== Promise) { 60934 return safeThen(this, onFulfilled, onRejected); 60935 } 60936 var res = new Promise(noop); 60937 handle(this, new Handler(onFulfilled, onRejected, res)); 60938 return res; 60939}; 60940 60941function safeThen(self, onFulfilled, onRejected) { 60942 return new self.constructor(function (resolve, reject) { 60943 var res = new Promise(noop); 60944 res.then(resolve, reject); 60945 handle(self, new Handler(onFulfilled, onRejected, res)); 60946 }); 60947} 60948function handle(self, deferred) { 60949 while (self._65 === 3) { 60950 self = self._55; 60951 } 60952 if (Promise._37) { 60953 Promise._37(self); 60954 } 60955 if (self._65 === 0) { 60956 if (self._40 === 0) { 60957 self._40 = 1; 60958 self._72 = deferred; 60959 return; 60960 } 60961 if (self._40 === 1) { 60962 self._40 = 2; 60963 self._72 = [self._72, deferred]; 60964 return; 60965 } 60966 self._72.push(deferred); 60967 return; 60968 } 60969 handleResolved(self, deferred); 60970} 60971 60972function handleResolved(self, deferred) { 60973 asap(function() { 60974 var cb = self._65 === 1 ? deferred.onFulfilled : deferred.onRejected; 60975 if (cb === null) { 60976 if (self._65 === 1) { 60977 resolve(deferred.promise, self._55); 60978 } else { 60979 reject(deferred.promise, self._55); 60980 } 60981 return; 60982 } 60983 var ret = tryCallOne(cb, self._55); 60984 if (ret === IS_ERROR) { 60985 reject(deferred.promise, LAST_ERROR); 60986 } else { 60987 resolve(deferred.promise, ret); 60988 } 60989 }); 60990} 60991function resolve(self, newValue) { 60992 // Promise Resolution Procedure: https://github.com/promises-aplus/promises-spec#the-promise-resolution-procedure 60993 if (newValue === self) { 60994 return reject( 60995 self, 60996 new TypeError('A promise cannot be resolved with itself.') 60997 ); 60998 } 60999 if ( 61000 newValue && 61001 (typeof newValue === 'object' || typeof newValue === 'function') 61002 ) { 61003 var then = getThen(newValue); 61004 if (then === IS_ERROR) { 61005 return reject(self, LAST_ERROR); 61006 } 61007 if ( 61008 then === self.then && 61009 newValue instanceof Promise 61010 ) { 61011 self._65 = 3; 61012 self._55 = newValue; 61013 finale(self); 61014 return; 61015 } else if (typeof then === 'function') { 61016 doResolve(then.bind(newValue), self); 61017 return; 61018 } 61019 } 61020 self._65 = 1; 61021 self._55 = newValue; 61022 finale(self); 61023} 61024 61025function reject(self, newValue) { 61026 self._65 = 2; 61027 self._55 = newValue; 61028 if (Promise._87) { 61029 Promise._87(self, newValue); 61030 } 61031 finale(self); 61032} 61033function finale(self) { 61034 if (self._40 === 1) { 61035 handle(self, self._72); 61036 self._72 = null; 61037 } 61038 if (self._40 === 2) { 61039 for (var i = 0; i < self._72.length; i++) { 61040 handle(self, self._72[i]); 61041 } 61042 self._72 = null; 61043 } 61044} 61045 61046function Handler(onFulfilled, onRejected, promise){ 61047 this.onFulfilled = typeof onFulfilled === 'function' ? onFulfilled : null; 61048 this.onRejected = typeof onRejected === 'function' ? onRejected : null; 61049 this.promise = promise; 61050} 61051 61052/** 61053 * Take a potentially misbehaving resolver function and make sure 61054 * onFulfilled and onRejected are only called once. 61055 * 61056 * Makes no guarantees about asynchrony. 61057 */ 61058function doResolve(fn, promise) { 61059 var done = false; 61060 var res = tryCallTwo(fn, function (value) { 61061 if (done) return; 61062 done = true; 61063 resolve(promise, value); 61064 }, function (reason) { 61065 if (done) return; 61066 done = true; 61067 reject(promise, reason); 61068 }); 61069 if (!done && res === IS_ERROR) { 61070 done = true; 61071 reject(promise, LAST_ERROR); 61072 } 61073} 61074 61075 61076/***/ }), 61077
vendor: 657 bytes, lines 61078-61102
61078/***/ "./node_modules/promise/lib/done.js": 61079/*!******************************************!*\ 61080 !*** ./node_modules/promise/lib/done.js ***! 61081 \******************************************/ 61082/*! no static exports found */ 61083/***/ (function(module, exports, __webpack_require__) { 61084 61085"use strict"; 61086 61087 61088var Promise = __webpack_require__(/*! ./core.js */ "./node_modules/promise/lib/core.js"); 61089 61090module.exports = Promise; 61091Promise.prototype.done = function (onFulfilled, onRejected) { 61092 var self = arguments.length ? this.then.apply(this, arguments) : this; 61093 self.then(null, function (err) { 61094 setTimeout(function () { 61095 throw err; 61096 }, 0); 61097 }); 61098}; 61099 61100 61101/***/ }), 61102
vendor: 3,057 bytes, lines 61103-61221
61103/***/ "./node_modules/promise/lib/es6-extensions.js": 61104/*!****************************************************!*\ 61105 !*** ./node_modules/promise/lib/es6-extensions.js ***! 61106 \****************************************************/ 61107/*! no static exports found */ 61108/***/ (function(module, exports, __webpack_require__) { 61109 61110"use strict"; 61111 61112 61113//This file contains the ES6 extensions to the core Promises/A+ API 61114 61115var Promise = __webpack_require__(/*! ./core.js */ "./node_modules/promise/lib/core.js"); 61116 61117module.exports = Promise; 61118 61119/* Static Functions */ 61120 61121var TRUE = valuePromise(true); 61122var FALSE = valuePromise(false); 61123var NULL = valuePromise(null); 61124var UNDEFINED = valuePromise(undefined); 61125var ZERO = valuePromise(0); 61126var EMPTYSTRING = valuePromise(''); 61127 61128function valuePromise(value) { 61129 var p = new Promise(Promise._61); 61130 p._65 = 1; 61131 p._55 = value; 61132 return p; 61133} 61134Promise.resolve = function (value) { 61135 if (value instanceof Promise) return value; 61136 61137 if (value === null) return NULL; 61138 if (value === undefined) return UNDEFINED; 61139 if (value === true) return TRUE; 61140 if (value === false) return FALSE; 61141 if (value === 0) return ZERO; 61142 if (value === '') return EMPTYSTRING; 61143 61144 if (typeof value === 'object' || typeof value === 'function') { 61145 try { 61146 var then = value.then; 61147 if (typeof then === 'function') { 61148 return new Promise(then.bind(value)); 61149 } 61150 } catch (ex) { 61151 return new Promise(function (resolve, reject) { 61152 reject(ex); 61153 }); 61154 } 61155 } 61156 return valuePromise(value); 61157}; 61158 61159Promise.all = function (arr) { 61160 var args = Array.prototype.slice.call(arr); 61161 61162 return new Promise(function (resolve, reject) { 61163 if (args.length === 0) return resolve([]); 61164 var remaining = args.length; 61165 function res(i, val) { 61166 if (val && (typeof val === 'object' || typeof val === 'function')) { 61167 if (val instanceof Promise && val.then === Promise.prototype.then) { 61168 while (val._65 === 3) { 61169 val = val._55; 61170 } 61171 if (val._65 === 1) return res(i, val._55); 61172 if (val._65 === 2) reject(val._55); 61173 val.then(function (val) { 61174 res(i, val); 61175 }, reject); 61176 return; 61177 } else { 61178 var then = val.then; 61179 if (typeof then === 'function') { 61180 var p = new Promise(then.bind(val)); 61181 p.then(function (val) { 61182 res(i, val); 61183 }, reject); 61184 return; 61185 } 61186 } 61187 } 61188 args[i] = val; 61189 if (--remaining === 0) { 61190 resolve(args); 61191 } 61192 } 61193 for (var i = 0; i < args.length; i++) { 61194 res(i, args[i]); 61195 } 61196 }); 61197}; 61198 61199Promise.reject = function (value) { 61200 return new Promise(function (resolve, reject) { 61201 reject(value); 61202 }); 61203}; 61204 61205Promise.race = function (values) { 61206 return new Promise(function (resolve, reject) { 61207 values.forEach(function(value){ 61208 Promise.resolve(value).then(resolve, reject); 61209 }); 61210 }); 61211}; 61212 61213/* Prototype Methods */ 61214 61215Promise.prototype['catch'] = function (onRejected) { 61216 return this.then(null, onRejected); 61217}; 61218 61219 61220/***/ }), 61221
vendor: 703 bytes, lines 61222-61249
61222/***/ "./node_modules/promise/lib/finally.js": 61223/*!*********************************************!*\ 61224 !*** ./node_modules/promise/lib/finally.js ***! 61225 \*********************************************/ 61226/*! no static exports found */ 61227/***/ (function(module, exports, __webpack_require__) { 61228 61229"use strict"; 61230 61231 61232var Promise = __webpack_require__(/*! ./core.js */ "./node_modules/promise/lib/core.js"); 61233 61234module.exports = Promise; 61235Promise.prototype['finally'] = function (f) { 61236 return this.then(function (value) { 61237 return Promise.resolve(f()).then(function () { 61238 return value; 61239 }); 61240 }, function (err) { 61241 return Promise.resolve(f()).then(function () { 61242 throw err; 61243 }); 61244 }); 61245}; 61246 61247 61248/***/ }), 61249
vendor: 843 bytes, lines 61250-61269
61250/***/ "./node_modules/promise/lib/index.js": 61251/*!*******************************************!*\ 61252 !*** ./node_modules/promise/lib/index.js ***! 61253 \*******************************************/ 61254/*! no static exports found */ 61255/***/ (function(module, exports, __webpack_require__) { 61256 61257"use strict"; 61258 61259 61260module.exports = __webpack_require__(/*! ./core.js */ "./node_modules/promise/lib/core.js"); 61261__webpack_require__(/*! ./done.js */ "./node_modules/promise/lib/done.js"); 61262__webpack_require__(/*! ./finally.js */ "./node_modules/promise/lib/finally.js"); 61263__webpack_require__(/*! ./es6-extensions.js */ "./node_modules/promise/lib/es6-extensions.js"); 61264__webpack_require__(/*! ./node-extensions.js */ "./node_modules/promise/lib/node-extensions.js"); 61265__webpack_require__(/*! ./synchronous.js */ "./node_modules/promise/lib/synchronous.js"); 61266 61267 61268/***/ }), 61269
vendor: 3,713 bytes, lines 61270-61411
61270/***/ "./node_modules/promise/lib/node-extensions.js": 61271/*!*****************************************************!*\ 61272 !*** ./node_modules/promise/lib/node-extensions.js ***! 61273 \*****************************************************/ 61274/*! no static exports found */ 61275/***/ (function(module, exports, __webpack_require__) { 61276 61277"use strict"; 61278 61279 61280// This file contains then/promise specific extensions that are only useful 61281// for node.js interop 61282 61283var Promise = __webpack_require__(/*! ./core.js */ "./node_modules/promise/lib/core.js"); 61284var asap = __webpack_require__(/*! asap */ "./node_modules/asap/browser-asap.js"); 61285 61286module.exports = Promise; 61287 61288/* Static Functions */ 61289 61290Promise.denodeify = function (fn, argumentCount) { 61291 if ( 61292 typeof argumentCount === 'number' && argumentCount !== Infinity 61293 ) { 61294 return denodeifyWithCount(fn, argumentCount); 61295 } else { 61296 return denodeifyWithoutCount(fn); 61297 } 61298}; 61299 61300var callbackFn = ( 61301 'function (err, res) {' + 61302 'if (err) { rj(err); } else { rs(res); }' + 61303 '}' 61304); 61305function denodeifyWithCount(fn, argumentCount) { 61306 var args = []; 61307 for (var i = 0; i < argumentCount; i++) { 61308 args.push('a' + i); 61309 } 61310 var body = [ 61311 'return function (' + args.join(',') + ') {', 61312 'var self = this;', 61313 'return new Promise(function (rs, rj) {', 61314 'var res = fn.call(', 61315 ['self'].concat(args).concat([callbackFn]).join(','), 61316 ');', 61317 'if (res &&', 61318 '(typeof res === "object" || typeof res === "function") &&', 61319 'typeof res.then === "function"', 61320 ') {rs(res);}', 61321 '});', 61322 '};' 61323 ].join(''); 61324 return Function(['Promise', 'fn'], body)(Promise, fn); 61325} 61326function denodeifyWithoutCount(fn) { 61327 var fnLength = Math.max(fn.length - 1, 3); 61328 var args = []; 61329 for (var i = 0; i < fnLength; i++) { 61330 args.push('a' + i); 61331 } 61332 var body = [ 61333 'return function (' + args.join(',') + ') {', 61334 'var self = this;', 61335 'var args;', 61336 'var argLength = arguments.length;', 61337 'if (arguments.length > ' + fnLength + ') {', 61338 'args = new Array(arguments.length + 1);', 61339 'for (var i = 0; i < arguments.length; i++) {', 61340 'args[i] = arguments[i];', 61341 '}', 61342 '}', 61343 'return new Promise(function (rs, rj) {', 61344 'var cb = ' + callbackFn + ';', 61345 'var res;', 61346 'switch (argLength) {', 61347 args.concat(['extra']).map(function (_, index) { 61348 return ( 61349 'case ' + (index) + ':' + 61350 'res = fn.call(' + ['self'].concat(args.slice(0, index)).concat('cb').join(',') + ');' + 61351 'break;' 61352 ); 61353 }).join(''), 61354 'default:', 61355 'args[argLength] = cb;', 61356 'res = fn.apply(self, args);', 61357 '}', 61358 61359 'if (res &&', 61360 '(typeof res === "object" || typeof res === "function") &&', 61361 'typeof res.then === "function"', 61362 ') {rs(res);}', 61363 '});', 61364 '};' 61365 ].join(''); 61366 61367 return Function( 61368 ['Promise', 'fn'], 61369 body 61370 )(Promise, fn); 61371} 61372 61373Promise.nodeify = function (fn) { 61374 return function () { 61375 var args = Array.prototype.slice.call(arguments); 61376 var callback = 61377 typeof args[args.length - 1] === 'function' ? args.pop() : null; 61378 var ctx = this; 61379 try { 61380 return fn.apply(this, arguments).nodeify(callback, ctx); 61381 } catch (ex) { 61382 if (callback === null || typeof callback == 'undefined') { 61383 return new Promise(function (resolve, reject) { 61384 reject(ex); 61385 }); 61386 } else { 61387 asap(function () { 61388 callback.call(ctx, ex); 61389 }) 61390 } 61391 } 61392 } 61393}; 61394 61395Promise.prototype.nodeify = function (callback, ctx) { 61396 if (typeof callback != 'function') return this; 61397 61398 this.then(function (value) { 61399 asap(function () { 61400 callback.call(ctx, null, value); 61401 }); 61402 }, function (err) { 61403 asap(function () { 61404 callback.call(ctx, err); 61405 }); 61406 }); 61407}; 61408 61409 61410/***/ }), 61411
vendor: 1,770 bytes, lines 61412-61485
61412/***/ "./node_modules/promise/lib/synchronous.js": 61413/*!*************************************************!*\ 61414 !*** ./node_modules/promise/lib/synchronous.js ***! 61415 \*************************************************/ 61416/*! no static exports found */ 61417/***/ (function(module, exports, __webpack_require__) { 61418 61419"use strict"; 61420 61421 61422var Promise = __webpack_require__(/*! ./core.js */ "./node_modules/promise/lib/core.js"); 61423 61424module.exports = Promise; 61425Promise.enableSynchronous = function () { 61426 Promise.prototype.isPending = function() { 61427 return this.getState() == 0; 61428 }; 61429 61430 Promise.prototype.isFulfilled = function() { 61431 return this.getState() == 1; 61432 }; 61433 61434 Promise.prototype.isRejected = function() { 61435 return this.getState() == 2; 61436 }; 61437 61438 Promise.prototype.getValue = function () { 61439 if (this._65 === 3) { 61440 return this._55.getValue(); 61441 } 61442 61443 if (!this.isFulfilled()) { 61444 throw new Error('Cannot get a value of an unfulfilled promise.'); 61445 } 61446 61447 return this._55; 61448 }; 61449 61450 Promise.prototype.getReason = function () { 61451 if (this._65 === 3) { 61452 return this._55.getReason(); 61453 } 61454 61455 if (!this.isRejected()) { 61456 throw new Error('Cannot get a rejection reason of a non-rejected promise.'); 61457 } 61458 61459 return this._55; 61460 }; 61461 61462 Promise.prototype.getState = function () { 61463 if (this._65 === 3) { 61464 return this._55.getState(); 61465 } 61466 if (this._65 === -1 || this._65 === -2) { 61467 return 0; 61468 } 61469 61470 return this._65; 61471 }; 61472}; 61473 61474Promise.disableSynchronous = function() { 61475 Promise.prototype.isPending = undefined; 61476 Promise.prototype.isFulfilled = undefined; 61477 Promise.prototype.isRejected = undefined; 61478 Promise.prototype.getValue = undefined; 61479 Promise.prototype.getReason = undefined; 61480 Promise.prototype.getState = undefined; 61481}; 61482 61483 61484/***/ }), 61485
vendor: 7,087 bytes, lines 61486-61683
61486/***/ "./node_modules/setimmediate/setImmediate.js": 61487/*!***************************************************!*\ 61488 !*** ./node_modules/setimmediate/setImmediate.js ***! 61489 \***************************************************/ 61490/*! no static exports found */ 61491/***/ (function(module, exports, __webpack_require__) { 61492 61493/* WEBPACK VAR INJECTION */(function(global, process) {(function (global, undefined) { 61494 "use strict"; 61495 61496 if (global.setImmediate) { 61497 return; 61498 } 61499 61500 var nextHandle = 1; // Spec says greater than zero 61501 var tasksByHandle = {}; 61502 var currentlyRunningATask = false; 61503 var doc = global.document; 61504 var registerImmediate; 61505 61506 function setImmediate(callback) { 61507 // Callback can either be a function or a string 61508 if (typeof callback !== "function") { 61509 callback = new Function("" + callback); 61510 } 61511 // Copy function arguments 61512 var args = new Array(arguments.length - 1); 61513 for (var i = 0; i < args.length; i++) { 61514 args[i] = arguments[i + 1]; 61515 } 61516 // Store and register the task 61517 var task = { callback: callback, args: args }; 61518 tasksByHandle[nextHandle] = task; 61519 registerImmediate(nextHandle); 61520 return nextHandle++; 61521 } 61522 61523 function clearImmediate(handle) { 61524 delete tasksByHandle[handle]; 61525 } 61526 61527 function run(task) { 61528 var callback = task.callback; 61529 var args = task.args; 61530 switch (args.length) { 61531 case 0: 61532 callback(); 61533 break; 61534 case 1: 61535 callback(args[0]); 61536 break; 61537 case 2: 61538 callback(args[0], args[1]); 61539 break; 61540 case 3: 61541 callback(args[0], args[1], args[2]); 61542 break; 61543 default: 61544 callback.apply(undefined, args); 61545 break; 61546 } 61547 } 61548 61549 function runIfPresent(handle) { 61550 // From the spec: "Wait until any invocations of this algorithm started before this one have completed." 61551 // So if we're currently running a task, we'll need to delay this invocation. 61552 if (currentlyRunningATask) { 61553 // Delay by doing a setTimeout. setImmediate was tried instead, but in Firefox 7 it generated a 61554 // "too much recursion" error. 61555 setTimeout(runIfPresent, 0, handle); 61556 } else { 61557 var task = tasksByHandle[handle]; 61558 if (task) { 61559 currentlyRunningATask = true; 61560 try { 61561 run(task); 61562 } finally { 61563 clearImmediate(handle); 61564 currentlyRunningATask = false; 61565 } 61566 } 61567 } 61568 } 61569 61570 function installNextTickImplementation() { 61571 registerImmediate = function(handle) { 61572 process.nextTick(function () { runIfPresent(handle); }); 61573 }; 61574 } 61575 61576 function canUsePostMessage() { 61577 // The test against `importScripts` prevents this implementation from being installed inside a web worker, 61578 // where `global.postMessage` means something completely different and can't be used for this purpose. 61579 if (global.postMessage && !global.importScripts) { 61580 var postMessageIsAsynchronous = true; 61581 var oldOnMessage = global.onmessage; 61582 global.onmessage = function() { 61583 postMessageIsAsynchronous = false; 61584 }; 61585 global.postMessage("", "*"); 61586 global.onmessage = oldOnMessage; 61587 return postMessageIsAsynchronous; 61588 } 61589 } 61590 61591 function installPostMessageImplementation() { 61592 // Installs an event handler on `global` for the `message` event: see 61593 // * https://developer.mozilla.org/en/DOM/window.postMessage 61594 // * http://www.whatwg.org/specs/web-apps/current-work/multipage/comms.html#crossDocumentMessages 61595 61596 var messagePrefix = "setImmediate$" + Math.random() + "$"; 61597 var onGlobalMessage = function(event) { 61598 if (event.source === global && 61599 typeof event.data === "string" && 61600 event.data.indexOf(messagePrefix) === 0) { 61601 runIfPresent(+event.data.slice(messagePrefix.length)); 61602 } 61603 }; 61604 61605 if (global.addEventListener) { 61606 global.addEventListener("message", onGlobalMessage, false); 61607 } else { 61608 global.attachEvent("onmessage", onGlobalMessage); 61609 } 61610 61611 registerImmediate = function(handle) { 61612 global.postMessage(messagePrefix + handle, "*"); 61613 }; 61614 } 61615 61616 function installMessageChannelImplementation() { 61617 var channel = new MessageChannel(); 61618 channel.port1.onmessage = function(event) { 61619 var handle = event.data; 61620 runIfPresent(handle); 61621 }; 61622 61623 registerImmediate = function(handle) { 61624 channel.port2.postMessage(handle); 61625 }; 61626 } 61627 61628 function installReadyStateChangeImplementation() { 61629 var html = doc.documentElement; 61630 registerImmediate = function(handle) { 61631 // Create a <script> element; its readystatechange event will be fired asynchronously once it is inserted 61632 // into the document. Do so, thus queuing up the task. Remember to clean up once it's been called. 61633 var script = doc.createElement("script"); 61634 script.onreadystatechange = function () { 61635 runIfPresent(handle); 61636 script.onreadystatechange = null; 61637 html.removeChild(script); 61638 script = null; 61639 }; 61640 html.appendChild(script); 61641 }; 61642 } 61643 61644 function installSetTimeoutImplementation() { 61645 registerImmediate = function(handle) { 61646 setTimeout(runIfPresent, 0, handle); 61647 }; 61648 } 61649 61650 // If supported, we should attach to the prototype of global, since that is where setTimeout et al. live. 61651 var attachTo = Object.getPrototypeOf && Object.getPrototypeOf(global); 61652 attachTo = attachTo && attachTo.setTimeout ? attachTo : global; 61653 61654 // Don't get fooled by e.g. browserify environments. 61655 if ({}.toString.call(global.process) === "[object process]") { 61656 // For Node.js before 0.9 61657 installNextTickImplementation(); 61658 61659 } else if (canUsePostMessage()) { 61660 // For non-IE10 modern browsers 61661 installPostMessageImplementation(); 61662 61663 } else if (global.MessageChannel) { 61664 // For web workers, where supported 61665 installMessageChannelImplementation(); 61666 61667 } else if (doc && "onreadystatechange" in doc.createElement("script")) { 61668 // For IE 6â8 61669 installReadyStateChangeImplementation(); 61670 61671 } else { 61672 // For older browsers 61673 installSetTimeoutImplementation(); 61674 } 61675 61676 attachTo.setImmediate = setImmediate; 61677 attachTo.clearImmediate = clearImmediate; 61678}(typeof self === "undefined" ? typeof global === "undefined" ? this : global : self)); 61679 61680/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../webpack/buildin/global.js */ "./node_modules/webpack/buildin/global.js"), __webpack_require__(/*! ./../process/browser.js */ "./node_modules/process/browser.js"))) 61681 61682/***/ }), 61683
vendor: 2,587 bytes, lines 61684-61758
61684/***/ "./node_modules/timers-browserify/main.js": 61685/*!************************************************!*\ 61686 !*** ./node_modules/timers-browserify/main.js ***! 61687 \************************************************/ 61688/*! no static exports found */ 61689/***/ (function(module, exports, __webpack_require__) { 61690 61691/* WEBPACK VAR INJECTION */(function(global) {var scope = (typeof global !== "undefined" && global) || 61692 (typeof self !== "undefined" && self) || 61693 window; 61694var apply = Function.prototype.apply; 61695 61696// DOM APIs, for completeness 61697 61698exports.setTimeout = function() { 61699 return new Timeout(apply.call(setTimeout, scope, arguments), clearTimeout); 61700}; 61701exports.setInterval = function() { 61702 return new Timeout(apply.call(setInterval, scope, arguments), clearInterval); 61703}; 61704exports.clearTimeout = 61705exports.clearInterval = function(timeout) { 61706 if (timeout) { 61707 timeout.close(); 61708 } 61709}; 61710 61711function Timeout(id, clearFn) { 61712 this._id = id; 61713 this._clearFn = clearFn; 61714} 61715Timeout.prototype.unref = Timeout.prototype.ref = function() {}; 61716Timeout.prototype.close = function() { 61717 this._clearFn.call(scope, this._id); 61718}; 61719 61720// Does not start the time, just sets up the members needed. 61721exports.enroll = function(item, msecs) { 61722 clearTimeout(item._idleTimeoutId); 61723 item._idleTimeout = msecs; 61724}; 61725 61726exports.unenroll = function(item) { 61727 clearTimeout(item._idleTimeoutId); 61728 item._idleTimeout = -1; 61729}; 61730 61731exports._unrefActive = exports.active = function(item) { 61732 clearTimeout(item._idleTimeoutId); 61733 61734 var msecs = item._idleTimeout; 61735 if (msecs >= 0) { 61736 item._idleTimeoutId = setTimeout(function onTimeout() { 61737 if (item._onTimeout) 61738 item._onTimeout(); 61739 }, msecs); 61740 } 61741}; 61742 61743// setimmediate attaches itself to the global object 61744__webpack_require__(/*! setimmediate */ "./node_modules/setimmediate/setImmediate.js"); 61745// On some exotic environments, it's not clear which object `setimmediate` was 61746// able to install onto. Search each possibility in the same order as the 61747// `setimmediate` library. 61748exports.setImmediate = (typeof self !== "undefined" && self.setImmediate) || 61749 (typeof global !== "undefined" && global.setImmediate) || 61750 (this && this.setImmediate); 61751exports.clearImmediate = (typeof self !== "undefined" && self.clearImmediate) || 61752 (typeof global !== "undefined" && global.clearImmediate) || 61753 (this && this.clearImmediate); 61754 61755/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../webpack/buildin/global.js */ "./node_modules/webpack/buildin/global.js"))) 61756 61757/***/ }), 61758
vendor: 4,987 bytes, lines 61759-61955
61759/***/ "./node_modules/urijs/src/IPv6.js": 61760/*!****************************************!*\ 61761 !*** ./node_modules/urijs/src/IPv6.js ***! 61762 \****************************************/ 61763/*! no static exports found */ 61764/***/ (function(module, exports, __webpack_require__) { 61765 61766var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_RESULT__;/*! 61767 * URI.js - Mutating URLs 61768 * IPv6 Support 61769 * 61770 * Version: 1.19.11 61771 * 61772 * Author: Rodney Rehm 61773 * Web: http://medialize.github.io/URI.js/ 61774 * 61775 * Licensed under 61776 * MIT License http://www.opensource.org/licenses/mit-license 61777 * 61778 */ 61779 61780(function (root, factory) { 61781 'use strict'; 61782 // https://github.com/umdjs/umd/blob/master/returnExports.js 61783 if ( true && module.exports) { 61784 // Node 61785 module.exports = factory(); 61786 } else if (true) { 61787 // AMD. Register as an anonymous module. 61788 !(__WEBPACK_AMD_DEFINE_FACTORY__ = (factory), 61789 __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? 61790 (__WEBPACK_AMD_DEFINE_FACTORY__.call(exports, __webpack_require__, exports, module)) : 61791 __WEBPACK_AMD_DEFINE_FACTORY__), 61792 __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); 61793 } else {} 61794}(this, function (root) { 61795 'use strict'; 61796 61797 /* 61798 var _in = "fe80:0000:0000:0000:0204:61ff:fe9d:f156"; 61799 var _out = IPv6.best(_in); 61800 var _expected = "fe80::204:61ff:fe9d:f156"; 61801 61802 console.log(_in, _out, _expected, _out === _expected); 61803 */ 61804 61805 // save current IPv6 variable, if any 61806 var _IPv6 = root && root.IPv6; 61807 61808 function bestPresentation(address) { 61809 // based on: 61810 // Javascript to test an IPv6 address for proper format, and to 61811 // present the "best text representation" according to IETF Draft RFC at 61812 // http://tools.ietf.org/html/draft-ietf-6man-text-addr-representation-04 61813 // 8 Feb 2010 Rich Brown, Dartware, LLC 61814 // Please feel free to use this code as long as you provide a link to 61815 // http://www.intermapper.com 61816 // http://intermapper.com/support/tools/IPV6-Validator.aspx 61817 // http://download.dartware.com/thirdparty/ipv6validator.js 61818 61819 var _address = address.toLowerCase(); 61820 var segments = _address.split(':'); 61821 var length = segments.length; 61822 var total = 8; 61823 61824 // trim colons (:: or ::a:b:c⦠or â¦a:b:c::) 61825 if (segments[0] === '' && segments[1] === '' && segments[2] === '') { 61826 // must have been :: 61827 // remove first two items 61828 segments.shift(); 61829 segments.shift(); 61830 } else if (segments[0] === '' && segments[1] === '') { 61831 // must have been ::xxxx 61832 // remove the first item 61833 segments.shift(); 61834 } else if (segments[length - 1] === '' && segments[length - 2] === '') { 61835 // must have been xxxx:: 61836 segments.pop(); 61837 } 61838 61839 length = segments.length; 61840 61841 // adjust total segments for IPv4 trailer 61842 if (segments[length - 1].indexOf('.') !== -1) { 61843 // found a "." which means IPv4 61844 total = 7; 61845 } 61846 61847 // fill empty segments them with "0000" 61848 var pos; 61849 for (pos = 0; pos < length; pos++) { 61850 if (segments[pos] === '') { 61851 break; 61852 } 61853 } 61854 61855 if (pos < total) { 61856 segments.splice(pos, 1, '0000'); 61857 while (segments.length < total) { 61858 segments.splice(pos, 0, '0000'); 61859 } 61860 } 61861 61862 // strip leading zeros 61863 var _segments; 61864 for (var i = 0; i < total; i++) { 61865 _segments = segments[i].split(''); 61866 for (var j = 0; j < 3 ; j++) { 61867 if (_segments[0] === '0' && _segments.length > 1) { 61868 _segments.splice(0,1); 61869 } else { 61870 break; 61871 } 61872 } 61873 61874 segments[i] = _segments.join(''); 61875 } 61876 61877 // find longest sequence of zeroes and coalesce them into one segment 61878 var best = -1; 61879 var _best = 0; 61880 var _current = 0; 61881 var current = -1; 61882 var inzeroes = false; 61883 // i; already declared 61884 61885 for (i = 0; i < total; i++) { 61886 if (inzeroes) { 61887 if (segments[i] === '0') { 61888 _current += 1; 61889 } else { 61890 inzeroes = false; 61891 if (_current > _best) { 61892 best = current; 61893 _best = _current; 61894 } 61895 } 61896 } else { 61897 if (segments[i] === '0') { 61898 inzeroes = true; 61899 current = i; 61900 _current = 1; 61901 } 61902 } 61903 } 61904 61905 if (_current > _best) { 61906 best = current; 61907 _best = _current; 61908 } 61909 61910 if (_best > 1) { 61911 segments.splice(best, _best, ''); 61912 } 61913 61914 length = segments.length; 61915 61916 // assemble remaining segments 61917 var result = ''; 61918 if (segments[0] === '') { 61919 result = ':'; 61920 } 61921 61922 for (i = 0; i < length; i++) { 61923 result += segments[i]; 61924 if (i === length - 1) { 61925 break; 61926 } 61927 61928 result += ':'; 61929 } 61930 61931 if (segments[length - 1] === '') { 61932 result += ':'; 61933 } 61934 61935 return result; 61936 } 61937 61938 function noConflict() { 61939 /*jshint validthis: true */ 61940 if (root.IPv6 === this) { 61941 root.IPv6 = _IPv6; 61942 } 61943 61944 return this; 61945 } 61946 61947 return { 61948 best: bestPresentation, 61949 noConflict: noConflict 61950 }; 61951})); 61952 61953 61954/***/ }), 61955
vendor: 12,695 bytes, lines 61956-62212
61956/***/ "./node_modules/urijs/src/SecondLevelDomains.js": 61957/*!******************************************************!*\ 61958 !*** ./node_modules/urijs/src/SecondLevelDomains.js ***! 61959 \******************************************************/ 61960/*! no static exports found */ 61961/***/ (function(module, exports, __webpack_require__) { 61962 61963var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_RESULT__;/*! 61964 * URI.js - Mutating URLs 61965 * Second Level Domain (SLD) Support 61966 * 61967 * Version: 1.19.11 61968 * 61969 * Author: Rodney Rehm 61970 * Web: http://medialize.github.io/URI.js/ 61971 * 61972 * Licensed under 61973 * MIT License http://www.opensource.org/licenses/mit-license 61974 * 61975 */ 61976 61977(function (root, factory) { 61978 'use strict'; 61979 // https://github.com/umdjs/umd/blob/master/returnExports.js 61980 if ( true && module.exports) { 61981 // Node 61982 module.exports = factory(); 61983 } else if (true) { 61984 // AMD. Register as an anonymous module. 61985 !(__WEBPACK_AMD_DEFINE_FACTORY__ = (factory), 61986 __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? 61987 (__WEBPACK_AMD_DEFINE_FACTORY__.call(exports, __webpack_require__, exports, module)) : 61988 __WEBPACK_AMD_DEFINE_FACTORY__), 61989 __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); 61990 } else {} 61991}(this, function (root) { 61992 'use strict'; 61993 61994 // save current SecondLevelDomains variable, if any 61995 var _SecondLevelDomains = root && root.SecondLevelDomains; 61996 61997 var SLD = { 61998 // list of known Second Level Domains 61999 // converted list of SLDs from https://github.com/gavingmiller/second-level-domains 62000 // ---- 62001 // publicsuffix.org is more current and actually used by a couple of browsers internally. 62002 // downside is it also contains domains like "dyndns.org" - which is fine for the security 62003 // issues browser have to deal with (SOP for cookies, etc) - but is way overboard for URI.js 62004 // ---- 62005 list: { 62006 'ac':' com gov mil net org ', 62007 'ae':' ac co gov mil name net org pro sch ', 62008 'af':' com edu gov net org ', 62009 'al':' com edu gov mil net org ', 62010 'ao':' co ed gv it og pb ', 62011 'ar':' com edu gob gov int mil net org tur ', 62012 'at':' ac co gv or ', 62013 'au':' asn com csiro edu gov id net org ', 62014 'ba':' co com edu gov mil net org rs unbi unmo unsa untz unze ', 62015 'bb':' biz co com edu gov info net org store tv ', 62016 'bh':' biz cc com edu gov info net org ', 62017 'bn':' com edu gov net org ', 62018 'bo':' com edu gob gov int mil net org tv ', 62019 'br':' adm adv agr am arq art ato b bio blog bmd cim cng cnt com coop ecn edu eng esp etc eti far flog fm fnd fot fst g12 ggf gov imb ind inf jor jus lel mat med mil mus net nom not ntr odo org ppg pro psc psi qsl rec slg srv tmp trd tur tv vet vlog wiki zlg ', 62020 'bs':' com edu gov net org ', 62021 'bz':' du et om ov rg ', 62022 'ca':' ab bc mb nb nf nl ns nt nu on pe qc sk yk ', 62023 'ck':' biz co edu gen gov info net org ', 62024 'cn':' ac ah bj com cq edu fj gd gov gs gx gz ha hb he hi hl hn jl js jx ln mil net nm nx org qh sc sd sh sn sx tj tw xj xz yn zj ', 62025 'co':' com edu gov mil net nom org ', 62026 'cr':' ac c co ed fi go or sa ', 62027 'cy':' ac biz com ekloges gov ltd name net org parliament press pro tm ', 62028 'do':' art com edu gob gov mil net org sld web ', 62029 'dz':' art asso com edu gov net org pol ', 62030 'ec':' com edu fin gov info med mil net org pro ', 62031 'eg':' com edu eun gov mil name net org sci ', 62032 'er':' com edu gov ind mil net org rochest w ', 62033 'es':' com edu gob nom org ', 62034 'et':' biz com edu gov info name net org ', 62035 'fj':' ac biz com info mil name net org pro ', 62036 'fk':' ac co gov net nom org ', 62037 'fr':' asso com f gouv nom prd presse tm ', 62038 'gg':' co net org ', 62039 'gh':' com edu gov mil org ', 62040 'gn':' ac com gov net org ', 62041 'gr':' com edu gov mil net org ', 62042 'gt':' com edu gob ind mil net org ', 62043 'gu':' com edu gov net org ', 62044 'hk':' com edu gov idv net org ', 62045 'hu':' 2000 agrar bolt casino city co erotica erotika film forum games hotel info ingatlan jogasz konyvelo lakas media news org priv reklam sex shop sport suli szex tm tozsde utazas video ', 62046 'id':' ac co go mil net or sch web ', 62047 'il':' ac co gov idf k12 muni net org ', 62048 'in':' ac co edu ernet firm gen gov i ind mil net nic org res ', 62049 'iq':' com edu gov i mil net org ', 62050 'ir':' ac co dnssec gov i id net org sch ', 62051 'it':' edu gov ', 62052 'je':' co net org ', 62053 'jo':' com edu gov mil name net org sch ', 62054 'jp':' ac ad co ed go gr lg ne or ', 62055 'ke':' ac co go info me mobi ne or sc ', 62056 'kh':' com edu gov mil net org per ', 62057 'ki':' biz com de edu gov info mob net org tel ', 62058 'km':' asso com coop edu gouv k medecin mil nom notaires pharmaciens presse tm veterinaire ', 62059 'kn':' edu gov net org ', 62060 'kr':' ac busan chungbuk chungnam co daegu daejeon es gangwon go gwangju gyeongbuk gyeonggi gyeongnam hs incheon jeju jeonbuk jeonnam k kg mil ms ne or pe re sc seoul ulsan ', 62061 'kw':' com edu gov net org ', 62062 'ky':' com edu gov net org ', 62063 'kz':' com edu gov mil net org ', 62064 'lb':' com edu gov net org ', 62065 'lk':' assn com edu gov grp hotel int ltd net ngo org sch soc web ', 62066 'lr':' com edu gov net org ', 62067 'lv':' asn com conf edu gov id mil net org ', 62068 'ly':' com edu gov id med net org plc sch ', 62069 'ma':' ac co gov m net org press ', 62070 'mc':' asso tm ', 62071 'me':' ac co edu gov its net org priv ', 62072 'mg':' com edu gov mil nom org prd tm ', 62073 'mk':' com edu gov inf name net org pro ', 62074 'ml':' com edu gov net org presse ', 62075 'mn':' edu gov org ', 62076 'mo':' com edu gov net org ', 62077 'mt':' com edu gov net org ', 62078 'mv':' aero biz com coop edu gov info int mil museum name net org pro ', 62079 'mw':' ac co com coop edu gov int museum net org ', 62080 'mx':' com edu gob net org ', 62081 'my':' com edu gov mil name net org sch ', 62082 'nf':' arts com firm info net other per rec store web ', 62083 'ng':' biz com edu gov mil mobi name net org sch ', 62084 'ni':' ac co com edu gob mil net nom org ', 62085 'np':' com edu gov mil net org ', 62086 'nr':' biz com edu gov info net org ', 62087 'om':' ac biz co com edu gov med mil museum net org pro sch ', 62088 'pe':' com edu gob mil net nom org sld ', 62089 'ph':' com edu gov i mil net ngo org ', 62090 'pk':' biz com edu fam gob gok gon gop gos gov net org web ', 62091 'pl':' art bialystok biz com edu gda gdansk gorzow gov info katowice krakow lodz lublin mil net ngo olsztyn org poznan pwr radom slupsk szczecin torun warszawa waw wroc wroclaw zgora ', 62092 'pr':' ac biz com edu est gov info isla name net org pro prof ', 62093 'ps':' com edu gov net org plo sec ', 62094 'pw':' belau co ed go ne or ', 62095 'ro':' arts com firm info nom nt org rec store tm www ', 62096 'rs':' ac co edu gov in org ', 62097 'sb':' com edu gov net org ', 62098 'sc':' com edu gov net org ', 62099 'sh':' co com edu gov net nom org ', 62100 'sl':' com edu gov net org ', 62101 'st':' co com consulado edu embaixada gov mil net org principe saotome store ', 62102 'sv':' com edu gob org red ', 62103 'sz':' ac co org ', 62104 'tr':' av bbs bel biz com dr edu gen gov info k12 name net org pol tel tsk tv web ', 62105 'tt':' aero biz cat co com coop edu gov info int jobs mil mobi museum name net org pro tel travel ', 62106 'tw':' club com ebiz edu game gov idv mil net org ', 62107 'mu':' ac co com gov net or org ', 62108 'mz':' ac co edu gov org ', 62109 'na':' co com ', 62110 'nz':' ac co cri geek gen govt health iwi maori mil net org parliament school ', 62111 'pa':' abo ac com edu gob ing med net nom org sld ', 62112 'pt':' com edu gov int net nome org publ ', 62113 'py':' com edu gov mil net org ', 62114 'qa':' com edu gov mil net org ', 62115 're':' asso com nom ', 62116 'ru':' ac adygeya altai amur arkhangelsk astrakhan bashkiria belgorod bir bryansk buryatia cbg chel chelyabinsk chita chukotka chuvashia com dagestan e-burg edu gov grozny int irkutsk ivanovo izhevsk jar joshkar-ola kalmykia kaluga kamchatka karelia kazan kchr kemerovo khabarovsk khakassia khv kirov koenig komi kostroma kranoyarsk kuban kurgan kursk lipetsk magadan mari mari-el marine mil mordovia mosreg msk murmansk nalchik net nnov nov novosibirsk nsk omsk orenburg org oryol penza perm pp pskov ptz rnd ryazan sakhalin samara saratov simbirsk smolensk spb stavropol stv surgut tambov tatarstan tom tomsk tsaritsyn tsk tula tuva tver tyumen udm udmurtia ulan-ude vladikavkaz vladimir vladivostok volgograd vologda voronezh vrn vyatka yakutia yamal yekaterinburg yuzhno-sakhalinsk ', 62117 'rw':' ac co com edu gouv gov int mil net ', 62118 'sa':' com edu gov med net org pub sch ', 62119 'sd':' com edu gov info med net org tv ', 62120 'se':' a ac b bd c d e f g h i k l m n o org p parti pp press r s t tm u w x y z ', 62121 'sg':' com edu gov idn net org per ', 62122 'sn':' art com edu gouv org perso univ ', 62123 'sy':' com edu gov mil net news org ', 62124 'th':' ac co go in mi net or ', 62125 'tj':' ac biz co com edu go gov info int mil name net nic org test web ', 62126 'tn':' agrinet com defense edunet ens fin gov ind info intl mincom nat net org perso rnrt rns rnu tourism ', 62127 'tz':' ac co go ne or ', 62128 'ua':' biz cherkassy chernigov chernovtsy ck cn co com crimea cv dn dnepropetrovsk donetsk dp edu gov if in ivano-frankivsk kh kharkov kherson khmelnitskiy kiev kirovograd km kr ks kv lg lugansk lutsk lviv me mk net nikolaev od odessa org pl poltava pp rovno rv sebastopol sumy te ternopil uzhgorod vinnica vn zaporizhzhe zhitomir zp zt ', 62129 'ug':' ac co go ne or org sc ', 62130 'uk':' ac bl british-library co cym gov govt icnet jet lea ltd me mil mod national-library-scotland nel net nhs nic nls org orgn parliament plc police sch scot soc ', 62131 'us':' dni fed isa kids nsn ', 62132 'uy':' com edu gub mil net org ', 62133 've':' co com edu gob info mil net org web ', 62134 'vi':' co com k12 net org ', 62135 'vn':' ac biz com edu gov health info int name net org pro ', 62136 'ye':' co com gov ltd me net org plc ', 62137 'yu':' ac co edu gov org ', 62138 'za':' ac agric alt bourse city co cybernet db edu gov grondar iaccess imt inca landesign law mil net ngo nis nom olivetti org pix school tm web ', 62139 'zm':' ac co com edu gov net org sch ', 62140 // https://en.wikipedia.org/wiki/CentralNic#Second-level_domains 62141 'com': 'ar br cn de eu gb gr hu jpn kr no qc ru sa se uk us uy za ', 62142 'net': 'gb jp se uk ', 62143 'org': 'ae', 62144 'de': 'com ' 62145 }, 62146 // gorhill 2013-10-25: Using indexOf() instead Regexp(). Significant boost 62147 // in both performance and memory footprint. No initialization required. 62148 // http://jsperf.com/uri-js-sld-regex-vs-binary-search/4 62149 // Following methods use lastIndexOf() rather than array.split() in order 62150 // to avoid any memory allocations. 62151 has: function(domain) { 62152 var tldOffset = domain.lastIndexOf('.'); 62153 if (tldOffset <= 0 || tldOffset >= (domain.length-1)) { 62154 return false; 62155 } 62156 var sldOffset = domain.lastIndexOf('.', tldOffset-1); 62157 if (sldOffset <= 0 || sldOffset >= (tldOffset-1)) { 62158 return false; 62159 } 62160 var sldList = SLD.list[domain.slice(tldOffset+1)]; 62161 if (!sldList) { 62162 return false; 62163 } 62164 return sldList.indexOf(' ' + domain.slice(sldOffset+1, tldOffset) + ' ') >= 0; 62165 }, 62166 is: function(domain) { 62167 var tldOffset = domain.lastIndexOf('.'); 62168 if (tldOffset <= 0 || tldOffset >= (domain.length-1)) { 62169 return false; 62170 } 62171 var sldOffset = domain.lastIndexOf('.', tldOffset-1); 62172 if (sldOffset >= 0) { 62173 return false; 62174 } 62175 var sldList = SLD.list[domain.slice(tldOffset+1)]; 62176 if (!sldList) { 62177 return false; 62178 } 62179 return sldList.indexOf(' ' + domain.slice(0, tldOffset) + ' ') >= 0; 62180 }, 62181 get: function(domain) { 62182 var tldOffset = domain.lastIndexOf('.'); 62183 if (tldOffset <= 0 || tldOffset >= (domain.length-1)) { 62184 return null; 62185 } 62186 var sldOffset = domain.lastIndexOf('.', tldOffset-1); 62187 if (sldOffset <= 0 || sldOffset >= (tldOffset-1)) { 62188 return null; 62189 } 62190 var sldList = SLD.list[domain.slice(tldOffset+1)]; 62191 if (!sldList) { 62192 return null; 62193 } 62194 if (sldList.indexOf(' ' + domain.slice(sldOffset+1, tldOffset) + ' ') < 0) { 62195 return null; 62196 } 62197 return domain.slice(sldOffset+1); 62198 }, 62199 noConflict: function(){ 62200 if (root.SecondLevelDomains === this) { 62201 root.SecondLevelDomains = _SecondLevelDomains; 62202 } 62203 return this; 62204 } 62205 }; 62206 62207 return SLD; 62208})); 62209 62210 62211/***/ }), 62212
vendor: 68,287 bytes, lines 62213-64587
62213/***/ "./node_modules/urijs/src/URI.js": 62214/*!***************************************!*\ 62215 !*** ./node_modules/urijs/src/URI.js ***! 62216 \***************************************/ 62217/*! no static exports found */ 62218/***/ (function(module, exports, __webpack_require__) { 62219 62220var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*! 62221 * URI.js - Mutating URLs 62222 * 62223 * Version: 1.19.11 62224 * 62225 * Author: Rodney Rehm 62226 * Web: http://medialize.github.io/URI.js/ 62227 * 62228 * Licensed under 62229 * MIT License http://www.opensource.org/licenses/mit-license 62230 * 62231 */ 62232(function (root, factory) { 62233 'use strict'; 62234 // https://github.com/umdjs/umd/blob/master/returnExports.js 62235 if ( true && module.exports) { 62236 // Node 62237 module.exports = factory(__webpack_require__(/*! ./punycode */ "./node_modules/urijs/src/punycode.js"), __webpack_require__(/*! ./IPv6 */ "./node_modules/urijs/src/IPv6.js"), __webpack_require__(/*! ./SecondLevelDomains */ "./node_modules/urijs/src/SecondLevelDomains.js")); 62238 } else if (true) { 62239 // AMD. Register as an anonymous module. 62240 !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! ./punycode */ "./node_modules/urijs/src/punycode.js"), __webpack_require__(/*! ./IPv6 */ "./node_modules/urijs/src/IPv6.js"), __webpack_require__(/*! ./SecondLevelDomains */ "./node_modules/urijs/src/SecondLevelDomains.js")], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory), 62241 __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? 62242 (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), 62243 __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); 62244 } else {} 62245}(this, function (punycode, IPv6, SLD, root) { 62246 'use strict'; 62247 /*global location, escape, unescape */ 62248 // FIXME: v2.0.0 renamce non-camelCase properties to uppercase 62249 /*jshint camelcase: false */ 62250 62251 // save current URI variable, if any 62252 var _URI = root && root.URI; 62253 62254 function URI(url, base) { 62255 var _urlSupplied = arguments.length >= 1; 62256 var _baseSupplied = arguments.length >= 2; 62257 62258 // Allow instantiation without the 'new' keyword 62259 if (!(this instanceof URI)) { 62260 if (_urlSupplied) { 62261 if (_baseSupplied) { 62262 return new URI(url, base); 62263 } 62264 62265 return new URI(url); 62266 } 62267 62268 return new URI(); 62269 } 62270 62271 if (url === undefined) { 62272 if (_urlSupplied) { 62273 throw new TypeError('undefined is not a valid argument for URI'); 62274 } 62275 62276 if (typeof location !== 'undefined') { 62277 url = location.href + ''; 62278 } else { 62279 url = ''; 62280 } 62281 } 62282 62283 if (url === null) { 62284 if (_urlSupplied) { 62285 throw new TypeError('null is not a valid argument for URI'); 62286 } 62287 } 62288 62289 this.href(url); 62290 62291 // resolve to base according to http://dvcs.w3.org/hg/url/raw-file/tip/Overview.html#constructor 62292 if (base !== undefined) { 62293 return this.absoluteTo(base); 62294 } 62295 62296 return this; 62297 } 62298 62299 function isInteger(value) { 62300 return /^[0-9]+$/.test(value); 62301 } 62302 62303 URI.version = '1.19.11'; 62304 62305 var p = URI.prototype; 62306 var hasOwn = Object.prototype.hasOwnProperty; 62307 62308 function escapeRegEx(string) { 62309 // https://github.com/medialize/URI.js/commit/85ac21783c11f8ccab06106dba9735a31a86924d#commitcomment-821963 62310 return string.replace(/([.*+?^=!:${}()|[\]\/\\])/g, '\\$1'); 62311 } 62312 62313 function getType(value) { 62314 // IE8 doesn't return [Object Undefined] but [Object Object] for undefined value 62315 if (value === undefined) { 62316 return 'Undefined'; 62317 } 62318 62319 return String(Object.prototype.toString.call(value)).slice(8, -1); 62320 } 62321 62322 function isArray(obj) { 62323 return getType(obj) === 'Array'; 62324 } 62325 62326 function filterArrayValues(data, value) { 62327 var lookup = {}; 62328 var i, length; 62329 62330 if (getType(value) === 'RegExp') { 62331 lookup = null; 62332 } else if (isArray(value)) { 62333 for (i = 0, length = value.length; i < length; i++) { 62334 lookup[value[i]] = true; 62335 } 62336 } else { 62337 lookup[value] = true; 62338 } 62339 62340 for (i = 0, length = data.length; i < length; i++) { 62341 /*jshint laxbreak: true */ 62342 var _match = lookup && lookup[data[i]] !== undefined 62343 || !lookup && value.test(data[i]); 62344 /*jshint laxbreak: false */ 62345 if (_match) { 62346 data.splice(i, 1); 62347 length--; 62348 i--; 62349 } 62350 } 62351 62352 return data; 62353 } 62354 62355 function arrayContains(list, value) { 62356 var i, length; 62357 62358 // value may be string, number, array, regexp 62359 if (isArray(value)) { 62360 // Note: this can be optimized to O(n) (instead of current O(m * n)) 62361 for (i = 0, length = value.length; i < length; i++) { 62362 if (!arrayContains(list, value[i])) { 62363 return false; 62364 } 62365 } 62366 62367 return true; 62368 } 62369 62370 var _type = getType(value); 62371 for (i = 0, length = list.length; i < length; i++) { 62372 if (_type === 'RegExp') { 62373 if (typeof list[i] === 'string' && list[i].match(value)) { 62374 return true; 62375 } 62376 } else if (list[i] === value) { 62377 return true; 62378 } 62379 } 62380 62381 return false; 62382 } 62383 62384 function arraysEqual(one, two) { 62385 if (!isArray(one) || !isArray(two)) { 62386 return false; 62387 } 62388 62389 // arrays can't be equal if they have different amount of content 62390 if (one.length !== two.length) { 62391 return false; 62392 } 62393 62394 one.sort(); 62395 two.sort(); 62396 62397 for (var i = 0, l = one.length; i < l; i++) { 62398 if (one[i] !== two[i]) { 62399 return false; 62400 } 62401 } 62402 62403 return true; 62404 } 62405 62406 function trimSlashes(text) { 62407 var trim_expression = /^\/+|\/+$/g; 62408 return text.replace(trim_expression, ''); 62409 } 62410 62411 URI._parts = function() { 62412 return { 62413 protocol: null, 62414 username: null, 62415 password: null, 62416 hostname: null, 62417 urn: null, 62418 port: null, 62419 path: null, 62420 query: null, 62421 fragment: null, 62422 // state 62423 preventInvalidHostname: URI.preventInvalidHostname, 62424 duplicateQueryParameters: URI.duplicateQueryParameters, 62425 escapeQuerySpace: URI.escapeQuerySpace 62426 }; 62427 }; 62428 // state: throw on invalid hostname 62429 // see https://github.com/medialize/URI.js/pull/345 62430 // and https://github.com/medialize/URI.js/issues/354 62431 URI.preventInvalidHostname = false; 62432 // state: allow duplicate query parameters (a=1&a=1) 62433 URI.duplicateQueryParameters = false; 62434 // state: replaces + with %20 (space in query strings) 62435 URI.escapeQuerySpace = true; 62436 // static properties 62437 URI.protocol_expression = /^[a-z][a-z0-9.+-]*$/i; 62438 URI.idn_expression = /[^a-z0-9\._-]/i; 62439 URI.punycode_expression = /(xn--)/i; 62440 // well, 333.444.555.666 matches, but it sure ain't no IPv4 - do we care? 62441 URI.ip4_expression = /^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/; 62442 // credits to Rich Brown 62443 // source: http://forums.intermapper.com/viewtopic.php?p=1096#1096 62444 // specification: http://www.ietf.org/rfc/rfc4291.txt 62445 URI.ip6_expression = /^\s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))(%.+)?\s*$/; 62446 // expression used is "gruber revised" (@gruber v2) determined to be the 62447 // best solution in a regex-golf we did a couple of ages ago at 62448 // * http://mathiasbynens.be/demo/url-regex 62449 // * http://rodneyrehm.de/t/url-regex.html 62450 URI.find_uri_expression = /\b((?:[a-z][\w-]+:(?:\/{1,3}|[a-z0-9%])|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}\/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:'".,<>?«»ââââ]))/ig; 62451 URI.findUri = { 62452 // valid "scheme://" or "www." 62453 start: /\b(?:([a-z][a-z0-9.+-]*:\/\/)|www\.)/gi, 62454 // everything up to the next whitespace 62455 end: /[\s\r\n]|$/, 62456 // trim trailing punctuation captured by end RegExp 62457 trim: /[`!()\[\]{};:'".,<>?«»âââââ]+$/, 62458 // balanced parens inclusion (), [], {}, <> 62459 parens: /(\([^\)]*\)|\[[^\]]*\]|\{[^}]*\}|<[^>]*>)/g, 62460 }; 62461 URI.leading_whitespace_expression = /^[\x00-\x20\u00a0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff]+/ 62462 // https://infra.spec.whatwg.org/#ascii-tab-or-newline 62463 URI.ascii_tab_whitespace = /[\u0009\u000A\u000D]+/g 62464 // http://www.iana.org/assignments/uri-schemes.html 62465 // http://en.wikipedia.org/wiki/List_of_TCP_and_UDP_port_numbers#Well-known_ports 62466 URI.defaultPorts = { 62467 http: '80', 62468 https: '443', 62469 ftp: '21', 62470 gopher: '70', 62471 ws: '80', 62472 wss: '443' 62473 }; 62474 // list of protocols which always require a hostname 62475 URI.hostProtocols = [ 62476 'http', 62477 'https' 62478 ]; 62479 62480 // allowed hostname characters according to RFC 3986 62481 // ALPHA DIGIT "-" "." "_" "~" "!" "$" "&" "'" "(" ")" "*" "+" "," ";" "=" %encoded 62482 // I've never seen a (non-IDN) hostname other than: ALPHA DIGIT . - _ 62483 URI.invalid_hostname_characters = /[^a-zA-Z0-9\.\-:_]/; 62484 // map DOM Elements to their URI attribute 62485 URI.domAttributes = { 62486 'a': 'href', 62487 'blockquote': 'cite', 62488 'link': 'href', 62489 'base': 'href', 62490 'script': 'src', 62491 'form': 'action', 62492 'img': 'src', 62493 'area': 'href', 62494 'iframe': 'src', 62495 'embed': 'src', 62496 'source': 'src', 62497 'track': 'src', 62498 'input': 'src', // but only if type="image" 62499 'audio': 'src', 62500 'video': 'src' 62501 }; 62502 URI.getDomAttribute = function(node) { 62503 if (!node || !node.nodeName) { 62504 return undefined; 62505 } 62506 62507 var nodeName = node.nodeName.toLowerCase(); 62508 // <input> should only expose src for type="image" 62509 if (nodeName === 'input' && node.type !== 'image') { 62510 return undefined; 62511 } 62512 62513 return URI.domAttributes[nodeName]; 62514 }; 62515 62516 function escapeForDumbFirefox36(value) { 62517 // https://github.com/medialize/URI.js/issues/91 62518 return escape(value); 62519 } 62520 62521 // encoding / decoding according to RFC3986 62522 function strictEncodeURIComponent(string) { 62523 // see https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/encodeURIComponent 62524 return encodeURIComponent(string) 62525 .replace(/[!'()*]/g, escapeForDumbFirefox36) 62526 .replace(/\*/g, '%2A'); 62527 } 62528 URI.encode = strictEncodeURIComponent; 62529 URI.decode = decodeURIComponent; 62530 URI.iso8859 = function() { 62531 URI.encode = escape; 62532 URI.decode = unescape; 62533 }; 62534 URI.unicode = function() { 62535 URI.encode = strictEncodeURIComponent; 62536 URI.decode = decodeURIComponent; 62537 }; 62538 URI.characters = { 62539 pathname: { 62540 encode: { 62541 // RFC3986 2.1: For consistency, URI producers and normalizers should 62542 // use uppercase hexadecimal digits for all percent-encodings. 62543 expression: /%(24|26|2B|2C|3B|3D|3A|40)/ig, 62544 map: { 62545 // -._~!'()* 62546 '%24': '$', 62547 '%26': '&', 62548 '%2B': '+', 62549 '%2C': ',', 62550 '%3B': ';', 62551 '%3D': '=', 62552 '%3A': ':', 62553 '%40': '@' 62554 } 62555 }, 62556 decode: { 62557 expression: /[\/\?#]/g, 62558 map: { 62559 '/': '%2F', 62560 '?': '%3F', 62561 '#': '%23' 62562 } 62563 } 62564 }, 62565 reserved: { 62566 encode: { 62567 // RFC3986 2.1: For consistency, URI producers and normalizers should 62568 // use uppercase hexadecimal digits for all percent-encodings. 62569 expression: /%(21|23|24|26|27|28|29|2A|2B|2C|2F|3A|3B|3D|3F|40|5B|5D)/ig, 62570 map: { 62571 // gen-delims 62572 '%3A': ':', 62573 '%2F': '/', 62574 '%3F': '?', 62575 '%23': '#', 62576 '%5B': '[', 62577 '%5D': ']', 62578 '%40': '@', 62579 // sub-delims 62580 '%21': '!', 62581 '%24': '$', 62582 '%26': '&', 62583 '%27': '\'', 62584 '%28': '(', 62585 '%29': ')', 62586 '%2A': '*', 62587 '%2B': '+', 62588 '%2C': ',', 62589 '%3B': ';', 62590 '%3D': '=' 62591 } 62592 } 62593 }, 62594 urnpath: { 62595 // The characters under `encode` are the characters called out by RFC 2141 as being acceptable 62596 // for usage in a URN. RFC2141 also calls out "-", ".", and "_" as acceptable characters, but 62597 // these aren't encoded by encodeURIComponent, so we don't have to call them out here. Also 62598 // note that the colon character is not featured in the encoding map; this is because URI.js 62599 // gives the colons in URNs semantic meaning as the delimiters of path segements, and so it 62600 // should not appear unencoded in a segment itself. 62601 // See also the note above about RFC3986 and capitalalized hex digits. 62602 encode: { 62603 expression: /%(21|24|27|28|29|2A|2B|2C|3B|3D|40)/ig, 62604 map: { 62605 '%21': '!', 62606 '%24': '$', 62607 '%27': '\'', 62608 '%28': '(', 62609 '%29': ')', 62610 '%2A': '*', 62611 '%2B': '+', 62612 '%2C': ',', 62613 '%3B': ';', 62614 '%3D': '=', 62615 '%40': '@' 62616 } 62617 }, 62618 // These characters are the characters called out by RFC2141 as "reserved" characters that 62619 // should never appear in a URN, plus the colon character (see note above). 62620 decode: { 62621 expression: /[\/\?#:]/g, 62622 map: { 62623 '/': '%2F', 62624 '?': '%3F', 62625 '#': '%23', 62626 ':': '%3A' 62627 } 62628 } 62629 } 62630 }; 62631 URI.encodeQuery = function(string, escapeQuerySpace) { 62632 var escaped = URI.encode(string + ''); 62633 if (escapeQuerySpace === undefined) { 62634 escapeQuerySpace = URI.escapeQuerySpace; 62635 } 62636 62637 return escapeQuerySpace ? escaped.replace(/%20/g, '+') : escaped; 62638 }; 62639 URI.decodeQuery = function(string, escapeQuerySpace) { 62640 string += ''; 62641 if (escapeQuerySpace === undefined) { 62642 escapeQuerySpace = URI.escapeQuerySpace; 62643 } 62644 62645 try { 62646 return URI.decode(escapeQuerySpace ? string.replace(/\+/g, '%20') : string); 62647 } catch(e) { 62648 // we're not going to mess with weird encodings, 62649 // give up and return the undecoded original string 62650 // see https://github.com/medialize/URI.js/issues/87 62651 // see https://github.com/medialize/URI.js/issues/92 62652 return string; 62653 } 62654 }; 62655 // generate encode/decode path functions 62656 var _parts = {'encode':'encode', 'decode':'decode'}; 62657 var _part; 62658 var generateAccessor = function(_group, _part) { 62659 return function(string) { 62660 try { 62661 return URI[_part](string + '').replace(URI.characters[_group][_part].expression, function(c) { 62662 return URI.characters[_group][_part].map[c]; 62663 }); 62664 } catch (e) { 62665 // we're not going to mess with weird encodings, 62666 // give up and return the undecoded original string 62667 // see https://github.com/medialize/URI.js/issues/87 62668 // see https://github.com/medialize/URI.js/issues/92 62669 return string; 62670 } 62671 }; 62672 }; 62673 62674 for (_part in _parts) { 62675 URI[_part + 'PathSegment'] = generateAccessor('pathname', _parts[_part]); 62676 URI[_part + 'UrnPathSegment'] = generateAccessor('urnpath', _parts[_part]); 62677 } 62678 62679 var generateSegmentedPathFunction = function(_sep, _codingFuncName, _innerCodingFuncName) { 62680 return function(string) { 62681 // Why pass in names of functions, rather than the function objects themselves? The 62682 // definitions of some functions (but in particular, URI.decode) will occasionally change due 62683 // to URI.js having ISO8859 and Unicode modes. Passing in the name and getting it will ensure 62684 // that the functions we use here are "fresh". 62685 var actualCodingFunc; 62686 if (!_innerCodingFuncName) { 62687 actualCodingFunc = URI[_codingFuncName]; 62688 } else { 62689 actualCodingFunc = function(string) { 62690 return URI[_codingFuncName](URI[_innerCodingFuncName](string)); 62691 }; 62692 } 62693 62694 var segments = (string + '').split(_sep); 62695 62696 for (var i = 0, length = segments.length; i < length; i++) { 62697 segments[i] = actualCodingFunc(segments[i]); 62698 } 62699 62700 return segments.join(_sep); 62701 }; 62702 }; 62703 62704 // This takes place outside the above loop because we don't want, e.g., encodeUrnPath functions. 62705 URI.decodePath = generateSegmentedPathFunction('/', 'decodePathSegment'); 62706 URI.decodeUrnPath = generateSegmentedPathFunction(':', 'decodeUrnPathSegment'); 62707 URI.recodePath = generateSegmentedPathFunction('/', 'encodePathSegment', 'decode'); 62708 URI.recodeUrnPath = generateSegmentedPathFunction(':', 'encodeUrnPathSegment', 'decode'); 62709 62710 URI.encodeReserved = generateAccessor('reserved', 'encode'); 62711 62712 URI.parse = function(string, parts) { 62713 var pos; 62714 if (!parts) { 62715 parts = { 62716 preventInvalidHostname: URI.preventInvalidHostname 62717 }; 62718 } 62719 62720 string = string.replace(URI.leading_whitespace_expression, '') 62721 // https://infra.spec.whatwg.org/#ascii-tab-or-newline 62722 string = string.replace(URI.ascii_tab_whitespace, '') 62723 62724 // [protocol"://"[username[":"password]"@"]hostname[":"port]"/"?][path]["?"querystring]["#"fragment] 62725 62726 // extract fragment 62727 pos = string.indexOf('#'); 62728 if (pos > -1) { 62729 // escaping? 62730 parts.fragment = string.substring(pos + 1) || null; 62731 string = string.substring(0, pos); 62732 } 62733 62734 // extract query 62735 pos = string.indexOf('?'); 62736 if (pos > -1) { 62737 // escaping? 62738 parts.query = string.substring(pos + 1) || null; 62739 string = string.substring(0, pos); 62740 } 62741 62742 // slashes and backslashes have lost all meaning for the web protocols (https, http, wss, ws) 62743 string = string.replace(/^(https?|ftp|wss?)?:+[/\\]*/i, '$1://'); 62744 // slashes and backslashes have lost all meaning for scheme relative URLs 62745 string = string.replace(/^[/\\]{2,}/i, '//'); 62746 62747 // extract protocol 62748 if (string.substring(0, 2) === '//') { 62749 // relative-scheme 62750 parts.protocol = null; 62751 string = string.substring(2); 62752 // extract "user:pass@host:port" 62753 string = URI.parseAuthority(string, parts); 62754 } else { 62755 pos = string.indexOf(':'); 62756 if (pos > -1) { 62757 parts.protocol = string.substring(0, pos) || null; 62758 if (parts.protocol && !parts.protocol.match(URI.protocol_expression)) { 62759 // : may be within the path 62760 parts.protocol = undefined; 62761 } else if (string.substring(pos + 1, pos + 3).replace(/\\/g, '/') === '//') { 62762 string = string.substring(pos + 3); 62763 62764 // extract "user:pass@host:port" 62765 string = URI.parseAuthority(string, parts); 62766 } else { 62767 string = string.substring(pos + 1); 62768 parts.urn = true; 62769 } 62770 } 62771 } 62772 62773 // what's left must be the path 62774 parts.path = string; 62775 62776 // and we're done 62777 return parts; 62778 }; 62779 URI.parseHost = function(string, parts) { 62780 if (!string) { 62781 string = ''; 62782 } 62783 62784 // Copy chrome, IE, opera backslash-handling behavior. 62785 // Back slashes before the query string get converted to forward slashes 62786 // See: https://github.com/joyent/node/blob/386fd24f49b0e9d1a8a076592a404168faeecc34/lib/url.js#L115-L124 62787 // See: https://code.google.com/p/chromium/issues/detail?id=25916 62788 // https://github.com/medialize/URI.js/pull/233 62789 string = string.replace(/\\/g, '/'); 62790 62791 // extract host:port 62792 var pos = string.indexOf('/'); 62793 var bracketPos; 62794 var t; 62795 62796 if (pos === -1) { 62797 pos = string.length; 62798 } 62799 62800 if (string.charAt(0) === '[') { 62801 // IPv6 host - http://tools.ietf.org/html/draft-ietf-6man-text-addr-representation-04#section-6 62802 // I claim most client software breaks on IPv6 anyways. To simplify things, URI only accepts 62803 // IPv6+port in the format [2001:db8::1]:80 (for the time being) 62804 bracketPos = string.indexOf(']'); 62805 parts.hostname = string.substring(1, bracketPos) || null; 62806 parts.port = string.substring(bracketPos + 2, pos) || null; 62807 if (parts.port === '/') { 62808 parts.port = null; 62809 } 62810 } else { 62811 var firstColon = string.indexOf(':'); 62812 var firstSlash = string.indexOf('/'); 62813 var nextColon = string.indexOf(':', firstColon + 1); 62814 if (nextColon !== -1 && (firstSlash === -1 || nextColon < firstSlash)) { 62815 // IPv6 host contains multiple colons - but no port 62816 // this notation is actually not allowed by RFC 3986, but we're a liberal parser 62817 parts.hostname = string.substring(0, pos) || null; 62818 parts.port = null; 62819 } else { 62820 t = string.substring(0, pos).split(':'); 62821 parts.hostname = t[0] || null; 62822 parts.port = t[1] || null; 62823 } 62824 } 62825 62826 if (parts.hostname && string.substring(pos).charAt(0) !== '/') { 62827 pos++; 62828 string = '/' + string; 62829 } 62830 62831 if (parts.preventInvalidHostname) { 62832 URI.ensureValidHostname(parts.hostname, parts.protocol); 62833 } 62834 62835 if (parts.port) { 62836 URI.ensureValidPort(parts.port); 62837 } 62838 62839 return string.substring(pos) || '/'; 62840 }; 62841 URI.parseAuthority = function(string, parts) { 62842 string = URI.parseUserinfo(string, parts); 62843 return URI.parseHost(string, parts); 62844 }; 62845 URI.parseUserinfo = function(string, parts) { 62846 // extract username:password 62847 var _string = string 62848 var firstBackSlash = string.indexOf('\\'); 62849 if (firstBackSlash !== -1) { 62850 string = string.replace(/\\/g, '/') 62851 } 62852 var firstSlash = string.indexOf('/'); 62853 var pos = string.lastIndexOf('@', firstSlash > -1 ? firstSlash : string.length - 1); 62854 var t; 62855 62856 // authority@ must come before /path or \path 62857 if (pos > -1 && (firstSlash === -1 || pos < firstSlash)) { 62858 t = string.substring(0, pos).split(':'); 62859 parts.username = t[0] ? URI.decode(t[0]) : null; 62860 t.shift(); 62861 parts.password = t[0] ? URI.decode(t.join(':')) : null; 62862 string = _string.substring(pos + 1); 62863 } else { 62864 parts.username = null; 62865 parts.password = null; 62866 } 62867 62868 return string; 62869 }; 62870 URI.parseQuery = function(string, escapeQuerySpace) { 62871 if (!string) { 62872 return {}; 62873 } 62874 62875 // throw out the funky business - "?"[name"="value"&"]+ 62876 string = string.replace(/&+/g, '&').replace(/^\?*&*|&+$/g, ''); 62877 62878 if (!string) { 62879 return {}; 62880 } 62881 62882 var items = {}; 62883 var splits = string.split('&'); 62884 var length = splits.length; 62885 var v, name, value; 62886 62887 for (var i = 0; i < length; i++) { 62888 v = splits[i].split('='); 62889 name = URI.decodeQuery(v.shift(), escapeQuerySpace); 62890 // no "=" is null according to http://dvcs.w3.org/hg/url/raw-file/tip/Overview.html#collect-url-parameters 62891 value = v.length ? URI.decodeQuery(v.join('='), escapeQuerySpace) : null; 62892 62893 if (name === '__proto__') { 62894 // ignore attempt at exploiting JavaScript internals 62895 continue; 62896 } else if (hasOwn.call(items, name)) { 62897 if (typeof items[name] === 'string' || items[name] === null) { 62898 items[name] = [items[name]]; 62899 } 62900 62901 items[name].push(value); 62902 } else { 62903 items[name] = value; 62904 } 62905 } 62906 62907 return items; 62908 }; 62909 62910 URI.build = function(parts) { 62911 var t = ''; 62912 var requireAbsolutePath = false 62913 62914 if (parts.protocol) { 62915 t += parts.protocol + ':'; 62916 } 62917 62918 if (!parts.urn && (t || parts.hostname)) { 62919 t += '//'; 62920 requireAbsolutePath = true 62921 } 62922 62923 t += (URI.buildAuthority(parts) || ''); 62924 62925 if (typeof parts.path === 'string') { 62926 if (parts.path.charAt(0) !== '/' && requireAbsolutePath) { 62927 t += '/'; 62928 } 62929 62930 t += parts.path; 62931 } 62932 62933 if (typeof parts.query === 'string' && parts.query) { 62934 t += '?' + parts.query; 62935 } 62936 62937 if (typeof parts.fragment === 'string' && parts.fragment) { 62938 t += '#' + parts.fragment; 62939 } 62940 return t; 62941 }; 62942 URI.buildHost = function(parts) { 62943 var t = ''; 62944 62945 if (!parts.hostname) { 62946 return ''; 62947 } else if (URI.ip6_expression.test(parts.hostname)) { 62948 t += '[' + parts.hostname + ']'; 62949 } else { 62950 t += parts.hostname; 62951 } 62952 62953 if (parts.port) { 62954 t += ':' + parts.port; 62955 } 62956 62957 return t; 62958 }; 62959 URI.buildAuthority = function(parts) { 62960 return URI.buildUserinfo(parts) + URI.buildHost(parts); 62961 }; 62962 URI.buildUserinfo = function(parts) { 62963 var t = ''; 62964 62965 if (parts.username) { 62966 t += URI.encode(parts.username); 62967 } 62968 62969 if (parts.password) { 62970 t += ':' + URI.encode(parts.password); 62971 } 62972 62973 if (t) { 62974 t += '@'; 62975 } 62976 62977 return t; 62978 }; 62979 URI.buildQuery = function(data, duplicateQueryParameters, escapeQuerySpace) { 62980 // according to http://tools.ietf.org/html/rfc3986 or http://labs.apache.org/webarch/uri/rfc/rfc3986.html 62981 // being »-._~!$&'()*+,;=:@/?« %HEX and alnum are allowed 62982 // the RFC explicitly states ?/foo being a valid use case, no mention of parameter syntax! 62983 // URI.js treats the query string as being application/x-www-form-urlencoded 62984 // see http://www.w3.org/TR/REC-html40/interact/forms.html#form-content-type 62985 62986 var t = ''; 62987 var unique, key, i, length; 62988 for (key in data) { 62989 if (key === '__proto__') { 62990 // ignore attempt at exploiting JavaScript internals 62991 continue; 62992 } else if (hasOwn.call(data, key)) { 62993 if (isArray(data[key])) { 62994 unique = {}; 62995 for (i = 0, length = data[key].length; i < length; i++) { 62996 if (data[key][i] !== undefined && unique[data[key][i] + ''] === undefined) { 62997 t += '&' + URI.buildQueryParameter(key, data[key][i], escapeQuerySpace); 62998 if (duplicateQueryParameters !== true) { 62999 unique[data[key][i] + ''] = true; 63000 } 63001 } 63002 } 63003 } else if (data[key] !== undefined) { 63004 t += '&' + URI.buildQueryParameter(key, data[key], escapeQuerySpace); 63005 } 63006 } 63007 } 63008 63009 return t.substring(1); 63010 }; 63011 URI.buildQueryParameter = function(name, value, escapeQuerySpace) { 63012 // http://www.w3.org/TR/REC-html40/interact/forms.html#form-content-type -- application/x-www-form-urlencoded 63013 // don't append "=" for null values, according to http://dvcs.w3.org/hg/url/raw-file/tip/Overview.html#url-parameter-serialization 63014 return URI.encodeQuery(name, escapeQuerySpace) + (value !== null ? '=' + URI.encodeQuery(value, escapeQuerySpace) : ''); 63015 }; 63016 63017 URI.addQuery = function(data, name, value) { 63018 if (typeof name === 'object') { 63019 for (var key in name) { 63020 if (hasOwn.call(name, key)) { 63021 URI.addQuery(data, key, name[key]); 63022 } 63023 } 63024 } else if (typeof name === 'string') { 63025 if (data[name] === undefined) { 63026 data[name] = value; 63027 return; 63028 } else if (typeof data[name] === 'string') { 63029 data[name] = [data[name]]; 63030 } 63031 63032 if (!isArray(value)) { 63033 value = [value]; 63034 } 63035 63036 data[name] = (data[name] || []).concat(value); 63037 } else { 63038 throw new TypeError('URI.addQuery() accepts an object, string as the name parameter'); 63039 } 63040 }; 63041 63042 URI.setQuery = function(data, name, value) { 63043 if (typeof name === 'object') { 63044 for (var key in name) { 63045 if (hasOwn.call(name, key)) { 63046 URI.setQuery(data, key, name[key]); 63047 } 63048 } 63049 } else if (typeof name === 'string') { 63050 data[name] = value === undefined ? null : value; 63051 } else { 63052 throw new TypeError('URI.setQuery() accepts an object, string as the name parameter'); 63053 } 63054 }; 63055 63056 URI.removeQuery = function(data, name, value) { 63057 var i, length, key; 63058 63059 if (isArray(name)) { 63060 for (i = 0, length = name.length; i < length; i++) { 63061 data[name[i]] = undefined; 63062 } 63063 } else if (getType(name) === 'RegExp') { 63064 for (key in data) { 63065 if (name.test(key)) { 63066 data[key] = undefined; 63067 } 63068 } 63069 } else if (typeof name === 'object') { 63070 for (key in name) { 63071 if (hasOwn.call(name, key)) { 63072 URI.removeQuery(data, key, name[key]); 63073 } 63074 } 63075 } else if (typeof name === 'string') { 63076 if (value !== undefined) { 63077 if (getType(value) === 'RegExp') { 63078 if (!isArray(data[name]) && value.test(data[name])) { 63079 data[name] = undefined; 63080 } else { 63081 data[name] = filterArrayValues(data[name], value); 63082 } 63083 } else if (data[name] === String(value) && (!isArray(value) || value.length === 1)) { 63084 data[name] = undefined; 63085 } else if (isArray(data[name])) { 63086 data[name] = filterArrayValues(data[name], value); 63087 } 63088 } else { 63089 data[name] = undefined; 63090 } 63091 } else { 63092 throw new TypeError('URI.removeQuery() accepts an object, string, RegExp as the first parameter'); 63093 } 63094 }; 63095 URI.hasQuery = function(data, name, value, withinArray) { 63096 switch (getType(name)) { 63097 case 'String': 63098 // Nothing to do here 63099 break; 63100 63101 case 'RegExp': 63102 for (var key in data) { 63103 if (hasOwn.call(data, key)) { 63104 if (name.test(key) && (value === undefined || URI.hasQuery(data, key, value))) { 63105 return true; 63106 } 63107 } 63108 } 63109 63110 return false; 63111 63112 case 'Object': 63113 for (var _key in name) { 63114 if (hasOwn.call(name, _key)) { 63115 if (!URI.hasQuery(data, _key, name[_key])) { 63116 return false; 63117 } 63118 } 63119 } 63120 63121 return true; 63122 63123 default: 63124 throw new TypeError('URI.hasQuery() accepts a string, regular expression or object as the name parameter'); 63125 } 63126 63127 switch (getType(value)) { 63128 case 'Undefined': 63129 // true if exists (but may be empty) 63130 return name in data; // data[name] !== undefined; 63131 63132 case 'Boolean': 63133 // true if exists and non-empty 63134 var _booly = Boolean(isArray(data[name]) ? data[name].length : data[name]); 63135 return value === _booly; 63136 63137 case 'Function': 63138 // allow complex comparison 63139 return !!value(data[name], name, data); 63140 63141 case 'Array': 63142 if (!isArray(data[name])) { 63143 return false; 63144 } 63145 63146 var op = withinArray ? arrayContains : arraysEqual; 63147 return op(data[name], value); 63148 63149 case 'RegExp': 63150 if (!isArray(data[name])) { 63151 return Boolean(data[name] && data[name].match(value)); 63152 } 63153 63154 if (!withinArray) { 63155 return false; 63156 } 63157 63158 return arrayContains(data[name], value); 63159 63160 case 'Number': 63161 value = String(value); 63162 /* falls through */ 63163 case 'String': 63164 if (!isArray(data[name])) { 63165 return data[name] === value; 63166 } 63167 63168 if (!withinArray) { 63169 return false; 63170 } 63171 63172 return arrayContains(data[name], value); 63173 63174 default: 63175 throw new TypeError('URI.hasQuery() accepts undefined, boolean, string, number, RegExp, Function as the value parameter'); 63176 } 63177 }; 63178 63179 63180 URI.joinPaths = function() { 63181 var input = []; 63182 var segments = []; 63183 var nonEmptySegments = 0; 63184 63185 for (var i = 0; i < arguments.length; i++) { 63186 var url = new URI(arguments[i]); 63187 input.push(url); 63188 var _segments = url.segment(); 63189 for (var s = 0; s < _segments.length; s++) { 63190 if (typeof _segments[s] === 'string') { 63191 segments.push(_segments[s]); 63192 } 63193 63194 if (_segments[s]) { 63195 nonEmptySegments++; 63196 } 63197 } 63198 } 63199 63200 if (!segments.length || !nonEmptySegments) { 63201 return new URI(''); 63202 } 63203 63204 var uri = new URI('').segment(segments); 63205 63206 if (input[0].path() === '' || input[0].path().slice(0, 1) === '/') { 63207 uri.path('/' + uri.path()); 63208 } 63209 63210 return uri.normalize(); 63211 }; 63212 63213 URI.commonPath = function(one, two) { 63214 var length = Math.min(one.length, two.length); 63215 var pos; 63216 63217 // find first non-matching character 63218 for (pos = 0; pos < length; pos++) { 63219 if (one.charAt(pos) !== two.charAt(pos)) { 63220 pos--; 63221 break; 63222 } 63223 } 63224 63225 if (pos < 1) { 63226 return one.charAt(0) === two.charAt(0) && one.charAt(0) === '/' ? '/' : ''; 63227 } 63228 63229 // revert to last / 63230 if (one.charAt(pos) !== '/' || two.charAt(pos) !== '/') { 63231 pos = one.substring(0, pos).lastIndexOf('/'); 63232 } 63233 63234 return one.substring(0, pos + 1); 63235 }; 63236 63237 URI.withinString = function(string, callback, options) { 63238 options || (options = {}); 63239 var _start = options.start || URI.findUri.start; 63240 var _end = options.end || URI.findUri.end; 63241 var _trim = options.trim || URI.findUri.trim; 63242 var _parens = options.parens || URI.findUri.parens; 63243 var _attributeOpen = /[a-z0-9-]=["']?$/i; 63244 63245 _start.lastIndex = 0; 63246 while (true) { 63247 var match = _start.exec(string); 63248 if (!match) { 63249 break; 63250 } 63251 63252 var start = match.index; 63253 if (options.ignoreHtml) { 63254 // attribut(e=["']?$) 63255 var attributeOpen = string.slice(Math.max(start - 3, 0), start); 63256 if (attributeOpen && _attributeOpen.test(attributeOpen)) { 63257 continue; 63258 } 63259 } 63260 63261 var end = start + string.slice(start).search(_end); 63262 var slice = string.slice(start, end); 63263 // make sure we include well balanced parens 63264 var parensEnd = -1; 63265 while (true) { 63266 var parensMatch = _parens.exec(slice); 63267 if (!parensMatch) { 63268 break; 63269 } 63270 63271 var parensMatchEnd = parensMatch.index + parensMatch[0].length; 63272 parensEnd = Math.max(parensEnd, parensMatchEnd); 63273 } 63274 63275 if (parensEnd > -1) { 63276 slice = slice.slice(0, parensEnd) + slice.slice(parensEnd).replace(_trim, ''); 63277 } else { 63278 slice = slice.replace(_trim, ''); 63279 } 63280 63281 if (slice.length <= match[0].length) { 63282 // the extract only contains the starting marker of a URI, 63283 // e.g. "www" or "http://" 63284 continue; 63285 } 63286 63287 if (options.ignore && options.ignore.test(slice)) { 63288 continue; 63289 } 63290 63291 end = start + slice.length; 63292 var result = callback(slice, start, end, string); 63293 if (result === undefined) { 63294 _start.lastIndex = end; 63295 continue; 63296 } 63297 63298 result = String(result); 63299 string = string.slice(0, start) + result + string.slice(end); 63300 _start.lastIndex = start + result.length; 63301 } 63302 63303 _start.lastIndex = 0; 63304 return string; 63305 }; 63306 63307 URI.ensureValidHostname = function(v, protocol) { 63308 // Theoretically URIs allow percent-encoding in Hostnames (according to RFC 3986) 63309 // they are not part of DNS and therefore ignored by URI.js 63310 63311 var hasHostname = !!v; // not null and not an empty string 63312 var hasProtocol = !!protocol; 63313 var rejectEmptyHostname = false; 63314 63315 if (hasProtocol) { 63316 rejectEmptyHostname = arrayContains(URI.hostProtocols, protocol); 63317 } 63318 63319 if (rejectEmptyHostname && !hasHostname) { 63320 throw new TypeError('Hostname cannot be empty, if protocol is ' + protocol); 63321 } else if (v && v.match(URI.invalid_hostname_characters)) { 63322 // test punycode 63323 if (!punycode) { 63324 throw new TypeError('Hostname "' + v + '" contains characters other than [A-Z0-9.-:_] and Punycode.js is not available'); 63325 } 63326 if (punycode.toASCII(v).match(URI.invalid_hostname_characters)) { 63327 throw new TypeError('Hostname "' + v + '" contains characters other than [A-Z0-9.-:_]'); 63328 } 63329 } 63330 }; 63331 63332 URI.ensureValidPort = function (v) { 63333 if (!v) { 63334 return; 63335 } 63336 63337 var port = Number(v); 63338 if (isInteger(port) && (port > 0) && (port < 65536)) { 63339 return; 63340 } 63341 63342 throw new TypeError('Port "' + v + '" is not a valid port'); 63343 }; 63344 63345 // noConflict 63346 URI.noConflict = function(removeAll) { 63347 if (removeAll) { 63348 var unconflicted = { 63349 URI: this.noConflict() 63350 }; 63351 63352 if (root.URITemplate && typeof root.URITemplate.noConflict === 'function') { 63353 unconflicted.URITemplate = root.URITemplate.noConflict(); 63354 } 63355 63356 if (root.IPv6 && typeof root.IPv6.noConflict === 'function') { 63357 unconflicted.IPv6 = root.IPv6.noConflict(); 63358 } 63359 63360 if (root.SecondLevelDomains && typeof root.SecondLevelDomains.noConflict === 'function') { 63361 unconflicted.SecondLevelDomains = root.SecondLevelDomains.noConflict(); 63362 } 63363 63364 return unconflicted; 63365 } else if (root.URI === this) { 63366 root.URI = _URI; 63367 } 63368 63369 return this; 63370 }; 63371 63372 p.build = function(deferBuild) { 63373 if (deferBuild === true) { 63374 this._deferred_build = true; 63375 } else if (deferBuild === undefined || this._deferred_build) { 63376 this._string = URI.build(this._parts); 63377 this._deferred_build = false; 63378 } 63379 63380 return this; 63381 }; 63382 63383 p.clone = function() { 63384 return new URI(this); 63385 }; 63386 63387 p.valueOf = p.toString = function() { 63388 return this.build(false)._string; 63389 }; 63390 63391 63392 function generateSimpleAccessor(_part){ 63393 return function(v, build) { 63394 if (v === undefined) { 63395 return this._parts[_part] || ''; 63396 } else { 63397 this._parts[_part] = v || null; 63398 this.build(!build); 63399 return this; 63400 } 63401 }; 63402 } 63403 63404 function generatePrefixAccessor(_part, _key){ 63405 return function(v, build) { 63406 if (v === undefined) { 63407 return this._parts[_part] || ''; 63408 } else { 63409 if (v !== null) { 63410 v = v + ''; 63411 if (v.charAt(0) === _key) { 63412 v = v.substring(1); 63413 } 63414 } 63415 63416 this._parts[_part] = v; 63417 this.build(!build); 63418 return this; 63419 } 63420 }; 63421 } 63422 63423 p.protocol = generateSimpleAccessor('protocol'); 63424 p.username = generateSimpleAccessor('username'); 63425 p.password = generateSimpleAccessor('password'); 63426 p.hostname = generateSimpleAccessor('hostname'); 63427 p.port = generateSimpleAccessor('port'); 63428 p.query = generatePrefixAccessor('query', '?'); 63429 p.fragment = generatePrefixAccessor('fragment', '#'); 63430 63431 p.search = function(v, build) { 63432 var t = this.query(v, build); 63433 return typeof t === 'string' && t.length ? ('?' + t) : t; 63434 }; 63435 p.hash = function(v, build) { 63436 var t = this.fragment(v, build); 63437 return typeof t === 'string' && t.length ? ('#' + t) : t; 63438 }; 63439 63440 p.pathname = function(v, build) { 63441 if (v === undefined || v === true) { 63442 var res = this._parts.path || (this._parts.hostname ? '/' : ''); 63443 return v ? (this._parts.urn ? URI.decodeUrnPath : URI.decodePath)(res) : res; 63444 } else { 63445 if (this._parts.urn) { 63446 this._parts.path = v ? URI.recodeUrnPath(v) : ''; 63447 } else { 63448 this._parts.path = v ? URI.recodePath(v) : '/'; 63449 } 63450 this.build(!build); 63451 return this; 63452 } 63453 }; 63454 p.path = p.pathname; 63455 p.href = function(href, build) { 63456 var key; 63457 63458 if (href === undefined) { 63459 return this.toString(); 63460 } 63461 63462 this._string = ''; 63463 this._parts = URI._parts(); 63464 63465 var _URI = href instanceof URI; 63466 var _object = typeof href === 'object' && (href.hostname || href.path || href.pathname); 63467 if (href.nodeName) { 63468 var attribute = URI.getDomAttribute(href); 63469 href = href[attribute] || ''; 63470 _object = false; 63471 } 63472 63473 // window.location is reported to be an object, but it's not the sort 63474 // of object we're looking for: 63475 // * location.protocol ends with a colon 63476 // * location.query != object.search 63477 // * location.hash != object.fragment 63478 // simply serializing the unknown object should do the trick 63479 // (for location, not for everything...) 63480 if (!_URI && _object && href.pathname !== undefined) { 63481 href = href.toString(); 63482 } 63483 63484 if (typeof href === 'string' || href instanceof String) { 63485 this._parts = URI.parse(String(href), this._parts); 63486 } else if (_URI || _object) { 63487 var src = _URI ? href._parts : href; 63488 for (key in src) { 63489 if (key === 'query') { continue; } 63490 if (hasOwn.call(this._parts, key)) { 63491 this._parts[key] = src[key]; 63492 } 63493 } 63494 if (src.query) { 63495 this.query(src.query, false); 63496 } 63497 } else { 63498 throw new TypeError('invalid input'); 63499 } 63500 63501 this.build(!build); 63502 return this; 63503 }; 63504 63505 // identification accessors 63506 p.is = function(what) { 63507 var ip = false; 63508 var ip4 = false; 63509 var ip6 = false; 63510 var name = false; 63511 var sld = false; 63512 var idn = false; 63513 var punycode = false; 63514 var relative = !this._parts.urn; 63515 63516 if (this._parts.hostname) { 63517 relative = false; 63518 ip4 = URI.ip4_expression.test(this._parts.hostname); 63519 ip6 = URI.ip6_expression.test(this._parts.hostname); 63520 ip = ip4 || ip6; 63521 name = !ip; 63522 sld = name && SLD && SLD.has(this._parts.hostname); 63523 idn = name && URI.idn_expression.test(this._parts.hostname); 63524 punycode = name && URI.punycode_expression.test(this._parts.hostname); 63525 } 63526 63527 switch (what.toLowerCase()) { 63528 case 'relative': 63529 return relative; 63530 63531 case 'absolute': 63532 return !relative; 63533 63534 // hostname identification 63535 case 'domain': 63536 case 'name': 63537 return name; 63538 63539 case 'sld': 63540 return sld; 63541 63542 case 'ip': 63543 return ip; 63544 63545 case 'ip4': 63546 case 'ipv4': 63547 case 'inet4': 63548 return ip4; 63549 63550 case 'ip6': 63551 case 'ipv6': 63552 case 'inet6': 63553 return ip6; 63554 63555 case 'idn': 63556 return idn; 63557 63558 case 'url': 63559 return !this._parts.urn; 63560 63561 case 'urn': 63562 return !!this._parts.urn; 63563 63564 case 'punycode': 63565 return punycode; 63566 } 63567 63568 return null; 63569 }; 63570 63571 // component specific input validation 63572 var _protocol = p.protocol; 63573 var _port = p.port; 63574 var _hostname = p.hostname; 63575 63576 p.protocol = function(v, build) { 63577 if (v) { 63578 // accept trailing :// 63579 v = v.replace(/:(\/\/)?$/, ''); 63580 63581 if (!v.match(URI.protocol_expression)) { 63582 throw new TypeError('Protocol "' + v + '" contains characters other than [A-Z0-9.+-] or doesn\'t start with [A-Z]'); 63583 } 63584 } 63585 63586 return _protocol.call(this, v, build); 63587 }; 63588 p.scheme = p.protocol; 63589 p.port = function(v, build) { 63590 if (this._parts.urn) { 63591 return v === undefined ? '' : this; 63592 } 63593 63594 if (v !== undefined) { 63595 if (v === 0) { 63596 v = null; 63597 } 63598 63599 if (v) { 63600 v += ''; 63601 if (v.charAt(0) === ':') { 63602 v = v.substring(1); 63603 } 63604 63605 URI.ensureValidPort(v); 63606 } 63607 } 63608 return _port.call(this, v, build); 63609 }; 63610 p.hostname = function(v, build) { 63611 if (this._parts.urn) { 63612 return v === undefined ? '' : this; 63613 } 63614 63615 if (v !== undefined) { 63616 var x = { preventInvalidHostname: this._parts.preventInvalidHostname }; 63617 var res = URI.parseHost(v, x); 63618 if (res !== '/') { 63619 throw new TypeError('Hostname "' + v + '" contains characters other than [A-Z0-9.-]'); 63620 } 63621 63622 v = x.hostname; 63623 if (this._parts.preventInvalidHostname) { 63624 URI.ensureValidHostname(v, this._parts.protocol); 63625 } 63626 } 63627 63628 return _hostname.call(this, v, build); 63629 }; 63630 63631 // compound accessors 63632 p.origin = function(v, build) { 63633 if (this._parts.urn) { 63634 return v === undefined ? '' : this; 63635 } 63636 63637 if (v === undefined) { 63638 var protocol = this.protocol(); 63639 var authority = this.authority(); 63640 if (!authority) { 63641 return ''; 63642 } 63643 63644 return (protocol ? protocol + '://' : '') + this.authority(); 63645 } else { 63646 var origin = URI(v); 63647 this 63648 .protocol(origin.protocol()) 63649 .authority(origin.authority()) 63650 .build(!build); 63651 return this; 63652 } 63653 }; 63654 p.host = function(v, build) { 63655 if (this._parts.urn) { 63656 return v === undefined ? '' : this; 63657 } 63658 63659 if (v === undefined) { 63660 return this._parts.hostname ? URI.buildHost(this._parts) : ''; 63661 } else { 63662 var res = URI.parseHost(v, this._parts); 63663 if (res !== '/') { 63664 throw new TypeError('Hostname "' + v + '" contains characters other than [A-Z0-9.-]'); 63665 } 63666 63667 this.build(!build); 63668 return this; 63669 } 63670 }; 63671 p.authority = function(v, build) { 63672 if (this._parts.urn) { 63673 return v === undefined ? '' : this; 63674 } 63675 63676 if (v === undefined) { 63677 return this._parts.hostname ? URI.buildAuthority(this._parts) : ''; 63678 } else { 63679 var res = URI.parseAuthority(v, this._parts); 63680 if (res !== '/') { 63681 throw new TypeError('Hostname "' + v + '" contains characters other than [A-Z0-9.-]'); 63682 } 63683 63684 this.build(!build); 63685 return this; 63686 } 63687 }; 63688 p.userinfo = function(v, build) { 63689 if (this._parts.urn) { 63690 return v === undefined ? '' : this; 63691 } 63692 63693 if (v === undefined) { 63694 var t = URI.buildUserinfo(this._parts); 63695 return t ? t.substring(0, t.length -1) : t; 63696 } else { 63697 if (v[v.length-1] !== '@') { 63698 v += '@'; 63699 } 63700 63701 URI.parseUserinfo(v, this._parts); 63702 this.build(!build); 63703 return this; 63704 } 63705 }; 63706 p.resource = function(v, build) { 63707 var parts; 63708 63709 if (v === undefined) { 63710 return this.path() + this.search() + this.hash(); 63711 } 63712 63713 parts = URI.parse(v); 63714 this._parts.path = parts.path; 63715 this._parts.query = parts.query; 63716 this._parts.fragment = parts.fragment; 63717 this.build(!build); 63718 return this; 63719 }; 63720 63721 // fraction accessors 63722 p.subdomain = function(v, build) { 63723 if (this._parts.urn) { 63724 return v === undefined ? '' : this; 63725 } 63726 63727 // convenience, return "www" from "www.example.org" 63728 if (v === undefined) { 63729 if (!this._parts.hostname || this.is('IP')) { 63730 return ''; 63731 } 63732 63733 // grab domain and add another segment 63734 var end = this._parts.hostname.length - this.domain().length - 1; 63735 return this._parts.hostname.substring(0, end) || ''; 63736 } else { 63737 var e = this._parts.hostname.length - this.domain().length; 63738 var sub = this._parts.hostname.substring(0, e); 63739 var replace = new RegExp('^' + escapeRegEx(sub)); 63740 63741 if (v && v.charAt(v.length - 1) !== '.') { 63742 v += '.'; 63743 } 63744 63745 if (v.indexOf(':') !== -1) { 63746 throw new TypeError('Domains cannot contain colons'); 63747 } 63748 63749 if (v) { 63750 URI.ensureValidHostname(v, this._parts.protocol); 63751 } 63752 63753 this._parts.hostname = this._parts.hostname.replace(replace, v); 63754 this.build(!build); 63755 return this; 63756 } 63757 }; 63758 p.domain = function(v, build) { 63759 if (this._parts.urn) { 63760 return v === undefined ? '' : this; 63761 } 63762 63763 if (typeof v === 'boolean') { 63764 build = v; 63765 v = undefined; 63766 } 63767 63768 // convenience, return "example.org" from "www.example.org" 63769 if (v === undefined) { 63770 if (!this._parts.hostname || this.is('IP')) { 63771 return ''; 63772 } 63773 63774 // if hostname consists of 1 or 2 segments, it must be the domain 63775 var t = this._parts.hostname.match(/\./g); 63776 if (t && t.length < 2) { 63777 return this._parts.hostname; 63778 } 63779 63780 // grab tld and add another segment 63781 var end = this._parts.hostname.length - this.tld(build).length - 1; 63782 end = this._parts.hostname.lastIndexOf('.', end -1) + 1; 63783 return this._parts.hostname.substring(end) || ''; 63784 } else { 63785 if (!v) { 63786 throw new TypeError('cannot set domain empty'); 63787 } 63788 63789 if (v.indexOf(':') !== -1) { 63790 throw new TypeError('Domains cannot contain colons'); 63791 } 63792 63793 URI.ensureValidHostname(v, this._parts.protocol); 63794 63795 if (!this._parts.hostname || this.is('IP')) { 63796 this._parts.hostname = v; 63797 } else { 63798 var replace = new RegExp(escapeRegEx(this.domain()) + '$'); 63799 this._parts.hostname = this._parts.hostname.replace(replace, v); 63800 } 63801 63802 this.build(!build); 63803 return this; 63804 } 63805 }; 63806 p.tld = function(v, build) { 63807 if (this._parts.urn) { 63808 return v === undefined ? '' : this; 63809 } 63810 63811 if (typeof v === 'boolean') { 63812 build = v; 63813 v = undefined; 63814 } 63815 63816 // return "org" from "www.example.org" 63817 if (v === undefined) { 63818 if (!this._parts.hostname || this.is('IP')) { 63819 return ''; 63820 } 63821 63822 var pos = this._parts.hostname.lastIndexOf('.'); 63823 var tld = this._parts.hostname.substring(pos + 1); 63824 63825 if (build !== true && SLD && SLD.list[tld.toLowerCase()]) { 63826 return SLD.get(this._parts.hostname) || tld; 63827 } 63828 63829 return tld; 63830 } else { 63831 var replace; 63832 63833 if (!v) { 63834 throw new TypeError('cannot set TLD empty'); 63835 } else if (v.match(/[^a-zA-Z0-9-]/)) { 63836 if (SLD && SLD.is(v)) { 63837 replace = new RegExp(escapeRegEx(this.tld()) + '$'); 63838 this._parts.hostname = this._parts.hostname.replace(replace, v); 63839 } else { 63840 throw new TypeError('TLD "' + v + '" contains characters other than [A-Z0-9]'); 63841 } 63842 } else if (!this._parts.hostname || this.is('IP')) { 63843 throw new ReferenceError('cannot set TLD on non-domain host'); 63844 } else { 63845 replace = new RegExp(escapeRegEx(this.tld()) + '$'); 63846 this._parts.hostname = this._parts.hostname.replace(replace, v); 63847 } 63848 63849 this.build(!build); 63850 return this; 63851 } 63852 }; 63853 p.directory = function(v, build) { 63854 if (this._parts.urn) { 63855 return v === undefined ? '' : this; 63856 } 63857 63858 if (v === undefined || v === true) { 63859 if (!this._parts.path && !this._parts.hostname) { 63860 return ''; 63861 } 63862 63863 if (this._parts.path === '/') { 63864 return '/'; 63865 } 63866 63867 var end = this._parts.path.length - this.filename().length - 1; 63868 var res = this._parts.path.substring(0, end) || (this._parts.hostname ? '/' : ''); 63869 63870 return v ? URI.decodePath(res) : res; 63871 63872 } else { 63873 var e = this._parts.path.length - this.filename().length; 63874 var directory = this._parts.path.substring(0, e); 63875 var replace = new RegExp('^' + escapeRegEx(directory)); 63876 63877 // fully qualifier directories begin with a slash 63878 if (!this.is('relative')) { 63879 if (!v) { 63880 v = '/'; 63881 } 63882 63883 if (v.charAt(0) !== '/') { 63884 v = '/' + v; 63885 } 63886 } 63887 63888 // directories always end with a slash 63889 if (v && v.charAt(v.length - 1) !== '/') { 63890 v += '/'; 63891 } 63892 63893 v = URI.recodePath(v); 63894 this._parts.path = this._parts.path.replace(replace, v); 63895 this.build(!build); 63896 return this; 63897 } 63898 }; 63899 p.filename = function(v, build) { 63900 if (this._parts.urn) { 63901 return v === undefined ? '' : this; 63902 } 63903 63904 if (typeof v !== 'string') { 63905 if (!this._parts.path || this._parts.path === '/') { 63906 return ''; 63907 } 63908 63909 var pos = this._parts.path.lastIndexOf('/'); 63910 var res = this._parts.path.substring(pos+1); 63911 63912 return v ? URI.decodePathSegment(res) : res; 63913 } else { 63914 var mutatedDirectory = false; 63915 63916 if (v.charAt(0) === '/') { 63917 v = v.substring(1); 63918 } 63919 63920 if (v.match(/\.?\//)) { 63921 mutatedDirectory = true; 63922 } 63923 63924 var replace = new RegExp(escapeRegEx(this.filename()) + '$'); 63925 v = URI.recodePath(v); 63926 this._parts.path = this._parts.path.replace(replace, v); 63927 63928 if (mutatedDirectory) { 63929 this.normalizePath(build); 63930 } else { 63931 this.build(!build); 63932 } 63933 63934 return this; 63935 } 63936 }; 63937 p.suffix = function(v, build) { 63938 if (this._parts.urn) { 63939 return v === undefined ? '' : this; 63940 } 63941 63942 if (v === undefined || v === true) { 63943 if (!this._parts.path || this._parts.path === '/') { 63944 return ''; 63945 } 63946 63947 var filename = this.filename(); 63948 var pos = filename.lastIndexOf('.'); 63949 var s, res; 63950 63951 if (pos === -1) { 63952 return ''; 63953 } 63954 63955 // suffix may only contain alnum characters (yup, I made this up.) 63956 s = filename.substring(pos+1); 63957 res = (/^[a-z0-9%]+$/i).test(s) ? s : ''; 63958 return v ? URI.decodePathSegment(res) : res; 63959 } else { 63960 if (v.charAt(0) === '.') { 63961 v = v.substring(1); 63962 } 63963 63964 var suffix = this.suffix(); 63965 var replace; 63966 63967 if (!suffix) { 63968 if (!v) { 63969 return this; 63970 } 63971 63972 this._parts.path += '.' + URI.recodePath(v); 63973 } else if (!v) { 63974 replace = new RegExp(escapeRegEx('.' + suffix) + '$'); 63975 } else { 63976 replace = new RegExp(escapeRegEx(suffix) + '$'); 63977 } 63978 63979 if (replace) { 63980 v = URI.recodePath(v); 63981 this._parts.path = this._parts.path.replace(replace, v); 63982 } 63983 63984 this.build(!build); 63985 return this; 63986 } 63987 }; 63988 p.segment = function(segment, v, build) { 63989 var separator = this._parts.urn ? ':' : '/'; 63990 var path = this.path(); 63991 var absolute = path.substring(0, 1) === '/'; 63992 var segments = path.split(separator); 63993 63994 if (segment !== undefined && typeof segment !== 'number') { 63995 build = v; 63996 v = segment; 63997 segment = undefined; 63998 } 63999 64000 if (segment !== undefined && typeof segment !== 'number') { 64001 throw new Error('Bad segment "' + segment + '", must be 0-based integer'); 64002 } 64003 64004 if (absolute) { 64005 segments.shift(); 64006 } 64007 64008 if (segment < 0) { 64009 // allow negative indexes to address from the end 64010 segment = Math.max(segments.length + segment, 0); 64011 } 64012 64013 if (v === undefined) { 64014 /*jshint laxbreak: true */ 64015 return segment === undefined 64016 ? segments 64017 : segments[segment]; 64018 /*jshint laxbreak: false */ 64019 } else if (segment === null || segments[segment] === undefined) { 64020 if (isArray(v)) { 64021 segments = []; 64022 // collapse empty elements within array 64023 for (var i=0, l=v.length; i < l; i++) { 64024 if (!v[i].length && (!segments.length || !segments[segments.length -1].length)) { 64025 continue; 64026 } 64027 64028 if (segments.length && !segments[segments.length -1].length) { 64029 segments.pop(); 64030 } 64031 64032 segments.push(trimSlashes(v[i])); 64033 } 64034 } else if (v || typeof v === 'string') { 64035 v = trimSlashes(v); 64036 if (segments[segments.length -1] === '') { 64037 // empty trailing elements have to be overwritten 64038 // to prevent results such as /foo//bar 64039 segments[segments.length -1] = v; 64040 } else { 64041 segments.push(v); 64042 } 64043 } 64044 } else { 64045 if (v) { 64046 segments[segment] = trimSlashes(v); 64047 } else { 64048 segments.splice(segment, 1); 64049 } 64050 } 64051 64052 if (absolute) { 64053 segments.unshift(''); 64054 } 64055 64056 return this.path(segments.join(separator), build); 64057 }; 64058 p.segmentCoded = function(segment, v, build) { 64059 var segments, i, l; 64060 64061 if (typeof segment !== 'number') { 64062 build = v; 64063 v = segment; 64064 segment = undefined; 64065 } 64066 64067 if (v === undefined) { 64068 segments = this.segment(segment, v, build); 64069 if (!isArray(segments)) { 64070 segments = segments !== undefined ? URI.decode(segments) : undefined; 64071 } else { 64072 for (i = 0, l = segments.length; i < l; i++) { 64073 segments[i] = URI.decode(segments[i]); 64074 } 64075 } 64076 64077 return segments; 64078 } 64079 64080 if (!isArray(v)) { 64081 v = (typeof v === 'string' || v instanceof String) ? URI.encode(v) : v; 64082 } else { 64083 for (i = 0, l = v.length; i < l; i++) { 64084 v[i] = URI.encode(v[i]); 64085 } 64086 } 64087 64088 return this.segment(segment, v, build); 64089 }; 64090 64091 // mutating query string 64092 var q = p.query; 64093 p.query = function(v, build) { 64094 if (v === true) { 64095 return URI.parseQuery(this._parts.query, this._parts.escapeQuerySpace); 64096 } else if (typeof v === 'function') { 64097 var data = URI.parseQuery(this._parts.query, this._parts.escapeQuerySpace); 64098 var result = v.call(this, data); 64099 this._parts.query = URI.buildQuery(result || data, this._parts.duplicateQueryParameters, this._parts.escapeQuerySpace); 64100 this.build(!build); 64101 return this; 64102 } else if (v !== undefined && typeof v !== 'string') { 64103 this._parts.query = URI.buildQuery(v, this._parts.duplicateQueryParameters, this._parts.escapeQuerySpace); 64104 this.build(!build); 64105 return this; 64106 } else { 64107 return q.call(this, v, build); 64108 } 64109 }; 64110 p.setQuery = function(name, value, build) { 64111 var data = URI.parseQuery(this._parts.query, this._parts.escapeQuerySpace); 64112 64113 if (typeof name === 'string' || name instanceof String) { 64114 data[name] = value !== undefined ? value : null; 64115 } else if (typeof name === 'object') { 64116 for (var key in name) { 64117 if (hasOwn.call(name, key)) { 64118 data[key] = name[key]; 64119 } 64120 } 64121 } else { 64122 throw new TypeError('URI.addQuery() accepts an object, string as the name parameter'); 64123 } 64124 64125 this._parts.query = URI.buildQuery(data, this._parts.duplicateQueryParameters, this._parts.escapeQuerySpace); 64126 if (typeof name !== 'string') { 64127 build = value; 64128 } 64129 64130 this.build(!build); 64131 return this; 64132 }; 64133 p.addQuery = function(name, value, build) { 64134 var data = URI.parseQuery(this._parts.query, this._parts.escapeQuerySpace); 64135 URI.addQuery(data, name, value === undefined ? null : value); 64136 this._parts.query = URI.buildQuery(data, this._parts.duplicateQueryParameters, this._parts.escapeQuerySpace); 64137 if (typeof name !== 'string') { 64138 build = value; 64139 } 64140 64141 this.build(!build); 64142 return this; 64143 }; 64144 p.removeQuery = function(name, value, build) { 64145 var data = URI.parseQuery(this._parts.query, this._parts.escapeQuerySpace); 64146 URI.removeQuery(data, name, value); 64147 this._parts.query = URI.buildQuery(data, this._parts.duplicateQueryParameters, this._parts.escapeQuerySpace); 64148 if (typeof name !== 'string') { 64149 build = value; 64150 } 64151 64152 this.build(!build); 64153 return this; 64154 }; 64155 p.hasQuery = function(name, value, withinArray) { 64156 var data = URI.parseQuery(this._parts.query, this._parts.escapeQuerySpace); 64157 return URI.hasQuery(data, name, value, withinArray); 64158 }; 64159 p.setSearch = p.setQuery; 64160 p.addSearch = p.addQuery; 64161 p.removeSearch = p.removeQuery; 64162 p.hasSearch = p.hasQuery; 64163 64164 // sanitizing URLs 64165 p.normalize = function() { 64166 if (this._parts.urn) { 64167 return this 64168 .normalizeProtocol(false) 64169 .normalizePath(false) 64170 .normalizeQuery(false) 64171 .normalizeFragment(false) 64172 .build(); 64173 } 64174 64175 return this 64176 .normalizeProtocol(false) 64177 .normalizeHostname(false) 64178 .normalizePort(false) 64179 .normalizePath(false) 64180 .normalizeQuery(false) 64181 .normalizeFragment(false) 64182 .build(); 64183 }; 64184 p.normalizeProtocol = function(build) { 64185 if (typeof this._parts.protocol === 'string') { 64186 this._parts.protocol = this._parts.protocol.toLowerCase(); 64187 this.build(!build); 64188 } 64189 64190 return this; 64191 }; 64192 p.normalizeHostname = function(build) { 64193 if (this._parts.hostname) { 64194 if (this.is('IDN') && punycode) { 64195 this._parts.hostname = punycode.toASCII(this._parts.hostname); 64196 } else if (this.is('IPv6') && IPv6) { 64197 this._parts.hostname = IPv6.best(this._parts.hostname); 64198 } 64199 64200 this._parts.hostname = this._parts.hostname.toLowerCase(); 64201 this.build(!build); 64202 } 64203 64204 return this; 64205 }; 64206 p.normalizePort = function(build) { 64207 // remove port of it's the protocol's default 64208 if (typeof this._parts.protocol === 'string' && this._parts.port === URI.defaultPorts[this._parts.protocol]) { 64209 this._parts.port = null; 64210 this.build(!build); 64211 } 64212 64213 return this; 64214 }; 64215 p.normalizePath = function(build) { 64216 var _path = this._parts.path; 64217 if (!_path) { 64218 return this; 64219 } 64220 64221 if (this._parts.urn) { 64222 this._parts.path = URI.recodeUrnPath(this._parts.path); 64223 this.build(!build); 64224 return this; 64225 } 64226 64227 if (this._parts.path === '/') { 64228 return this; 64229 } 64230 64231 _path = URI.recodePath(_path); 64232 64233 var _was_relative; 64234 var _leadingParents = ''; 64235 var _parent, _pos; 64236 64237 // handle relative paths 64238 if (_path.charAt(0) !== '/') { 64239 _was_relative = true; 64240 _path = '/' + _path; 64241 } 64242 64243 // handle relative files (as opposed to directories) 64244 if (_path.slice(-3) === '/..' || _path.slice(-2) === '/.') { 64245 _path += '/'; 64246 } 64247 64248 // resolve simples 64249 _path = _path 64250 .replace(/(\/(\.\/)+)|(\/\.$)/g, '/') 64251 .replace(/\/{2,}/g, '/'); 64252 64253 // remember leading parents 64254 if (_was_relative) { 64255 _leadingParents = _path.substring(1).match(/^(\.\.\/)+/) || ''; 64256 if (_leadingParents) { 64257 _leadingParents = _leadingParents[0]; 64258 } 64259 } 64260 64261 // resolve parents 64262 while (true) { 64263 _parent = _path.search(/\/\.\.(\/|$)/); 64264 if (_parent === -1) { 64265 // no more ../ to resolve 64266 break; 64267 } else if (_parent === 0) { 64268 // top level cannot be relative, skip it 64269 _path = _path.substring(3); 64270 continue; 64271 } 64272 64273 _pos = _path.substring(0, _parent).lastIndexOf('/'); 64274 if (_pos === -1) { 64275 _pos = _parent; 64276 } 64277 _path = _path.substring(0, _pos) + _path.substring(_parent + 3); 64278 } 64279 64280 // revert to relative 64281 if (_was_relative && this.is('relative')) { 64282 _path = _leadingParents + _path.substring(1); 64283 } 64284 64285 this._parts.path = _path; 64286 this.build(!build); 64287 return this; 64288 }; 64289 p.normalizePathname = p.normalizePath; 64290 p.normalizeQuery = function(build) { 64291 if (typeof this._parts.query === 'string') { 64292 if (!this._parts.query.length) { 64293 this._parts.query = null; 64294 } else { 64295 this.query(URI.parseQuery(this._parts.query, this._parts.escapeQuerySpace)); 64296 } 64297 64298 this.build(!build); 64299 } 64300 64301 return this; 64302 }; 64303 p.normalizeFragment = function(build) { 64304 if (!this._parts.fragment) { 64305 this._parts.fragment = null; 64306 this.build(!build); 64307 } 64308 64309 return this; 64310 }; 64311 p.normalizeSearch = p.normalizeQuery; 64312 p.normalizeHash = p.normalizeFragment; 64313 64314 p.iso8859 = function() { 64315 // expect unicode input, iso8859 output 64316 var e = URI.encode; 64317 var d = URI.decode; 64318 64319 URI.encode = escape; 64320 URI.decode = decodeURIComponent; 64321 try { 64322 this.normalize(); 64323 } finally { 64324 URI.encode = e; 64325 URI.decode = d; 64326 } 64327 return this; 64328 }; 64329 64330 p.unicode = function() { 64331 // expect iso8859 input, unicode output 64332 var e = URI.encode; 64333 var d = URI.decode; 64334 64335 URI.encode = strictEncodeURIComponent; 64336 URI.decode = unescape; 64337 try { 64338 this.normalize(); 64339 } finally { 64340 URI.encode = e; 64341 URI.decode = d; 64342 } 64343 return this; 64344 }; 64345 64346 p.readable = function() { 64347 var uri = this.clone(); 64348 // removing username, password, because they shouldn't be displayed according to RFC 3986 64349 uri.username('').password('').normalize(); 64350 var t = ''; 64351 if (uri._parts.protocol) { 64352 t += uri._parts.protocol + '://'; 64353 } 64354 64355 if (uri._parts.hostname) { 64356 if (uri.is('punycode') && punycode) { 64357 t += punycode.toUnicode(uri._parts.hostname); 64358 if (uri._parts.port) { 64359 t += ':' + uri._parts.port; 64360 } 64361 } else { 64362 t += uri.host(); 64363 } 64364 } 64365 64366 if (uri._parts.hostname && uri._parts.path && uri._parts.path.charAt(0) !== '/') { 64367 t += '/'; 64368 } 64369 64370 t += uri.path(true); 64371 if (uri._parts.query) { 64372 var q = ''; 64373 for (var i = 0, qp = uri._parts.query.split('&'), l = qp.length; i < l; i++) { 64374 var kv = (qp[i] || '').split('='); 64375 q += '&' + URI.decodeQuery(kv[0], this._parts.escapeQuerySpace) 64376 .replace(/&/g, '%26'); 64377 64378 if (kv[1] !== undefined) { 64379 q += '=' + URI.decodeQuery(kv[1], this._parts.escapeQuerySpace) 64380 .replace(/&/g, '%26'); 64381 } 64382 } 64383 t += '?' + q.substring(1); 64384 } 64385 64386 t += URI.decodeQuery(uri.hash(), true); 64387 return t; 64388 }; 64389 64390 // resolving relative and absolute URLs 64391 p.absoluteTo = function(base) { 64392 var resolved = this.clone(); 64393 var properties = ['protocol', 'username', 'password', 'hostname', 'port']; 64394 var basedir, i, p; 64395 64396 if (this._parts.urn) { 64397 throw new Error('URNs do not have any generally defined hierarchical components'); 64398 } 64399 64400 if (!(base instanceof URI)) { 64401 base = new URI(base); 64402 } 64403 64404 if (resolved._parts.protocol) { 64405 // Directly returns even if this._parts.hostname is empty. 64406 return resolved; 64407 } else { 64408 resolved._parts.protocol = base._parts.protocol; 64409 } 64410 64411 if (this._parts.hostname) { 64412 return resolved; 64413 } 64414 64415 for (i = 0; (p = properties[i]); i++) { 64416 resolved._parts[p] = base._parts[p]; 64417 } 64418 64419 if (!resolved._parts.path) { 64420 resolved._parts.path = base._parts.path; 64421 if (!resolved._parts.query) { 64422 resolved._parts.query = base._parts.query; 64423 } 64424 } else { 64425 if (resolved._parts.path.substring(-2) === '..') { 64426 resolved._parts.path += '/'; 64427 } 64428 64429 if (resolved.path().charAt(0) !== '/') { 64430 basedir = base.directory(); 64431 basedir = basedir ? basedir : base.path().indexOf('/') === 0 ? '/' : ''; 64432 resolved._parts.path = (basedir ? (basedir + '/') : '') + resolved._parts.path; 64433 resolved.normalizePath(); 64434 } 64435 } 64436 64437 resolved.build(); 64438 return resolved; 64439 }; 64440 p.relativeTo = function(base) { 64441 var relative = this.clone().normalize(); 64442 var relativeParts, baseParts, common, relativePath, basePath; 64443 64444 if (relative._parts.urn) { 64445 throw new Error('URNs do not have any generally defined hierarchical components'); 64446 } 64447 64448 base = new URI(base).normalize(); 64449 relativeParts = relative._parts; 64450 baseParts = base._parts; 64451 relativePath = relative.path(); 64452 basePath = base.path(); 64453 64454 if (relativePath.charAt(0) !== '/') { 64455 throw new Error('URI is already relative'); 64456 } 64457 64458 if (basePath.charAt(0) !== '/') { 64459 throw new Error('Cannot calculate a URI relative to another relative URI'); 64460 } 64461 64462 if (relativeParts.protocol === baseParts.protocol) { 64463 relativeParts.protocol = null; 64464 } 64465 64466 if (relativeParts.username !== baseParts.username || relativeParts.password !== baseParts.password) { 64467 return relative.build(); 64468 } 64469 64470 if (relativeParts.protocol !== null || relativeParts.username !== null || relativeParts.password !== null) { 64471 return relative.build(); 64472 } 64473 64474 if (relativeParts.hostname === baseParts.hostname && relativeParts.port === baseParts.port) { 64475 relativeParts.hostname = null; 64476 relativeParts.port = null; 64477 } else { 64478 return relative.build(); 64479 } 64480 64481 if (relativePath === basePath) { 64482 relativeParts.path = ''; 64483 return relative.build(); 64484 } 64485 64486 // determine common sub path 64487 common = URI.commonPath(relativePath, basePath); 64488 64489 // If the paths have nothing in common, return a relative URL with the absolute path. 64490 if (!common) { 64491 return relative.build(); 64492 } 64493 64494 var parents = baseParts.path 64495 .substring(common.length) 64496 .replace(/[^\/]*$/, '') 64497 .replace(/.*?\//g, '../'); 64498 64499 relativeParts.path = (parents + relativeParts.path.substring(common.length)) || './'; 64500 64501 return relative.build(); 64502 }; 64503 64504 // comparing URIs 64505 p.equals = function(uri) { 64506 var one = this.clone(); 64507 var two = new URI(uri); 64508 var one_map = {}; 64509 var two_map = {}; 64510 var checked = {}; 64511 var one_query, two_query, key; 64512 64513 one.normalize(); 64514 two.normalize(); 64515 64516 // exact match 64517 if (one.toString() === two.toString()) { 64518 return true; 64519 } 64520 64521 // extract query string 64522 one_query = one.query(); 64523 two_query = two.query(); 64524 one.query(''); 64525 two.query(''); 64526 64527 // definitely not equal if not even non-query parts match 64528 if (one.toString() !== two.toString()) { 64529 return false; 64530 } 64531 64532 // query parameters have the same length, even if they're permuted 64533 if (one_query.length !== two_query.length) { 64534 return false; 64535 } 64536 64537 one_map = URI.parseQuery(one_query, this._parts.escapeQuerySpace); 64538 two_map = URI.parseQuery(two_query, this._parts.escapeQuerySpace); 64539 64540 for (key in one_map) { 64541 if (hasOwn.call(one_map, key)) { 64542 if (!isArray(one_map[key])) { 64543 if (one_map[key] !== two_map[key]) { 64544 return false; 64545 } 64546 } else if (!arraysEqual(one_map[key], two_map[key])) { 64547 return false; 64548 } 64549 64550 checked[key] = true; 64551 } 64552 } 64553 64554 for (key in two_map) { 64555 if (hasOwn.call(two_map, key)) { 64556 if (!checked[key]) { 64557 // two contains a parameter not present in one 64558 return false; 64559 } 64560 } 64561 } 64562 64563 return true; 64564 }; 64565 64566 // state 64567 p.preventInvalidHostname = function(v) { 64568 this._parts.preventInvalidHostname = !!v; 64569 return this; 64570 }; 64571 64572 p.duplicateQueryParameters = function(v) { 64573 this._parts.duplicateQueryParameters = !!v; 64574 return this; 64575 }; 64576 64577 p.escapeQuerySpace = function(v) { 64578 this._parts.escapeQuerySpace = !!v; 64579 return this; 64580 }; 64581 64582 return URI; 64583})); 64584 64585 64586/***/ }), 64587
vendor: 14,996 bytes, lines 64588-65118
64588/***/ "./node_modules/urijs/src/punycode.js": 64589/*!********************************************!*\ 64590 !*** ./node_modules/urijs/src/punycode.js ***! 64591 \********************************************/ 64592/*! no static exports found */ 64593/***/ (function(module, exports, __webpack_require__) { 64594 64595/* WEBPACK VAR INJECTION */(function(module, global) {var __WEBPACK_AMD_DEFINE_RESULT__;/*! https://mths.be/punycode v1.4.0 by @mathias */ 64596;(function(root) { 64597 64598 /** Detect free variables */ 64599 var freeExports = true && exports && 64600 !exports.nodeType && exports; 64601 var freeModule = true && module && 64602 !module.nodeType && module; 64603 var freeGlobal = typeof global == 'object' && global; 64604 if ( 64605 freeGlobal.global === freeGlobal || 64606 freeGlobal.window === freeGlobal || 64607 freeGlobal.self === freeGlobal 64608 ) { 64609 root = freeGlobal; 64610 } 64611 64612 /** 64613 * The `punycode` object. 64614 * @name punycode 64615 * @type Object 64616 */ 64617 var punycode, 64618 64619 /** Highest positive signed 32-bit float value */ 64620 maxInt = 2147483647, // aka. 0x7FFFFFFF or 2^31-1 64621 64622 /** Bootstring parameters */ 64623 base = 36, 64624 tMin = 1, 64625 tMax = 26, 64626 skew = 38, 64627 damp = 700, 64628 initialBias = 72, 64629 initialN = 128, // 0x80 64630 delimiter = '-', // '\x2D' 64631 64632 /** Regular expressions */ 64633 regexPunycode = /^xn--/, 64634 regexNonASCII = /[^\x20-\x7E]/, // unprintable ASCII chars + non-ASCII chars 64635 regexSeparators = /[\x2E\u3002\uFF0E\uFF61]/g, // RFC 3490 separators 64636 64637 /** Error messages */ 64638 errors = { 64639 'overflow': 'Overflow: input needs wider integers to process', 64640 'not-basic': 'Illegal input >= 0x80 (not a basic code point)', 64641 'invalid-input': 'Invalid input' 64642 }, 64643 64644 /** Convenience shortcuts */ 64645 baseMinusTMin = base - tMin, 64646 floor = Math.floor, 64647 stringFromCharCode = String.fromCharCode, 64648 64649 /** Temporary variable */ 64650 key; 64651 64652 /*--------------------------------------------------------------------------*/ 64653 64654 /** 64655 * A generic error utility function. 64656 * @private 64657 * @param {String} type The error type. 64658 * @returns {Error} Throws a `RangeError` with the applicable error message. 64659 */ 64660 function error(type) { 64661 throw new RangeError(errors[type]); 64662 } 64663 64664 /** 64665 * A generic `Array#map` utility function. 64666 * @private 64667 * @param {Array} array The array to iterate over. 64668 * @param {Function} callback The function that gets called for every array 64669 * item. 64670 * @returns {Array} A new array of values returned by the callback function. 64671 */ 64672 function map(array, fn) { 64673 var length = array.length; 64674 var result = []; 64675 while (length--) { 64676 result[length] = fn(array[length]); 64677 } 64678 return result; 64679 } 64680 64681 /** 64682 * A simple `Array#map`-like wrapper to work with domain name strings or email 64683 * addresses. 64684 * @private 64685 * @param {String} domain The domain name or email address. 64686 * @param {Function} callback The function that gets called for every 64687 * character. 64688 * @returns {Array} A new string of characters returned by the callback 64689 * function. 64690 */ 64691 function mapDomain(string, fn) { 64692 var parts = string.split('@'); 64693 var result = ''; 64694 if (parts.length > 1) { 64695 // In email addresses, only the domain name should be punycoded. Leave 64696 // the local part (i.e. everything up to `@`) intact. 64697 result = parts[0] + '@'; 64698 string = parts[1]; 64699 } 64700 // Avoid `split(regex)` for IE8 compatibility. See #17. 64701 string = string.replace(regexSeparators, '\x2E'); 64702 var labels = string.split('.'); 64703 var encoded = map(labels, fn).join('.'); 64704 return result + encoded; 64705 } 64706 64707 /** 64708 * Creates an array containing the numeric code points of each Unicode 64709 * character in the string. While JavaScript uses UCS-2 internally, 64710 * this function will convert a pair of surrogate halves (each of which 64711 * UCS-2 exposes as separate characters) into a single code point, 64712 * matching UTF-16. 64713 * @see `punycode.ucs2.encode` 64714 * @see <https://mathiasbynens.be/notes/javascript-encoding> 64715 * @memberOf punycode.ucs2 64716 * @name decode 64717 * @param {String} string The Unicode input string (UCS-2). 64718 * @returns {Array} The new array of code points. 64719 */ 64720 function ucs2decode(string) { 64721 var output = [], 64722 counter = 0, 64723 length = string.length, 64724 value, 64725 extra; 64726 while (counter < length) { 64727 value = string.charCodeAt(counter++); 64728 if (value >= 0xD800 && value <= 0xDBFF && counter < length) { 64729 // high surrogate, and there is a next character 64730 extra = string.charCodeAt(counter++); 64731 if ((extra & 0xFC00) == 0xDC00) { // low surrogate 64732 output.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000); 64733 } else { 64734 // unmatched surrogate; only append this code unit, in case the next 64735 // code unit is the high surrogate of a surrogate pair 64736 output.push(value); 64737 counter--; 64738 } 64739 } else { 64740 output.push(value); 64741 } 64742 } 64743 return output; 64744 } 64745 64746 /** 64747 * Creates a string based on an array of numeric code points. 64748 * @see `punycode.ucs2.decode` 64749 * @memberOf punycode.ucs2 64750 * @name encode 64751 * @param {Array} codePoints The array of numeric code points. 64752 * @returns {String} The new Unicode string (UCS-2). 64753 */ 64754 function ucs2encode(array) { 64755 return map(array, function(value) { 64756 var output = ''; 64757 if (value > 0xFFFF) { 64758 value -= 0x10000; 64759 output += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800); 64760 value = 0xDC00 | value & 0x3FF; 64761 } 64762 output += stringFromCharCode(value); 64763 return output; 64764 }).join(''); 64765 } 64766 64767 /** 64768 * Converts a basic code point into a digit/integer. 64769 * @see `digitToBasic()` 64770 * @private 64771 * @param {Number} codePoint The basic numeric code point value. 64772 * @returns {Number} The numeric value of a basic code point (for use in 64773 * representing integers) in the range `0` to `base - 1`, or `base` if 64774 * the code point does not represent a value. 64775 */ 64776 function basicToDigit(codePoint) { 64777 if (codePoint - 48 < 10) { 64778 return codePoint - 22; 64779 } 64780 if (codePoint - 65 < 26) { 64781 return codePoint - 65; 64782 } 64783 if (codePoint - 97 < 26) { 64784 return codePoint - 97; 64785 } 64786 return base; 64787 } 64788 64789 /** 64790 * Converts a digit/integer into a basic code point. 64791 * @see `basicToDigit()` 64792 * @private 64793 * @param {Number} digit The numeric value of a basic code point. 64794 * @returns {Number} The basic code point whose value (when used for 64795 * representing integers) is `digit`, which needs to be in the range 64796 * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is 64797 * used; else, the lowercase form is used. The behavior is undefined 64798 * if `flag` is non-zero and `digit` has no uppercase form. 64799 */ 64800 function digitToBasic(digit, flag) { 64801 // 0..25 map to ASCII a..z or A..Z 64802 // 26..35 map to ASCII 0..9 64803 return digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5); 64804 } 64805 64806 /** 64807 * Bias adaptation function as per section 3.4 of RFC 3492. 64808 * https://tools.ietf.org/html/rfc3492#section-3.4 64809 * @private 64810 */ 64811 function adapt(delta, numPoints, firstTime) { 64812 var k = 0; 64813 delta = firstTime ? floor(delta / damp) : delta >> 1; 64814 delta += floor(delta / numPoints); 64815 for (/* no initialization */; delta > baseMinusTMin * tMax >> 1; k += base) { 64816 delta = floor(delta / baseMinusTMin); 64817 } 64818 return floor(k + (baseMinusTMin + 1) * delta / (delta + skew)); 64819 } 64820 64821 /** 64822 * Converts a Punycode string of ASCII-only symbols to a string of Unicode 64823 * symbols. 64824 * @memberOf punycode 64825 * @param {String} input The Punycode string of ASCII-only symbols. 64826 * @returns {String} The resulting string of Unicode symbols. 64827 */ 64828 function decode(input) { 64829 // Don't use UCS-2 64830 var output = [], 64831 inputLength = input.length, 64832 out, 64833 i = 0, 64834 n = initialN, 64835 bias = initialBias, 64836 basic, 64837 j, 64838 index, 64839 oldi, 64840 w, 64841 k, 64842 digit, 64843 t, 64844 /** Cached calculation results */ 64845 baseMinusT; 64846 64847 // Handle the basic code points: let `basic` be the number of input code 64848 // points before the last delimiter, or `0` if there is none, then copy 64849 // the first basic code points to the output. 64850 64851 basic = input.lastIndexOf(delimiter); 64852 if (basic < 0) { 64853 basic = 0; 64854 } 64855 64856 for (j = 0; j < basic; ++j) { 64857 // if it's not a basic code point 64858 if (input.charCodeAt(j) >= 0x80) { 64859 error('not-basic'); 64860 } 64861 output.push(input.charCodeAt(j)); 64862 } 64863 64864 // Main decoding loop: start just after the last delimiter if any basic code 64865 // points were copied; start at the beginning otherwise. 64866 64867 for (index = basic > 0 ? basic + 1 : 0; index < inputLength; /* no final expression */) { 64868 64869 // `index` is the index of the next character to be consumed. 64870 // Decode a generalized variable-length integer into `delta`, 64871 // which gets added to `i`. The overflow checking is easier 64872 // if we increase `i` as we go, then subtract off its starting 64873 // value at the end to obtain `delta`. 64874 for (oldi = i, w = 1, k = base; /* no condition */; k += base) { 64875 64876 if (index >= inputLength) { 64877 error('invalid-input'); 64878 } 64879 64880 digit = basicToDigit(input.charCodeAt(index++)); 64881 64882 if (digit >= base || digit > floor((maxInt - i) / w)) { 64883 error('overflow'); 64884 } 64885 64886 i += digit * w; 64887 t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias); 64888 64889 if (digit < t) { 64890 break; 64891 } 64892 64893 baseMinusT = base - t; 64894 if (w > floor(maxInt / baseMinusT)) { 64895 error('overflow'); 64896 } 64897 64898 w *= baseMinusT; 64899 64900 } 64901 64902 out = output.length + 1; 64903 bias = adapt(i - oldi, out, oldi == 0); 64904 64905 // `i` was supposed to wrap around from `out` to `0`, 64906 // incrementing `n` each time, so we'll fix that now: 64907 if (floor(i / out) > maxInt - n) { 64908 error('overflow'); 64909 } 64910 64911 n += floor(i / out); 64912 i %= out; 64913 64914 // Insert `n` at position `i` of the output 64915 output.splice(i++, 0, n); 64916 64917 } 64918 64919 return ucs2encode(output); 64920 } 64921 64922 /** 64923 * Converts a string of Unicode symbols (e.g. a domain name label) to a 64924 * Punycode string of ASCII-only symbols. 64925 * @memberOf punycode 64926 * @param {String} input The string of Unicode symbols. 64927 * @returns {String} The resulting Punycode string of ASCII-only symbols. 64928 */ 64929 function encode(input) { 64930 var n, 64931 delta, 64932 handledCPCount, 64933 basicLength, 64934 bias, 64935 j, 64936 m, 64937 q, 64938 k, 64939 t, 64940 currentValue, 64941 output = [], 64942 /** `inputLength` will hold the number of code points in `input`. */ 64943 inputLength, 64944 /** Cached calculation results */ 64945 handledCPCountPlusOne, 64946 baseMinusT, 64947 qMinusT; 64948 64949 // Convert the input in UCS-2 to Unicode 64950 input = ucs2decode(input); 64951 64952 // Cache the length 64953 inputLength = input.length; 64954 64955 // Initialize the state 64956 n = initialN; 64957 delta = 0; 64958 bias = initialBias; 64959 64960 // Handle the basic code points 64961 for (j = 0; j < inputLength; ++j) { 64962 currentValue = input[j]; 64963 if (currentValue < 0x80) { 64964 output.push(stringFromCharCode(currentValue)); 64965 } 64966 } 64967 64968 handledCPCount = basicLength = output.length; 64969 64970 // `handledCPCount` is the number of code points that have been handled; 64971 // `basicLength` is the number of basic code points. 64972 64973 // Finish the basic string - if it is not empty - with a delimiter 64974 if (basicLength) { 64975 output.push(delimiter); 64976 } 64977 64978 // Main encoding loop: 64979 while (handledCPCount < inputLength) { 64980 64981 // All non-basic code points < n have been handled already. Find the next 64982 // larger one: 64983 for (m = maxInt, j = 0; j < inputLength; ++j) { 64984 currentValue = input[j]; 64985 if (currentValue >= n && currentValue < m) { 64986 m = currentValue; 64987 } 64988 } 64989 64990 // Increase `delta` enough to advance the decoder's <n,i> state to <m,0>, 64991 // but guard against overflow 64992 handledCPCountPlusOne = handledCPCount + 1; 64993 if (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) { 64994 error('overflow'); 64995 } 64996 64997 delta += (m - n) * handledCPCountPlusOne; 64998 n = m; 64999 65000 for (j = 0; j < inputLength; ++j) { 65001 currentValue = input[j]; 65002 65003 if (currentValue < n && ++delta > maxInt) { 65004 error('overflow'); 65005 } 65006 65007 if (currentValue == n) { 65008 // Represent delta as a generalized variable-length integer 65009 for (q = delta, k = base; /* no condition */; k += base) { 65010 t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias); 65011 if (q < t) { 65012 break; 65013 } 65014 qMinusT = q - t; 65015 baseMinusT = base - t; 65016 output.push( 65017 stringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0)) 65018 ); 65019 q = floor(qMinusT / baseMinusT); 65020 } 65021 65022 output.push(stringFromCharCode(digitToBasic(q, 0))); 65023 bias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength); 65024 delta = 0; 65025 ++handledCPCount; 65026 } 65027 } 65028 65029 ++delta; 65030 ++n; 65031 65032 } 65033 return output.join(''); 65034 } 65035 65036 /** 65037 * Converts a Punycode string representing a domain name or an email address 65038 * to Unicode. Only the Punycoded parts of the input will be converted, i.e. 65039 * it doesn't matter if you call it on a string that has already been 65040 * converted to Unicode. 65041 * @memberOf punycode 65042 * @param {String} input The Punycoded domain name or email address to 65043 * convert to Unicode. 65044 * @returns {String} The Unicode representation of the given Punycode 65045 * string. 65046 */ 65047 function toUnicode(input) { 65048 return mapDomain(input, function(string) { 65049 return regexPunycode.test(string) 65050 ? decode(string.slice(4).toLowerCase()) 65051 : string; 65052 }); 65053 } 65054 65055 /** 65056 * Converts a Unicode string representing a domain name or an email address to 65057 * Punycode. Only the non-ASCII parts of the domain name will be converted, 65058 * i.e. it doesn't matter if you call it with a domain that's already in 65059 * ASCII. 65060 * @memberOf punycode 65061 * @param {String} input The domain name or email address to convert, as a 65062 * Unicode string. 65063 * @returns {String} The Punycode representation of the given domain name or 65064 * email address. 65065 */ 65066 function toASCII(input) { 65067 return mapDomain(input, function(string) { 65068 return regexNonASCII.test(string) 65069 ? 'xn--' + encode(string) 65070 : string; 65071 }); 65072 } 65073 65074 /*--------------------------------------------------------------------------*/ 65075 65076 /** Define the public API */ 65077 punycode = { 65078 /** 65079 * A string representing the current Punycode.js version number. 65080 * @memberOf punycode 65081 * @type String 65082 */ 65083 'version': '1.3.2', 65084 /** 65085 * An object of methods to convert from JavaScript's internal character 65086 * representation (UCS-2) to Unicode code points, and back. 65087 * @see <https://mathiasbynens.be/notes/javascript-encoding> 65088 * @memberOf punycode 65089 * @type Object 65090 */ 65091 'ucs2': { 65092 'decode': ucs2decode, 65093 'encode': ucs2encode 65094 }, 65095 'decode': decode, 65096 'encode': encode, 65097 'toASCII': toASCII, 65098 'toUnicode': toUnicode 65099 }; 65100 65101 /** Expose `punycode` */ 65102 // Some AMD build optimizers, like r.js, check for specific condition patterns 65103 // like the following: 65104 if ( 65105 true 65106 ) { 65107 !(__WEBPACK_AMD_DEFINE_RESULT__ = (function() { 65108 return punycode; 65109 }).call(exports, __webpack_require__, exports, module), 65110 __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); 65111 } else {} 65112 65113}(this)); 65114 65115/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../webpack/buildin/module.js */ "./node_modules/webpack/buildin/module.js")(module), __webpack_require__(/*! ./../../webpack/buildin/global.js */ "./node_modules/webpack/buildin/global.js"))) 65116 65117/***/ }), 65118
vendor: 435,260 bytes, lines 65119-77061
65119/***/ "./node_modules/vue/dist/vue.js": 65120/*!**************************************!*\ 65121 !*** ./node_modules/vue/dist/vue.js ***! 65122 \**************************************/ 65123/*! no static exports found */ 65124/***/ (function(module, exports, __webpack_require__) { 65125 65126/* WEBPACK VAR INJECTION */(function(global, setImmediate) {/*! 65127 * Vue.js v2.7.16 65128 * (c) 2014-2023 Evan You 65129 * Released under the MIT License. 65130 */ 65131(function (global, factory) { 65132 true ? module.exports = factory() : 65133 undefined; 65134})(this, (function () { 'use strict'; 65135 65136 var emptyObject = Object.freeze({}); 65137 var isArray = Array.isArray; 65138 // These helpers produce better VM code in JS engines due to their 65139 // explicitness and function inlining. 65140 function isUndef(v) { 65141 return v === undefined || v === null; 65142 } 65143 function isDef(v) { 65144 return v !== undefined && v !== null; 65145 } 65146 function isTrue(v) { 65147 return v === true; 65148 } 65149 function isFalse(v) { 65150 return v === false; 65151 } 65152 /** 65153 * Check if value is primitive. 65154 */ 65155 function isPrimitive(value) { 65156 return (typeof value === 'string' || 65157 typeof value === 'number' || 65158 // $flow-disable-line 65159 typeof value === 'symbol' || 65160 typeof value === 'boolean'); 65161 } 65162 function isFunction(value) { 65163 return typeof value === 'function'; 65164 } 65165 /** 65166 * Quick object check - this is primarily used to tell 65167 * objects from primitive values when we know the value 65168 * is a JSON-compliant type. 65169 */ 65170 function isObject(obj) { 65171 return obj !== null && typeof obj === 'object'; 65172 } 65173 /** 65174 * Get the raw type string of a value, e.g., [object Object]. 65175 */ 65176 var _toString = Object.prototype.toString; 65177 function toRawType(value) { 65178 return _toString.call(value).slice(8, -1); 65179 } 65180 /** 65181 * Strict object type check. Only returns true 65182 * for plain JavaScript objects. 65183 */ 65184 function isPlainObject(obj) { 65185 return _toString.call(obj) === '[object Object]'; 65186 } 65187 function isRegExp(v) { 65188 return _toString.call(v) === '[object RegExp]'; 65189 } 65190 /** 65191 * Check if val is a valid array index. 65192 */ 65193 function isValidArrayIndex(val) { 65194 var n = parseFloat(String(val)); 65195 return n >= 0 && Math.floor(n) === n && isFinite(val); 65196 } 65197 function isPromise(val) { 65198 return (isDef(val) && 65199 typeof val.then === 'function' && 65200 typeof val.catch === 'function'); 65201 } 65202 /** 65203 * Convert a value to a string that is actually rendered. 65204 */ 65205 function toString(val) { 65206 return val == null 65207 ? '' 65208 : Array.isArray(val) || (isPlainObject(val) && val.toString === _toString) 65209 ? JSON.stringify(val, replacer, 2) 65210 : String(val); 65211 } 65212 function replacer(_key, val) { 65213 // avoid circular deps from v3 65214 if (val && val.__v_isRef) { 65215 return val.value; 65216 } 65217 return val; 65218 } 65219 /** 65220 * Convert an input value to a number for persistence. 65221 * If the conversion fails, return original string. 65222 */ 65223 function toNumber(val) { 65224 var n = parseFloat(val); 65225 return isNaN(n) ? val : n; 65226 } 65227 /** 65228 * Make a map and return a function for checking if a key 65229 * is in that map. 65230 */ 65231 function makeMap(str, expectsLowerCase) { 65232 var map = Object.create(null); 65233 var list = str.split(','); 65234 for (var i = 0; i < list.length; i++) { 65235 map[list[i]] = true; 65236 } 65237 return expectsLowerCase ? function (val) { return map[val.toLowerCase()]; } : function (val) { return map[val]; }; 65238 } 65239 /** 65240 * Check if a tag is a built-in tag. 65241 */ 65242 var isBuiltInTag = makeMap('slot,component', true); 65243 /** 65244 * Check if an attribute is a reserved attribute. 65245 */ 65246 var isReservedAttribute = makeMap('key,ref,slot,slot-scope,is'); 65247 /** 65248 * Remove an item from an array. 65249 */ 65250 function remove$2(arr, item) { 65251 var len = arr.length; 65252 if (len) { 65253 // fast path for the only / last item 65254 if (item === arr[len - 1]) { 65255 arr.length = len - 1; 65256 return; 65257 } 65258 var index = arr.indexOf(item); 65259 if (index > -1) { 65260 return arr.splice(index, 1); 65261 } 65262 } 65263 } 65264 /** 65265 * Check whether an object has the property. 65266 */ 65267 var hasOwnProperty = Object.prototype.hasOwnProperty; 65268 function hasOwn(obj, key) { 65269 return hasOwnProperty.call(obj, key); 65270 } 65271 /** 65272 * Create a cached version of a pure function. 65273 */ 65274 function cached(fn) { 65275 var cache = Object.create(null); 65276 return function cachedFn(str) { 65277 var hit = cache[str]; 65278 return hit || (cache[str] = fn(str)); 65279 }; 65280 } 65281 /** 65282 * Camelize a hyphen-delimited string. 65283 */ 65284 var camelizeRE = /-(\w)/g; 65285 var camelize = cached(function (str) { 65286 return str.replace(camelizeRE, function (_, c) { return (c ? c.toUpperCase() : ''); }); 65287 }); 65288 /** 65289 * Capitalize a string. 65290 */ 65291 var capitalize = cached(function (str) { 65292 return str.charAt(0).toUpperCase() + str.slice(1); 65293 }); 65294 /** 65295 * Hyphenate a camelCase string. 65296 */ 65297 var hyphenateRE = /\B([A-Z])/g; 65298 var hyphenate = cached(function (str) { 65299 return str.replace(hyphenateRE, '-$1').toLowerCase(); 65300 }); 65301 /** 65302 * Simple bind polyfill for environments that do not support it, 65303 * e.g., PhantomJS 1.x. Technically, we don't need this anymore 65304 * since native bind is now performant enough in most browsers. 65305 * But removing it would mean breaking code that was able to run in 65306 * PhantomJS 1.x, so this must be kept for backward compatibility. 65307 */ 65308 /* istanbul ignore next */ 65309 function polyfillBind(fn, ctx) { 65310 function boundFn(a) { 65311 var l = arguments.length; 65312 return l 65313 ? l > 1 65314 ? fn.apply(ctx, arguments) 65315 : fn.call(ctx, a) 65316 : fn.call(ctx); 65317 } 65318 boundFn._length = fn.length; 65319 return boundFn; 65320 } 65321 function nativeBind(fn, ctx) { 65322 return fn.bind(ctx); 65323 } 65324 // @ts-expect-error bind cannot be `undefined` 65325 var bind$1 = Function.prototype.bind ? nativeBind : polyfillBind; 65326 /** 65327 * Convert an Array-like object to a real Array. 65328 */ 65329 function toArray(list, start) { 65330 start = start || 0; 65331 var i = list.length - start; 65332 var ret = new Array(i); 65333 while (i--) { 65334 ret[i] = list[i + start]; 65335 } 65336 return ret; 65337 } 65338 /** 65339 * Mix properties into target object. 65340 */ 65341 function extend(to, _from) { 65342 for (var key in _from) { 65343 to[key] = _from[key]; 65344 } 65345 return to; 65346 } 65347 /** 65348 * Merge an Array of Objects into a single Object. 65349 */ 65350 function toObject(arr) { 65351 var res = {}; 65352 for (var i = 0; i < arr.length; i++) { 65353 if (arr[i]) { 65354 extend(res, arr[i]); 65355 } 65356 } 65357 return res; 65358 } 65359 /* eslint-disable no-unused-vars */ 65360 /** 65361 * Perform no operation. 65362 * Stubbing args to make Flow happy without leaving useless transpiled code 65363 * with ...rest (https://flow.org/blog/2017/05/07/Strict-Function-Call-Arity/). 65364 */ 65365 function noop(a, b, c) { } 65366 /** 65367 * Always return false. 65368 */ 65369 var no = function (a, b, c) { return false; }; 65370 /* eslint-enable no-unused-vars */ 65371 /** 65372 * Return the same value. 65373 */ 65374 var identity = function (_) { return _; }; 65375 /** 65376 * Generate a string containing static keys from compiler modules. 65377 */ 65378 function genStaticKeys$1(modules) { 65379 return modules 65380 .reduce(function (keys, m) { return keys.concat(m.staticKeys || []); }, []) 65381 .join(','); 65382 } 65383 /** 65384 * Check if two values are loosely equal - that is, 65385 * if they are plain objects, do they have the same shape? 65386 */ 65387 function looseEqual(a, b) { 65388 if (a === b) 65389 return true; 65390 var isObjectA = isObject(a); 65391 var isObjectB = isObject(b); 65392 if (isObjectA && isObjectB) { 65393 try { 65394 var isArrayA = Array.isArray(a); 65395 var isArrayB = Array.isArray(b); 65396 if (isArrayA && isArrayB) { 65397 return (a.length === b.length && 65398 a.every(function (e, i) { 65399 return looseEqual(e, b[i]); 65400 })); 65401 } 65402 else if (a instanceof Date && b instanceof Date) { 65403 return a.getTime() === b.getTime(); 65404 } 65405 else if (!isArrayA && !isArrayB) { 65406 var keysA = Object.keys(a); 65407 var keysB = Object.keys(b); 65408 return (keysA.length === keysB.length && 65409 keysA.every(function (key) { 65410 return looseEqual(a[key], b[key]); 65411 })); 65412 } 65413 else { 65414 /* istanbul ignore next */ 65415 return false; 65416 } 65417 } 65418 catch (e) { 65419 /* istanbul ignore next */ 65420 return false; 65421 } 65422 } 65423 else if (!isObjectA && !isObjectB) { 65424 return String(a) === String(b); 65425 } 65426 else { 65427 return false; 65428 } 65429 } 65430 /** 65431 * Return the first index at which a loosely equal value can be 65432 * found in the array (if value is a plain object, the array must 65433 * contain an object of the same shape), or -1 if it is not present. 65434 */ 65435 function looseIndexOf(arr, val) { 65436 for (var i = 0; i < arr.length; i++) { 65437 if (looseEqual(arr[i], val)) 65438 return i; 65439 } 65440 return -1; 65441 } 65442 /** 65443 * Ensure a function is called only once. 65444 */ 65445 function once(fn) { 65446 var called = false; 65447 return function () { 65448 if (!called) { 65449 called = true; 65450 fn.apply(this, arguments); 65451 } 65452 }; 65453 } 65454 // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is#polyfill 65455 function hasChanged(x, y) { 65456 if (x === y) { 65457 return x === 0 && 1 / x !== 1 / y; 65458 } 65459 else { 65460 return x === x || y === y; 65461 } 65462 } 65463 65464 var SSR_ATTR = 'data-server-rendered'; 65465 var ASSET_TYPES = ['component', 'directive', 'filter']; 65466 var LIFECYCLE_HOOKS = [ 65467 'beforeCreate', 65468 'created', 65469 'beforeMount', 65470 'mounted', 65471 'beforeUpdate', 65472 'updated', 65473 'beforeDestroy', 65474 'destroyed', 65475 'activated', 65476 'deactivated', 65477 'errorCaptured', 65478 'serverPrefetch', 65479 'renderTracked', 65480 'renderTriggered' 65481 ]; 65482 65483 var config = { 65484 /** 65485 * Option merge strategies (used in core/util/options) 65486 */ 65487 // $flow-disable-line 65488 optionMergeStrategies: Object.create(null), 65489 /** 65490 * Whether to suppress warnings. 65491 */ 65492 silent: false, 65493 /** 65494 * Show production mode tip message on boot? 65495 */ 65496 productionTip: true, 65497 /** 65498 * Whether to enable devtools 65499 */ 65500 devtools: true, 65501 /** 65502 * Whether to record perf 65503 */ 65504 performance: false, 65505 /** 65506 * Error handler for watcher errors 65507 */ 65508 errorHandler: null, 65509 /** 65510 * Warn handler for watcher warns 65511 */ 65512 warnHandler: null, 65513 /** 65514 * Ignore certain custom elements 65515 */ 65516 ignoredElements: [], 65517 /** 65518 * Custom user key aliases for v-on 65519 */ 65520 // $flow-disable-line 65521 keyCodes: Object.create(null), 65522 /** 65523 * Check if a tag is reserved so that it cannot be registered as a 65524 * component. This is platform-dependent and may be overwritten. 65525 */ 65526 isReservedTag: no, 65527 /** 65528 * Check if an attribute is reserved so that it cannot be used as a component 65529 * prop. This is platform-dependent and may be overwritten. 65530 */ 65531 isReservedAttr: no, 65532 /** 65533 * Check if a tag is an unknown element. 65534 * Platform-dependent. 65535 */ 65536 isUnknownElement: no, 65537 /** 65538 * Get the namespace of an element 65539 */ 65540 getTagNamespace: noop, 65541 /** 65542 * Parse the real tag name for the specific platform. 65543 */ 65544 parsePlatformTagName: identity, 65545 /** 65546 * Check if an attribute must be bound using property, e.g. value 65547 * Platform-dependent. 65548 */ 65549 mustUseProp: no, 65550 /** 65551 * Perform updates asynchronously. Intended to be used by Vue Test Utils 65552 * This will significantly reduce performance if set to false. 65553 */ 65554 async: true, 65555 /** 65556 * Exposed for legacy reasons 65557 */ 65558 _lifecycleHooks: LIFECYCLE_HOOKS 65559 }; 65560 65561 /** 65562 * unicode letters used for parsing html tags, component names and property paths. 65563 * using https://www.w3.org/TR/html53/semantics-scripting.html#potentialcustomelementname 65564 * skipping \u10000-\uEFFFF due to it freezing up PhantomJS 65565 */ 65566 var 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/; 65567 /** 65568 * Check if a string starts with $ or _ 65569 */ 65570 function isReserved(str) { 65571 var c = (str + '').charCodeAt(0); 65572 return c === 0x24 || c === 0x5f; 65573 } 65574 /** 65575 * Define a property. 65576 */ 65577 function def(obj, key, val, enumerable) { 65578 Object.defineProperty(obj, key, { 65579 value: val, 65580 enumerable: !!enumerable, 65581 writable: true, 65582 configurable: true 65583 }); 65584 } 65585 /** 65586 * Parse simple path. 65587 */ 65588 var bailRE = new RegExp("[^".concat(unicodeRegExp.source, ".$_\\d]")); 65589 function parsePath(path) { 65590 if (bailRE.test(path)) { 65591 return; 65592 } 65593 var segments = path.split('.'); 65594 return function (obj) { 65595 for (var i = 0; i < segments.length; i++) { 65596 if (!obj) 65597 return; 65598 obj = obj[segments[i]]; 65599 } 65600 return obj; 65601 }; 65602 } 65603 65604 // can we use __proto__? 65605 var hasProto = '__proto__' in {}; 65606 // Browser environment sniffing 65607 var inBrowser = typeof window !== 'undefined'; 65608 var UA = inBrowser && window.navigator.userAgent.toLowerCase(); 65609 var isIE = UA && /msie|trident/.test(UA); 65610 var isIE9 = UA && UA.indexOf('msie 9.0') > 0; 65611 var isEdge = UA && UA.indexOf('edge/') > 0; 65612 UA && UA.indexOf('android') > 0; 65613 var isIOS = UA && /iphone|ipad|ipod|ios/.test(UA); 65614 UA && /chrome\/\d+/.test(UA) && !isEdge; 65615 UA && /phantomjs/.test(UA); 65616 var isFF = UA && UA.match(/firefox\/(\d+)/); 65617 // Firefox has a "watch" function on Object.prototype... 65618 // @ts-expect-error firebox support 65619 var nativeWatch = {}.watch; 65620 var supportsPassive = false; 65621 if (inBrowser) { 65622 try { 65623 var opts = {}; 65624 Object.defineProperty(opts, 'passive', { 65625 get: function () { 65626 /* istanbul ignore next */ 65627 supportsPassive = true; 65628 } 65629 }); // https://github.com/facebook/flow/issues/285 65630 window.addEventListener('test-passive', null, opts); 65631 } 65632 catch (e) { } 65633 } 65634 // this needs to be lazy-evaled because vue may be required before 65635 // vue-server-renderer can set VUE_ENV 65636 var _isServer; 65637 var isServerRendering = function () { 65638 if (_isServer === undefined) { 65639 /* istanbul ignore if */ 65640 if (!inBrowser && typeof global !== 'undefined') { 65641 // detect presence of vue-server-renderer and avoid 65642 // Webpack shimming the process 65643 _isServer = 65644 global['process'] && global['process'].env.VUE_ENV === 'server'; 65645 } 65646 else { 65647 _isServer = false; 65648 } 65649 } 65650 return _isServer; 65651 }; 65652 // detect devtools 65653 var devtools = inBrowser && window.__VUE_DEVTOOLS_GLOBAL_HOOK__; 65654 /* istanbul ignore next */ 65655 function isNative(Ctor) { 65656 return typeof Ctor === 'function' && /native code/.test(Ctor.toString()); 65657 } 65658 var hasSymbol = typeof Symbol !== 'undefined' && 65659 isNative(Symbol) && 65660 typeof Reflect !== 'undefined' && 65661 isNative(Reflect.ownKeys); 65662 var _Set; // $flow-disable-line 65663 /* istanbul ignore if */ if (typeof Set !== 'undefined' && isNative(Set)) { 65664 // use native Set when available. 65665 _Set = Set; 65666 } 65667 else { 65668 // a non-standard Set polyfill that only works with primitive keys. 65669 _Set = /** @class */ (function () { 65670 function Set() { 65671 this.set = Object.create(null); 65672 } 65673 Set.prototype.has = function (key) { 65674 return this.set[key] === true; 65675 }; 65676 Set.prototype.add = function (key) { 65677 this.set[key] = true; 65678 }; 65679 Set.prototype.clear = function () { 65680 this.set = Object.create(null); 65681 }; 65682 return Set; 65683 }()); 65684 } 65685 65686 var currentInstance = null; 65687 /** 65688 * This is exposed for compatibility with v3 (e.g. some functions in VueUse 65689 * relies on it). Do not use this internally, just use `currentInstance`. 65690 * 65691 * @internal this function needs manual type declaration because it relies 65692 * on previously manually authored types from Vue 2 65693 */ 65694 function getCurrentInstance() { 65695 return currentInstance && { proxy: currentInstance }; 65696 } 65697 /** 65698 * @internal 65699 */ 65700 function setCurrentInstance(vm) { 65701 if (vm === void 0) { vm = null; } 65702 if (!vm) 65703 currentInstance && currentInstance._scope.off(); 65704 currentInstance = vm; 65705 vm && vm._scope.on(); 65706 } 65707 65708 /** 65709 * @internal 65710 */ 65711 var VNode = /** @class */ (function () { 65712 function VNode(tag, data, children, text, elm, context, componentOptions, asyncFactory) { 65713 this.tag = tag; 65714 this.data = data; 65715 this.children = children; 65716 this.text = text; 65717 this.elm = elm; 65718 this.ns = undefined; 65719 this.context = context; 65720 this.fnContext = undefined; 65721 this.fnOptions = undefined; 65722 this.fnScopeId = undefined; 65723 this.key = data && data.key; 65724 this.componentOptions = componentOptions; 65725 this.componentInstance = undefined; 65726 this.parent = undefined; 65727 this.raw = false; 65728 this.isStatic = false; 65729 this.isRootInsert = true; 65730 this.isComment = false; 65731 this.isCloned = false; 65732 this.isOnce = false; 65733 this.asyncFactory = asyncFactory; 65734 this.asyncMeta = undefined; 65735 this.isAsyncPlaceholder = false; 65736 } 65737 Object.defineProperty(VNode.prototype, "child", { 65738 // DEPRECATED: alias for componentInstance for backwards compat. 65739 /* istanbul ignore next */ 65740 get: function () { 65741 return this.componentInstance; 65742 }, 65743 enumerable: false, 65744 configurable: true 65745 }); 65746 return VNode; 65747 }()); 65748 var createEmptyVNode = function (text) { 65749 if (text === void 0) { text = ''; } 65750 var node = new VNode(); 65751 node.text = text; 65752 node.isComment = true; 65753 return node; 65754 }; 65755 function createTextVNode(val) { 65756 return new VNode(undefined, undefined, undefined, String(val)); 65757 } 65758 // optimized shallow clone 65759 // used for static nodes and slot nodes because they may be reused across 65760 // multiple renders, cloning them avoids errors when DOM manipulations rely 65761 // on their elm reference. 65762 function cloneVNode(vnode) { 65763 var cloned = new VNode(vnode.tag, vnode.data, 65764 // #7975 65765 // clone children array to avoid mutating original in case of cloning 65766 // a child. 65767 vnode.children && vnode.children.slice(), vnode.text, vnode.elm, vnode.context, vnode.componentOptions, vnode.asyncFactory); 65768 cloned.ns = vnode.ns; 65769 cloned.isStatic = vnode.isStatic; 65770 cloned.key = vnode.key; 65771 cloned.isComment = vnode.isComment; 65772 cloned.fnContext = vnode.fnContext; 65773 cloned.fnOptions = vnode.fnOptions; 65774 cloned.fnScopeId = vnode.fnScopeId; 65775 cloned.asyncMeta = vnode.asyncMeta; 65776 cloned.isCloned = true; 65777 return cloned; 65778 } 65779 65780 /* not type checking this file because flow doesn't play well with Proxy */ 65781 var initProxy; 65782 { 65783 var allowedGlobals_1 = makeMap('Infinity,undefined,NaN,isFinite,isNaN,' + 65784 'parseFloat,parseInt,decodeURI,decodeURIComponent,encodeURI,encodeURIComponent,' + 65785 'Math,Number,Date,Array,Object,Boolean,String,RegExp,Map,Set,JSON,Intl,BigInt,' + 65786 'require' // for Webpack/Browserify 65787 ); 65788 var warnNonPresent_1 = function (target, key) { 65789 warn$2("Property or method \"".concat(key, "\" is not defined on the instance but ") + 65790 'referenced during render. Make sure that this property is reactive, ' + 65791 'either in the data option, or for class-based components, by ' + 65792 'initializing the property. ' + 65793 'See: https://v2.vuejs.org/v2/guide/reactivity.html#Declaring-Reactive-Properties.', target); 65794 }; 65795 var warnReservedPrefix_1 = function (target, key) { 65796 warn$2("Property \"".concat(key, "\" must be accessed with \"$data.").concat(key, "\" because ") + 65797 'properties starting with "$" or "_" are not proxied in the Vue instance to ' + 65798 'prevent conflicts with Vue internals. ' + 65799 'See: https://v2.vuejs.org/v2/api/#data', target); 65800 }; 65801 var hasProxy_1 = typeof Proxy !== 'undefined' && isNative(Proxy); 65802 if (hasProxy_1) { 65803 var isBuiltInModifier_1 = makeMap('stop,prevent,self,ctrl,shift,alt,meta,exact'); 65804 config.keyCodes = new Proxy(config.keyCodes, { 65805 set: function (target, key, value) { 65806 if (isBuiltInModifier_1(key)) { 65807 warn$2("Avoid overwriting built-in modifier in config.keyCodes: .".concat(key)); 65808 return false; 65809 } 65810 else { 65811 target[key] = value; 65812 return true; 65813 } 65814 } 65815 }); 65816 } 65817 var hasHandler_1 = { 65818 has: function (target, key) { 65819 var has = key in target; 65820 var isAllowed = allowedGlobals_1(key) || 65821 (typeof key === 'string' && 65822 key.charAt(0) === '_' && 65823 !(key in target.$data)); 65824 if (!has && !isAllowed) { 65825 if (key in target.$data) 65826 warnReservedPrefix_1(target, key); 65827 else 65828 warnNonPresent_1(target, key); 65829 } 65830 return has || !isAllowed; 65831 } 65832 }; 65833 var getHandler_1 = { 65834 get: function (target, key) { 65835 if (typeof key === 'string' && !(key in target)) { 65836 if (key in target.$data) 65837 warnReservedPrefix_1(target, key); 65838 else 65839 warnNonPresent_1(target, key); 65840 } 65841 return target[key]; 65842 } 65843 }; 65844 initProxy = function initProxy(vm) { 65845 if (hasProxy_1) { 65846 // determine which proxy handler to use 65847 var options = vm.$options; 65848 var handlers = options.render && options.render._withStripped ? getHandler_1 : hasHandler_1; 65849 vm._renderProxy = new Proxy(vm, handlers); 65850 } 65851 else { 65852 vm._renderProxy = vm; 65853 } 65854 }; 65855 } 65856 65857 /****************************************************************************** 65858 Copyright (c) Microsoft Corporation. 65859 65860 Permission to use, copy, modify, and/or distribute this software for any 65861 purpose with or without fee is hereby granted. 65862 65863 THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH 65864 REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY 65865 AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, 65866 INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM 65867 LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR 65868 OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR 65869 PERFORMANCE OF THIS SOFTWARE. 65870 ***************************************************************************** */ 65871 65872 var __assign = function() { 65873 __assign = Object.assign || function __assign(t) { 65874 for (var s, i = 1, n = arguments.length; i < n; i++) { 65875 s = arguments[i]; 65876 for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; 65877 } 65878 return t; 65879 }; 65880 return __assign.apply(this, arguments); 65881 }; 65882 65883 typeof SuppressedError === "function" ? SuppressedError : function (error, suppressed, message) { 65884 var e = new Error(message); 65885 return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e; 65886 }; 65887 65888 var uid$2 = 0; 65889 var pendingCleanupDeps = []; 65890 var cleanupDeps = function () { 65891 for (var i = 0; i < pendingCleanupDeps.length; i++) { 65892 var dep = pendingCleanupDeps[i]; 65893 dep.subs = dep.subs.filter(function (s) { return s; }); 65894 dep._pending = false; 65895 } 65896 pendingCleanupDeps.length = 0; 65897 }; 65898 /** 65899 * A dep is an observable that can have multiple 65900 * directives subscribing to it. 65901 * @internal 65902 */ 65903 var Dep = /** @class */ (function () { 65904 function Dep() { 65905 // pending subs cleanup 65906 this._pending = false; 65907 this.id = uid$2++; 65908 this.subs = []; 65909 } 65910 Dep.prototype.addSub = function (sub) { 65911 this.subs.push(sub); 65912 }; 65913 Dep.prototype.removeSub = function (sub) { 65914 // #12696 deps with massive amount of subscribers are extremely slow to 65915 // clean up in Chromium 65916 // to workaround this, we unset the sub for now, and clear them on 65917 // next scheduler flush. 65918 this.subs[this.subs.indexOf(sub)] = null; 65919 if (!this._pending) { 65920 this._pending = true; 65921 pendingCleanupDeps.push(this); 65922 } 65923 }; 65924 Dep.prototype.depend = function (info) { 65925 if (Dep.target) { 65926 Dep.target.addDep(this); 65927 if (info && Dep.target.onTrack) { 65928 Dep.target.onTrack(__assign({ effect: Dep.target }, info)); 65929 } 65930 } 65931 }; 65932 Dep.prototype.notify = function (info) { 65933 // stabilize the subscriber list first 65934 var subs = this.subs.filter(function (s) { return s; }); 65935 if (!config.async) { 65936 // subs aren't sorted in scheduler if not running async 65937 // we need to sort them now to make sure they fire in correct 65938 // order 65939 subs.sort(function (a, b) { return a.id - b.id; }); 65940 } 65941 for (var i = 0, l = subs.length; i < l; i++) { 65942 var sub = subs[i]; 65943 if (info) { 65944 sub.onTrigger && 65945 sub.onTrigger(__assign({ effect: subs[i] }, info)); 65946 } 65947 sub.update(); 65948 } 65949 }; 65950 return Dep; 65951 }()); 65952 // The current target watcher being evaluated. 65953 // This is globally unique because only one watcher 65954 // can be evaluated at a time. 65955 Dep.target = null; 65956 var targetStack = []; 65957 function pushTarget(target) { 65958 targetStack.push(target); 65959 Dep.target = target; 65960 } 65961 function popTarget() { 65962 targetStack.pop(); 65963 Dep.target = targetStack[targetStack.length - 1]; 65964 } 65965 65966 /* 65967 * not type checking this file because flow doesn't play well with 65968 * dynamically accessing methods on Array prototype 65969 */ 65970 var arrayProto = Array.prototype; 65971 var arrayMethods = Object.create(arrayProto); 65972 var methodsToPatch = [ 65973 'push', 65974 'pop', 65975 'shift', 65976 'unshift', 65977 'splice', 65978 'sort', 65979 'reverse' 65980 ]; 65981 /** 65982 * Intercept mutating methods and emit events 65983 */ 65984 methodsToPatch.forEach(function (method) { 65985 // cache original method 65986 var original = arrayProto[method]; 65987 def(arrayMethods, method, function mutator() { 65988 var args = []; 65989 for (var _i = 0; _i < arguments.length; _i++) { 65990 args[_i] = arguments[_i]; 65991 } 65992 var result = original.apply(this, args); 65993 var ob = this.__ob__; 65994 var inserted; 65995 switch (method) { 65996 case 'push': 65997 case 'unshift': 65998 inserted = args; 65999 break; 66000 case 'splice': 66001 inserted = args.slice(2); 66002 break; 66003 } 66004 if (inserted) 66005 ob.observeArray(inserted); 66006 // notify change 66007 { 66008 ob.dep.notify({ 66009 type: "array mutation" /* TriggerOpTypes.ARRAY_MUTATION */, 66010 target: this, 66011 key: method 66012 }); 66013 } 66014 return result; 66015 }); 66016 }); 66017 66018 var arrayKeys = Object.getOwnPropertyNames(arrayMethods); 66019 var NO_INITIAL_VALUE = {}; 66020 /** 66021 * In some cases we may want to disable observation inside a component's 66022 * update computation. 66023 */ 66024 var shouldObserve = true; 66025 function toggleObserving(value) { 66026 shouldObserve = value; 66027 } 66028 // ssr mock dep 66029 var mockDep = { 66030 notify: noop, 66031 depend: noop, 66032 addSub: noop, 66033 removeSub: noop 66034 }; 66035 /** 66036 * Observer class that is attached to each observed 66037 * object. Once attached, the observer converts the target 66038 * object's property keys into getter/setters that 66039 * collect dependencies and dispatch updates. 66040 */ 66041 var Observer = /** @class */ (function () { 66042 function Observer(value, shallow, mock) { 66043 if (shallow === void 0) { shallow = false; } 66044 if (mock === void 0) { mock = false; } 66045 this.value = value; 66046 this.shallow = shallow; 66047 this.mock = mock; 66048 // this.value = value 66049 this.dep = mock ? mockDep : new Dep(); 66050 this.vmCount = 0; 66051 def(value, '__ob__', this); 66052 if (isArray(value)) { 66053 if (!mock) { 66054 if (hasProto) { 66055 value.__proto__ = arrayMethods; 66056 /* eslint-enable no-proto */ 66057 } 66058 else { 66059 for (var i = 0, l = arrayKeys.length; i < l; i++) { 66060 var key = arrayKeys[i]; 66061 def(value, key, arrayMethods[key]); 66062 } 66063 } 66064 } 66065 if (!shallow) { 66066 this.observeArray(value); 66067 } 66068 } 66069 else { 66070 /** 66071 * Walk through all properties and convert them into 66072 * getter/setters. This method should only be called when 66073 * value type is Object. 66074 */ 66075 var keys = Object.keys(value); 66076 for (var i = 0; i < keys.length; i++) { 66077 var key = keys[i]; 66078 defineReactive(value, key, NO_INITIAL_VALUE, undefined, shallow, mock); 66079 } 66080 } 66081 } 66082 /** 66083 * Observe a list of Array items. 66084 */ 66085 Observer.prototype.observeArray = function (value) { 66086 for (var i = 0, l = value.length; i < l; i++) { 66087 observe(value[i], false, this.mock); 66088 } 66089 }; 66090 return Observer; 66091 }()); 66092 // helpers 66093 /** 66094 * Attempt to create an observer instance for a value, 66095 * returns the new observer if successfully observed, 66096 * or the existing observer if the value already has one. 66097 */ 66098 function observe(value, shallow, ssrMockReactivity) { 66099 if (value && hasOwn(value, '__ob__') && value.__ob__ instanceof Observer) { 66100 return value.__ob__; 66101 } 66102 if (shouldObserve && 66103 (ssrMockReactivity || !isServerRendering()) && 66104 (isArray(value) || isPlainObject(value)) && 66105 Object.isExtensible(value) && 66106 !value.__v_skip /* ReactiveFlags.SKIP */ && 66107 !isRef(value) && 66108 !(value instanceof VNode)) { 66109 return new Observer(value, shallow, ssrMockReactivity); 66110 } 66111 } 66112 /** 66113 * Define a reactive property on an Object. 66114 */ 66115 function defineReactive(obj, key, val, customSetter, shallow, mock, observeEvenIfShallow) { 66116 if (observeEvenIfShallow === void 0) { observeEvenIfShallow = false; } 66117 var dep = new Dep(); 66118 var property = Object.getOwnPropertyDescriptor(obj, key); 66119 if (property && property.configurable === false) { 66120 return; 66121 } 66122 // cater for pre-defined getter/setters 66123 var getter = property && property.get; 66124 var setter = property && property.set; 66125 if ((!getter || setter) && 66126 (val === NO_INITIAL_VALUE || arguments.length === 2)) { 66127 val = obj[key]; 66128 } 66129 var childOb = shallow ? val && val.__ob__ : observe(val, false, mock); 66130 Object.defineProperty(obj, key, { 66131 enumerable: true, 66132 configurable: true, 66133 get: function reactiveGetter() { 66134 var value = getter ? getter.call(obj) : val; 66135 if (Dep.target) { 66136 { 66137 dep.depend({ 66138 target: obj, 66139 type: "get" /* TrackOpTypes.GET */, 66140 key: key 66141 }); 66142 } 66143 if (childOb) { 66144 childOb.dep.depend(); 66145 if (isArray(value)) { 66146 dependArray(value); 66147 } 66148 } 66149 } 66150 return isRef(value) && !shallow ? value.value : value; 66151 }, 66152 set: function reactiveSetter(newVal) { 66153 var value = getter ? getter.call(obj) : val; 66154 if (!hasChanged(value, newVal)) { 66155 return; 66156 } 66157 if (customSetter) { 66158 customSetter(); 66159 } 66160 if (setter) { 66161 setter.call(obj, newVal); 66162 } 66163 else if (getter) { 66164 // #7981: for accessor properties without setter 66165 return; 66166 } 66167 else if (!shallow && isRef(value) && !isRef(newVal)) { 66168 value.value = newVal; 66169 return; 66170 } 66171 else { 66172 val = newVal; 66173 } 66174 childOb = shallow ? newVal && newVal.__ob__ : observe(newVal, false, mock); 66175 { 66176 dep.notify({ 66177 type: "set" /* TriggerOpTypes.SET */, 66178 target: obj, 66179 key: key, 66180 newValue: newVal, 66181 oldValue: value 66182 }); 66183 } 66184 } 66185 }); 66186 return dep; 66187 } 66188 function set(target, key, val) { 66189 if ((isUndef(target) || isPrimitive(target))) { 66190 warn$2("Cannot set reactive property on undefined, null, or primitive value: ".concat(target)); 66191 } 66192 if (isReadonly(target)) { 66193 warn$2("Set operation on key \"".concat(key, "\" failed: target is readonly.")); 66194 return; 66195 } 66196 var ob = target.__ob__; 66197 if (isArray(target) && isValidArrayIndex(key)) { 66198 target.length = Math.max(target.length, key); 66199 target.splice(key, 1, val); 66200 // when mocking for SSR, array methods are not hijacked 66201 if (ob && !ob.shallow && ob.mock) { 66202 observe(val, false, true); 66203 } 66204 return val; 66205 } 66206 if (key in target && !(key in Object.prototype)) { 66207 target[key] = val; 66208 return val; 66209 } 66210 if (target._isVue || (ob && ob.vmCount)) { 66211 warn$2('Avoid adding reactive properties to a Vue instance or its root $data ' + 66212 'at runtime - declare it upfront in the data option.'); 66213 return val; 66214 } 66215 if (!ob) { 66216 target[key] = val; 66217 return val; 66218 } 66219 defineReactive(ob.value, key, val, undefined, ob.shallow, ob.mock); 66220 { 66221 ob.dep.notify({ 66222 type: "add" /* TriggerOpTypes.ADD */, 66223 target: target, 66224 key: key, 66225 newValue: val, 66226 oldValue: undefined 66227 }); 66228 } 66229 return val; 66230 } 66231 function del(target, key) { 66232 if ((isUndef(target) || isPrimitive(target))) { 66233 warn$2("Cannot delete reactive property on undefined, null, or primitive value: ".concat(target)); 66234 } 66235 if (isArray(target) && isValidArrayIndex(key)) { 66236 target.splice(key, 1); 66237 return; 66238 } 66239 var ob = target.__ob__; 66240 if (target._isVue || (ob && ob.vmCount)) { 66241 warn$2('Avoid deleting properties on a Vue instance or its root $data ' + 66242 '- just set it to null.'); 66243 return; 66244 } 66245 if (isReadonly(target)) { 66246 warn$2("Delete operation on key \"".concat(key, "\" failed: target is readonly.")); 66247 return; 66248 } 66249 if (!hasOwn(target, key)) { 66250 return; 66251 } 66252 delete target[key]; 66253 if (!ob) { 66254 return; 66255 } 66256 { 66257 ob.dep.notify({ 66258 type: "delete" /* TriggerOpTypes.DELETE */, 66259 target: target, 66260 key: key 66261 }); 66262 } 66263 } 66264 /** 66265 * Collect dependencies on array elements when the array is touched, since 66266 * we cannot intercept array element access like property getters. 66267 */ 66268 function dependArray(value) { 66269 for (var e = void 0, i = 0, l = value.length; i < l; i++) { 66270 e = value[i]; 66271 if (e && e.__ob__) { 66272 e.__ob__.dep.depend(); 66273 } 66274 if (isArray(e)) { 66275 dependArray(e); 66276 } 66277 } 66278 } 66279 66280 function reactive(target) { 66281 makeReactive(target, false); 66282 return target; 66283 } 66284 /** 66285 * Return a shallowly-reactive copy of the original object, where only the root 66286 * level properties are reactive. It also does not auto-unwrap refs (even at the 66287 * root level). 66288 */ 66289 function shallowReactive(target) { 66290 makeReactive(target, true); 66291 def(target, "__v_isShallow" /* ReactiveFlags.IS_SHALLOW */, true); 66292 return target; 66293 } 66294 function makeReactive(target, shallow) { 66295 // if trying to observe a readonly proxy, return the readonly version. 66296 if (!isReadonly(target)) { 66297 { 66298 if (isArray(target)) { 66299 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.")); 66300 } 66301 var existingOb = target && target.__ob__; 66302 if (existingOb && existingOb.shallow !== shallow) { 66303 warn$2("Target is already a ".concat(existingOb.shallow ? "" : "non-", "shallow reactive object, and cannot be converted to ").concat(shallow ? "" : "non-", "shallow.")); 66304 } 66305 } 66306 var ob = observe(target, shallow, isServerRendering() /* ssr mock reactivity */); 66307 if (!ob) { 66308 if (target == null || isPrimitive(target)) { 66309 warn$2("value cannot be made reactive: ".concat(String(target))); 66310 } 66311 if (isCollectionType(target)) { 66312 warn$2("Vue 2 does not support reactive collection types such as Map or Set."); 66313 } 66314 } 66315 } 66316 } 66317 function isReactive(value) { 66318 if (isReadonly(value)) { 66319 return isReactive(value["__v_raw" /* ReactiveFlags.RAW */]); 66320 } 66321 return !!(value && value.__ob__); 66322 } 66323 function isShallow(value) { 66324 return !!(value && value.__v_isShallow); 66325 } 66326 function isReadonly(value) { 66327 return !!(value && value.__v_isReadonly); 66328 } 66329 function isProxy(value) { 66330 return isReactive(value) || isReadonly(value); 66331 } 66332 function toRaw(observed) { 66333 var raw = observed && observed["__v_raw" /* ReactiveFlags.RAW */]; 66334 return raw ? toRaw(raw) : observed; 66335 } 66336 function markRaw(value) { 66337 // non-extensible objects won't be observed anyway 66338 if (Object.isExtensible(value)) { 66339 def(value, "__v_skip" /* ReactiveFlags.SKIP */, true); 66340 } 66341 return value; 66342 } 66343 /** 66344 * @internal 66345 */ 66346 function isCollectionType(value) { 66347 var type = toRawType(value); 66348 return (type === 'Map' || type === 'WeakMap' || type === 'Set' || type === 'WeakSet'); 66349 } 66350 66351 /** 66352 * @internal 66353 */ 66354 var RefFlag = "__v_isRef"; 66355 function isRef(r) { 66356 return !!(r && r.__v_isRef === true); 66357 } 66358 function ref$1(value) { 66359 return createRef(value, false); 66360 } 66361 function shallowRef(value) { 66362 return createRef(value, true); 66363 } 66364 function createRef(rawValue, shallow) { 66365 if (isRef(rawValue)) { 66366 return rawValue; 66367 } 66368 var ref = {}; 66369 def(ref, RefFlag, true); 66370 def(ref, "__v_isShallow" /* ReactiveFlags.IS_SHALLOW */, shallow); 66371 def(ref, 'dep', defineReactive(ref, 'value', rawValue, null, shallow, isServerRendering())); 66372 return ref; 66373 } 66374 function triggerRef(ref) { 66375 if (!ref.dep) { 66376 warn$2("received object is not a triggerable ref."); 66377 } 66378 { 66379 ref.dep && 66380 ref.dep.notify({ 66381 type: "set" /* TriggerOpTypes.SET */, 66382 target: ref, 66383 key: 'value' 66384 }); 66385 } 66386 } 66387 function unref(ref) { 66388 return isRef(ref) ? ref.value : ref; 66389 } 66390 function proxyRefs(objectWithRefs) { 66391 if (isReactive(objectWithRefs)) { 66392 return objectWithRefs; 66393 } 66394 var proxy = {}; 66395 var keys = Object.keys(objectWithRefs); 66396 for (var i = 0; i < keys.length; i++) { 66397 proxyWithRefUnwrap(proxy, objectWithRefs, keys[i]); 66398 } 66399 return proxy; 66400 } 66401 function proxyWithRefUnwrap(target, source, key) { 66402 Object.defineProperty(target, key, { 66403 enumerable: true, 66404 configurable: true, 66405 get: function () { 66406 var val = source[key]; 66407 if (isRef(val)) { 66408 return val.value; 66409 } 66410 else { 66411 var ob = val && val.__ob__; 66412 if (ob) 66413 ob.dep.depend(); 66414 return val; 66415 } 66416 }, 66417 set: function (value) { 66418 var oldValue = source[key]; 66419 if (isRef(oldValue) && !isRef(value)) { 66420 oldValue.value = value; 66421 } 66422 else { 66423 source[key] = value; 66424 } 66425 } 66426 }); 66427 } 66428 function customRef(factory) { 66429 var dep = new Dep(); 66430 var _a = factory(function () { 66431 { 66432 dep.depend({ 66433 target: ref, 66434 type: "get" /* TrackOpTypes.GET */, 66435 key: 'value' 66436 }); 66437 } 66438 }, function () { 66439 { 66440 dep.notify({ 66441 target: ref, 66442 type: "set" /* TriggerOpTypes.SET */, 66443 key: 'value' 66444 }); 66445 } 66446 }), get = _a.get, set = _a.set; 66447 var ref = { 66448 get value() { 66449 return get(); 66450 }, 66451 set value(newVal) { 66452 set(newVal); 66453 } 66454 }; 66455 def(ref, RefFlag, true); 66456 return ref; 66457 } 66458 function toRefs(object) { 66459 if (!isReactive(object)) { 66460 warn$2("toRefs() expects a reactive object but received a plain one."); 66461 } 66462 var ret = isArray(object) ? new Array(object.length) : {}; 66463 for (var key in object) { 66464 ret[key] = toRef(object, key); 66465 } 66466 return ret; 66467 } 66468 function toRef(object, key, defaultValue) { 66469 var val = object[key]; 66470 if (isRef(val)) { 66471 return val; 66472 } 66473 var ref = { 66474 get value() { 66475 var val = object[key]; 66476 return val === undefined ? defaultValue : val; 66477 }, 66478 set value(newVal) { 66479 object[key] = newVal; 66480 } 66481 }; 66482 def(ref, RefFlag, true); 66483 return ref; 66484 } 66485 66486 var rawToReadonlyFlag = "__v_rawToReadonly"; 66487 var rawToShallowReadonlyFlag = "__v_rawToShallowReadonly"; 66488 function readonly(target) { 66489 return createReadonly(target, false); 66490 } 66491 function createReadonly(target, shallow) { 66492 if (!isPlainObject(target)) { 66493 { 66494 if (isArray(target)) { 66495 warn$2("Vue 2 does not support readonly arrays."); 66496 } 66497 else if (isCollectionType(target)) { 66498 warn$2("Vue 2 does not support readonly collection types such as Map or Set."); 66499 } 66500 else { 66501 warn$2("value cannot be made readonly: ".concat(typeof target)); 66502 } 66503 } 66504 return target; 66505 } 66506 if (!Object.isExtensible(target)) { 66507 warn$2("Vue 2 does not support creating readonly proxy for non-extensible object."); 66508 } 66509 // already a readonly object 66510 if (isReadonly(target)) { 66511 return target; 66512 } 66513 // already has a readonly proxy 66514 var existingFlag = shallow ? rawToShallowReadonlyFlag : rawToReadonlyFlag; 66515 var existingProxy = target[existingFlag]; 66516 if (existingProxy) { 66517 return existingProxy; 66518 } 66519 var proxy = Object.create(Object.getPrototypeOf(target)); 66520 def(target, existingFlag, proxy); 66521 def(proxy, "__v_isReadonly" /* ReactiveFlags.IS_READONLY */, true); 66522 def(proxy, "__v_raw" /* ReactiveFlags.RAW */, target); 66523 if (isRef(target)) { 66524 def(proxy, RefFlag, true); 66525 } 66526 if (shallow || isShallow(target)) { 66527 def(proxy, "__v_isShallow" /* ReactiveFlags.IS_SHALLOW */, true); 66528 } 66529 var keys = Object.keys(target); 66530 for (var i = 0; i < keys.length; i++) { 66531 defineReadonlyProperty(proxy, target, keys[i], shallow); 66532 } 66533 return proxy; 66534 } 66535 function defineReadonlyProperty(proxy, target, key, shallow) { 66536 Object.defineProperty(proxy, key, { 66537 enumerable: true, 66538 configurable: true, 66539 get: function () { 66540 var val = target[key]; 66541 return shallow || !isPlainObject(val) ? val : readonly(val); 66542 }, 66543 set: function () { 66544 warn$2("Set operation on key \"".concat(key, "\" failed: target is readonly.")); 66545 } 66546 }); 66547 } 66548 /** 66549 * Returns a reactive-copy of the original object, where only the root level 66550 * properties are readonly, and does NOT unwrap refs nor recursively convert 66551 * returned properties. 66552 * This is used for creating the props proxy object for stateful components. 66553 */ 66554 function shallowReadonly(target) { 66555 return createReadonly(target, true); 66556 } 66557 66558 function computed(getterOrOptions, debugOptions) { 66559 var getter; 66560 var setter; 66561 var onlyGetter = isFunction(getterOrOptions); 66562 if (onlyGetter) { 66563 getter = getterOrOptions; 66564 setter = function () { 66565 warn$2('Write operation failed: computed value is readonly'); 66566 } 66567 ; 66568 } 66569 else { 66570 getter = getterOrOptions.get; 66571 setter = getterOrOptions.set; 66572 } 66573 var watcher = isServerRendering() 66574 ? null 66575 : new Watcher(currentInstance, getter, noop, { lazy: true }); 66576 if (watcher && debugOptions) { 66577 watcher.onTrack = debugOptions.onTrack; 66578 watcher.onTrigger = debugOptions.onTrigger; 66579 } 66580 var ref = { 66581 // some libs rely on the presence effect for checking computed refs 66582 // from normal refs, but the implementation doesn't matter 66583 effect: watcher, 66584 get value() { 66585 if (watcher) { 66586 if (watcher.dirty) { 66587 watcher.evaluate(); 66588 } 66589 if (Dep.target) { 66590 if (Dep.target.onTrack) { 66591 Dep.target.onTrack({ 66592 effect: Dep.target, 66593 target: ref, 66594 type: "get" /* TrackOpTypes.GET */, 66595 key: 'value' 66596 }); 66597 } 66598 watcher.depend(); 66599 } 66600 return watcher.value; 66601 } 66602 else { 66603 return getter(); 66604 } 66605 }, 66606 set value(newVal) { 66607 setter(newVal); 66608 } 66609 }; 66610 def(ref, RefFlag, true); 66611 def(ref, "__v_isReadonly" /* ReactiveFlags.IS_READONLY */, onlyGetter); 66612 return ref; 66613 } 66614 66615 var mark; 66616 var measure; 66617 { 66618 var perf_1 = inBrowser && window.performance; 66619 /* istanbul ignore if */ 66620 if (perf_1 && 66621 // @ts-ignore 66622 perf_1.mark && 66623 // @ts-ignore 66624 perf_1.measure && 66625 // @ts-ignore 66626 perf_1.clearMarks && 66627 // @ts-ignore 66628 perf_1.clearMeasures) { 66629 mark = function (tag) { return perf_1.mark(tag); }; 66630 measure = function (name, startTag, endTag) { 66631 perf_1.measure(name, startTag, endTag); 66632 perf_1.clearMarks(startTag); 66633 perf_1.clearMarks(endTag); 66634 // perf.clearMeasures(name) 66635 }; 66636 } 66637 } 66638 66639 var normalizeEvent = cached(function (name) { 66640 var passive = name.charAt(0) === '&'; 66641 name = passive ? name.slice(1) : name; 66642 var once = name.charAt(0) === '~'; // Prefixed last, checked first 66643 name = once ? name.slice(1) : name; 66644 var capture = name.charAt(0) === '!'; 66645 name = capture ? name.slice(1) : name; 66646 return { 66647 name: name, 66648 once: once, 66649 capture: capture, 66650 passive: passive 66651 }; 66652 }); 66653 function createFnInvoker(fns, vm) { 66654 function invoker() { 66655 var fns = invoker.fns; 66656 if (isArray(fns)) { 66657 var cloned = fns.slice(); 66658 for (var i = 0; i < cloned.length; i++) { 66659 invokeWithErrorHandling(cloned[i], null, arguments, vm, "v-on handler"); 66660 } 66661 } 66662 else { 66663 // return handler return value for single handlers 66664 return invokeWithErrorHandling(fns, null, arguments, vm, "v-on handler"); 66665 } 66666 } 66667 invoker.fns = fns; 66668 return invoker; 66669 } 66670 function updateListeners(on, oldOn, add, remove, createOnceHandler, vm) { 66671 var name, cur, old, event; 66672 for (name in on) { 66673 cur = on[name]; 66674 old = oldOn[name]; 66675 event = normalizeEvent(name); 66676 if (isUndef(cur)) { 66677 warn$2("Invalid handler for event \"".concat(event.name, "\": got ") + String(cur), vm); 66678 } 66679 else if (isUndef(old)) { 66680 if (isUndef(cur.fns)) { 66681 cur = on[name] = createFnInvoker(cur, vm); 66682 } 66683 if (isTrue(event.once)) { 66684 cur = on[name] = createOnceHandler(event.name, cur, event.capture); 66685 } 66686 add(event.name, cur, event.capture, event.passive, event.params); 66687 } 66688 else if (cur !== old) { 66689 old.fns = cur; 66690 on[name] = old; 66691 } 66692 } 66693 for (name in oldOn) { 66694 if (isUndef(on[name])) { 66695 event = normalizeEvent(name); 66696 remove(event.name, oldOn[name], event.capture); 66697 } 66698 } 66699 } 66700 66701 function mergeVNodeHook(def, hookKey, hook) { 66702 if (def instanceof VNode) { 66703 def = def.data.hook || (def.data.hook = {}); 66704 } 66705 var invoker; 66706 var oldHook = def[hookKey]; 66707 function wrappedHook() { 66708 hook.apply(this, arguments); 66709 // important: remove merged hook to ensure it's called only once 66710 // and prevent memory leak 66711 remove$2(invoker.fns, wrappedHook); 66712 } 66713 if (isUndef(oldHook)) { 66714 // no existing hook 66715 invoker = createFnInvoker([wrappedHook]); 66716 } 66717 else { 66718 /* istanbul ignore if */ 66719 if (isDef(oldHook.fns) && isTrue(oldHook.merged)) { 66720 // already a merged invoker 66721 invoker = oldHook; 66722 invoker.fns.push(wrappedHook); 66723 } 66724 else { 66725 // existing plain hook 66726 invoker = createFnInvoker([oldHook, wrappedHook]); 66727 } 66728 } 66729 invoker.merged = true; 66730 def[hookKey] = invoker; 66731 } 66732 66733 function extractPropsFromVNodeData(data, Ctor, tag) { 66734 // we are only extracting raw values here. 66735 // validation and default values are handled in the child 66736 // component itself. 66737 var propOptions = Ctor.options.props; 66738 if (isUndef(propOptions)) { 66739 return; 66740 } 66741 var res = {}; 66742 var attrs = data.attrs, props = data.props; 66743 if (isDef(attrs) || isDef(props)) { 66744 for (var key in propOptions) { 66745 var altKey = hyphenate(key); 66746 { 66747 var keyInLowerCase = key.toLowerCase(); 66748 if (key !== keyInLowerCase && attrs && hasOwn(attrs, keyInLowerCase)) { 66749 tip("Prop \"".concat(keyInLowerCase, "\" is passed to component ") + 66750 "".concat(formatComponentName( 66751 // @ts-expect-error tag is string 66752 tag || Ctor), ", but the declared prop name is") + 66753 " \"".concat(key, "\". ") + 66754 "Note that HTML attributes are case-insensitive and camelCased " + 66755 "props need to use their kebab-case equivalents when using in-DOM " + 66756 "templates. You should probably use \"".concat(altKey, "\" instead of \"").concat(key, "\".")); 66757 } 66758 } 66759 checkProp(res, props, key, altKey, true) || 66760 checkProp(res, attrs, key, altKey, false); 66761 } 66762 } 66763 return res; 66764 } 66765 function checkProp(res, hash, key, altKey, preserve) { 66766 if (isDef(hash)) { 66767 if (hasOwn(hash, key)) { 66768 res[key] = hash[key]; 66769 if (!preserve) { 66770 delete hash[key]; 66771 } 66772 return true; 66773 } 66774 else if (hasOwn(hash, altKey)) { 66775 res[key] = hash[altKey]; 66776 if (!preserve) { 66777 delete hash[altKey]; 66778 } 66779 return true; 66780 } 66781 } 66782 return false; 66783 } 66784 66785 // The template compiler attempts to minimize the need for normalization by 66786 // statically analyzing the template at compile time. 66787 // 66788 // For plain HTML markup, normalization can be completely skipped because the 66789 // generated render function is guaranteed to return Array<VNode>. There are 66790 // two cases where extra normalization is needed: 66791 // 1. When the children contains components - because a functional component 66792 // may return an Array instead of a single root. In this case, just a simple 66793 // normalization is needed - if any child is an Array, we flatten the whole 66794 // thing with Array.prototype.concat. It is guaranteed to be only 1-level deep 66795 // because functional components already normalize their own children. 66796 function simpleNormalizeChildren(children) { 66797 for (var i = 0; i < children.length; i++) { 66798 if (isArray(children[i])) { 66799 return Array.prototype.concat.apply([], children); 66800 } 66801 } 66802 return children; 66803 } 66804 // 2. When the children contains constructs that always generated nested Arrays, 66805 // e.g. <template>, <slot>, v-for, or when the children is provided by user 66806 // with hand-written render functions / JSX. In such cases a full normalization 66807 // is needed to cater to all possible types of children values. 66808 function normalizeChildren(children) { 66809 return isPrimitive(children) 66810 ? [createTextVNode(children)] 66811 : isArray(children) 66812 ? normalizeArrayChildren(children) 66813 : undefined; 66814 } 66815 function isTextNode(node) { 66816 return isDef(node) && isDef(node.text) && isFalse(node.isComment); 66817 } 66818 function normalizeArrayChildren(children, nestedIndex) { 66819 var res = []; 66820 var i, c, lastIndex, last; 66821 for (i = 0; i < children.length; i++) { 66822 c = children[i]; 66823 if (isUndef(c) || typeof c === 'boolean') 66824 continue; 66825 lastIndex = res.length - 1; 66826 last = res[lastIndex]; 66827 // nested 66828 if (isArray(c)) { 66829 if (c.length > 0) { 66830 c = normalizeArrayChildren(c, "".concat(nestedIndex || '', "_").concat(i)); 66831 // merge adjacent text nodes 66832 if (isTextNode(c[0]) && isTextNode(last)) { 66833 res[lastIndex] = createTextVNode(last.text + c[0].text); 66834 c.shift(); 66835 } 66836 res.push.apply(res, c); 66837 } 66838 } 66839 else if (isPrimitive(c)) { 66840 if (isTextNode(last)) { 66841 // merge adjacent text nodes 66842 // this is necessary for SSR hydration because text nodes are 66843 // essentially merged when rendered to HTML strings 66844 res[lastIndex] = createTextVNode(last.text + c); 66845 } 66846 else if (c !== '') { 66847 // convert primitive to vnode 66848 res.push(createTextVNode(c)); 66849 } 66850 } 66851 else { 66852 if (isTextNode(c) && isTextNode(last)) { 66853 // merge adjacent text nodes 66854 res[lastIndex] = createTextVNode(last.text + c.text); 66855 } 66856 else { 66857 // default key for nested array children (likely generated by v-for) 66858 if (isTrue(children._isVList) && 66859 isDef(c.tag) && 66860 isUndef(c.key) && 66861 isDef(nestedIndex)) { 66862 c.key = "__vlist".concat(nestedIndex, "_").concat(i, "__"); 66863 } 66864 res.push(c); 66865 } 66866 } 66867 } 66868 return res; 66869 } 66870 66871 var SIMPLE_NORMALIZE = 1; 66872 var ALWAYS_NORMALIZE = 2; 66873 // wrapper function for providing a more flexible interface 66874 // without getting yelled at by flow 66875 function createElement$1(context, tag, data, children, normalizationType, alwaysNormalize) { 66876 if (isArray(data) || isPrimitive(data)) { 66877 normalizationType = children; 66878 children = data; 66879 data = undefined; 66880 } 66881 if (isTrue(alwaysNormalize)) { 66882 normalizationType = ALWAYS_NORMALIZE; 66883 } 66884 return _createElement(context, tag, data, children, normalizationType); 66885 } 66886 function _createElement(context, tag, data, children, normalizationType) { 66887 if (isDef(data) && isDef(data.__ob__)) { 66888 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); 66889 return createEmptyVNode(); 66890 } 66891 // object syntax in v-bind 66892 if (isDef(data) && isDef(data.is)) { 66893 tag = data.is; 66894 } 66895 if (!tag) { 66896 // in case of component :is set to falsy value 66897 return createEmptyVNode(); 66898 } 66899 // warn against non-primitive key 66900 if (isDef(data) && isDef(data.key) && !isPrimitive(data.key)) { 66901 warn$2('Avoid using non-primitive value as key, ' + 66902 'use string/number value instead.', context); 66903 } 66904 // support single function children as default scoped slot 66905 if (isArray(children) && isFunction(children[0])) { 66906 data = data || {}; 66907 data.scopedSlots = { default: children[0] }; 66908 children.length = 0; 66909 } 66910 if (normalizationType === ALWAYS_NORMALIZE) { 66911 children = normalizeChildren(children); 66912 } 66913 else if (normalizationType === SIMPLE_NORMALIZE) { 66914 children = simpleNormalizeChildren(children); 66915 } 66916 var vnode, ns; 66917 if (typeof tag === 'string') { 66918 var Ctor = void 0; 66919 ns = (context.$vnode && context.$vnode.ns) || config.getTagNamespace(tag); 66920 if (config.isReservedTag(tag)) { 66921 // platform built-in elements 66922 if (isDef(data) && 66923 isDef(data.nativeOn) && 66924 data.tag !== 'component') { 66925 warn$2("The .native modifier for v-on is only valid on components but it was used on <".concat(tag, ">."), context); 66926 } 66927 vnode = new VNode(config.parsePlatformTagName(tag), data, children, undefined, undefined, context); 66928 } 66929 else if ((!data || !data.pre) && 66930 isDef((Ctor = resolveAsset(context.$options, 'components', tag)))) { 66931 // component 66932 vnode = createComponent(Ctor, data, context, children, tag); 66933 } 66934 else { 66935 // unknown or unlisted namespaced elements 66936 // check at runtime because it may get assigned a namespace when its 66937 // parent normalizes children 66938 vnode = new VNode(tag, data, children, undefined, undefined, context); 66939 } 66940 } 66941 else { 66942 // direct component options / constructor 66943 vnode = createComponent(tag, data, context, children); 66944 } 66945 if (isArray(vnode)) { 66946 return vnode; 66947 } 66948 else if (isDef(vnode)) { 66949 if (isDef(ns)) 66950 applyNS(vnode, ns); 66951 if (isDef(data)) 66952 registerDeepBindings(data); 66953 return vnode; 66954 } 66955 else { 66956 return createEmptyVNode(); 66957 } 66958 } 66959 function applyNS(vnode, ns, force) { 66960 vnode.ns = ns; 66961 if (vnode.tag === 'foreignObject') { 66962 // use default namespace inside foreignObject 66963 ns = undefined; 66964 force = true; 66965 } 66966 if (isDef(vnode.children)) { 66967 for (var i = 0, l = vnode.children.length; i < l; i++) { 66968 var child = vnode.children[i]; 66969 if (isDef(child.tag) && 66970 (isUndef(child.ns) || (isTrue(force) && child.tag !== 'svg'))) { 66971 applyNS(child, ns, force); 66972 } 66973 } 66974 } 66975 } 66976 // ref #5318 66977 // necessary to ensure parent re-render when deep bindings like :style and 66978 // :class are used on slot nodes 66979 function registerDeepBindings(data) { 66980 if (isObject(data.style)) { 66981 traverse(data.style); 66982 } 66983 if (isObject(data.class)) { 66984 traverse(data.class); 66985 } 66986 } 66987 66988 /** 66989 * Runtime helper for rendering v-for lists. 66990 */ 66991 function renderList(val, render) { 66992 var ret = null, i, l, keys, key; 66993 if (isArray(val) || typeof val === 'string') { 66994 ret = new Array(val.length); 66995 for (i = 0, l = val.length; i < l; i++) { 66996 ret[i] = render(val[i], i); 66997 } 66998 } 66999 else if (typeof val === 'number') { 67000 ret = new Array(val); 67001 for (i = 0; i < val; i++) { 67002 ret[i] = render(i + 1, i); 67003 } 67004 } 67005 else if (isObject(val)) { 67006 if (hasSymbol && val[Symbol.iterator]) { 67007 ret = []; 67008 var iterator = val[Symbol.iterator](); 67009 var result = iterator.next(); 67010 while (!result.done) { 67011 ret.push(render(result.value, ret.length)); 67012 result = iterator.next(); 67013 } 67014 } 67015 else { 67016 keys = Object.keys(val); 67017 ret = new Array(keys.length); 67018 for (i = 0, l = keys.length; i < l; i++) { 67019 key = keys[i]; 67020 ret[i] = render(val[key], key, i); 67021 } 67022 } 67023 } 67024 if (!isDef(ret)) { 67025 ret = []; 67026 } 67027 ret._isVList = true; 67028 return ret; 67029 } 67030 67031 /** 67032 * Runtime helper for rendering <slot> 67033 */ 67034 function renderSlot(name, fallbackRender, props, bindObject) { 67035 var scopedSlotFn = this.$scopedSlots[name]; 67036 var nodes; 67037 if (scopedSlotFn) { 67038 // scoped slot 67039 props = props || {}; 67040 if (bindObject) { 67041 if (!isObject(bindObject)) { 67042 warn$2('slot v-bind without argument expects an Object', this); 67043 } 67044 props = extend(extend({}, bindObject), props); 67045 } 67046 nodes = 67047 scopedSlotFn(props) || 67048 (isFunction(fallbackRender) ? fallbackRender() : fallbackRender); 67049 } 67050 else { 67051 nodes = 67052 this.$slots[name] || 67053 (isFunction(fallbackRender) ? fallbackRender() : fallbackRender); 67054 } 67055 var target = props && props.slot; 67056 if (target) { 67057 return this.$createElement('template', { slot: target }, nodes); 67058 } 67059 else { 67060 return nodes; 67061 } 67062 } 67063 67064 /** 67065 * Runtime helper for resolving filters 67066 */ 67067 function resolveFilter(id) { 67068 return resolveAsset(this.$options, 'filters', id, true) || identity; 67069 } 67070 67071 function isKeyNotMatch(expect, actual) { 67072 if (isArray(expect)) { 67073 return expect.indexOf(actual) === -1; 67074 } 67075 else { 67076 return expect !== actual; 67077 } 67078 } 67079 /** 67080 * Runtime helper for checking keyCodes from config. 67081 * exposed as Vue.prototype._k 67082 * passing in eventKeyName as last argument separately for backwards compat 67083 */ 67084 function checkKeyCodes(eventKeyCode, key, builtInKeyCode, eventKeyName, builtInKeyName) { 67085 var mappedKeyCode = config.keyCodes[key] || builtInKeyCode; 67086 if (builtInKeyName && eventKeyName && !config.keyCodes[key]) { 67087 return isKeyNotMatch(builtInKeyName, eventKeyName); 67088 } 67089 else if (mappedKeyCode) { 67090 return isKeyNotMatch(mappedKeyCode, eventKeyCode); 67091 } 67092 else if (eventKeyName) { 67093 return hyphenate(eventKeyName) !== key; 67094 } 67095 return eventKeyCode === undefined; 67096 } 67097 67098 /** 67099 * Runtime helper for merging v-bind="object" into a VNode's data. 67100 */ 67101 function bindObjectProps(data, tag, value, asProp, isSync) { 67102 if (value) { 67103 if (!isObject(value)) { 67104 warn$2('v-bind without argument expects an Object or Array value', this); 67105 } 67106 else { 67107 if (isArray(value)) { 67108 value = toObject(value); 67109 } 67110 var hash = void 0; 67111 var _loop_1 = function (key) { 67112 if (key === 'class' || key === 'style' || isReservedAttribute(key)) { 67113 hash = data; 67114 } 67115 else { 67116 var type = data.attrs && data.attrs.type; 67117 hash = 67118 asProp || config.mustUseProp(tag, type, key) 67119 ? data.domProps || (data.domProps = {}) 67120 : data.attrs || (data.attrs = {}); 67121 } 67122 var camelizedKey = camelize(key); 67123 var hyphenatedKey = hyphenate(key); 67124 if (!(camelizedKey in hash) && !(hyphenatedKey in hash)) { 67125 hash[key] = value[key]; 67126 if (isSync) { 67127 var on = data.on || (data.on = {}); 67128 on["update:".concat(key)] = function ($event) { 67129 value[key] = $event; 67130 }; 67131 } 67132 } 67133 }; 67134 for (var key in value) { 67135 _loop_1(key); 67136 } 67137 } 67138 } 67139 return data; 67140 } 67141 67142 /** 67143 * Runtime helper for rendering static trees. 67144 */ 67145 function renderStatic(index, isInFor) { 67146 var cached = this._staticTrees || (this._staticTrees = []); 67147 var tree = cached[index]; 67148 // if has already-rendered static tree and not inside v-for, 67149 // we can reuse the same tree. 67150 if (tree && !isInFor) { 67151 return tree; 67152 } 67153 // otherwise, render a fresh tree. 67154 tree = cached[index] = this.$options.staticRenderFns[index].call(this._renderProxy, this._c, this // for render fns generated for functional component templates 67155 ); 67156 markStatic$1(tree, "__static__".concat(index), false); 67157 return tree; 67158 } 67159 /** 67160 * Runtime helper for v-once. 67161 * Effectively it means marking the node as static with a unique key. 67162 */ 67163 function markOnce(tree, index, key) { 67164 markStatic$1(tree, "__once__".concat(index).concat(key ? "_".concat(key) : ""), true); 67165 return tree; 67166 } 67167 function markStatic$1(tree, key, isOnce) { 67168 if (isArray(tree)) { 67169 for (var i = 0; i < tree.length; i++) { 67170 if (tree[i] && typeof tree[i] !== 'string') { 67171 markStaticNode(tree[i], "".concat(key, "_").concat(i), isOnce); 67172 } 67173 } 67174 } 67175 else { 67176 markStaticNode(tree, key, isOnce); 67177 } 67178 } 67179 function markStaticNode(node, key, isOnce) { 67180 node.isStatic = true; 67181 node.key = key; 67182 node.isOnce = isOnce; 67183 } 67184 67185 function bindObjectListeners(data, value) { 67186 if (value) { 67187 if (!isPlainObject(value)) { 67188 warn$2('v-on without argument expects an Object value', this); 67189 } 67190 else { 67191 var on = (data.on = data.on ? extend({}, data.on) : {}); 67192 for (var key in value) { 67193 var existing = on[key]; 67194 var ours = value[key]; 67195 on[key] = existing ? [].concat(existing, ours) : ours; 67196 } 67197 } 67198 } 67199 return data; 67200 } 67201 67202 function resolveScopedSlots(fns, res, 67203 // the following are added in 2.6 67204 hasDynamicKeys, contentHashKey) { 67205 res = res || { $stable: !hasDynamicKeys }; 67206 for (var i = 0; i < fns.length; i++) { 67207 var slot = fns[i]; 67208 if (isArray(slot)) { 67209 resolveScopedSlots(slot, res, hasDynamicKeys); 67210 } 67211 else if (slot) { 67212 // marker for reverse proxying v-slot without scope on this.$slots 67213 // @ts-expect-error 67214 if (slot.proxy) { 67215 // @ts-expect-error 67216 slot.fn.proxy = true; 67217 } 67218 res[slot.key] = slot.fn; 67219 } 67220 } 67221 if (contentHashKey) { 67222 res.$key = contentHashKey; 67223 } 67224 return res; 67225 } 67226 67227 // helper to process dynamic keys for dynamic arguments in v-bind and v-on. 67228 function bindDynamicKeys(baseObj, values) { 67229 for (var i = 0; i < values.length; i += 2) { 67230 var key = values[i]; 67231 if (typeof key === 'string' && key) { 67232 baseObj[values[i]] = values[i + 1]; 67233 } 67234 else if (key !== '' && key !== null) { 67235 // null is a special value for explicitly removing a binding 67236 warn$2("Invalid value for dynamic directive argument (expected string or null): ".concat(key), this); 67237 } 67238 } 67239 return baseObj; 67240 } 67241 // helper to dynamically append modifier runtime markers to event names. 67242 // ensure only append when value is already string, otherwise it will be cast 67243 // to string and cause the type check to miss. 67244 function prependModifier(value, symbol) { 67245 return typeof value === 'string' ? symbol + value : value; 67246 } 67247 67248 function installRenderHelpers(target) { 67249 target._o = markOnce; 67250 target._n = toNumber; 67251 target._s = toString; 67252 target._l = renderList; 67253 target._t = renderSlot; 67254 target._q = looseEqual; 67255 target._i = looseIndexOf; 67256 target._m = renderStatic; 67257 target._f = resolveFilter; 67258 target._k = checkKeyCodes; 67259 target._b = bindObjectProps; 67260 target._v = createTextVNode; 67261 target._e = createEmptyVNode; 67262 target._u = resolveScopedSlots; 67263 target._g = bindObjectListeners; 67264 target._d = bindDynamicKeys; 67265 target._p = prependModifier; 67266 } 67267 67268 /** 67269 * Runtime helper for resolving raw children VNodes into a slot object. 67270 */ 67271 function resolveSlots(children, context) { 67272 if (!children || !children.length) { 67273 return {}; 67274 } 67275 var slots = {}; 67276 for (var i = 0, l = children.length; i < l; i++) { 67277 var child = children[i]; 67278 var data = child.data; 67279 // remove slot attribute if the node is resolved as a Vue slot node 67280 if (data && data.attrs && data.attrs.slot) { 67281 delete data.attrs.slot; 67282 } 67283 // named slots should only be respected if the vnode was rendered in the 67284 // same context. 67285 if ((child.context === context || child.fnContext === context) && 67286 data && 67287 data.slot != null) { 67288 var name_1 = data.slot; 67289 var slot = slots[name_1] || (slots[name_1] = []); 67290 if (child.tag === 'template') { 67291 slot.push.apply(slot, child.children || []); 67292 } 67293 else { 67294 slot.push(child); 67295 } 67296 } 67297 else { 67298 (slots.default || (slots.default = [])).push(child); 67299 } 67300 } 67301 // ignore slots that contains only whitespace 67302 for (var name_2 in slots) { 67303 if (slots[name_2].every(isWhitespace)) { 67304 delete slots[name_2]; 67305 } 67306 } 67307 return slots; 67308 } 67309 function isWhitespace(node) { 67310 return (node.isComment && !node.asyncFactory) || node.text === ' '; 67311 } 67312 67313 function isAsyncPlaceholder(node) { 67314 // @ts-expect-error not really boolean type 67315 return node.isComment && node.asyncFactory; 67316 } 67317 67318 function normalizeScopedSlots(ownerVm, scopedSlots, normalSlots, prevScopedSlots) { 67319 var res; 67320 var hasNormalSlots = Object.keys(normalSlots).length > 0; 67321 var isStable = scopedSlots ? !!scopedSlots.$stable : !hasNormalSlots; 67322 var key = scopedSlots && scopedSlots.$key; 67323 if (!scopedSlots) { 67324 res = {}; 67325 } 67326 else if (scopedSlots._normalized) { 67327 // fast path 1: child component re-render only, parent did not change 67328 return scopedSlots._normalized; 67329 } 67330 else if (isStable && 67331 prevScopedSlots && 67332 prevScopedSlots !== emptyObject && 67333 key === prevScopedSlots.$key && 67334 !hasNormalSlots && 67335 !prevScopedSlots.$hasNormal) { 67336 // fast path 2: stable scoped slots w/ no normal slots to proxy, 67337 // only need to normalize once 67338 return prevScopedSlots; 67339 } 67340 else { 67341 res = {}; 67342 for (var key_1 in scopedSlots) { 67343 if (scopedSlots[key_1] && key_1[0] !== '$') { 67344 res[key_1] = normalizeScopedSlot(ownerVm, normalSlots, key_1, scopedSlots[key_1]); 67345 } 67346 } 67347 } 67348 // expose normal slots on scopedSlots 67349 for (var key_2 in normalSlots) { 67350 if (!(key_2 in res)) { 67351 res[key_2] = proxyNormalSlot(normalSlots, key_2); 67352 } 67353 } 67354 // avoriaz seems to mock a non-extensible $scopedSlots object 67355 // and when that is passed down this would cause an error 67356 if (scopedSlots && Object.isExtensible(scopedSlots)) { 67357 scopedSlots._normalized = res; 67358 } 67359 def(res, '$stable', isStable); 67360 def(res, '$key', key); 67361 def(res, '$hasNormal', hasNormalSlots); 67362 return res; 67363 } 67364 function normalizeScopedSlot(vm, normalSlots, key, fn) { 67365 var normalized = function () { 67366 var cur = currentInstance; 67367 setCurrentInstance(vm); 67368 var res = arguments.length ? fn.apply(null, arguments) : fn({}); 67369 res = 67370 res && typeof res === 'object' && !isArray(res) 67371 ? [res] // single vnode 67372 : normalizeChildren(res); 67373 var vnode = res && res[0]; 67374 setCurrentInstance(cur); 67375 return res && 67376 (!vnode || 67377 (res.length === 1 && vnode.isComment && !isAsyncPlaceholder(vnode))) // #9658, #10391 67378 ? undefined 67379 : res; 67380 }; 67381 // this is a slot using the new v-slot syntax without scope. although it is 67382 // compiled as a scoped slot, render fn users would expect it to be present 67383 // on this.$slots because the usage is semantically a normal slot. 67384 if (fn.proxy) { 67385 Object.defineProperty(normalSlots, key, { 67386 get: normalized, 67387 enumerable: true, 67388 configurable: true 67389 }); 67390 } 67391 return normalized; 67392 } 67393 function proxyNormalSlot(slots, key) { 67394 return function () { return slots[key]; }; 67395 } 67396 67397 function initSetup(vm) { 67398 var options = vm.$options; 67399 var setup = options.setup; 67400 if (setup) { 67401 var ctx = (vm._setupContext = createSetupContext(vm)); 67402 setCurrentInstance(vm); 67403 pushTarget(); 67404 var setupResult = invokeWithErrorHandling(setup, null, [vm._props || shallowReactive({}), ctx], vm, "setup"); 67405 popTarget(); 67406 setCurrentInstance(); 67407 if (isFunction(setupResult)) { 67408 // render function 67409 // @ts-ignore 67410 options.render = setupResult; 67411 } 67412 else if (isObject(setupResult)) { 67413 // bindings 67414 if (setupResult instanceof VNode) { 67415 warn$2("setup() should not return VNodes directly - " + 67416 "return a render function instead."); 67417 } 67418 vm._setupState = setupResult; 67419 // __sfc indicates compiled bindings from <script setup> 67420 if (!setupResult.__sfc) { 67421 for (var key in setupResult) { 67422 if (!isReserved(key)) { 67423 proxyWithRefUnwrap(vm, setupResult, key); 67424 } 67425 else { 67426 warn$2("Avoid using variables that start with _ or $ in setup()."); 67427 } 67428 } 67429 } 67430 else { 67431 // exposed for compiled render fn 67432 var proxy = (vm._setupProxy = {}); 67433 for (var key in setupResult) { 67434 if (key !== '__sfc') { 67435 proxyWithRefUnwrap(proxy, setupResult, key); 67436 } 67437 } 67438 } 67439 } 67440 else if (setupResult !== undefined) { 67441 warn$2("setup() should return an object. Received: ".concat(setupResult === null ? 'null' : typeof setupResult)); 67442 } 67443 } 67444 } 67445 function createSetupContext(vm) { 67446 var exposeCalled = false; 67447 return { 67448 get attrs() { 67449 if (!vm._attrsProxy) { 67450 var proxy = (vm._attrsProxy = {}); 67451 def(proxy, '_v_attr_proxy', true); 67452 syncSetupProxy(proxy, vm.$attrs, emptyObject, vm, '$attrs'); 67453 } 67454 return vm._attrsProxy; 67455 }, 67456 get listeners() { 67457 if (!vm._listenersProxy) { 67458 var proxy = (vm._listenersProxy = {}); 67459 syncSetupProxy(proxy, vm.$listeners, emptyObject, vm, '$listeners'); 67460 } 67461 return vm._listenersProxy; 67462 }, 67463 get slots() { 67464 return initSlotsProxy(vm); 67465 }, 67466 emit: bind$1(vm.$emit, vm), 67467 expose: function (exposed) { 67468 { 67469 if (exposeCalled) { 67470 warn$2("expose() should be called only once per setup().", vm); 67471 } 67472 exposeCalled = true; 67473 } 67474 if (exposed) { 67475 Object.keys(exposed).forEach(function (key) { 67476 return proxyWithRefUnwrap(vm, exposed, key); 67477 }); 67478 } 67479 } 67480 }; 67481 } 67482 function syncSetupProxy(to, from, prev, instance, type) { 67483 var changed = false; 67484 for (var key in from) { 67485 if (!(key in to)) { 67486 changed = true; 67487 defineProxyAttr(to, key, instance, type); 67488 } 67489 else if (from[key] !== prev[key]) { 67490 changed = true; 67491 } 67492 } 67493 for (var key in to) { 67494 if (!(key in from)) { 67495 changed = true; 67496 delete to[key]; 67497 } 67498 } 67499 return changed; 67500 } 67501 function defineProxyAttr(proxy, key, instance, type) { 67502 Object.defineProperty(proxy, key, { 67503 enumerable: true, 67504 configurable: true, 67505 get: function () { 67506 return instance[type][key]; 67507 } 67508 }); 67509 } 67510 function initSlotsProxy(vm) { 67511 if (!vm._slotsProxy) { 67512 syncSetupSlots((vm._slotsProxy = {}), vm.$scopedSlots); 67513 } 67514 return vm._slotsProxy; 67515 } 67516 function syncSetupSlots(to, from) { 67517 for (var key in from) { 67518 to[key] = from[key]; 67519 } 67520 for (var key in to) { 67521 if (!(key in from)) { 67522 delete to[key]; 67523 } 67524 } 67525 } 67526 /** 67527 * @internal use manual type def because public setup context type relies on 67528 * legacy VNode types 67529 */ 67530 function useSlots() { 67531 return getContext().slots; 67532 } 67533 /** 67534 * @internal use manual type def because public setup context type relies on 67535 * legacy VNode types 67536 */ 67537 function useAttrs() { 67538 return getContext().attrs; 67539 } 67540 /** 67541 * Vue 2 only 67542 * @internal use manual type def because public setup context type relies on 67543 * legacy VNode types 67544 */ 67545 function useListeners() { 67546 return getContext().listeners; 67547 } 67548 function getContext() { 67549 if (!currentInstance) { 67550 warn$2("useContext() called without active instance."); 67551 } 67552 var vm = currentInstance; 67553 return vm._setupContext || (vm._setupContext = createSetupContext(vm)); 67554 } 67555 /** 67556 * Runtime helper for merging default declarations. Imported by compiled code 67557 * only. 67558 * @internal 67559 */ 67560 function mergeDefaults(raw, defaults) { 67561 var props = isArray(raw) 67562 ? raw.reduce(function (normalized, p) { return ((normalized[p] = {}), normalized); }, {}) 67563 : raw; 67564 for (var key in defaults) { 67565 var opt = props[key]; 67566 if (opt) { 67567 if (isArray(opt) || isFunction(opt)) { 67568 props[key] = { type: opt, default: defaults[key] }; 67569 } 67570 else { 67571 opt.default = defaults[key]; 67572 } 67573 } 67574 else if (opt === null) { 67575 props[key] = { default: defaults[key] }; 67576 } 67577 else { 67578 warn$2("props default key \"".concat(key, "\" has no corresponding declaration.")); 67579 } 67580 } 67581 return props; 67582 } 67583 67584 function initRender(vm) { 67585 vm._vnode = null; // the root of the child tree 67586 vm._staticTrees = null; // v-once cached trees 67587 var options = vm.$options; 67588 var parentVnode = (vm.$vnode = options._parentVnode); // the placeholder node in parent tree 67589 var renderContext = parentVnode && parentVnode.context; 67590 vm.$slots = resolveSlots(options._renderChildren, renderContext); 67591 vm.$scopedSlots = parentVnode 67592 ? normalizeScopedSlots(vm.$parent, parentVnode.data.scopedSlots, vm.$slots) 67593 : emptyObject; 67594 // bind the createElement fn to this instance 67595 // so that we get proper render context inside it. 67596 // args order: tag, data, children, normalizationType, alwaysNormalize 67597 // internal version is used by render functions compiled from templates 67598 // @ts-expect-error 67599 vm._c = function (a, b, c, d) { return createElement$1(vm, a, b, c, d, false); }; 67600 // normalization is always applied for the public version, used in 67601 // user-written render functions. 67602 // @ts-expect-error 67603 vm.$createElement = function (a, b, c, d) { return createElement$1(vm, a, b, c, d, true); }; 67604 // $attrs & $listeners are exposed for easier HOC creation. 67605 // they need to be reactive so that HOCs using them are always updated 67606 var parentData = parentVnode && parentVnode.data; 67607 /* istanbul ignore else */ 67608 { 67609 defineReactive(vm, '$attrs', (parentData && parentData.attrs) || emptyObject, function () { 67610 !isUpdatingChildComponent && warn$2("$attrs is readonly.", vm); 67611 }, true); 67612 defineReactive(vm, '$listeners', options._parentListeners || emptyObject, function () { 67613 !isUpdatingChildComponent && warn$2("$listeners is readonly.", vm); 67614 }, true); 67615 } 67616 } 67617 var currentRenderingInstance = null; 67618 function renderMixin(Vue) { 67619 // install runtime convenience helpers 67620 installRenderHelpers(Vue.prototype); 67621 Vue.prototype.$nextTick = function (fn) { 67622 return nextTick(fn, this); 67623 }; 67624 Vue.prototype._render = function () { 67625 var vm = this; 67626 var _a = vm.$options, render = _a.render, _parentVnode = _a._parentVnode; 67627 if (_parentVnode && vm._isMounted) { 67628 vm.$scopedSlots = normalizeScopedSlots(vm.$parent, _parentVnode.data.scopedSlots, vm.$slots, vm.$scopedSlots); 67629 if (vm._slotsProxy) { 67630 syncSetupSlots(vm._slotsProxy, vm.$scopedSlots); 67631 } 67632 } 67633 // set parent vnode. this allows render functions to have access 67634 // to the data on the placeholder node. 67635 vm.$vnode = _parentVnode; 67636 // render self 67637 var prevInst = currentInstance; 67638 var prevRenderInst = currentRenderingInstance; 67639 var vnode; 67640 try { 67641 setCurrentInstance(vm); 67642 currentRenderingInstance = vm; 67643 vnode = render.call(vm._renderProxy, vm.$createElement); 67644 } 67645 catch (e) { 67646 handleError(e, vm, "render"); 67647 // return error render result, 67648 // or previous vnode to prevent render error causing blank component 67649 /* istanbul ignore else */ 67650 if (vm.$options.renderError) { 67651 try { 67652 vnode = vm.$options.renderError.call(vm._renderProxy, vm.$createElement, e); 67653 } 67654 catch (e) { 67655 handleError(e, vm, "renderError"); 67656 vnode = vm._vnode; 67657 } 67658 } 67659 else { 67660 vnode = vm._vnode; 67661 } 67662 } 67663 finally { 67664 currentRenderingInstance = prevRenderInst; 67665 setCurrentInstance(prevInst); 67666 } 67667 // if the returned array contains only a single node, allow it 67668 if (isArray(vnode) && vnode.length === 1) { 67669 vnode = vnode[0]; 67670 } 67671 // return empty vnode in case the render function errored out 67672 if (!(vnode instanceof VNode)) { 67673 if (isArray(vnode)) { 67674 warn$2('Multiple root nodes returned from render function. Render function ' + 67675 'should return a single root node.', vm); 67676 } 67677 vnode = createEmptyVNode(); 67678 } 67679 // set parent 67680 vnode.parent = _parentVnode; 67681 return vnode; 67682 }; 67683 } 67684 67685 function ensureCtor(comp, base) { 67686 if (comp.__esModule || (hasSymbol && comp[Symbol.toStringTag] === 'Module')) { 67687 comp = comp.default; 67688 } 67689 return isObject(comp) ? base.extend(comp) : comp; 67690 } 67691 function createAsyncPlaceholder(factory, data, context, children, tag) { 67692 var node = createEmptyVNode(); 67693 node.asyncFactory = factory; 67694 node.asyncMeta = { data: data, context: context, children: children, tag: tag }; 67695 return node; 67696 } 67697 function resolveAsyncComponent(factory, baseCtor) { 67698 if (isTrue(factory.error) && isDef(factory.errorComp)) { 67699 return factory.errorComp; 67700 } 67701 if (isDef(factory.resolved)) { 67702 return factory.resolved; 67703 } 67704 var owner = currentRenderingInstance; 67705 if (owner && isDef(factory.owners) && factory.owners.indexOf(owner) === -1) { 67706 // already pending 67707 factory.owners.push(owner); 67708 } 67709 if (isTrue(factory.loading) && isDef(factory.loadingComp)) { 67710 return factory.loadingComp; 67711 } 67712 if (owner && !isDef(factory.owners)) { 67713 var owners_1 = (factory.owners = [owner]); 67714 var sync_1 = true; 67715 var timerLoading_1 = null; 67716 var timerTimeout_1 = null; 67717 owner.$on('hook:destroyed', function () { return remove$2(owners_1, owner); }); 67718 var forceRender_1 = function (renderCompleted) { 67719 for (var i = 0, l = owners_1.length; i < l; i++) { 67720 owners_1[i].$forceUpdate(); 67721 } 67722 if (renderCompleted) { 67723 owners_1.length = 0; 67724 if (timerLoading_1 !== null) { 67725 clearTimeout(timerLoading_1); 67726 timerLoading_1 = null; 67727 } 67728 if (timerTimeout_1 !== null) { 67729 clearTimeout(timerTimeout_1); 67730 timerTimeout_1 = null; 67731 } 67732 } 67733 }; 67734 var resolve = once(function (res) { 67735 // cache resolved 67736 factory.resolved = ensureCtor(res, baseCtor); 67737 // invoke callbacks only if this is not a synchronous resolve 67738 // (async resolves are shimmed as synchronous during SSR) 67739 if (!sync_1) { 67740 forceRender_1(true); 67741 } 67742 else { 67743 owners_1.length = 0; 67744 } 67745 }); 67746 var reject_1 = once(function (reason) { 67747 warn$2("Failed to resolve async component: ".concat(String(factory)) + 67748 (reason ? "\nReason: ".concat(reason) : '')); 67749 if (isDef(factory.errorComp)) { 67750 factory.error = true; 67751 forceRender_1(true); 67752 } 67753 }); 67754 var res_1 = factory(resolve, reject_1); 67755 if (isObject(res_1)) { 67756 if (isPromise(res_1)) { 67757 // () => Promise 67758 if (isUndef(factory.resolved)) { 67759 res_1.then(resolve, reject_1); 67760 } 67761 } 67762 else if (isPromise(res_1.component)) { 67763 res_1.component.then(resolve, reject_1); 67764 if (isDef(res_1.error)) { 67765 factory.errorComp = ensureCtor(res_1.error, baseCtor); 67766 } 67767 if (isDef(res_1.loading)) { 67768 factory.loadingComp = ensureCtor(res_1.loading, baseCtor); 67769 if (res_1.delay === 0) { 67770 factory.loading = true; 67771 } 67772 else { 67773 // @ts-expect-error NodeJS timeout type 67774 timerLoading_1 = setTimeout(function () { 67775 timerLoading_1 = null; 67776 if (isUndef(factory.resolved) && isUndef(factory.error)) { 67777 factory.loading = true; 67778 forceRender_1(false); 67779 } 67780 }, res_1.delay || 200); 67781 } 67782 } 67783 if (isDef(res_1.timeout)) { 67784 // @ts-expect-error NodeJS timeout type 67785 timerTimeout_1 = setTimeout(function () { 67786 timerTimeout_1 = null; 67787 if (isUndef(factory.resolved)) { 67788 reject_1("timeout (".concat(res_1.timeout, "ms)") ); 67789 } 67790 }, res_1.timeout); 67791 } 67792 } 67793 } 67794 sync_1 = false; 67795 // return in case resolved synchronously 67796 return factory.loading ? factory.loadingComp : factory.resolved; 67797 } 67798 } 67799 67800 function getFirstComponentChild(children) { 67801 if (isArray(children)) { 67802 for (var i = 0; i < children.length; i++) { 67803 var c = children[i]; 67804 if (isDef(c) && (isDef(c.componentOptions) || isAsyncPlaceholder(c))) { 67805 return c; 67806 } 67807 } 67808 } 67809 } 67810 67811 function initEvents(vm) { 67812 vm._events = Object.create(null); 67813 vm._hasHookEvent = false; 67814 // init parent attached events 67815 var listeners = vm.$options._parentListeners; 67816 if (listeners) { 67817 updateComponentListeners(vm, listeners); 67818 } 67819 } 67820 var target$1; 67821 function add$1(event, fn) { 67822 target$1.$on(event, fn); 67823 } 67824 function remove$1(event, fn) { 67825 target$1.$off(event, fn); 67826 } 67827 function createOnceHandler$1(event, fn) { 67828 var _target = target$1; 67829 return function onceHandler() { 67830 var res = fn.apply(null, arguments); 67831 if (res !== null) { 67832 _target.$off(event, onceHandler); 67833 } 67834 }; 67835 } 67836 function updateComponentListeners(vm, listeners, oldListeners) { 67837 target$1 = vm; 67838 updateListeners(listeners, oldListeners || {}, add$1, remove$1, createOnceHandler$1, vm); 67839 target$1 = undefined; 67840 } 67841 function eventsMixin(Vue) { 67842 var hookRE = /^hook:/; 67843 Vue.prototype.$on = function (event, fn) { 67844 var vm = this; 67845 if (isArray(event)) { 67846 for (var i = 0, l = event.length; i < l; i++) { 67847 vm.$on(event[i], fn); 67848 } 67849 } 67850 else { 67851 (vm._events[event] || (vm._events[event] = [])).push(fn); 67852 // optimize hook:event cost by using a boolean flag marked at registration 67853 // instead of a hash lookup 67854 if (hookRE.test(event)) { 67855 vm._hasHookEvent = true; 67856 } 67857 } 67858 return vm; 67859 }; 67860 Vue.prototype.$once = function (event, fn) { 67861 var vm = this; 67862 function on() { 67863 vm.$off(event, on); 67864 fn.apply(vm, arguments); 67865 } 67866 on.fn = fn; 67867 vm.$on(event, on); 67868 return vm; 67869 }; 67870 Vue.prototype.$off = function (event, fn) { 67871 var vm = this; 67872 // all 67873 if (!arguments.length) { 67874 vm._events = Object.create(null); 67875 return vm; 67876 } 67877 // array of events 67878 if (isArray(event)) { 67879 for (var i_1 = 0, l = event.length; i_1 < l; i_1++) { 67880 vm.$off(event[i_1], fn); 67881 } 67882 return vm; 67883 } 67884 // specific event 67885 var cbs = vm._events[event]; 67886 if (!cbs) { 67887 return vm; 67888 } 67889 if (!fn) { 67890 vm._events[event] = null; 67891 return vm; 67892 } 67893 // specific handler 67894 var cb; 67895 var i = cbs.length; 67896 while (i--) { 67897 cb = cbs[i]; 67898 if (cb === fn || cb.fn === fn) { 67899 cbs.splice(i, 1); 67900 break; 67901 } 67902 } 67903 return vm; 67904 }; 67905 Vue.prototype.$emit = function (event) { 67906 var vm = this; 67907 { 67908 var lowerCaseEvent = event.toLowerCase(); 67909 if (lowerCaseEvent !== event && vm._events[lowerCaseEvent]) { 67910 tip("Event \"".concat(lowerCaseEvent, "\" is emitted in component ") + 67911 "".concat(formatComponentName(vm), " but the handler is registered for \"").concat(event, "\". ") + 67912 "Note that HTML attributes are case-insensitive and you cannot use " + 67913 "v-on to listen to camelCase events when using in-DOM templates. " + 67914 "You should probably use \"".concat(hyphenate(event), "\" instead of \"").concat(event, "\".")); 67915 } 67916 } 67917 var cbs = vm._events[event]; 67918 if (cbs) { 67919 cbs = cbs.length > 1 ? toArray(cbs) : cbs; 67920 var args = toArray(arguments, 1); 67921 var info = "event handler for \"".concat(event, "\""); 67922 for (var i = 0, l = cbs.length; i < l; i++) { 67923 invokeWithErrorHandling(cbs[i], vm, args, vm, info); 67924 } 67925 } 67926 return vm; 67927 }; 67928 } 67929 67930 var activeEffectScope; 67931 var EffectScope = /** @class */ (function () { 67932 function EffectScope(detached) { 67933 if (detached === void 0) { detached = false; } 67934 this.detached = detached; 67935 /** 67936 * @internal 67937 */ 67938 this.active = true; 67939 /** 67940 * @internal 67941 */ 67942 this.effects = []; 67943 /** 67944 * @internal 67945 */ 67946 this.cleanups = []; 67947 this.parent = activeEffectScope; 67948 if (!detached && activeEffectScope) { 67949 this.index = 67950 (activeEffectScope.scopes || (activeEffectScope.scopes = [])).push(this) - 1; 67951 } 67952 } 67953 EffectScope.prototype.run = function (fn) { 67954 if (this.active) { 67955 var currentEffectScope = activeEffectScope; 67956 try { 67957 activeEffectScope = this; 67958 return fn(); 67959 } 67960 finally { 67961 activeEffectScope = currentEffectScope; 67962 } 67963 } 67964 else { 67965 warn$2("cannot run an inactive effect scope."); 67966 } 67967 }; 67968 /** 67969 * This should only be called on non-detached scopes 67970 * @internal 67971 */ 67972 EffectScope.prototype.on = function () { 67973 activeEffectScope = this; 67974 }; 67975 /** 67976 * This should only be called on non-detached scopes 67977 * @internal 67978 */ 67979 EffectScope.prototype.off = function () { 67980 activeEffectScope = this.parent; 67981 }; 67982 EffectScope.prototype.stop = function (fromParent) { 67983 if (this.active) { 67984 var i = void 0, l = void 0; 67985 for (i = 0, l = this.effects.length; i < l; i++) { 67986 this.effects[i].teardown(); 67987 } 67988 for (i = 0, l = this.cleanups.length; i < l; i++) { 67989 this.cleanups[i](); 67990 } 67991 if (this.scopes) { 67992 for (i = 0, l = this.scopes.length; i < l; i++) { 67993 this.scopes[i].stop(true); 67994 } 67995 } 67996 // nested scope, dereference from parent to avoid memory leaks 67997 if (!this.detached && this.parent && !fromParent) { 67998 // optimized O(1) removal 67999 var last = this.parent.scopes.pop(); 68000 if (last && last !== this) { 68001 this.parent.scopes[this.index] = last; 68002 last.index = this.index; 68003 } 68004 } 68005 this.parent = undefined; 68006 this.active = false; 68007 } 68008 }; 68009 return EffectScope; 68010 }()); 68011 function effectScope(detached) { 68012 return new EffectScope(detached); 68013 } 68014 /** 68015 * @internal 68016 */ 68017 function recordEffectScope(effect, scope) { 68018 if (scope === void 0) { scope = activeEffectScope; } 68019 if (scope && scope.active) { 68020 scope.effects.push(effect); 68021 } 68022 } 68023 function getCurrentScope() { 68024 return activeEffectScope; 68025 } 68026 function onScopeDispose(fn) { 68027 if (activeEffectScope) { 68028 activeEffectScope.cleanups.push(fn); 68029 } 68030 else { 68031 warn$2("onScopeDispose() is called when there is no active effect scope" + 68032 " to be associated with."); 68033 } 68034 } 68035 68036 var activeInstance = null; 68037 var isUpdatingChildComponent = false; 68038 function setActiveInstance(vm) { 68039 var prevActiveInstance = activeInstance; 68040 activeInstance = vm; 68041 return function () { 68042 activeInstance = prevActiveInstance; 68043 }; 68044 } 68045 function initLifecycle(vm) { 68046 var options = vm.$options; 68047 // locate first non-abstract parent 68048 var parent = options.parent; 68049 if (parent && !options.abstract) { 68050 while (parent.$options.abstract && parent.$parent) { 68051 parent = parent.$parent; 68052 } 68053 parent.$children.push(vm); 68054 } 68055 vm.$parent = parent; 68056 vm.$root = parent ? parent.$root : vm; 68057 vm.$children = []; 68058 vm.$refs = {}; 68059 vm._provided = parent ? parent._provided : Object.create(null); 68060 vm._watcher = null; 68061 vm._inactive = null; 68062 vm._directInactive = false; 68063 vm._isMounted = false; 68064 vm._isDestroyed = false; 68065 vm._isBeingDestroyed = false; 68066 } 68067 function lifecycleMixin(Vue) { 68068 Vue.prototype._update = function (vnode, hydrating) { 68069 var vm = this; 68070 var prevEl = vm.$el; 68071 var prevVnode = vm._vnode; 68072 var restoreActiveInstance = setActiveInstance(vm); 68073 vm._vnode = vnode; 68074 // Vue.prototype.__patch__ is injected in entry points 68075 // based on the rendering backend used. 68076 if (!prevVnode) { 68077 // initial render 68078 vm.$el = vm.__patch__(vm.$el, vnode, hydrating, false /* removeOnly */); 68079 } 68080 else { 68081 // updates 68082 vm.$el = vm.__patch__(prevVnode, vnode); 68083 } 68084 restoreActiveInstance(); 68085 // update __vue__ reference 68086 if (prevEl) { 68087 prevEl.__vue__ = null; 68088 } 68089 if (vm.$el) { 68090 vm.$el.__vue__ = vm; 68091 } 68092 // if parent is an HOC, update its $el as well 68093 var wrapper = vm; 68094 while (wrapper && 68095 wrapper.$vnode && 68096 wrapper.$parent && 68097 wrapper.$vnode === wrapper.$parent._vnode) { 68098 wrapper.$parent.$el = wrapper.$el; 68099 wrapper = wrapper.$parent; 68100 } 68101 // updated hook is called by the scheduler to ensure that children are 68102 // updated in a parent's updated hook. 68103 }; 68104 Vue.prototype.$forceUpdate = function () { 68105 var vm = this; 68106 if (vm._watcher) { 68107 vm._watcher.update(); 68108 } 68109 }; 68110 Vue.prototype.$destroy = function () { 68111 var vm = this; 68112 if (vm._isBeingDestroyed) { 68113 return; 68114 } 68115 callHook$1(vm, 'beforeDestroy'); 68116 vm._isBeingDestroyed = true; 68117 // remove self from parent 68118 var parent = vm.$parent; 68119 if (parent && !parent._isBeingDestroyed && !vm.$options.abstract) { 68120 remove$2(parent.$children, vm); 68121 } 68122 // teardown scope. this includes both the render watcher and other 68123 // watchers created 68124 vm._scope.stop(); 68125 // remove reference from data ob 68126 // frozen object may not have observer. 68127 if (vm._data.__ob__) { 68128 vm._data.__ob__.vmCount--; 68129 } 68130 // call the last hook... 68131 vm._isDestroyed = true; 68132 // invoke destroy hooks on current rendered tree 68133 vm.__patch__(vm._vnode, null); 68134 // fire destroyed hook 68135 callHook$1(vm, 'destroyed'); 68136 // turn off all instance listeners. 68137 vm.$off(); 68138 // remove __vue__ reference 68139 if (vm.$el) { 68140 vm.$el.__vue__ = null; 68141 } 68142 // release circular reference (#6759) 68143 if (vm.$vnode) { 68144 vm.$vnode.parent = null; 68145 } 68146 }; 68147 } 68148 function mountComponent(vm, el, hydrating) { 68149 vm.$el = el; 68150 if (!vm.$options.render) { 68151 // @ts-expect-error invalid type 68152 vm.$options.render = createEmptyVNode; 68153 { 68154 /* istanbul ignore if */ 68155 if ((vm.$options.template && vm.$options.template.charAt(0) !== '#') || 68156 vm.$options.el || 68157 el) { 68158 warn$2('You are using the runtime-only build of Vue where the template ' + 68159 'compiler is not available. Either pre-compile the templates into ' + 68160 'render functions, or use the compiler-included build.', vm); 68161 } 68162 else { 68163 warn$2('Failed to mount component: template or render function not defined.', vm); 68164 } 68165 } 68166 } 68167 callHook$1(vm, 'beforeMount'); 68168 var updateComponent; 68169 /* istanbul ignore if */ 68170 if (config.performance && mark) { 68171 updateComponent = function () { 68172 var name = vm._name; 68173 var id = vm._uid; 68174 var startTag = "vue-perf-start:".concat(id); 68175 var endTag = "vue-perf-end:".concat(id); 68176 mark(startTag); 68177 var vnode = vm._render(); 68178 mark(endTag); 68179 measure("vue ".concat(name, " render"), startTag, endTag); 68180 mark(startTag); 68181 vm._update(vnode, hydrating); 68182 mark(endTag); 68183 measure("vue ".concat(name, " patch"), startTag, endTag); 68184 }; 68185 } 68186 else { 68187 updateComponent = function () { 68188 vm._update(vm._render(), hydrating); 68189 }; 68190 } 68191 var watcherOptions = { 68192 before: function () { 68193 if (vm._isMounted && !vm._isDestroyed) { 68194 callHook$1(vm, 'beforeUpdate'); 68195 } 68196 } 68197 }; 68198 { 68199 watcherOptions.onTrack = function (e) { return callHook$1(vm, 'renderTracked', [e]); }; 68200 watcherOptions.onTrigger = function (e) { return callHook$1(vm, 'renderTriggered', [e]); }; 68201 } 68202 // we set this to vm._watcher inside the watcher's constructor 68203 // since the watcher's initial patch may call $forceUpdate (e.g. inside child 68204 // component's mounted hook), which relies on vm._watcher being already defined 68205 new Watcher(vm, updateComponent, noop, watcherOptions, true /* isRenderWatcher */); 68206 hydrating = false; 68207 // flush buffer for flush: "pre" watchers queued in setup() 68208 var preWatchers = vm._preWatchers; 68209 if (preWatchers) { 68210 for (var i = 0; i < preWatchers.length; i++) { 68211 preWatchers[i].run(); 68212 } 68213 } 68214 // manually mounted instance, call mounted on self 68215 // mounted is called for render-created child components in its inserted hook 68216 if (vm.$vnode == null) { 68217 vm._isMounted = true; 68218 callHook$1(vm, 'mounted'); 68219 } 68220 return vm; 68221 } 68222 function updateChildComponent(vm, propsData, listeners, parentVnode, renderChildren) { 68223 { 68224 isUpdatingChildComponent = true; 68225 } 68226 // determine whether component has slot children 68227 // we need to do this before overwriting $options._renderChildren. 68228 // check if there are dynamic scopedSlots (hand-written or compiled but with 68229 // dynamic slot names). Static scoped slots compiled from template has the 68230 // "$stable" marker. 68231 var newScopedSlots = parentVnode.data.scopedSlots; 68232 var oldScopedSlots = vm.$scopedSlots; 68233 var hasDynamicScopedSlot = !!((newScopedSlots && !newScopedSlots.$stable) || 68234 (oldScopedSlots !== emptyObject && !oldScopedSlots.$stable) || 68235 (newScopedSlots && vm.$scopedSlots.$key !== newScopedSlots.$key) || 68236 (!newScopedSlots && vm.$scopedSlots.$key)); 68237 // Any static slot children from the parent may have changed during parent's 68238 // update. Dynamic scoped slots may also have changed. In such cases, a forced 68239 // update is necessary to ensure correctness. 68240 var needsForceUpdate = !!(renderChildren || // has new static slots 68241 vm.$options._renderChildren || // has old static slots 68242 hasDynamicScopedSlot); 68243 var prevVNode = vm.$vnode; 68244 vm.$options._parentVnode = parentVnode; 68245 vm.$vnode = parentVnode; // update vm's placeholder node without re-render 68246 if (vm._vnode) { 68247 // update child tree's parent 68248 vm._vnode.parent = parentVnode; 68249 } 68250 vm.$options._renderChildren = renderChildren; 68251 // update $attrs and $listeners hash 68252 // these are also reactive so they may trigger child update if the child 68253 // used them during render 68254 var attrs = parentVnode.data.attrs || emptyObject; 68255 if (vm._attrsProxy) { 68256 // force update if attrs are accessed and has changed since it may be 68257 // passed to a child component. 68258 if (syncSetupProxy(vm._attrsProxy, attrs, (prevVNode.data && prevVNode.data.attrs) || emptyObject, vm, '$attrs')) { 68259 needsForceUpdate = true; 68260 } 68261 } 68262 vm.$attrs = attrs; 68263 // update listeners 68264 listeners = listeners || emptyObject; 68265 var prevListeners = vm.$options._parentListeners; 68266 if (vm._listenersProxy) { 68267 syncSetupProxy(vm._listenersProxy, listeners, prevListeners || emptyObject, vm, '$listeners'); 68268 } 68269 vm.$listeners = vm.$options._parentListeners = listeners; 68270 updateComponentListeners(vm, listeners, prevListeners); 68271 // update props 68272 if (propsData && vm.$options.props) { 68273 toggleObserving(false); 68274 var props = vm._props; 68275 var propKeys = vm.$options._propKeys || []; 68276 for (var i = 0; i < propKeys.length; i++) { 68277 var key = propKeys[i]; 68278 var propOptions = vm.$options.props; // wtf flow? 68279 props[key] = validateProp(key, propOptions, propsData, vm); 68280 } 68281 toggleObserving(true); 68282 // keep a copy of raw propsData 68283 vm.$options.propsData = propsData; 68284 } 68285 // resolve slots + force update if has children 68286 if (needsForceUpdate) { 68287 vm.$slots = resolveSlots(renderChildren, parentVnode.context); 68288 vm.$forceUpdate(); 68289 } 68290 { 68291 isUpdatingChildComponent = false; 68292 } 68293 } 68294 function isInInactiveTree(vm) { 68295 while (vm && (vm = vm.$parent)) { 68296 if (vm._inactive) 68297 return true; 68298 } 68299 return false; 68300 } 68301 function activateChildComponent(vm, direct) { 68302 if (direct) { 68303 vm._directInactive = false; 68304 if (isInInactiveTree(vm)) { 68305 return; 68306 } 68307 } 68308 else if (vm._directInactive) { 68309 return; 68310 } 68311 if (vm._inactive || vm._inactive === null) { 68312 vm._inactive = false; 68313 for (var i = 0; i < vm.$children.length; i++) { 68314 activateChildComponent(vm.$children[i]); 68315 } 68316 callHook$1(vm, 'activated'); 68317 } 68318 } 68319 function deactivateChildComponent(vm, direct) { 68320 if (direct) { 68321 vm._directInactive = true; 68322 if (isInInactiveTree(vm)) { 68323 return; 68324 } 68325 } 68326 if (!vm._inactive) { 68327 vm._inactive = true; 68328 for (var i = 0; i < vm.$children.length; i++) { 68329 deactivateChildComponent(vm.$children[i]); 68330 } 68331 callHook$1(vm, 'deactivated'); 68332 } 68333 } 68334 function callHook$1(vm, hook, args, setContext) { 68335 if (setContext === void 0) { setContext = true; } 68336 // #7573 disable dep collection when invoking lifecycle hooks 68337 pushTarget(); 68338 var prevInst = currentInstance; 68339 var prevScope = getCurrentScope(); 68340 setContext && setCurrentInstance(vm); 68341 var handlers = vm.$options[hook]; 68342 var info = "".concat(hook, " hook"); 68343 if (handlers) { 68344 for (var i = 0, j = handlers.length; i < j; i++) { 68345 invokeWithErrorHandling(handlers[i], vm, args || null, vm, info); 68346 } 68347 } 68348 if (vm._hasHookEvent) { 68349 vm.$emit('hook:' + hook); 68350 } 68351 if (setContext) { 68352 setCurrentInstance(prevInst); 68353 prevScope && prevScope.on(); 68354 } 68355 popTarget(); 68356 } 68357 68358 var MAX_UPDATE_COUNT = 100; 68359 var queue = []; 68360 var activatedChildren = []; 68361 var has = {}; 68362 var circular = {}; 68363 var waiting = false; 68364 var flushing = false; 68365 var index$1 = 0; 68366 /** 68367 * Reset the scheduler's state. 68368 */ 68369 function resetSchedulerState() { 68370 index$1 = queue.length = activatedChildren.length = 0; 68371 has = {}; 68372 { 68373 circular = {}; 68374 } 68375 waiting = flushing = false; 68376 } 68377 // Async edge case #6566 requires saving the timestamp when event listeners are 68378 // attached. However, calling performance.now() has a perf overhead especially 68379 // if the page has thousands of event listeners. Instead, we take a timestamp 68380 // every time the scheduler flushes and use that for all event listeners 68381 // attached during that flush. 68382 var currentFlushTimestamp = 0; 68383 // Async edge case fix requires storing an event listener's attach timestamp. 68384 var getNow = Date.now; 68385 // Determine what event timestamp the browser is using. Annoyingly, the 68386 // timestamp can either be hi-res (relative to page load) or low-res 68387 // (relative to UNIX epoch), so in order to compare time we have to use the 68388 // same timestamp type when saving the flush timestamp. 68389 // All IE versions use low-res event timestamps, and have problematic clock 68390 // implementations (#9632) 68391 if (inBrowser && !isIE) { 68392 var performance_1 = window.performance; 68393 if (performance_1 && 68394 typeof performance_1.now === 'function' && 68395 getNow() > document.createEvent('Event').timeStamp) { 68396 // if the event timestamp, although evaluated AFTER the Date.now(), is 68397 // smaller than it, it means the event is using a hi-res timestamp, 68398 // and we need to use the hi-res version for event listener timestamps as 68399 // well. 68400 getNow = function () { return performance_1.now(); }; 68401 } 68402 } 68403 var sortCompareFn = function (a, b) { 68404 if (a.post) { 68405 if (!b.post) 68406 return 1; 68407 } 68408 else if (b.post) { 68409 return -1; 68410 } 68411 return a.id - b.id; 68412 }; 68413 /** 68414 * Flush both queues and run the watchers. 68415 */ 68416 function flushSchedulerQueue() { 68417 currentFlushTimestamp = getNow(); 68418 flushing = true; 68419 var watcher, id; 68420 // Sort queue before flush. 68421 // This ensures that: 68422 // 1. Components are updated from parent to child. (because parent is always 68423 // created before the child) 68424 // 2. A component's user watchers are run before its render watcher (because 68425 // user watchers are created before the render watcher) 68426 // 3. If a component is destroyed during a parent component's watcher run, 68427 // its watchers can be skipped. 68428 queue.sort(sortCompareFn); 68429 // do not cache length because more watchers might be pushed 68430 // as we run existing watchers 68431 for (index$1 = 0; index$1 < queue.length; index$1++) { 68432 watcher = queue[index$1]; 68433 if (watcher.before) { 68434 watcher.before(); 68435 } 68436 id = watcher.id; 68437 has[id] = null; 68438 watcher.run(); 68439 // in dev build, check and stop circular updates. 68440 if (has[id] != null) { 68441 circular[id] = (circular[id] || 0) + 1; 68442 if (circular[id] > MAX_UPDATE_COUNT) { 68443 warn$2('You may have an infinite update loop ' + 68444 (watcher.user 68445 ? "in watcher with expression \"".concat(watcher.expression, "\"") 68446 : "in a component render function."), watcher.vm); 68447 break; 68448 } 68449 } 68450 } 68451 // keep copies of post queues before resetting state 68452 var activatedQueue = activatedChildren.slice(); 68453 var updatedQueue = queue.slice(); 68454 resetSchedulerState(); 68455 // call component updated and activated hooks 68456 callActivatedHooks(activatedQueue); 68457 callUpdatedHooks(updatedQueue); 68458 cleanupDeps(); 68459 // devtool hook 68460 /* istanbul ignore if */ 68461 if (devtools && config.devtools) { 68462 devtools.emit('flush'); 68463 } 68464 } 68465 function callUpdatedHooks(queue) { 68466 var i = queue.length; 68467 while (i--) { 68468 var watcher = queue[i]; 68469 var vm = watcher.vm; 68470 if (vm && vm._watcher === watcher && vm._isMounted && !vm._isDestroyed) { 68471 callHook$1(vm, 'updated'); 68472 } 68473 } 68474 } 68475 /** 68476 * Queue a kept-alive component that was activated during patch. 68477 * The queue will be processed after the entire tree has been patched. 68478 */ 68479 function queueActivatedComponent(vm) { 68480 // setting _inactive to false here so that a render function can 68481 // rely on checking whether it's in an inactive tree (e.g. router-view) 68482 vm._inactive = false; 68483 activatedChildren.push(vm); 68484 } 68485 function callActivatedHooks(queue) { 68486 for (var i = 0; i < queue.length; i++) { 68487 queue[i]._inactive = true; 68488 activateChildComponent(queue[i], true /* true */); 68489 } 68490 } 68491 /** 68492 * Push a watcher into the watcher queue. 68493 * Jobs with duplicate IDs will be skipped unless it's 68494 * pushed when the queue is being flushed. 68495 */ 68496 function queueWatcher(watcher) { 68497 var id = watcher.id; 68498 if (has[id] != null) { 68499 return; 68500 } 68501 if (watcher === Dep.target && watcher.noRecurse) { 68502 return; 68503 } 68504 has[id] = true; 68505 if (!flushing) { 68506 queue.push(watcher); 68507 } 68508 else { 68509 // if already flushing, splice the watcher based on its id 68510 // if already past its id, it will be run next immediately. 68511 var i = queue.length - 1; 68512 while (i > index$1 && queue[i].id > watcher.id) { 68513 i--; 68514 } 68515 queue.splice(i + 1, 0, watcher); 68516 } 68517 // queue the flush 68518 if (!waiting) { 68519 waiting = true; 68520 if (!config.async) { 68521 flushSchedulerQueue(); 68522 return; 68523 } 68524 nextTick(flushSchedulerQueue); 68525 } 68526 } 68527 68528 var WATCHER = "watcher"; 68529 var WATCHER_CB = "".concat(WATCHER, " callback"); 68530 var WATCHER_GETTER = "".concat(WATCHER, " getter"); 68531 var WATCHER_CLEANUP = "".concat(WATCHER, " cleanup"); 68532 // Simple effect. 68533 function watchEffect(effect, options) { 68534 return doWatch(effect, null, options); 68535 } 68536 function watchPostEffect(effect, options) { 68537 return doWatch(effect, null, (__assign(__assign({}, options), { flush: 'post' }) )); 68538 } 68539 function watchSyncEffect(effect, options) { 68540 return doWatch(effect, null, (__assign(__assign({}, options), { flush: 'sync' }) )); 68541 } 68542 // initial value for watchers to trigger on undefined initial values 68543 var INITIAL_WATCHER_VALUE = {}; 68544 // implementation 68545 function watch(source, cb, options) { 68546 if (typeof cb !== 'function') { 68547 warn$2("`watch(fn, options?)` signature has been moved to a separate API. " + 68548 "Use `watchEffect(fn, options?)` instead. `watch` now only " + 68549 "supports `watch(source, cb, options?) signature."); 68550 } 68551 return doWatch(source, cb, options); 68552 } 68553 function doWatch(source, cb, _a) { 68554 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; 68555 if (!cb) { 68556 if (immediate !== undefined) { 68557 warn$2("watch() \"immediate\" option is only respected when using the " + 68558 "watch(source, callback, options?) signature."); 68559 } 68560 if (deep !== undefined) { 68561 warn$2("watch() \"deep\" option is only respected when using the " + 68562 "watch(source, callback, options?) signature."); 68563 } 68564 } 68565 var warnInvalidSource = function (s) { 68566 warn$2("Invalid watch source: ".concat(s, ". A watch source can only be a getter/effect ") + 68567 "function, a ref, a reactive object, or an array of these types."); 68568 }; 68569 var instance = currentInstance; 68570 var call = function (fn, type, args) { 68571 if (args === void 0) { args = null; } 68572 var res = invokeWithErrorHandling(fn, null, args, instance, type); 68573 if (deep && res && res.__ob__) 68574 res.__ob__.dep.depend(); 68575 return res; 68576 }; 68577 var getter; 68578 var forceTrigger = false; 68579 var isMultiSource = false; 68580 if (isRef(source)) { 68581 getter = function () { return source.value; }; 68582 forceTrigger = isShallow(source); 68583 } 68584 else if (isReactive(source)) { 68585 getter = function () { 68586 source.__ob__.dep.depend(); 68587 return source; 68588 }; 68589 deep = true; 68590 } 68591 else if (isArray(source)) { 68592 isMultiSource = true; 68593 forceTrigger = source.some(function (s) { return isReactive(s) || isShallow(s); }); 68594 getter = function () { 68595 return source.map(function (s) { 68596 if (isRef(s)) { 68597 return s.value; 68598 } 68599 else if (isReactive(s)) { 68600 s.__ob__.dep.depend(); 68601 return traverse(s); 68602 } 68603 else if (isFunction(s)) { 68604 return call(s, WATCHER_GETTER); 68605 } 68606 else { 68607 warnInvalidSource(s); 68608 } 68609 }); 68610 }; 68611 } 68612 else if (isFunction(source)) { 68613 if (cb) { 68614 // getter with cb 68615 getter = function () { return call(source, WATCHER_GETTER); }; 68616 } 68617 else { 68618 // no cb -> simple effect 68619 getter = function () { 68620 if (instance && instance._isDestroyed) { 68621 return; 68622 } 68623 if (cleanup) { 68624 cleanup(); 68625 } 68626 return call(source, WATCHER, [onCleanup]); 68627 }; 68628 } 68629 } 68630 else { 68631 getter = noop; 68632 warnInvalidSource(source); 68633 } 68634 if (cb && deep) { 68635 var baseGetter_1 = getter; 68636 getter = function () { return traverse(baseGetter_1()); }; 68637 } 68638 var cleanup; 68639 var onCleanup = function (fn) { 68640 cleanup = watcher.onStop = function () { 68641 call(fn, WATCHER_CLEANUP); 68642 }; 68643 }; 68644 // in SSR there is no need to setup an actual effect, and it should be noop 68645 // unless it's eager 68646 if (isServerRendering()) { 68647 // we will also not call the invalidate callback (+ runner is not set up) 68648 onCleanup = noop; 68649 if (!cb) { 68650 getter(); 68651 } 68652 else if (immediate) { 68653 call(cb, WATCHER_CB, [ 68654 getter(), 68655 isMultiSource ? [] : undefined, 68656 onCleanup 68657 ]); 68658 } 68659 return noop; 68660 } 68661 var watcher = new Watcher(currentInstance, getter, noop, { 68662 lazy: true 68663 }); 68664 watcher.noRecurse = !cb; 68665 var oldValue = isMultiSource ? [] : INITIAL_WATCHER_VALUE; 68666 // overwrite default run 68667 watcher.run = function () { 68668 if (!watcher.active) { 68669 return; 68670 } 68671 if (cb) { 68672 // watch(source, cb) 68673 var newValue = watcher.get(); 68674 if (deep || 68675 forceTrigger || 68676 (isMultiSource 68677 ? newValue.some(function (v, i) { 68678 return hasChanged(v, oldValue[i]); 68679 }) 68680 : hasChanged(newValue, oldValue))) { 68681 // cleanup before running cb again 68682 if (cleanup) { 68683 cleanup(); 68684 } 68685 call(cb, WATCHER_CB, [ 68686 newValue, 68687 // pass undefined as the old value when it's changed for the first time 68688 oldValue === INITIAL_WATCHER_VALUE ? undefined : oldValue, 68689 onCleanup 68690 ]); 68691 oldValue = newValue; 68692 } 68693 } 68694 else { 68695 // watchEffect 68696 watcher.get(); 68697 } 68698 }; 68699 if (flush === 'sync') { 68700 watcher.update = watcher.run; 68701 } 68702 else if (flush === 'post') { 68703 watcher.post = true; 68704 watcher.update = function () { return queueWatcher(watcher); }; 68705 } 68706 else { 68707 // pre 68708 watcher.update = function () { 68709 if (instance && instance === currentInstance && !instance._isMounted) { 68710 // pre-watcher triggered before 68711 var buffer = instance._preWatchers || (instance._preWatchers = []); 68712 if (buffer.indexOf(watcher) < 0) 68713 buffer.push(watcher); 68714 } 68715 else { 68716 queueWatcher(watcher); 68717 } 68718 }; 68719 } 68720 { 68721 watcher.onTrack = onTrack; 68722 watcher.onTrigger = onTrigger; 68723 } 68724 // initial run 68725 if (cb) { 68726 if (immediate) { 68727 watcher.run(); 68728 } 68729 else { 68730 oldValue = watcher.get(); 68731 } 68732 } 68733 else if (flush === 'post' && instance) { 68734 instance.$once('hook:mounted', function () { return watcher.get(); }); 68735 } 68736 else { 68737 watcher.get(); 68738 } 68739 return function () { 68740 watcher.teardown(); 68741 }; 68742 } 68743 68744 function provide(key, value) { 68745 if (!currentInstance) { 68746 { 68747 warn$2("provide() can only be used inside setup()."); 68748 } 68749 } 68750 else { 68751 // TS doesn't allow symbol as index type 68752 resolveProvided(currentInstance)[key] = value; 68753 } 68754 } 68755 function resolveProvided(vm) { 68756 // by default an instance inherits its parent's provides object 68757 // but when it needs to provide values of its own, it creates its 68758 // own provides object using parent provides object as prototype. 68759 // this way in `inject` we can simply look up injections from direct 68760 // parent and let the prototype chain do the work. 68761 var existing = vm._provided; 68762 var parentProvides = vm.$parent && vm.$parent._provided; 68763 if (parentProvides === existing) { 68764 return (vm._provided = Object.create(parentProvides)); 68765 } 68766 else { 68767 return existing; 68768 } 68769 } 68770 function inject(key, defaultValue, treatDefaultAsFactory) { 68771 if (treatDefaultAsFactory === void 0) { treatDefaultAsFactory = false; } 68772 // fallback to `currentRenderingInstance` so that this can be called in 68773 // a functional component 68774 var instance = currentInstance; 68775 if (instance) { 68776 // #2400 68777 // to support `app.use` plugins, 68778 // fallback to appContext's `provides` if the instance is at root 68779 var provides = instance.$parent && instance.$parent._provided; 68780 if (provides && key in provides) { 68781 // TS doesn't allow symbol as index type 68782 return provides[key]; 68783 } 68784 else if (arguments.length > 1) { 68785 return treatDefaultAsFactory && isFunction(defaultValue) 68786 ? defaultValue.call(instance) 68787 : defaultValue; 68788 } 68789 else { 68790 warn$2("injection \"".concat(String(key), "\" not found.")); 68791 } 68792 } 68793 else { 68794 warn$2("inject() can only be used inside setup() or functional components."); 68795 } 68796 } 68797 68798 /** 68799 * @internal this function needs manual public type declaration because it relies 68800 * on previously manually authored types from Vue 2 68801 */ 68802 function h(type, props, children) { 68803 if (!currentInstance) { 68804 warn$2("globally imported h() can only be invoked when there is an active " + 68805 "component instance, e.g. synchronously in a component's render or setup function."); 68806 } 68807 return createElement$1(currentInstance, type, props, children, 2, true); 68808 } 68809 68810 function handleError(err, vm, info) { 68811 // Deactivate deps tracking while processing error handler to avoid possible infinite rendering. 68812 // See: https://github.com/vuejs/vuex/issues/1505 68813 pushTarget(); 68814 try { 68815 if (vm) { 68816 var cur = vm; 68817 while ((cur = cur.$parent)) { 68818 var hooks = cur.$options.errorCaptured; 68819 if (hooks) { 68820 for (var i = 0; i < hooks.length; i++) { 68821 try { 68822 var capture = hooks[i].call(cur, err, vm, info) === false; 68823 if (capture) 68824 return; 68825 } 68826 catch (e) { 68827 globalHandleError(e, cur, 'errorCaptured hook'); 68828 } 68829 } 68830 } 68831 } 68832 } 68833 globalHandleError(err, vm, info); 68834 } 68835 finally { 68836 popTarget(); 68837 } 68838 } 68839 function invokeWithErrorHandling(handler, context, args, vm, info) { 68840 var res; 68841 try { 68842 res = args ? handler.apply(context, args) : handler.call(context); 68843 if (res && !res._isVue && isPromise(res) && !res._handled) { 68844 res.catch(function (e) { return handleError(e, vm, info + " (Promise/async)"); }); 68845 res._handled = true; 68846 } 68847 } 68848 catch (e) { 68849 handleError(e, vm, info); 68850 } 68851 return res; 68852 } 68853 function globalHandleError(err, vm, info) { 68854 if (config.errorHandler) { 68855 try { 68856 return config.errorHandler.call(null, err, vm, info); 68857 } 68858 catch (e) { 68859 // if the user intentionally throws the original error in the handler, 68860 // do not log it twice 68861 if (e !== err) { 68862 logError(e, null, 'config.errorHandler'); 68863 } 68864 } 68865 } 68866 logError(err, vm, info); 68867 } 68868 function logError(err, vm, info) { 68869 { 68870 warn$2("Error in ".concat(info, ": \"").concat(err.toString(), "\""), vm); 68871 } 68872 /* istanbul ignore else */ 68873 if (inBrowser && typeof console !== 'undefined') { 68874 console.error(err); 68875 } 68876 else { 68877 throw err; 68878 } 68879 } 68880 68881 /* globals MutationObserver */ 68882 var isUsingMicroTask = false; 68883 var callbacks = []; 68884 var pending = false; 68885 function flushCallbacks() { 68886 pending = false; 68887 var copies = callbacks.slice(0); 68888 callbacks.length = 0; 68889 for (var i = 0; i < copies.length; i++) { 68890 copies[i](); 68891 } 68892 } 68893 // Here we have async deferring wrappers using microtasks. 68894 // In 2.5 we used (macro) tasks (in combination with microtasks). 68895 // However, it has subtle problems when state is changed right before repaint 68896 // (e.g. #6813, out-in transitions). 68897 // Also, using (macro) tasks in event handler would cause some weird behaviors 68898 // that cannot be circumvented (e.g. #7109, #7153, #7546, #7834, #8109). 68899 // So we now use microtasks everywhere, again. 68900 // A major drawback of this tradeoff is that there are some scenarios 68901 // where microtasks have too high a priority and fire in between supposedly 68902 // sequential events (e.g. #4521, #6690, which have workarounds) 68903 // or even between bubbling of the same event (#6566). 68904 var timerFunc; 68905 // The nextTick behavior leverages the microtask queue, which can be accessed 68906 // via either native Promise.then or MutationObserver. 68907 // MutationObserver has wider support, however it is seriously bugged in 68908 // UIWebView in iOS >= 9.3.3 when triggered in touch event handlers. It 68909 // completely stops working after triggering a few times... so, if native 68910 // Promise is available, we will use it: 68911 /* istanbul ignore next, $flow-disable-line */ 68912 if (typeof Promise !== 'undefined' && isNative(Promise)) { 68913 var p_1 = Promise.resolve(); 68914 timerFunc = function () { 68915 p_1.then(flushCallbacks); 68916 // In problematic UIWebViews, Promise.then doesn't completely break, but 68917 // it can get stuck in a weird state where callbacks are pushed into the 68918 // microtask queue but the queue isn't being flushed, until the browser 68919 // needs to do some other work, e.g. handle a timer. Therefore we can 68920 // "force" the microtask queue to be flushed by adding an empty timer. 68921 if (isIOS) 68922 setTimeout(noop); 68923 }; 68924 isUsingMicroTask = true; 68925 } 68926 else if (!isIE && 68927 typeof MutationObserver !== 'undefined' && 68928 (isNative(MutationObserver) || 68929 // PhantomJS and iOS 7.x 68930 MutationObserver.toString() === '[object MutationObserverConstructor]')) { 68931 // Use MutationObserver where native Promise is not available, 68932 // e.g. PhantomJS, iOS7, Android 4.4 68933 // (#6466 MutationObserver is unreliable in IE11) 68934 var counter_1 = 1; 68935 var observer = new MutationObserver(flushCallbacks); 68936 var textNode_1 = document.createTextNode(String(counter_1)); 68937 observer.observe(textNode_1, { 68938 characterData: true 68939 }); 68940 timerFunc = function () { 68941 counter_1 = (counter_1 + 1) % 2; 68942 textNode_1.data = String(counter_1); 68943 }; 68944 isUsingMicroTask = true; 68945 } 68946 else if (typeof setImmediate !== 'undefined' && isNative(setImmediate)) { 68947 // Fallback to setImmediate. 68948 // Technically it leverages the (macro) task queue, 68949 // but it is still a better choice than setTimeout. 68950 timerFunc = function () { 68951 setImmediate(flushCallbacks); 68952 }; 68953 } 68954 else { 68955 // Fallback to setTimeout. 68956 timerFunc = function () { 68957 setTimeout(flushCallbacks, 0); 68958 }; 68959 } 68960 /** 68961 * @internal 68962 */ 68963 function nextTick(cb, ctx) { 68964 var _resolve; 68965 callbacks.push(function () { 68966 if (cb) { 68967 try { 68968 cb.call(ctx); 68969 } 68970 catch (e) { 68971 handleError(e, ctx, 'nextTick'); 68972 } 68973 } 68974 else if (_resolve) { 68975 _resolve(ctx); 68976 } 68977 }); 68978 if (!pending) { 68979 pending = true; 68980 timerFunc(); 68981 } 68982 // $flow-disable-line 68983 if (!cb && typeof Promise !== 'undefined') { 68984 return new Promise(function (resolve) { 68985 _resolve = resolve; 68986 }); 68987 } 68988 } 68989 68990 function useCssModule(name) { 68991 /* istanbul ignore else */ 68992 { 68993 { 68994 warn$2("useCssModule() is not supported in the global build."); 68995 } 68996 return emptyObject; 68997 } 68998 } 68999 69000 /** 69001 * Runtime helper for SFC's CSS variable injection feature. 69002 * @private 69003 */ 69004 function useCssVars(getter) { 69005 if (!inBrowser && !false) 69006 return; 69007 var instance = currentInstance; 69008 if (!instance) { 69009 warn$2("useCssVars is called without current active component instance."); 69010 return; 69011 } 69012 watchPostEffect(function () { 69013 var el = instance.$el; 69014 var vars = getter(instance, instance._setupProxy); 69015 if (el && el.nodeType === 1) { 69016 var style = el.style; 69017 for (var key in vars) { 69018 style.setProperty("--".concat(key), vars[key]); 69019 } 69020 } 69021 }); 69022 } 69023 69024 /** 69025 * v3-compatible async component API. 69026 * @internal the type is manually declared in <root>/types/v3-define-async-component.d.ts 69027 * because it relies on existing manual types 69028 */ 69029 function defineAsyncComponent(source) { 69030 if (isFunction(source)) { 69031 source = { loader: source }; 69032 } 69033 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 69034 _b = source.suspensible, // undefined = never times out 69035 suspensible = _b === void 0 ? false : _b, // in Vue 3 default is true 69036 userOnError = source.onError; 69037 if (suspensible) { 69038 warn$2("The suspensible option for async components is not supported in Vue2. It is ignored."); 69039 } 69040 var pendingRequest = null; 69041 var retries = 0; 69042 var retry = function () { 69043 retries++; 69044 pendingRequest = null; 69045 return load(); 69046 }; 69047 var load = function () { 69048 var thisRequest; 69049 return (pendingRequest || 69050 (thisRequest = pendingRequest = 69051 loader() 69052 .catch(function (err) { 69053 err = err instanceof Error ? err : new Error(String(err)); 69054 if (userOnError) { 69055 return new Promise(function (resolve, reject) { 69056 var userRetry = function () { return resolve(retry()); }; 69057 var userFail = function () { return reject(err); }; 69058 userOnError(err, userRetry, userFail, retries + 1); 69059 }); 69060 } 69061 else { 69062 throw err; 69063 } 69064 }) 69065 .then(function (comp) { 69066 if (thisRequest !== pendingRequest && pendingRequest) { 69067 return pendingRequest; 69068 } 69069 if (!comp) { 69070 warn$2("Async component loader resolved to undefined. " + 69071 "If you are using retry(), make sure to return its return value."); 69072 } 69073 // interop module default 69074 if (comp && 69075 (comp.__esModule || comp[Symbol.toStringTag] === 'Module')) { 69076 comp = comp.default; 69077 } 69078 if (comp && !isObject(comp) && !isFunction(comp)) { 69079 throw new Error("Invalid async component load result: ".concat(comp)); 69080 } 69081 return comp; 69082 }))); 69083 }; 69084 return function () { 69085 var component = load(); 69086 return { 69087 component: component, 69088 delay: delay, 69089 timeout: timeout, 69090 error: errorComponent, 69091 loading: loadingComponent 69092 }; 69093 }; 69094 } 69095 69096 function createLifeCycle(hookName) { 69097 return function (fn, target) { 69098 if (target === void 0) { target = currentInstance; } 69099 if (!target) { 69100 warn$2("".concat(formatName(hookName), " is called when there is no active component instance to be ") + 69101 "associated with. " + 69102 "Lifecycle injection APIs can only be used during execution of setup()."); 69103 return; 69104 } 69105 return injectHook(target, hookName, fn); 69106 }; 69107 } 69108 function formatName(name) { 69109 if (name === 'beforeDestroy') { 69110 name = 'beforeUnmount'; 69111 } 69112 else if (name === 'destroyed') { 69113 name = 'unmounted'; 69114 } 69115 return "on".concat(name[0].toUpperCase() + name.slice(1)); 69116 } 69117 function injectHook(instance, hookName, fn) { 69118 var options = instance.$options; 69119 options[hookName] = mergeLifecycleHook(options[hookName], fn); 69120 } 69121 var onBeforeMount = createLifeCycle('beforeMount'); 69122 var onMounted = createLifeCycle('mounted'); 69123 var onBeforeUpdate = createLifeCycle('beforeUpdate'); 69124 var onUpdated = createLifeCycle('updated'); 69125 var onBeforeUnmount = createLifeCycle('beforeDestroy'); 69126 var onUnmounted = createLifeCycle('destroyed'); 69127 var onActivated = createLifeCycle('activated'); 69128 var onDeactivated = createLifeCycle('deactivated'); 69129 var onServerPrefetch = createLifeCycle('serverPrefetch'); 69130 var onRenderTracked = createLifeCycle('renderTracked'); 69131 var onRenderTriggered = createLifeCycle('renderTriggered'); 69132 var injectErrorCapturedHook = createLifeCycle('errorCaptured'); 69133 function onErrorCaptured(hook, target) { 69134 if (target === void 0) { target = currentInstance; } 69135 injectErrorCapturedHook(hook, target); 69136 } 69137 69138 /** 69139 * Note: also update dist/vue.runtime.mjs when adding new exports to this file. 69140 */ 69141 var version = '2.7.16'; 69142 /** 69143 * @internal type is manually declared in <root>/types/v3-define-component.d.ts 69144 */ 69145 function defineComponent(options) { 69146 return options; 69147 } 69148 69149 var vca = /*#__PURE__*/Object.freeze({ 69150 __proto__: null, 69151 version: version, 69152 defineComponent: defineComponent, 69153 ref: ref$1, 69154 shallowRef: shallowRef, 69155 isRef: isRef, 69156 toRef: toRef, 69157 toRefs: toRefs, 69158 unref: unref, 69159 proxyRefs: proxyRefs, 69160 customRef: customRef, 69161 triggerRef: triggerRef, 69162 reactive: reactive, 69163 isReactive: isReactive, 69164 isReadonly: isReadonly, 69165 isShallow: isShallow, 69166 isProxy: isProxy, 69167 shallowReactive: shallowReactive, 69168 markRaw: markRaw, 69169 toRaw: toRaw, 69170 readonly: readonly, 69171 shallowReadonly: shallowReadonly, 69172 computed: computed, 69173 watch: watch, 69174 watchEffect: watchEffect, 69175 watchPostEffect: watchPostEffect, 69176 watchSyncEffect: watchSyncEffect, 69177 EffectScope: EffectScope, 69178 effectScope: effectScope, 69179 onScopeDispose: onScopeDispose, 69180 getCurrentScope: getCurrentScope, 69181 provide: provide, 69182 inject: inject, 69183 h: h, 69184 getCurrentInstance: getCurrentInstance, 69185 useSlots: useSlots, 69186 useAttrs: useAttrs, 69187 useListeners: useListeners, 69188 mergeDefaults: mergeDefaults, 69189 nextTick: nextTick, 69190 set: set, 69191 del: del, 69192 useCssModule: useCssModule, 69193 useCssVars: useCssVars, 69194 defineAsyncComponent: defineAsyncComponent, 69195 onBeforeMount: onBeforeMount, 69196 onMounted: onMounted, 69197 onBeforeUpdate: onBeforeUpdate, 69198 onUpdated: onUpdated, 69199 onBeforeUnmount: onBeforeUnmount, 69200 onUnmounted: onUnmounted, 69201 onActivated: onActivated, 69202 onDeactivated: onDeactivated, 69203 onServerPrefetch: onServerPrefetch, 69204 onRenderTracked: onRenderTracked, 69205 onRenderTriggered: onRenderTriggered, 69206 onErrorCaptured: onErrorCaptured 69207 }); 69208 69209 var seenObjects = new _Set(); 69210 /** 69211 * Recursively traverse an object to evoke all converted 69212 * getters, so that every nested property inside the object 69213 * is collected as a "deep" dependency. 69214 */ 69215 function traverse(val) { 69216 _traverse(val, seenObjects); 69217 seenObjects.clear(); 69218 return val; 69219 } 69220 function _traverse(val, seen) { 69221 var i, keys; 69222 var isA = isArray(val); 69223 if ((!isA && !isObject(val)) || 69224 val.__v_skip /* ReactiveFlags.SKIP */ || 69225 Object.isFrozen(val) || 69226 val instanceof VNode) { 69227 return; 69228 } 69229 if (val.__ob__) { 69230 var depId = val.__ob__.dep.id; 69231 if (seen.has(depId)) { 69232 return; 69233 } 69234 seen.add(depId); 69235 } 69236 if (isA) { 69237 i = val.length; 69238 while (i--) 69239 _traverse(val[i], seen); 69240 } 69241 else if (isRef(val)) { 69242 _traverse(val.value, seen); 69243 } 69244 else { 69245 keys = Object.keys(val); 69246 i = keys.length; 69247 while (i--) 69248 _traverse(val[keys[i]], seen); 69249 } 69250 } 69251 69252 var uid$1 = 0; 69253 /** 69254 * A watcher parses an expression, collects dependencies, 69255 * and fires callback when the expression value changes. 69256 * This is used for both the $watch() api and directives. 69257 * @internal 69258 */ 69259 var Watcher = /** @class */ (function () { 69260 function Watcher(vm, expOrFn, cb, options, isRenderWatcher) { 69261 recordEffectScope(this, 69262 // if the active effect scope is manually created (not a component scope), 69263 // prioritize it 69264 activeEffectScope && !activeEffectScope._vm 69265 ? activeEffectScope 69266 : vm 69267 ? vm._scope 69268 : undefined); 69269 if ((this.vm = vm) && isRenderWatcher) { 69270 vm._watcher = this; 69271 } 69272 // options 69273 if (options) { 69274 this.deep = !!options.deep; 69275 this.user = !!options.user; 69276 this.lazy = !!options.lazy; 69277 this.sync = !!options.sync; 69278 this.before = options.before; 69279 { 69280 this.onTrack = options.onTrack; 69281 this.onTrigger = options.onTrigger; 69282 } 69283 } 69284 else { 69285 this.deep = this.user = this.lazy = this.sync = false; 69286 } 69287 this.cb = cb; 69288 this.id = ++uid$1; // uid for batching 69289 this.active = true; 69290 this.post = false; 69291 this.dirty = this.lazy; // for lazy watchers 69292 this.deps = []; 69293 this.newDeps = []; 69294 this.depIds = new _Set(); 69295 this.newDepIds = new _Set(); 69296 this.expression = expOrFn.toString() ; 69297 // parse expression for getter 69298 if (isFunction(expOrFn)) { 69299 this.getter = expOrFn; 69300 } 69301 else { 69302 this.getter = parsePath(expOrFn); 69303 if (!this.getter) { 69304 this.getter = noop; 69305 warn$2("Failed watching path: \"".concat(expOrFn, "\" ") + 69306 'Watcher only accepts simple dot-delimited paths. ' + 69307 'For full control, use a function instead.', vm); 69308 } 69309 } 69310 this.value = this.lazy ? undefined : this.get(); 69311 } 69312 /** 69313 * Evaluate the getter, and re-collect dependencies. 69314 */ 69315 Watcher.prototype.get = function () { 69316 pushTarget(this); 69317 var value; 69318 var vm = this.vm; 69319 try { 69320 value = this.getter.call(vm, vm); 69321 } 69322 catch (e) { 69323 if (this.user) { 69324 handleError(e, vm, "getter for watcher \"".concat(this.expression, "\"")); 69325 } 69326 else { 69327 throw e; 69328 } 69329 } 69330 finally { 69331 // "touch" every property so they are all tracked as 69332 // dependencies for deep watching 69333 if (this.deep) { 69334 traverse(value); 69335 } 69336 popTarget(); 69337 this.cleanupDeps(); 69338 } 69339 return value; 69340 }; 69341 /** 69342 * Add a dependency to this directive. 69343 */ 69344 Watcher.prototype.addDep = function (dep) { 69345 var id = dep.id; 69346 if (!this.newDepIds.has(id)) { 69347 this.newDepIds.add(id); 69348 this.newDeps.push(dep); 69349 if (!this.depIds.has(id)) { 69350 dep.addSub(this); 69351 } 69352 } 69353 }; 69354 /** 69355 * Clean up for dependency collection. 69356 */ 69357 Watcher.prototype.cleanupDeps = function () { 69358 var i = this.deps.length; 69359 while (i--) { 69360 var dep = this.deps[i]; 69361 if (!this.newDepIds.has(dep.id)) { 69362 dep.removeSub(this); 69363 } 69364 } 69365 var tmp = this.depIds; 69366 this.depIds = this.newDepIds; 69367 this.newDepIds = tmp; 69368 this.newDepIds.clear(); 69369 tmp = this.deps; 69370 this.deps = this.newDeps; 69371 this.newDeps = tmp; 69372 this.newDeps.length = 0; 69373 }; 69374 /** 69375 * Subscriber interface. 69376 * Will be called when a dependency changes. 69377 */ 69378 Watcher.prototype.update = function () { 69379 /* istanbul ignore else */ 69380 if (this.lazy) { 69381 this.dirty = true; 69382 } 69383 else if (this.sync) { 69384 this.run(); 69385 } 69386 else { 69387 queueWatcher(this); 69388 } 69389 }; 69390 /** 69391 * Scheduler job interface. 69392 * Will be called by the scheduler. 69393 */ 69394 Watcher.prototype.run = function () { 69395 if (this.active) { 69396 var value = this.get(); 69397 if (value !== this.value || 69398 // Deep watchers and watchers on Object/Arrays should fire even 69399 // when the value is the same, because the value may 69400 // have mutated. 69401 isObject(value) || 69402 this.deep) { 69403 // set new value 69404 var oldValue = this.value; 69405 this.value = value; 69406 if (this.user) { 69407 var info = "callback for watcher \"".concat(this.expression, "\""); 69408 invokeWithErrorHandling(this.cb, this.vm, [value, oldValue], this.vm, info); 69409 } 69410 else { 69411 this.cb.call(this.vm, value, oldValue); 69412 } 69413 } 69414 } 69415 }; 69416 /** 69417 * Evaluate the value of the watcher. 69418 * This only gets called for lazy watchers. 69419 */ 69420 Watcher.prototype.evaluate = function () { 69421 this.value = this.get(); 69422 this.dirty = false; 69423 }; 69424 /** 69425 * Depend on all deps collected by this watcher. 69426 */ 69427 Watcher.prototype.depend = function () { 69428 var i = this.deps.length; 69429 while (i--) { 69430 this.deps[i].depend(); 69431 } 69432 }; 69433 /** 69434 * Remove self from all dependencies' subscriber list. 69435 */ 69436 Watcher.prototype.teardown = function () { 69437 if (this.vm && !this.vm._isBeingDestroyed) { 69438 remove$2(this.vm._scope.effects, this); 69439 } 69440 if (this.active) { 69441 var i = this.deps.length; 69442 while (i--) { 69443 this.deps[i].removeSub(this); 69444 } 69445 this.active = false; 69446 if (this.onStop) { 69447 this.onStop(); 69448 } 69449 } 69450 }; 69451 return Watcher; 69452 }()); 69453 69454 var sharedPropertyDefinition = { 69455 enumerable: true, 69456 configurable: true, 69457 get: noop, 69458 set: noop 69459 }; 69460 function proxy(target, sourceKey, key) { 69461 sharedPropertyDefinition.get = function proxyGetter() { 69462 return this[sourceKey][key]; 69463 }; 69464 sharedPropertyDefinition.set = function proxySetter(val) { 69465 this[sourceKey][key] = val; 69466 }; 69467 Object.defineProperty(target, key, sharedPropertyDefinition); 69468 } 69469 function initState(vm) { 69470 var opts = vm.$options; 69471 if (opts.props) 69472 initProps$1(vm, opts.props); 69473 // Composition API 69474 initSetup(vm); 69475 if (opts.methods) 69476 initMethods(vm, opts.methods); 69477 if (opts.data) { 69478 initData(vm); 69479 } 69480 else { 69481 var ob = observe((vm._data = {})); 69482 ob && ob.vmCount++; 69483 } 69484 if (opts.computed) 69485 initComputed$1(vm, opts.computed); 69486 if (opts.watch && opts.watch !== nativeWatch) { 69487 initWatch(vm, opts.watch); 69488 } 69489 } 69490 function initProps$1(vm, propsOptions) { 69491 var propsData = vm.$options.propsData || {}; 69492 var props = (vm._props = shallowReactive({})); 69493 // cache prop keys so that future props updates can iterate using Array 69494 // instead of dynamic object key enumeration. 69495 var keys = (vm.$options._propKeys = []); 69496 var isRoot = !vm.$parent; 69497 // root instance props should be converted 69498 if (!isRoot) { 69499 toggleObserving(false); 69500 } 69501 var _loop_1 = function (key) { 69502 keys.push(key); 69503 var value = validateProp(key, propsOptions, propsData, vm); 69504 /* istanbul ignore else */ 69505 { 69506 var hyphenatedKey = hyphenate(key); 69507 if (isReservedAttribute(hyphenatedKey) || 69508 config.isReservedAttr(hyphenatedKey)) { 69509 warn$2("\"".concat(hyphenatedKey, "\" is a reserved attribute and cannot be used as component prop."), vm); 69510 } 69511 defineReactive(props, key, value, function () { 69512 if (!isRoot && !isUpdatingChildComponent) { 69513 warn$2("Avoid mutating a prop directly since the value will be " + 69514 "overwritten whenever the parent component re-renders. " + 69515 "Instead, use a data or computed property based on the prop's " + 69516 "value. Prop being mutated: \"".concat(key, "\""), vm); 69517 } 69518 }, true /* shallow */); 69519 } 69520 // static props are already proxied on the component's prototype 69521 // during Vue.extend(). We only need to proxy props defined at 69522 // instantiation here. 69523 if (!(key in vm)) { 69524 proxy(vm, "_props", key); 69525 } 69526 }; 69527 for (var key in propsOptions) { 69528 _loop_1(key); 69529 } 69530 toggleObserving(true); 69531 } 69532 function initData(vm) { 69533 var data = vm.$options.data; 69534 data = vm._data = isFunction(data) ? getData(data, vm) : data || {}; 69535 if (!isPlainObject(data)) { 69536 data = {}; 69537 warn$2('data functions should return an object:\n' + 69538 'https://v2.vuejs.org/v2/guide/components.html#data-Must-Be-a-Function', vm); 69539 } 69540 // proxy data on instance 69541 var keys = Object.keys(data); 69542 var props = vm.$options.props; 69543 var methods = vm.$options.methods; 69544 var i = keys.length; 69545 while (i--) { 69546 var key = keys[i]; 69547 { 69548 if (methods && hasOwn(methods, key)) { 69549 warn$2("Method \"".concat(key, "\" has already been defined as a data property."), vm); 69550 } 69551 } 69552 if (props && hasOwn(props, key)) { 69553 warn$2("The data property \"".concat(key, "\" is already declared as a prop. ") + 69554 "Use prop default value instead.", vm); 69555 } 69556 else if (!isReserved(key)) { 69557 proxy(vm, "_data", key); 69558 } 69559 } 69560 // observe data 69561 var ob = observe(data); 69562 ob && ob.vmCount++; 69563 } 69564 function getData(data, vm) { 69565 // #7573 disable dep collection when invoking data getters 69566 pushTarget(); 69567 try { 69568 return data.call(vm, vm); 69569 } 69570 catch (e) { 69571 handleError(e, vm, "data()"); 69572 return {}; 69573 } 69574 finally { 69575 popTarget(); 69576 } 69577 } 69578 var computedWatcherOptions = { lazy: true }; 69579 function initComputed$1(vm, computed) { 69580 // $flow-disable-line 69581 var watchers = (vm._computedWatchers = Object.create(null)); 69582 // computed properties are just getters during SSR 69583 var isSSR = isServerRendering(); 69584 for (var key in computed) { 69585 var userDef = computed[key]; 69586 var getter = isFunction(userDef) ? userDef : userDef.get; 69587 if (getter == null) { 69588 warn$2("Getter is missing for computed property \"".concat(key, "\"."), vm); 69589 } 69590 if (!isSSR) { 69591 // create internal watcher for the computed property. 69592 watchers[key] = new Watcher(vm, getter || noop, noop, computedWatcherOptions); 69593 } 69594 // component-defined computed properties are already defined on the 69595 // component prototype. We only need to define computed properties defined 69596 // at instantiation here. 69597 if (!(key in vm)) { 69598 defineComputed(vm, key, userDef); 69599 } 69600 else { 69601 if (key in vm.$data) { 69602 warn$2("The computed property \"".concat(key, "\" is already defined in data."), vm); 69603 } 69604 else if (vm.$options.props && key in vm.$options.props) { 69605 warn$2("The computed property \"".concat(key, "\" is already defined as a prop."), vm); 69606 } 69607 else if (vm.$options.methods && key in vm.$options.methods) { 69608 warn$2("The computed property \"".concat(key, "\" is already defined as a method."), vm); 69609 } 69610 } 69611 } 69612 } 69613 function defineComputed(target, key, userDef) { 69614 var shouldCache = !isServerRendering(); 69615 if (isFunction(userDef)) { 69616 sharedPropertyDefinition.get = shouldCache 69617 ? createComputedGetter(key) 69618 : createGetterInvoker(userDef); 69619 sharedPropertyDefinition.set = noop; 69620 } 69621 else { 69622 sharedPropertyDefinition.get = userDef.get 69623 ? shouldCache && userDef.cache !== false 69624 ? createComputedGetter(key) 69625 : createGetterInvoker(userDef.get) 69626 : noop; 69627 sharedPropertyDefinition.set = userDef.set || noop; 69628 } 69629 if (sharedPropertyDefinition.set === noop) { 69630 sharedPropertyDefinition.set = function () { 69631 warn$2("Computed property \"".concat(key, "\" was assigned to but it has no setter."), this); 69632 }; 69633 } 69634 Object.defineProperty(target, key, sharedPropertyDefinition); 69635 } 69636 function createComputedGetter(key) { 69637 return function computedGetter() { 69638 var watcher = this._computedWatchers && this._computedWatchers[key]; 69639 if (watcher) { 69640 if (watcher.dirty) { 69641 watcher.evaluate(); 69642 } 69643 if (Dep.target) { 69644 if (Dep.target.onTrack) { 69645 Dep.target.onTrack({ 69646 effect: Dep.target, 69647 target: this, 69648 type: "get" /* TrackOpTypes.GET */, 69649 key: key 69650 }); 69651 } 69652 watcher.depend(); 69653 } 69654 return watcher.value; 69655 } 69656 }; 69657 } 69658 function createGetterInvoker(fn) { 69659 return function computedGetter() { 69660 return fn.call(this, this); 69661 }; 69662 } 69663 function initMethods(vm, methods) { 69664 var props = vm.$options.props; 69665 for (var key in methods) { 69666 { 69667 if (typeof methods[key] !== 'function') { 69668 warn$2("Method \"".concat(key, "\" has type \"").concat(typeof methods[key], "\" in the component definition. ") + 69669 "Did you reference the function correctly?", vm); 69670 } 69671 if (props && hasOwn(props, key)) { 69672 warn$2("Method \"".concat(key, "\" has already been defined as a prop."), vm); 69673 } 69674 if (key in vm && isReserved(key)) { 69675 warn$2("Method \"".concat(key, "\" conflicts with an existing Vue instance method. ") + 69676 "Avoid defining component methods that start with _ or $."); 69677 } 69678 } 69679 vm[key] = typeof methods[key] !== 'function' ? noop : bind$1(methods[key], vm); 69680 } 69681 } 69682 function initWatch(vm, watch) { 69683 for (var key in watch) { 69684 var handler = watch[key]; 69685 if (isArray(handler)) { 69686 for (var i = 0; i < handler.length; i++) { 69687 createWatcher(vm, key, handler[i]); 69688 } 69689 } 69690 else { 69691 createWatcher(vm, key, handler); 69692 } 69693 } 69694 } 69695 function createWatcher(vm, expOrFn, handler, options) { 69696 if (isPlainObject(handler)) { 69697 options = handler; 69698 handler = handler.handler; 69699 } 69700 if (typeof handler === 'string') { 69701 handler = vm[handler]; 69702 } 69703 return vm.$watch(expOrFn, handler, options); 69704 } 69705 function stateMixin(Vue) { 69706 // flow somehow has problems with directly declared definition object 69707 // when using Object.defineProperty, so we have to procedurally build up 69708 // the object here. 69709 var dataDef = {}; 69710 dataDef.get = function () { 69711 return this._data; 69712 }; 69713 var propsDef = {}; 69714 propsDef.get = function () { 69715 return this._props; 69716 }; 69717 { 69718 dataDef.set = function () { 69719 warn$2('Avoid replacing instance root $data. ' + 69720 'Use nested data properties instead.', this); 69721 }; 69722 propsDef.set = function () { 69723 warn$2("$props is readonly.", this); 69724 }; 69725 } 69726 Object.defineProperty(Vue.prototype, '$data', dataDef); 69727 Object.defineProperty(Vue.prototype, '$props', propsDef); 69728 Vue.prototype.$set = set; 69729 Vue.prototype.$delete = del; 69730 Vue.prototype.$watch = function (expOrFn, cb, options) { 69731 var vm = this; 69732 if (isPlainObject(cb)) { 69733 return createWatcher(vm, expOrFn, cb, options); 69734 } 69735 options = options || {}; 69736 options.user = true; 69737 var watcher = new Watcher(vm, expOrFn, cb, options); 69738 if (options.immediate) { 69739 var info = "callback for immediate watcher \"".concat(watcher.expression, "\""); 69740 pushTarget(); 69741 invokeWithErrorHandling(cb, vm, [watcher.value], vm, info); 69742 popTarget(); 69743 } 69744 return function unwatchFn() { 69745 watcher.teardown(); 69746 }; 69747 }; 69748 } 69749 69750 function initProvide(vm) { 69751 var provideOption = vm.$options.provide; 69752 if (provideOption) { 69753 var provided = isFunction(provideOption) 69754 ? provideOption.call(vm) 69755 : provideOption; 69756 if (!isObject(provided)) { 69757 return; 69758 } 69759 var source = resolveProvided(vm); 69760 // IE9 doesn't support Object.getOwnPropertyDescriptors so we have to 69761 // iterate the keys ourselves. 69762 var keys = hasSymbol ? Reflect.ownKeys(provided) : Object.keys(provided); 69763 for (var i = 0; i < keys.length; i++) { 69764 var key = keys[i]; 69765 Object.defineProperty(source, key, Object.getOwnPropertyDescriptor(provided, key)); 69766 } 69767 } 69768 } 69769 function initInjections(vm) { 69770 var result = resolveInject(vm.$options.inject, vm); 69771 if (result) { 69772 toggleObserving(false); 69773 Object.keys(result).forEach(function (key) { 69774 /* istanbul ignore else */ 69775 { 69776 defineReactive(vm, key, result[key], function () { 69777 warn$2("Avoid mutating an injected value directly since the changes will be " + 69778 "overwritten whenever the provided component re-renders. " + 69779 "injection being mutated: \"".concat(key, "\""), vm); 69780 }); 69781 } 69782 }); 69783 toggleObserving(true); 69784 } 69785 } 69786 function resolveInject(inject, vm) { 69787 if (inject) { 69788 // inject is :any because flow is not smart enough to figure out cached 69789 var result = Object.create(null); 69790 var keys = hasSymbol ? Reflect.ownKeys(inject) : Object.keys(inject); 69791 for (var i = 0; i < keys.length; i++) { 69792 var key = keys[i]; 69793 // #6574 in case the inject object is observed... 69794 if (key === '__ob__') 69795 continue; 69796 var provideKey = inject[key].from; 69797 if (provideKey in vm._provided) { 69798 result[key] = vm._provided[provideKey]; 69799 } 69800 else if ('default' in inject[key]) { 69801 var provideDefault = inject[key].default; 69802 result[key] = isFunction(provideDefault) 69803 ? provideDefault.call(vm) 69804 : provideDefault; 69805 } 69806 else { 69807 warn$2("Injection \"".concat(key, "\" not found"), vm); 69808 } 69809 } 69810 return result; 69811 } 69812 } 69813 69814 var uid = 0; 69815 function initMixin$1(Vue) { 69816 Vue.prototype._init = function (options) { 69817 var vm = this; 69818 // a uid 69819 vm._uid = uid++; 69820 var startTag, endTag; 69821 /* istanbul ignore if */ 69822 if (config.performance && mark) { 69823 startTag = "vue-perf-start:".concat(vm._uid); 69824 endTag = "vue-perf-end:".concat(vm._uid); 69825 mark(startTag); 69826 } 69827 // a flag to mark this as a Vue instance without having to do instanceof 69828 // check 69829 vm._isVue = true; 69830 // avoid instances from being observed 69831 vm.__v_skip = true; 69832 // effect scope 69833 vm._scope = new EffectScope(true /* detached */); 69834 // #13134 edge case where a child component is manually created during the 69835 // render of a parent component 69836 vm._scope.parent = undefined; 69837 vm._scope._vm = true; 69838 // merge options 69839 if (options && options._isComponent) { 69840 // optimize internal component instantiation 69841 // since dynamic options merging is pretty slow, and none of the 69842 // internal component options needs special treatment. 69843 initInternalComponent(vm, options); 69844 } 69845 else { 69846 vm.$options = mergeOptions(resolveConstructorOptions(vm.constructor), options || {}, vm); 69847 } 69848 /* istanbul ignore else */ 69849 { 69850 initProxy(vm); 69851 } 69852 // expose real self 69853 vm._self = vm; 69854 initLifecycle(vm); 69855 initEvents(vm); 69856 initRender(vm); 69857 callHook$1(vm, 'beforeCreate', undefined, false /* setContext */); 69858 initInjections(vm); // resolve injections before data/props 69859 initState(vm); 69860 initProvide(vm); // resolve provide after data/props 69861 callHook$1(vm, 'created'); 69862 /* istanbul ignore if */ 69863 if (config.performance && mark) { 69864 vm._name = formatComponentName(vm, false); 69865 mark(endTag); 69866 measure("vue ".concat(vm._name, " init"), startTag, endTag); 69867 } 69868 if (vm.$options.el) { 69869 vm.$mount(vm.$options.el); 69870 } 69871 }; 69872 } 69873 function initInternalComponent(vm, options) { 69874 var opts = (vm.$options = Object.create(vm.constructor.options)); 69875 // doing this because it's faster than dynamic enumeration. 69876 var parentVnode = options._parentVnode; 69877 opts.parent = options.parent; 69878 opts._parentVnode = parentVnode; 69879 var vnodeComponentOptions = parentVnode.componentOptions; 69880 opts.propsData = vnodeComponentOptions.propsData; 69881 opts._parentListeners = vnodeComponentOptions.listeners; 69882 opts._renderChildren = vnodeComponentOptions.children; 69883 opts._componentTag = vnodeComponentOptions.tag; 69884 if (options.render) { 69885 opts.render = options.render; 69886 opts.staticRenderFns = options.staticRenderFns; 69887 } 69888 } 69889 function resolveConstructorOptions(Ctor) { 69890 var options = Ctor.options; 69891 if (Ctor.super) { 69892 var superOptions = resolveConstructorOptions(Ctor.super); 69893 var cachedSuperOptions = Ctor.superOptions; 69894 if (superOptions !== cachedSuperOptions) { 69895 // super option changed, 69896 // need to resolve new options. 69897 Ctor.superOptions = superOptions; 69898 // check if there are any late-modified/attached options (#4976) 69899 var modifiedOptions = resolveModifiedOptions(Ctor); 69900 // update base extend options 69901 if (modifiedOptions) { 69902 extend(Ctor.extendOptions, modifiedOptions); 69903 } 69904 options = Ctor.options = mergeOptions(superOptions, Ctor.extendOptions); 69905 if (options.name) { 69906 options.components[options.name] = Ctor; 69907 } 69908 } 69909 } 69910 return options; 69911 } 69912 function resolveModifiedOptions(Ctor) { 69913 var modified; 69914 var latest = Ctor.options; 69915 var sealed = Ctor.sealedOptions; 69916 for (var key in latest) { 69917 if (latest[key] !== sealed[key]) { 69918 if (!modified) 69919 modified = {}; 69920 modified[key] = latest[key]; 69921 } 69922 } 69923 return modified; 69924 } 69925 69926 function FunctionalRenderContext(data, props, children, parent, Ctor) { 69927 var _this = this; 69928 var options = Ctor.options; 69929 // ensure the createElement function in functional components 69930 // gets a unique context - this is necessary for correct named slot check 69931 var contextVm; 69932 if (hasOwn(parent, '_uid')) { 69933 contextVm = Object.create(parent); 69934 contextVm._original = parent; 69935 } 69936 else { 69937 // the context vm passed in is a functional context as well. 69938 // in this case we want to make sure we are able to get a hold to the 69939 // real context instance. 69940 contextVm = parent; 69941 // @ts-ignore 69942 parent = parent._original; 69943 } 69944 var isCompiled = isTrue(options._compiled); 69945 var needNormalization = !isCompiled; 69946 this.data = data; 69947 this.props = props; 69948 this.children = children; 69949 this.parent = parent; 69950 this.listeners = data.on || emptyObject; 69951 this.injections = resolveInject(options.inject, parent); 69952 this.slots = function () { 69953 if (!_this.$slots) { 69954 normalizeScopedSlots(parent, data.scopedSlots, (_this.$slots = resolveSlots(children, parent))); 69955 } 69956 return _this.$slots; 69957 }; 69958 Object.defineProperty(this, 'scopedSlots', { 69959 enumerable: true, 69960 get: function () { 69961 return normalizeScopedSlots(parent, data.scopedSlots, this.slots()); 69962 } 69963 }); 69964 // support for compiled functional template 69965 if (isCompiled) { 69966 // exposing $options for renderStatic() 69967 this.$options = options; 69968 // pre-resolve slots for renderSlot() 69969 this.$slots = this.slots(); 69970 this.$scopedSlots = normalizeScopedSlots(parent, data.scopedSlots, this.$slots); 69971 } 69972 if (options._scopeId) { 69973 this._c = function (a, b, c, d) { 69974 var vnode = createElement$1(contextVm, a, b, c, d, needNormalization); 69975 if (vnode && !isArray(vnode)) { 69976 vnode.fnScopeId = options._scopeId; 69977 vnode.fnContext = parent; 69978 } 69979 return vnode; 69980 }; 69981 } 69982 else { 69983 this._c = function (a, b, c, d) { 69984 return createElement$1(contextVm, a, b, c, d, needNormalization); 69985 }; 69986 } 69987 } 69988 installRenderHelpers(FunctionalRenderContext.prototype); 69989 function createFunctionalComponent(Ctor, propsData, data, contextVm, children) { 69990 var options = Ctor.options; 69991 var props = {}; 69992 var propOptions = options.props; 69993 if (isDef(propOptions)) { 69994 for (var key in propOptions) { 69995 props[key] = validateProp(key, propOptions, propsData || emptyObject); 69996 } 69997 } 69998 else { 69999 if (isDef(data.attrs)) 70000 mergeProps(props, data.attrs); 70001 if (isDef(data.props)) 70002 mergeProps(props, data.props); 70003 } 70004 var renderContext = new FunctionalRenderContext(data, props, children, contextVm, Ctor); 70005 var vnode = options.render.call(null, renderContext._c, renderContext); 70006 if (vnode instanceof VNode) { 70007 return cloneAndMarkFunctionalResult(vnode, data, renderContext.parent, options, renderContext); 70008 } 70009 else if (isArray(vnode)) { 70010 var vnodes = normalizeChildren(vnode) || []; 70011 var res = new Array(vnodes.length); 70012 for (var i = 0; i < vnodes.length; i++) { 70013 res[i] = cloneAndMarkFunctionalResult(vnodes[i], data, renderContext.parent, options, renderContext); 70014 } 70015 return res; 70016 } 70017 } 70018 function cloneAndMarkFunctionalResult(vnode, data, contextVm, options, renderContext) { 70019 // #7817 clone node before setting fnContext, otherwise if the node is reused 70020 // (e.g. it was from a cached normal slot) the fnContext causes named slots 70021 // that should not be matched to match. 70022 var clone = cloneVNode(vnode); 70023 clone.fnContext = contextVm; 70024 clone.fnOptions = options; 70025 { 70026 (clone.devtoolsMeta = clone.devtoolsMeta || {}).renderContext = 70027 renderContext; 70028 } 70029 if (data.slot) { 70030 (clone.data || (clone.data = {})).slot = data.slot; 70031 } 70032 return clone; 70033 } 70034 function mergeProps(to, from) { 70035 for (var key in from) { 70036 to[camelize(key)] = from[key]; 70037 } 70038 } 70039 70040 function getComponentName(options) { 70041 return options.name || options.__name || options._componentTag; 70042 } 70043 // inline hooks to be invoked on component VNodes during patch 70044 var componentVNodeHooks = { 70045 init: function (vnode, hydrating) { 70046 if (vnode.componentInstance && 70047 !vnode.componentInstance._isDestroyed && 70048 vnode.data.keepAlive) { 70049 // kept-alive components, treat as a patch 70050 var mountedNode = vnode; // work around flow 70051 componentVNodeHooks.prepatch(mountedNode, mountedNode); 70052 } 70053 else { 70054 var child = (vnode.componentInstance = createComponentInstanceForVnode(vnode, activeInstance)); 70055 child.$mount(hydrating ? vnode.elm : undefined, hydrating); 70056 } 70057 }, 70058 prepatch: function (oldVnode, vnode) { 70059 var options = vnode.componentOptions; 70060 var child = (vnode.componentInstance = oldVnode.componentInstance); 70061 updateChildComponent(child, options.propsData, // updated props 70062 options.listeners, // updated listeners 70063 vnode, // new parent vnode 70064 options.children // new children 70065 ); 70066 }, 70067 insert: function (vnode) { 70068 var context = vnode.context, componentInstance = vnode.componentInstance; 70069 if (!componentInstance._isMounted) { 70070 componentInstance._isMounted = true; 70071 callHook$1(componentInstance, 'mounted'); 70072 } 70073 if (vnode.data.keepAlive) { 70074 if (context._isMounted) { 70075 // vue-router#1212 70076 // During updates, a kept-alive component's child components may 70077 // change, so directly walking the tree here may call activated hooks 70078 // on incorrect children. Instead we push them into a queue which will 70079 // be processed after the whole patch process ended. 70080 queueActivatedComponent(componentInstance); 70081 } 70082 else { 70083 activateChildComponent(componentInstance, true /* direct */); 70084 } 70085 } 70086 }, 70087 destroy: function (vnode) { 70088 var componentInstance = vnode.componentInstance; 70089 if (!componentInstance._isDestroyed) { 70090 if (!vnode.data.keepAlive) { 70091 componentInstance.$destroy(); 70092 } 70093 else { 70094 deactivateChildComponent(componentInstance, true /* direct */); 70095 } 70096 } 70097 } 70098 }; 70099 var hooksToMerge = Object.keys(componentVNodeHooks); 70100 function createComponent(Ctor, data, context, children, tag) { 70101 if (isUndef(Ctor)) { 70102 return; 70103 } 70104 var baseCtor = context.$options._base; 70105 // plain options object: turn it into a constructor 70106 if (isObject(Ctor)) { 70107 Ctor = baseCtor.extend(Ctor); 70108 } 70109 // if at this stage it's not a constructor or an async component factory, 70110 // reject. 70111 if (typeof Ctor !== 'function') { 70112 { 70113 warn$2("Invalid Component definition: ".concat(String(Ctor)), context); 70114 } 70115 return; 70116 } 70117 // async component 70118 var asyncFactory; 70119 // @ts-expect-error 70120 if (isUndef(Ctor.cid)) { 70121 asyncFactory = Ctor; 70122 Ctor = resolveAsyncComponent(asyncFactory, baseCtor); 70123 if (Ctor === undefined) { 70124 // return a placeholder node for async component, which is rendered 70125 // as a comment node but preserves all the raw information for the node. 70126 // the information will be used for async server-rendering and hydration. 70127 return createAsyncPlaceholder(asyncFactory, data, context, children, tag); 70128 } 70129 } 70130 data = data || {}; 70131 // resolve constructor options in case global mixins are applied after 70132 // component constructor creation 70133 resolveConstructorOptions(Ctor); 70134 // transform component v-model data into props & events 70135 if (isDef(data.model)) { 70136 // @ts-expect-error 70137 transformModel(Ctor.options, data); 70138 } 70139 // extract props 70140 // @ts-expect-error 70141 var propsData = extractPropsFromVNodeData(data, Ctor, tag); 70142 // functional component 70143 // @ts-expect-error 70144 if (isTrue(Ctor.options.functional)) { 70145 return createFunctionalComponent(Ctor, propsData, data, context, children); 70146 } 70147 // extract listeners, since these needs to be treated as 70148 // child component listeners instead of DOM listeners 70149 var listeners = data.on; 70150 // replace with listeners with .native modifier 70151 // so it gets processed during parent component patch. 70152 data.on = data.nativeOn; 70153 // @ts-expect-error 70154 if (isTrue(Ctor.options.abstract)) { 70155 // abstract components do not keep anything 70156 // other than props & listeners & slot 70157 // work around flow 70158 var slot = data.slot; 70159 data = {}; 70160 if (slot) { 70161 data.slot = slot; 70162 } 70163 } 70164 // install component management hooks onto the placeholder node 70165 installComponentHooks(data); 70166 // return a placeholder vnode 70167 // @ts-expect-error 70168 var name = getComponentName(Ctor.options) || tag; 70169 var vnode = new VNode( 70170 // @ts-expect-error 70171 "vue-component-".concat(Ctor.cid).concat(name ? "-".concat(name) : ''), data, undefined, undefined, undefined, context, 70172 // @ts-expect-error 70173 { Ctor: Ctor, propsData: propsData, listeners: listeners, tag: tag, children: children }, asyncFactory); 70174 return vnode; 70175 } 70176 function createComponentInstanceForVnode( 70177 // we know it's MountedComponentVNode but flow doesn't 70178 vnode, 70179 // activeInstance in lifecycle state 70180 parent) { 70181 var options = { 70182 _isComponent: true, 70183 _parentVnode: vnode, 70184 parent: parent 70185 }; 70186 // check inline-template render functions 70187 var inlineTemplate = vnode.data.inlineTemplate; 70188 if (isDef(inlineTemplate)) { 70189 options.render = inlineTemplate.render; 70190 options.staticRenderFns = inlineTemplate.staticRenderFns; 70191 } 70192 return new vnode.componentOptions.Ctor(options); 70193 } 70194 function installComponentHooks(data) { 70195 var hooks = data.hook || (data.hook = {}); 70196 for (var i = 0; i < hooksToMerge.length; i++) { 70197 var key = hooksToMerge[i]; 70198 var existing = hooks[key]; 70199 var toMerge = componentVNodeHooks[key]; 70200 // @ts-expect-error 70201 if (existing !== toMerge && !(existing && existing._merged)) { 70202 hooks[key] = existing ? mergeHook(toMerge, existing) : toMerge; 70203 } 70204 } 70205 } 70206 function mergeHook(f1, f2) { 70207 var merged = function (a, b) { 70208 // flow complains about extra args which is why we use any 70209 f1(a, b); 70210 f2(a, b); 70211 }; 70212 merged._merged = true; 70213 return merged; 70214 } 70215 // transform component v-model info (value and callback) into 70216 // prop and event handler respectively. 70217 function transformModel(options, data) { 70218 var prop = (options.model && options.model.prop) || 'value'; 70219 var event = (options.model && options.model.event) || 'input'; 70220 (data.attrs || (data.attrs = {}))[prop] = data.model.value; 70221 var on = data.on || (data.on = {}); 70222 var existing = on[event]; 70223 var callback = data.model.callback; 70224 if (isDef(existing)) { 70225 if (isArray(existing) 70226 ? existing.indexOf(callback) === -1 70227 : existing !== callback) { 70228 on[event] = [callback].concat(existing); 70229 } 70230 } 70231 else { 70232 on[event] = callback; 70233 } 70234 } 70235 70236 var warn$2 = noop; 70237 var tip = noop; 70238 var generateComponentTrace; // work around flow check 70239 var formatComponentName; 70240 { 70241 var hasConsole_1 = typeof console !== 'undefined'; 70242 var classifyRE_1 = /(?:^|[-_])(\w)/g; 70243 var classify_1 = function (str) { 70244 return str.replace(classifyRE_1, function (c) { return c.toUpperCase(); }).replace(/[-_]/g, ''); 70245 }; 70246 warn$2 = function (msg, vm) { 70247 if (vm === void 0) { vm = currentInstance; } 70248 var trace = vm ? generateComponentTrace(vm) : ''; 70249 if (config.warnHandler) { 70250 config.warnHandler.call(null, msg, vm, trace); 70251 } 70252 else if (hasConsole_1 && !config.silent) { 70253 console.error("[Vue warn]: ".concat(msg).concat(trace)); 70254 } 70255 }; 70256 tip = function (msg, vm) { 70257 if (hasConsole_1 && !config.silent) { 70258 console.warn("[Vue tip]: ".concat(msg) + (vm ? generateComponentTrace(vm) : '')); 70259 } 70260 }; 70261 formatComponentName = function (vm, includeFile) { 70262 if (vm.$root === vm) { 70263 return '<Root>'; 70264 } 70265 var options = isFunction(vm) && vm.cid != null 70266 ? vm.options 70267 : vm._isVue 70268 ? vm.$options || vm.constructor.options 70269 : vm; 70270 var name = getComponentName(options); 70271 var file = options.__file; 70272 if (!name && file) { 70273 var match = file.match(/([^/\\]+)\.vue$/); 70274 name = match && match[1]; 70275 } 70276 return ((name ? "<".concat(classify_1(name), ">") : "<Anonymous>") + 70277 (file && includeFile !== false ? " at ".concat(file) : '')); 70278 }; 70279 var repeat_1 = function (str, n) { 70280 var res = ''; 70281 while (n) { 70282 if (n % 2 === 1) 70283 res += str; 70284 if (n > 1) 70285 str += str; 70286 n >>= 1; 70287 } 70288 return res; 70289 }; 70290 generateComponentTrace = function (vm) { 70291 if (vm._isVue && vm.$parent) { 70292 var tree = []; 70293 var currentRecursiveSequence = 0; 70294 while (vm) { 70295 if (tree.length > 0) { 70296 var last = tree[tree.length - 1]; 70297 if (last.constructor === vm.constructor) { 70298 currentRecursiveSequence++; 70299 vm = vm.$parent; 70300 continue; 70301 } 70302 else if (currentRecursiveSequence > 0) { 70303 tree[tree.length - 1] = [last, currentRecursiveSequence]; 70304 currentRecursiveSequence = 0; 70305 } 70306 } 70307 tree.push(vm); 70308 vm = vm.$parent; 70309 } 70310 return ('\n\nfound in\n\n' + 70311 tree 70312 .map(function (vm, i) { 70313 return "".concat(i === 0 ? '---> ' : repeat_1(' ', 5 + i * 2)).concat(isArray(vm) 70314 ? "".concat(formatComponentName(vm[0]), "... (").concat(vm[1], " recursive calls)") 70315 : formatComponentName(vm)); 70316 }) 70317 .join('\n')); 70318 } 70319 else { 70320 return "\n\n(found in ".concat(formatComponentName(vm), ")"); 70321 } 70322 }; 70323 } 70324 70325 /** 70326 * Option overwriting strategies are functions that handle 70327 * how to merge a parent option value and a child option 70328 * value into the final value. 70329 */ 70330 var strats = config.optionMergeStrategies; 70331 /** 70332 * Options with restrictions 70333 */ 70334 { 70335 strats.el = strats.propsData = function (parent, child, vm, key) { 70336 if (!vm) { 70337 warn$2("option \"".concat(key, "\" can only be used during instance ") + 70338 'creation with the `new` keyword.'); 70339 } 70340 return defaultStrat(parent, child); 70341 }; 70342 } 70343 /** 70344 * Helper that recursively merges two data objects together. 70345 */ 70346 function mergeData(to, from, recursive) { 70347 if (recursive === void 0) { recursive = true; } 70348 if (!from) 70349 return to; 70350 var key, toVal, fromVal; 70351 var keys = hasSymbol 70352 ? Reflect.ownKeys(from) 70353 : Object.keys(from); 70354 for (var i = 0; i < keys.length; i++) { 70355 key = keys[i]; 70356 // in case the object is already observed... 70357 if (key === '__ob__') 70358 continue; 70359 toVal = to[key]; 70360 fromVal = from[key]; 70361 if (!recursive || !hasOwn(to, key)) { 70362 set(to, key, fromVal); 70363 } 70364 else if (toVal !== fromVal && 70365 isPlainObject(toVal) && 70366 isPlainObject(fromVal)) { 70367 mergeData(toVal, fromVal); 70368 } 70369 } 70370 return to; 70371 } 70372 /** 70373 * Data 70374 */ 70375 function mergeDataOrFn(parentVal, childVal, vm) { 70376 if (!vm) { 70377 // in a Vue.extend merge, both should be functions 70378 if (!childVal) { 70379 return parentVal; 70380 } 70381 if (!parentVal) { 70382 return childVal; 70383 } 70384 // when parentVal & childVal are both present, 70385 // we need to return a function that returns the 70386 // merged result of both functions... no need to 70387 // check if parentVal is a function here because 70388 // it has to be a function to pass previous merges. 70389 return function mergedDataFn() { 70390 return mergeData(isFunction(childVal) ? childVal.call(this, this) : childVal, isFunction(parentVal) ? parentVal.call(this, this) : parentVal); 70391 }; 70392 } 70393 else { 70394 return function mergedInstanceDataFn() { 70395 // instance merge 70396 var instanceData = isFunction(childVal) 70397 ? childVal.call(vm, vm) 70398 : childVal; 70399 var defaultData = isFunction(parentVal) 70400 ? parentVal.call(vm, vm) 70401 : parentVal; 70402 if (instanceData) { 70403 return mergeData(instanceData, defaultData); 70404 } 70405 else { 70406 return defaultData; 70407 } 70408 }; 70409 } 70410 } 70411 strats.data = function (parentVal, childVal, vm) { 70412 if (!vm) { 70413 if (childVal && typeof childVal !== 'function') { 70414 warn$2('The "data" option should be a function ' + 70415 'that returns a per-instance value in component ' + 70416 'definitions.', vm); 70417 return parentVal; 70418 } 70419 return mergeDataOrFn(parentVal, childVal); 70420 } 70421 return mergeDataOrFn(parentVal, childVal, vm); 70422 }; 70423 /** 70424 * Hooks and props are merged as arrays. 70425 */ 70426 function mergeLifecycleHook(parentVal, childVal) { 70427 var res = childVal 70428 ? parentVal 70429 ? parentVal.concat(childVal) 70430 : isArray(childVal) 70431 ? childVal 70432 : [childVal] 70433 : parentVal; 70434 return res ? dedupeHooks(res) : res; 70435 } 70436 function dedupeHooks(hooks) { 70437 var res = []; 70438 for (var i = 0; i < hooks.length; i++) { 70439 if (res.indexOf(hooks[i]) === -1) { 70440 res.push(hooks[i]); 70441 } 70442 } 70443 return res; 70444 } 70445 LIFECYCLE_HOOKS.forEach(function (hook) { 70446 strats[hook] = mergeLifecycleHook; 70447 }); 70448 /** 70449 * Assets 70450 * 70451 * When a vm is present (instance creation), we need to do 70452 * a three-way merge between constructor options, instance 70453 * options and parent options. 70454 */ 70455 function mergeAssets(parentVal, childVal, vm, key) { 70456 var res = Object.create(parentVal || null); 70457 if (childVal) { 70458 assertObjectType(key, childVal, vm); 70459 return extend(res, childVal); 70460 } 70461 else { 70462 return res; 70463 } 70464 } 70465 ASSET_TYPES.forEach(function (type) { 70466 strats[type + 's'] = mergeAssets; 70467 }); 70468 /** 70469 * Watchers. 70470 * 70471 * Watchers hashes should not overwrite one 70472 * another, so we merge them as arrays. 70473 */ 70474 strats.watch = function (parentVal, childVal, vm, key) { 70475 // work around Firefox's Object.prototype.watch... 70476 //@ts-expect-error work around 70477 if (parentVal === nativeWatch) 70478 parentVal = undefined; 70479 //@ts-expect-error work around 70480 if (childVal === nativeWatch) 70481 childVal = undefined; 70482 /* istanbul ignore if */ 70483 if (!childVal) 70484 return Object.create(parentVal || null); 70485 { 70486 assertObjectType(key, childVal, vm); 70487 } 70488 if (!parentVal) 70489 return childVal; 70490 var ret = {}; 70491 extend(ret, parentVal); 70492 for (var key_1 in childVal) { 70493 var parent_1 = ret[key_1]; 70494 var child = childVal[key_1]; 70495 if (parent_1 && !isArray(parent_1)) { 70496 parent_1 = [parent_1]; 70497 } 70498 ret[key_1] = parent_1 ? parent_1.concat(child) : isArray(child) ? child : [child]; 70499 } 70500 return ret; 70501 }; 70502 /** 70503 * Other object hashes. 70504 */ 70505 strats.props = 70506 strats.methods = 70507 strats.inject = 70508 strats.computed = 70509 function (parentVal, childVal, vm, key) { 70510 if (childVal && true) { 70511 assertObjectType(key, childVal, vm); 70512 } 70513 if (!parentVal) 70514 return childVal; 70515 var ret = Object.create(null); 70516 extend(ret, parentVal); 70517 if (childVal) 70518 extend(ret, childVal); 70519 return ret; 70520 }; 70521 strats.provide = function (parentVal, childVal) { 70522 if (!parentVal) 70523 return childVal; 70524 return function () { 70525 var ret = Object.create(null); 70526 mergeData(ret, isFunction(parentVal) ? parentVal.call(this) : parentVal); 70527 if (childVal) { 70528 mergeData(ret, isFunction(childVal) ? childVal.call(this) : childVal, false // non-recursive 70529 ); 70530 } 70531 return ret; 70532 }; 70533 }; 70534 /** 70535 * Default strategy. 70536 */ 70537 var defaultStrat = function (parentVal, childVal) { 70538 return childVal === undefined ? parentVal : childVal; 70539 }; 70540 /** 70541 * Validate component names 70542 */ 70543 function checkComponents(options) { 70544 for (var key in options.components) { 70545 validateComponentName(key); 70546 } 70547 } 70548 function validateComponentName(name) { 70549 if (!new RegExp("^[a-zA-Z][\\-\\.0-9_".concat(unicodeRegExp.source, "]*$")).test(name)) { 70550 warn$2('Invalid component name: "' + 70551 name + 70552 '". Component names ' + 70553 'should conform to valid custom element name in html5 specification.'); 70554 } 70555 if (isBuiltInTag(name) || config.isReservedTag(name)) { 70556 warn$2('Do not use built-in or reserved HTML elements as component ' + 70557 'id: ' + 70558 name); 70559 } 70560 } 70561 /** 70562 * Ensure all props option syntax are normalized into the 70563 * Object-based format. 70564 */ 70565 function normalizeProps(options, vm) { 70566 var props = options.props; 70567 if (!props) 70568 return; 70569 var res = {}; 70570 var i, val, name; 70571 if (isArray(props)) { 70572 i = props.length; 70573 while (i--) { 70574 val = props[i]; 70575 if (typeof val === 'string') { 70576 name = camelize(val); 70577 res[name] = { type: null }; 70578 } 70579 else { 70580 warn$2('props must be strings when using array syntax.'); 70581 } 70582 } 70583 } 70584 else if (isPlainObject(props)) { 70585 for (var key in props) { 70586 val = props[key]; 70587 name = camelize(key); 70588 res[name] = isPlainObject(val) ? val : { type: val }; 70589 } 70590 } 70591 else { 70592 warn$2("Invalid value for option \"props\": expected an Array or an Object, " + 70593 "but got ".concat(toRawType(props), "."), vm); 70594 } 70595 options.props = res; 70596 } 70597 /** 70598 * Normalize all injections into Object-based format 70599 */ 70600 function normalizeInject(options, vm) { 70601 var inject = options.inject; 70602 if (!inject) 70603 return; 70604 var normalized = (options.inject = {}); 70605 if (isArray(inject)) { 70606 for (var i = 0; i < inject.length; i++) { 70607 normalized[inject[i]] = { from: inject[i] }; 70608 } 70609 } 70610 else if (isPlainObject(inject)) { 70611 for (var key in inject) { 70612 var val = inject[key]; 70613 normalized[key] = isPlainObject(val) 70614 ? extend({ from: key }, val) 70615 : { from: val }; 70616 } 70617 } 70618 else { 70619 warn$2("Invalid value for option \"inject\": expected an Array or an Object, " + 70620 "but got ".concat(toRawType(inject), "."), vm); 70621 } 70622 } 70623 /** 70624 * Normalize raw function directives into object format. 70625 */ 70626 function normalizeDirectives$1(options) { 70627 var dirs = options.directives; 70628 if (dirs) { 70629 for (var key in dirs) { 70630 var def = dirs[key]; 70631 if (isFunction(def)) { 70632 dirs[key] = { bind: def, update: def }; 70633 } 70634 } 70635 } 70636 } 70637 function assertObjectType(name, value, vm) { 70638 if (!isPlainObject(value)) { 70639 warn$2("Invalid value for option \"".concat(name, "\": expected an Object, ") + 70640 "but got ".concat(toRawType(value), "."), vm); 70641 } 70642 } 70643 /** 70644 * Merge two option objects into a new one. 70645 * Core utility used in both instantiation and inheritance. 70646 */ 70647 function mergeOptions(parent, child, vm) { 70648 { 70649 checkComponents(child); 70650 } 70651 if (isFunction(child)) { 70652 // @ts-expect-error 70653 child = child.options; 70654 } 70655 normalizeProps(child, vm); 70656 normalizeInject(child, vm); 70657 normalizeDirectives$1(child); 70658 // Apply extends and mixins on the child options, 70659 // but only if it is a raw options object that isn't 70660 // the result of another mergeOptions call. 70661 // Only merged options has the _base property. 70662 if (!child._base) { 70663 if (child.extends) { 70664 parent = mergeOptions(parent, child.extends, vm); 70665 } 70666 if (child.mixins) { 70667 for (var i = 0, l = child.mixins.length; i < l; i++) { 70668 parent = mergeOptions(parent, child.mixins[i], vm); 70669 } 70670 } 70671 } 70672 var options = {}; 70673 var key; 70674 for (key in parent) { 70675 mergeField(key); 70676 } 70677 for (key in child) { 70678 if (!hasOwn(parent, key)) { 70679 mergeField(key); 70680 } 70681 } 70682 function mergeField(key) { 70683 var strat = strats[key] || defaultStrat; 70684 options[key] = strat(parent[key], child[key], vm, key); 70685 } 70686 return options; 70687 } 70688 /** 70689 * Resolve an asset. 70690 * This function is used because child instances need access 70691 * to assets defined in its ancestor chain. 70692 */ 70693 function resolveAsset(options, type, id, warnMissing) { 70694 /* istanbul ignore if */ 70695 if (typeof id !== 'string') { 70696 return; 70697 } 70698 var assets = options[type]; 70699 // check local registration variations first 70700 if (hasOwn(assets, id)) 70701 return assets[id]; 70702 var camelizedId = camelize(id); 70703 if (hasOwn(assets, camelizedId)) 70704 return assets[camelizedId]; 70705 var PascalCaseId = capitalize(camelizedId); 70706 if (hasOwn(assets, PascalCaseId)) 70707 return assets[PascalCaseId]; 70708 // fallback to prototype chain 70709 var res = assets[id] || assets[camelizedId] || assets[PascalCaseId]; 70710 if (warnMissing && !res) { 70711 warn$2('Failed to resolve ' + type.slice(0, -1) + ': ' + id); 70712 } 70713 return res; 70714 } 70715 70716 function validateProp(key, propOptions, propsData, vm) { 70717 var prop = propOptions[key]; 70718 var absent = !hasOwn(propsData, key); 70719 var value = propsData[key]; 70720 // boolean casting 70721 var booleanIndex = getTypeIndex(Boolean, prop.type); 70722 if (booleanIndex > -1) { 70723 if (absent && !hasOwn(prop, 'default')) { 70724 value = false; 70725 } 70726 else if (value === '' || value === hyphenate(key)) { 70727 // only cast empty string / same name to boolean if 70728 // boolean has higher priority 70729 var stringIndex = getTypeIndex(String, prop.type); 70730 if (stringIndex < 0 || booleanIndex < stringIndex) { 70731 value = true; 70732 } 70733 } 70734 } 70735 // check default value 70736 if (value === undefined) { 70737 value = getPropDefaultValue(vm, prop, key); 70738 // since the default value is a fresh copy, 70739 // make sure to observe it. 70740 var prevShouldObserve = shouldObserve; 70741 toggleObserving(true); 70742 observe(value); 70743 toggleObserving(prevShouldObserve); 70744 } 70745 { 70746 assertProp(prop, key, value, vm, absent); 70747 } 70748 return value; 70749 } 70750 /** 70751 * Get the default value of a prop. 70752 */ 70753 function getPropDefaultValue(vm, prop, key) { 70754 // no default, return undefined 70755 if (!hasOwn(prop, 'default')) { 70756 return undefined; 70757 } 70758 var def = prop.default; 70759 // warn against non-factory defaults for Object & Array 70760 if (isObject(def)) { 70761 warn$2('Invalid default value for prop "' + 70762 key + 70763 '": ' + 70764 'Props with type Object/Array must use a factory function ' + 70765 'to return the default value.', vm); 70766 } 70767 // the raw prop value was also undefined from previous render, 70768 // return previous default value to avoid unnecessary watcher trigger 70769 if (vm && 70770 vm.$options.propsData && 70771 vm.$options.propsData[key] === undefined && 70772 vm._props[key] !== undefined) { 70773 return vm._props[key]; 70774 } 70775 // call factory function for non-Function types 70776 // a value is Function if its prototype is function even across different execution context 70777 return isFunction(def) && getType(prop.type) !== 'Function' 70778 ? def.call(vm) 70779 : def; 70780 } 70781 /** 70782 * Assert whether a prop is valid. 70783 */ 70784 function assertProp(prop, name, value, vm, absent) { 70785 if (prop.required && absent) { 70786 warn$2('Missing required prop: "' + name + '"', vm); 70787 return; 70788 } 70789 if (value == null && !prop.required) { 70790 return; 70791 } 70792 var type = prop.type; 70793 var valid = !type || type === true; 70794 var expectedTypes = []; 70795 if (type) { 70796 if (!isArray(type)) { 70797 type = [type]; 70798 } 70799 for (var i = 0; i < type.length && !valid; i++) { 70800 var assertedType = assertType(value, type[i], vm); 70801 expectedTypes.push(assertedType.expectedType || ''); 70802 valid = assertedType.valid; 70803 } 70804 } 70805 var haveExpectedTypes = expectedTypes.some(function (t) { return t; }); 70806 if (!valid && haveExpectedTypes) { 70807 warn$2(getInvalidTypeMessage(name, value, expectedTypes), vm); 70808 return; 70809 } 70810 var validator = prop.validator; 70811 if (validator) { 70812 if (!validator(value)) { 70813 warn$2('Invalid prop: custom validator check failed for prop "' + name + '".', vm); 70814 } 70815 } 70816 } 70817 var simpleCheckRE = /^(String|Number|Boolean|Function|Symbol|BigInt)$/; 70818 function assertType(value, type, vm) { 70819 var valid; 70820 var expectedType = getType(type); 70821 if (simpleCheckRE.test(expectedType)) { 70822 var t = typeof value; 70823 valid = t === expectedType.toLowerCase(); 70824 // for primitive wrapper objects 70825 if (!valid && t === 'object') { 70826 valid = value instanceof type; 70827 } 70828 } 70829 else if (expectedType === 'Object') { 70830 valid = isPlainObject(value); 70831 } 70832 else if (expectedType === 'Array') { 70833 valid = isArray(value); 70834 } 70835 else { 70836 try { 70837 valid = value instanceof type; 70838 } 70839 catch (e) { 70840 warn$2('Invalid prop type: "' + String(type) + '" is not a constructor', vm); 70841 valid = false; 70842 } 70843 } 70844 return { 70845 valid: valid, 70846 expectedType: expectedType 70847 }; 70848 } 70849 var functionTypeCheckRE = /^\s*function (\w+)/; 70850 /** 70851 * Use function string name to check built-in types, 70852 * because a simple equality check will fail when running 70853 * across different vms / iframes. 70854 */ 70855 function getType(fn) { 70856 var match = fn && fn.toString().match(functionTypeCheckRE); 70857 return match ? match[1] : ''; 70858 } 70859 function isSameType(a, b) { 70860 return getType(a) === getType(b); 70861 } 70862 function getTypeIndex(type, expectedTypes) { 70863 if (!isArray(expectedTypes)) { 70864 return isSameType(expectedTypes, type) ? 0 : -1; 70865 } 70866 for (var i = 0, len = expectedTypes.length; i < len; i++) { 70867 if (isSameType(expectedTypes[i], type)) { 70868 return i; 70869 } 70870 } 70871 return -1; 70872 } 70873 function getInvalidTypeMessage(name, value, expectedTypes) { 70874 var message = "Invalid prop: type check failed for prop \"".concat(name, "\".") + 70875 " Expected ".concat(expectedTypes.map(capitalize).join(', ')); 70876 var expectedType = expectedTypes[0]; 70877 var receivedType = toRawType(value); 70878 // check if we need to specify expected value 70879 if (expectedTypes.length === 1 && 70880 isExplicable(expectedType) && 70881 isExplicable(typeof value) && 70882 !isBoolean(expectedType, receivedType)) { 70883 message += " with value ".concat(styleValue(value, expectedType)); 70884 } 70885 message += ", got ".concat(receivedType, " "); 70886 // check if we need to specify received value 70887 if (isExplicable(receivedType)) { 70888 message += "with value ".concat(styleValue(value, receivedType), "."); 70889 } 70890 return message; 70891 } 70892 function styleValue(value, type) { 70893 if (type === 'String') { 70894 return "\"".concat(value, "\""); 70895 } 70896 else if (type === 'Number') { 70897 return "".concat(Number(value)); 70898 } 70899 else { 70900 return "".concat(value); 70901 } 70902 } 70903 var EXPLICABLE_TYPES = ['string', 'number', 'boolean']; 70904 function isExplicable(value) { 70905 return EXPLICABLE_TYPES.some(function (elem) { return value.toLowerCase() === elem; }); 70906 } 70907 function isBoolean() { 70908 var args = []; 70909 for (var _i = 0; _i < arguments.length; _i++) { 70910 args[_i] = arguments[_i]; 70911 } 70912 return args.some(function (elem) { return elem.toLowerCase() === 'boolean'; }); 70913 } 70914 70915 function Vue(options) { 70916 if (!(this instanceof Vue)) { 70917 warn$2('Vue is a constructor and should be called with the `new` keyword'); 70918 } 70919 this._init(options); 70920 } 70921 //@ts-expect-error Vue has function type 70922 initMixin$1(Vue); 70923 //@ts-expect-error Vue has function type 70924 stateMixin(Vue); 70925 //@ts-expect-error Vue has function type 70926 eventsMixin(Vue); 70927 //@ts-expect-error Vue has function type 70928 lifecycleMixin(Vue); 70929 //@ts-expect-error Vue has function type 70930 renderMixin(Vue); 70931 70932 function initUse(Vue) { 70933 Vue.use = function (plugin) { 70934 var installedPlugins = this._installedPlugins || (this._installedPlugins = []); 70935 if (installedPlugins.indexOf(plugin) > -1) { 70936 return this; 70937 } 70938 // additional parameters 70939 var args = toArray(arguments, 1); 70940 args.unshift(this); 70941 if (isFunction(plugin.install)) { 70942 plugin.install.apply(plugin, args); 70943 } 70944 else if (isFunction(plugin)) { 70945 plugin.apply(null, args); 70946 } 70947 installedPlugins.push(plugin); 70948 return this; 70949 }; 70950 } 70951 70952 function initMixin(Vue) { 70953 Vue.mixin = function (mixin) { 70954 this.options = mergeOptions(this.options, mixin); 70955 return this; 70956 }; 70957 } 70958 70959 function initExtend(Vue) { 70960 /** 70961 * Each instance constructor, including Vue, has a unique 70962 * cid. This enables us to create wrapped "child 70963 * constructors" for prototypal inheritance and cache them. 70964 */ 70965 Vue.cid = 0; 70966 var cid = 1; 70967 /** 70968 * Class inheritance 70969 */ 70970 Vue.extend = function (extendOptions) { 70971 extendOptions = extendOptions || {}; 70972 var Super = this; 70973 var SuperId = Super.cid; 70974 var cachedCtors = extendOptions._Ctor || (extendOptions._Ctor = {}); 70975 if (cachedCtors[SuperId]) { 70976 return cachedCtors[SuperId]; 70977 } 70978 var name = getComponentName(extendOptions) || getComponentName(Super.options); 70979 if (name) { 70980 validateComponentName(name); 70981 } 70982 var Sub = function VueComponent(options) { 70983 this._init(options); 70984 }; 70985 Sub.prototype = Object.create(Super.prototype); 70986 Sub.prototype.constructor = Sub; 70987 Sub.cid = cid++; 70988 Sub.options = mergeOptions(Super.options, extendOptions); 70989 Sub['super'] = Super; 70990 // For props and computed properties, we define the proxy getters on 70991 // the Vue instances at extension time, on the extended prototype. This 70992 // avoids Object.defineProperty calls for each instance created. 70993 if (Sub.options.props) { 70994 initProps(Sub); 70995 } 70996 if (Sub.options.computed) { 70997 initComputed(Sub); 70998 } 70999 // allow further extension/mixin/plugin usage 71000 Sub.extend = Super.extend; 71001 Sub.mixin = Super.mixin; 71002 Sub.use = Super.use; 71003 // create asset registers, so extended classes 71004 // can have their private assets too. 71005 ASSET_TYPES.forEach(function (type) { 71006 Sub[type] = Super[type]; 71007 }); 71008 // enable recursive self-lookup 71009 if (name) { 71010 Sub.options.components[name] = Sub; 71011 } 71012 // keep a reference to the super options at extension time. 71013 // later at instantiation we can check if Super's options have 71014 // been updated. 71015 Sub.superOptions = Super.options; 71016 Sub.extendOptions = extendOptions; 71017 Sub.sealedOptions = extend({}, Sub.options); 71018 // cache constructor 71019 cachedCtors[SuperId] = Sub; 71020 return Sub; 71021 }; 71022 } 71023 function initProps(Comp) { 71024 var props = Comp.options.props; 71025 for (var key in props) { 71026 proxy(Comp.prototype, "_props", key); 71027 } 71028 } 71029 function initComputed(Comp) { 71030 var computed = Comp.options.computed; 71031 for (var key in computed) { 71032 defineComputed(Comp.prototype, key, computed[key]); 71033 } 71034 } 71035 71036 function initAssetRegisters(Vue) { 71037 /** 71038 * Create asset registration methods. 71039 */ 71040 ASSET_TYPES.forEach(function (type) { 71041 // @ts-expect-error function is not exact same type 71042 Vue[type] = function (id, definition) { 71043 if (!definition) { 71044 return this.options[type + 's'][id]; 71045 } 71046 else { 71047 /* istanbul ignore if */ 71048 if (type === 'component') { 71049 validateComponentName(id); 71050 } 71051 if (type === 'component' && isPlainObject(definition)) { 71052 // @ts-expect-error 71053 definition.name = definition.name || id; 71054 definition = this.options._base.extend(definition); 71055 } 71056 if (type === 'directive' && isFunction(definition)) { 71057 definition = { bind: definition, update: definition }; 71058 } 71059 this.options[type + 's'][id] = definition; 71060 return definition; 71061 } 71062 }; 71063 }); 71064 } 71065 71066 function _getComponentName(opts) { 71067 return opts && (getComponentName(opts.Ctor.options) || opts.tag); 71068 } 71069 function matches(pattern, name) { 71070 if (isArray(pattern)) { 71071 return pattern.indexOf(name) > -1; 71072 } 71073 else if (typeof pattern === 'string') { 71074 return pattern.split(',').indexOf(name) > -1; 71075 } 71076 else if (isRegExp(pattern)) { 71077 return pattern.test(name); 71078 } 71079 /* istanbul ignore next */ 71080 return false; 71081 } 71082 function pruneCache(keepAliveInstance, filter) { 71083 var cache = keepAliveInstance.cache, keys = keepAliveInstance.keys, _vnode = keepAliveInstance._vnode, $vnode = keepAliveInstance.$vnode; 71084 for (var key in cache) { 71085 var entry = cache[key]; 71086 if (entry) { 71087 var name_1 = entry.name; 71088 if (name_1 && !filter(name_1)) { 71089 pruneCacheEntry(cache, key, keys, _vnode); 71090 } 71091 } 71092 } 71093 $vnode.componentOptions.children = undefined; 71094 } 71095 function pruneCacheEntry(cache, key, keys, current) { 71096 var entry = cache[key]; 71097 if (entry && (!current || entry.tag !== current.tag)) { 71098 // @ts-expect-error can be undefined 71099 entry.componentInstance.$destroy(); 71100 } 71101 cache[key] = null; 71102 remove$2(keys, key); 71103 } 71104 var patternTypes = [String, RegExp, Array]; 71105 // TODO defineComponent 71106 var KeepAlive = { 71107 name: 'keep-alive', 71108 abstract: true, 71109 props: { 71110 include: patternTypes, 71111 exclude: patternTypes, 71112 max: [String, Number] 71113 }, 71114 methods: { 71115 cacheVNode: function () { 71116 var _a = this, cache = _a.cache, keys = _a.keys, vnodeToCache = _a.vnodeToCache, keyToCache = _a.keyToCache; 71117 if (vnodeToCache) { 71118 var tag = vnodeToCache.tag, componentInstance = vnodeToCache.componentInstance, componentOptions = vnodeToCache.componentOptions; 71119 cache[keyToCache] = { 71120 name: _getComponentName(componentOptions), 71121 tag: tag, 71122 componentInstance: componentInstance 71123 }; 71124 keys.push(keyToCache); 71125 // prune oldest entry 71126 if (this.max && keys.length > parseInt(this.max)) { 71127 pruneCacheEntry(cache, keys[0], keys, this._vnode); 71128 } 71129 this.vnodeToCache = null; 71130 } 71131 } 71132 }, 71133 created: function () { 71134 this.cache = Object.create(null); 71135 this.keys = []; 71136 }, 71137 destroyed: function () { 71138 for (var key in this.cache) { 71139 pruneCacheEntry(this.cache, key, this.keys); 71140 } 71141 }, 71142 mounted: function () { 71143 var _this = this; 71144 this.cacheVNode(); 71145 this.$watch('include', function (val) { 71146 pruneCache(_this, function (name) { return matches(val, name); }); 71147 }); 71148 this.$watch('exclude', function (val) { 71149 pruneCache(_this, function (name) { return !matches(val, name); }); 71150 }); 71151 }, 71152 updated: function () { 71153 this.cacheVNode(); 71154 }, 71155 render: function () { 71156 var slot = this.$slots.default; 71157 var vnode = getFirstComponentChild(slot); 71158 var componentOptions = vnode && vnode.componentOptions; 71159 if (componentOptions) { 71160 // check pattern 71161 var name_2 = _getComponentName(componentOptions); 71162 var _a = this, include = _a.include, exclude = _a.exclude; 71163 if ( 71164 // not included 71165 (include && (!name_2 || !matches(include, name_2))) || 71166 // excluded 71167 (exclude && name_2 && matches(exclude, name_2))) { 71168 return vnode; 71169 } 71170 var _b = this, cache = _b.cache, keys = _b.keys; 71171 var key = vnode.key == null 71172 ? // same constructor may get registered as different local components 71173 // so cid alone is not enough (#3269) 71174 componentOptions.Ctor.cid + 71175 (componentOptions.tag ? "::".concat(componentOptions.tag) : '') 71176 : vnode.key; 71177 if (cache[key]) { 71178 vnode.componentInstance = cache[key].componentInstance; 71179 // make current key freshest 71180 remove$2(keys, key); 71181 keys.push(key); 71182 } 71183 else { 71184 // delay setting the cache until update 71185 this.vnodeToCache = vnode; 71186 this.keyToCache = key; 71187 } 71188 // @ts-expect-error can vnode.data can be undefined 71189 vnode.data.keepAlive = true; 71190 } 71191 return vnode || (slot && slot[0]); 71192 } 71193 }; 71194 71195 var builtInComponents = { 71196 KeepAlive: KeepAlive 71197 }; 71198 71199 function initGlobalAPI(Vue) { 71200 // config 71201 var configDef = {}; 71202 configDef.get = function () { return config; }; 71203 { 71204 configDef.set = function () { 71205 warn$2('Do not replace the Vue.config object, set individual fields instead.'); 71206 }; 71207 } 71208 Object.defineProperty(Vue, 'config', configDef); 71209 // exposed util methods. 71210 // NOTE: these are not considered part of the public API - avoid relying on 71211 // them unless you are aware of the risk. 71212 Vue.util = { 71213 warn: warn$2, 71214 extend: extend, 71215 mergeOptions: mergeOptions, 71216 defineReactive: defineReactive 71217 }; 71218 Vue.set = set; 71219 Vue.delete = del; 71220 Vue.nextTick = nextTick; 71221 // 2.6 explicit observable API 71222 Vue.observable = function (obj) { 71223 observe(obj); 71224 return obj; 71225 }; 71226 Vue.options = Object.create(null); 71227 ASSET_TYPES.forEach(function (type) { 71228 Vue.options[type + 's'] = Object.create(null); 71229 }); 71230 // this is used to identify the "base" constructor to extend all plain-object 71231 // components with in Weex's multi-instance scenarios. 71232 Vue.options._base = Vue; 71233 extend(Vue.options.components, builtInComponents); 71234 initUse(Vue); 71235 initMixin(Vue); 71236 initExtend(Vue); 71237 initAssetRegisters(Vue); 71238 } 71239 71240 initGlobalAPI(Vue); 71241 Object.defineProperty(Vue.prototype, '$isServer', { 71242 get: isServerRendering 71243 }); 71244 Object.defineProperty(Vue.prototype, '$ssrContext', { 71245 get: function () { 71246 /* istanbul ignore next */ 71247 return this.$vnode && this.$vnode.ssrContext; 71248 } 71249 }); 71250 // expose FunctionalRenderContext for ssr runtime helper installation 71251 Object.defineProperty(Vue, 'FunctionalRenderContext', { 71252 value: FunctionalRenderContext 71253 }); 71254 Vue.version = version; 71255 71256 // these are reserved for web because they are directly compiled away 71257 // during template compilation 71258 var isReservedAttr = makeMap('style,class'); 71259 // attributes that should be using props for binding 71260 var acceptValue = makeMap('input,textarea,option,select,progress'); 71261 var mustUseProp = function (tag, type, attr) { 71262 return ((attr === 'value' && acceptValue(tag) && type !== 'button') || 71263 (attr === 'selected' && tag === 'option') || 71264 (attr === 'checked' && tag === 'input') || 71265 (attr === 'muted' && tag === 'video')); 71266 }; 71267 var isEnumeratedAttr = makeMap('contenteditable,draggable,spellcheck'); 71268 var isValidContentEditableValue = makeMap('events,caret,typing,plaintext-only'); 71269 var convertEnumeratedValue = function (key, value) { 71270 return isFalsyAttrValue(value) || value === 'false' 71271 ? 'false' 71272 : // allow arbitrary string value for contenteditable 71273 key === 'contenteditable' && isValidContentEditableValue(value) 71274 ? value 71275 : 'true'; 71276 }; 71277 var isBooleanAttr = makeMap('allowfullscreen,async,autofocus,autoplay,checked,compact,controls,declare,' + 71278 'default,defaultchecked,defaultmuted,defaultselected,defer,disabled,' + 71279 'enabled,formnovalidate,hidden,indeterminate,inert,ismap,itemscope,loop,multiple,' + 71280 'muted,nohref,noresize,noshade,novalidate,nowrap,open,pauseonexit,readonly,' + 71281 'required,reversed,scoped,seamless,selected,sortable,' + 71282 'truespeed,typemustmatch,visible'); 71283 var xlinkNS = 'http://www.w3.org/1999/xlink'; 71284 var isXlink = function (name) { 71285 return name.charAt(5) === ':' && name.slice(0, 5) === 'xlink'; 71286 }; 71287 var getXlinkProp = function (name) { 71288 return isXlink(name) ? name.slice(6, name.length) : ''; 71289 }; 71290 var isFalsyAttrValue = function (val) { 71291 return val == null || val === false; 71292 }; 71293 71294 function genClassForVnode(vnode) { 71295 var data = vnode.data; 71296 var parentNode = vnode; 71297 var childNode = vnode; 71298 while (isDef(childNode.componentInstance)) { 71299 childNode = childNode.componentInstance._vnode; 71300 if (childNode && childNode.data) { 71301 data = mergeClassData(childNode.data, data); 71302 } 71303 } 71304 // @ts-expect-error parentNode.parent not VNodeWithData 71305 while (isDef((parentNode = parentNode.parent))) { 71306 if (parentNode && parentNode.data) { 71307 data = mergeClassData(data, parentNode.data); 71308 } 71309 } 71310 return renderClass(data.staticClass, data.class); 71311 } 71312 function mergeClassData(child, parent) { 71313 return { 71314 staticClass: concat(child.staticClass, parent.staticClass), 71315 class: isDef(child.class) ? [child.class, parent.class] : parent.class 71316 }; 71317 } 71318 function renderClass(staticClass, dynamicClass) { 71319 if (isDef(staticClass) || isDef(dynamicClass)) { 71320 return concat(staticClass, stringifyClass(dynamicClass)); 71321 } 71322 /* istanbul ignore next */ 71323 return ''; 71324 } 71325 function concat(a, b) { 71326 return a ? (b ? a + ' ' + b : a) : b || ''; 71327 } 71328 function stringifyClass(value) { 71329 if (Array.isArray(value)) { 71330 return stringifyArray(value); 71331 } 71332 if (isObject(value)) { 71333 return stringifyObject(value); 71334 } 71335 if (typeof value === 'string') { 71336 return value; 71337 } 71338 /* istanbul ignore next */ 71339 return ''; 71340 } 71341 function stringifyArray(value) { 71342 var res = ''; 71343 var stringified; 71344 for (var i = 0, l = value.length; i < l; i++) { 71345 if (isDef((stringified = stringifyClass(value[i]))) && stringified !== '') { 71346 if (res) 71347 res += ' '; 71348 res += stringified; 71349 } 71350 } 71351 return res; 71352 } 71353 function stringifyObject(value) { 71354 var res = ''; 71355 for (var key in value) { 71356 if (value[key]) { 71357 if (res) 71358 res += ' '; 71359 res += key; 71360 } 71361 } 71362 return res; 71363 } 71364 71365 var namespaceMap = { 71366 svg: 'http://www.w3.org/2000/svg', 71367 math: 'http://www.w3.org/1998/Math/MathML' 71368 }; 71369 var isHTMLTag = makeMap('html,body,base,head,link,meta,style,title,' + 71370 'address,article,aside,footer,header,h1,h2,h3,h4,h5,h6,hgroup,nav,section,' + 71371 'div,dd,dl,dt,figcaption,figure,picture,hr,img,li,main,ol,p,pre,ul,' + 71372 'a,b,abbr,bdi,bdo,br,cite,code,data,dfn,em,i,kbd,mark,q,rp,rt,rtc,ruby,' + 71373 's,samp,small,span,strong,sub,sup,time,u,var,wbr,area,audio,map,track,video,' + 71374 'embed,object,param,source,canvas,script,noscript,del,ins,' + 71375 'caption,col,colgroup,table,thead,tbody,td,th,tr,' + 71376 'button,datalist,fieldset,form,input,label,legend,meter,optgroup,option,' + 71377 'output,progress,select,textarea,' + 71378 'details,dialog,menu,menuitem,summary,' + 71379 'content,element,shadow,template,blockquote,iframe,tfoot'); 71380 // this map is intentionally selective, only covering SVG elements that may 71381 // contain child elements. 71382 var isSVG = makeMap('svg,animate,circle,clippath,cursor,defs,desc,ellipse,filter,font-face,' + 71383 'foreignobject,g,glyph,image,line,marker,mask,missing-glyph,path,pattern,' + 71384 'polygon,polyline,rect,switch,symbol,text,textpath,tspan,use,view', true); 71385 var isPreTag = function (tag) { return tag === 'pre'; }; 71386 var isReservedTag = function (tag) { 71387 return isHTMLTag(tag) || isSVG(tag); 71388 }; 71389 function getTagNamespace(tag) { 71390 if (isSVG(tag)) { 71391 return 'svg'; 71392 } 71393 // basic support for MathML 71394 // note it doesn't support other MathML elements being component roots 71395 if (tag === 'math') { 71396 return 'math'; 71397 } 71398 } 71399 var unknownElementCache = Object.create(null); 71400 function isUnknownElement(tag) { 71401 /* istanbul ignore if */ 71402 if (!inBrowser) { 71403 return true; 71404 } 71405 if (isReservedTag(tag)) { 71406 return false; 71407 } 71408 tag = tag.toLowerCase(); 71409 /* istanbul ignore if */ 71410 if (unknownElementCache[tag] != null) { 71411 return unknownElementCache[tag]; 71412 } 71413 var el = document.createElement(tag); 71414 if (tag.indexOf('-') > -1) { 71415 // https://stackoverflow.com/a/28210364/1070244 71416 return (unknownElementCache[tag] = 71417 el.constructor === window.HTMLUnknownElement || 71418 el.constructor === window.HTMLElement); 71419 } 71420 else { 71421 return (unknownElementCache[tag] = /HTMLUnknownElement/.test(el.toString())); 71422 } 71423 } 71424 var isTextInputType = makeMap('text,number,password,search,email,tel,url'); 71425 71426 /** 71427 * Query an element selector if it's not an element already. 71428 */ 71429 function query(el) { 71430 if (typeof el === 'string') { 71431 var selected = document.querySelector(el); 71432 if (!selected) { 71433 warn$2('Cannot find element: ' + el); 71434 return document.createElement('div'); 71435 } 71436 return selected; 71437 } 71438 else { 71439 return el; 71440 } 71441 } 71442 71443 function createElement(tagName, vnode) { 71444 var elm = document.createElement(tagName); 71445 if (tagName !== 'select') { 71446 return elm; 71447 } 71448 // false or null will remove the attribute but undefined will not 71449 if (vnode.data && 71450 vnode.data.attrs && 71451 vnode.data.attrs.multiple !== undefined) { 71452 elm.setAttribute('multiple', 'multiple'); 71453 } 71454 return elm; 71455 } 71456 function createElementNS(namespace, tagName) { 71457 return document.createElementNS(namespaceMap[namespace], tagName); 71458 } 71459 function createTextNode(text) { 71460 return document.createTextNode(text); 71461 } 71462 function createComment(text) { 71463 return document.createComment(text); 71464 } 71465 function insertBefore(parentNode, newNode, referenceNode) { 71466 parentNode.insertBefore(newNode, referenceNode); 71467 } 71468 function removeChild(node, child) { 71469 node.removeChild(child); 71470 } 71471 function appendChild(node, child) { 71472 node.appendChild(child); 71473 } 71474 function parentNode(node) { 71475 return node.parentNode; 71476 } 71477 function nextSibling(node) { 71478 return node.nextSibling; 71479 } 71480 function tagName(node) { 71481 return node.tagName; 71482 } 71483 function setTextContent(node, text) { 71484 node.textContent = text; 71485 } 71486 function setStyleScope(node, scopeId) { 71487 node.setAttribute(scopeId, ''); 71488 } 71489 71490 var nodeOps = /*#__PURE__*/Object.freeze({ 71491 __proto__: null, 71492 createElement: createElement, 71493 createElementNS: createElementNS, 71494 createTextNode: createTextNode, 71495 createComment: createComment, 71496 insertBefore: insertBefore, 71497 removeChild: removeChild, 71498 appendChild: appendChild, 71499 parentNode: parentNode, 71500 nextSibling: nextSibling, 71501 tagName: tagName, 71502 setTextContent: setTextContent, 71503 setStyleScope: setStyleScope 71504 }); 71505 71506 var ref = { 71507 create: function (_, vnode) { 71508 registerRef(vnode); 71509 }, 71510 update: function (oldVnode, vnode) { 71511 if (oldVnode.data.ref !== vnode.data.ref) { 71512 registerRef(oldVnode, true); 71513 registerRef(vnode); 71514 } 71515 }, 71516 destroy: function (vnode) { 71517 registerRef(vnode, true); 71518 } 71519 }; 71520 function registerRef(vnode, isRemoval) { 71521 var ref = vnode.data.ref; 71522 if (!isDef(ref)) 71523 return; 71524 var vm = vnode.context; 71525 var refValue = vnode.componentInstance || vnode.elm; 71526 var value = isRemoval ? null : refValue; 71527 var $refsValue = isRemoval ? undefined : refValue; 71528 if (isFunction(ref)) { 71529 invokeWithErrorHandling(ref, vm, [value], vm, "template ref function"); 71530 return; 71531 } 71532 var isFor = vnode.data.refInFor; 71533 var _isString = typeof ref === 'string' || typeof ref === 'number'; 71534 var _isRef = isRef(ref); 71535 var refs = vm.$refs; 71536 if (_isString || _isRef) { 71537 if (isFor) { 71538 var existing = _isString ? refs[ref] : ref.value; 71539 if (isRemoval) { 71540 isArray(existing) && remove$2(existing, refValue); 71541 } 71542 else { 71543 if (!isArray(existing)) { 71544 if (_isString) { 71545 refs[ref] = [refValue]; 71546 setSetupRef(vm, ref, refs[ref]); 71547 } 71548 else { 71549 ref.value = [refValue]; 71550 } 71551 } 71552 else if (!existing.includes(refValue)) { 71553 existing.push(refValue); 71554 } 71555 } 71556 } 71557 else if (_isString) { 71558 if (isRemoval && refs[ref] !== refValue) { 71559 return; 71560 } 71561 refs[ref] = $refsValue; 71562 setSetupRef(vm, ref, value); 71563 } 71564 else if (_isRef) { 71565 if (isRemoval && ref.value !== refValue) { 71566 return; 71567 } 71568 ref.value = value; 71569 } 71570 else { 71571 warn$2("Invalid template ref type: ".concat(typeof ref)); 71572 } 71573 } 71574 } 71575 function setSetupRef(_a, key, val) { 71576 var _setupState = _a._setupState; 71577 if (_setupState && hasOwn(_setupState, key)) { 71578 if (isRef(_setupState[key])) { 71579 _setupState[key].value = val; 71580 } 71581 else { 71582 _setupState[key] = val; 71583 } 71584 } 71585 } 71586 71587 /** 71588 * Virtual DOM patching algorithm based on Snabbdom by 71589 * Simon Friis Vindum (@paldepind) 71590 * Licensed under the MIT License 71591 * https://github.com/paldepind/snabbdom/blob/master/LICENSE 71592 * 71593 * modified by Evan You (@yyx990803) 71594 * 71595 * Not type-checking this because this file is perf-critical and the cost 71596 * of making flow understand it is not worth it. 71597 */ 71598 var emptyNode = new VNode('', {}, []); 71599 var hooks = ['create', 'activate', 'update', 'remove', 'destroy']; 71600 function sameVnode(a, b) { 71601 return (a.key === b.key && 71602 a.asyncFactory === b.asyncFactory && 71603 ((a.tag === b.tag && 71604 a.isComment === b.isComment && 71605 isDef(a.data) === isDef(b.data) && 71606 sameInputType(a, b)) || 71607 (isTrue(a.isAsyncPlaceholder) && isUndef(b.asyncFactory.error)))); 71608 } 71609 function sameInputType(a, b) { 71610 if (a.tag !== 'input') 71611 return true; 71612 var i; 71613 var typeA = isDef((i = a.data)) && isDef((i = i.attrs)) && i.type; 71614 var typeB = isDef((i = b.data)) && isDef((i = i.attrs)) && i.type; 71615 return typeA === typeB || (isTextInputType(typeA) && isTextInputType(typeB)); 71616 } 71617 function createKeyToOldIdx(children, beginIdx, endIdx) { 71618 var i, key; 71619 var map = {}; 71620 for (i = beginIdx; i <= endIdx; ++i) { 71621 key = children[i].key; 71622 if (isDef(key)) 71623 map[key] = i; 71624 } 71625 return map; 71626 } 71627 function createPatchFunction(backend) { 71628 var i, j; 71629 var cbs = {}; 71630 var modules = backend.modules, nodeOps = backend.nodeOps; 71631 for (i = 0; i < hooks.length; ++i) { 71632 cbs[hooks[i]] = []; 71633 for (j = 0; j < modules.length; ++j) { 71634 if (isDef(modules[j][hooks[i]])) { 71635 cbs[hooks[i]].push(modules[j][hooks[i]]); 71636 } 71637 } 71638 } 71639 function emptyNodeAt(elm) { 71640 return new VNode(nodeOps.tagName(elm).toLowerCase(), {}, [], undefined, elm); 71641 } 71642 function createRmCb(childElm, listeners) { 71643 function remove() { 71644 if (--remove.listeners === 0) { 71645 removeNode(childElm); 71646 } 71647 } 71648 remove.listeners = listeners; 71649 return remove; 71650 } 71651 function removeNode(el) { 71652 var parent = nodeOps.parentNode(el); 71653 // element may have already been removed due to v-html / v-text 71654 if (isDef(parent)) { 71655 nodeOps.removeChild(parent, el); 71656 } 71657 } 71658 function isUnknownElement(vnode, inVPre) { 71659 return (!inVPre && 71660 !vnode.ns && 71661 !(config.ignoredElements.length && 71662 config.ignoredElements.some(function (ignore) { 71663 return isRegExp(ignore) 71664 ? ignore.test(vnode.tag) 71665 : ignore === vnode.tag; 71666 })) && 71667 config.isUnknownElement(vnode.tag)); 71668 } 71669 var creatingElmInVPre = 0; 71670 function createElm(vnode, insertedVnodeQueue, parentElm, refElm, nested, ownerArray, index) { 71671 if (isDef(vnode.elm) && isDef(ownerArray)) { 71672 // This vnode was used in a previous render! 71673 // now it's used as a new node, overwriting its elm would cause 71674 // potential patch errors down the road when it's used as an insertion 71675 // reference node. Instead, we clone the node on-demand before creating 71676 // associated DOM element for it. 71677 vnode = ownerArray[index] = cloneVNode(vnode); 71678 } 71679 vnode.isRootInsert = !nested; // for transition enter check 71680 if (createComponent(vnode, insertedVnodeQueue, parentElm, refElm)) { 71681 return; 71682 } 71683 var data = vnode.data; 71684 var children = vnode.children; 71685 var tag = vnode.tag; 71686 if (isDef(tag)) { 71687 { 71688 if (data && data.pre) { 71689 creatingElmInVPre++; 71690 } 71691 if (isUnknownElement(vnode, creatingElmInVPre)) { 71692 warn$2('Unknown custom element: <' + 71693 tag + 71694 '> - did you ' + 71695 'register the component correctly? For recursive components, ' + 71696 'make sure to provide the "name" option.', vnode.context); 71697 } 71698 } 71699 vnode.elm = vnode.ns 71700 ? nodeOps.createElementNS(vnode.ns, tag) 71701 : nodeOps.createElement(tag, vnode); 71702 setScope(vnode); 71703 createChildren(vnode, children, insertedVnodeQueue); 71704 if (isDef(data)) { 71705 invokeCreateHooks(vnode, insertedVnodeQueue); 71706 } 71707 insert(parentElm, vnode.elm, refElm); 71708 if (data && data.pre) { 71709 creatingElmInVPre--; 71710 } 71711 } 71712 else if (isTrue(vnode.isComment)) { 71713 vnode.elm = nodeOps.createComment(vnode.text); 71714 insert(parentElm, vnode.elm, refElm); 71715 } 71716 else { 71717 vnode.elm = nodeOps.createTextNode(vnode.text); 71718 insert(parentElm, vnode.elm, refElm); 71719 } 71720 } 71721 function createComponent(vnode, insertedVnodeQueue, parentElm, refElm) { 71722 var i = vnode.data; 71723 if (isDef(i)) { 71724 var isReactivated = isDef(vnode.componentInstance) && i.keepAlive; 71725 if (isDef((i = i.hook)) && isDef((i = i.init))) { 71726 i(vnode, false /* hydrating */); 71727 } 71728 // after calling the init hook, if the vnode is a child component 71729 // it should've created a child instance and mounted it. the child 71730 // component also has set the placeholder vnode's elm. 71731 // in that case we can just return the element and be done. 71732 if (isDef(vnode.componentInstance)) { 71733 initComponent(vnode, insertedVnodeQueue); 71734 insert(parentElm, vnode.elm, refElm); 71735 if (isTrue(isReactivated)) { 71736 reactivateComponent(vnode, insertedVnodeQueue, parentElm, refElm); 71737 } 71738 return true; 71739 } 71740 } 71741 } 71742 function initComponent(vnode, insertedVnodeQueue) { 71743 if (isDef(vnode.data.pendingInsert)) { 71744 insertedVnodeQueue.push.apply(insertedVnodeQueue, vnode.data.pendingInsert); 71745 vnode.data.pendingInsert = null; 71746 } 71747 vnode.elm = vnode.componentInstance.$el; 71748 if (isPatchable(vnode)) { 71749 invokeCreateHooks(vnode, insertedVnodeQueue); 71750 setScope(vnode); 71751 } 71752 else { 71753 // empty component root. 71754 // skip all element-related modules except for ref (#3455) 71755 registerRef(vnode); 71756 // make sure to invoke the insert hook 71757 insertedVnodeQueue.push(vnode); 71758 } 71759 } 71760 function reactivateComponent(vnode, insertedVnodeQueue, parentElm, refElm) { 71761 var i; 71762 // hack for #4339: a reactivated component with inner transition 71763 // does not trigger because the inner node's created hooks are not called 71764 // again. It's not ideal to involve module-specific logic in here but 71765 // there doesn't seem to be a better way to do it. 71766 var innerNode = vnode; 71767 while (innerNode.componentInstance) { 71768 innerNode = innerNode.componentInstance._vnode; 71769 if (isDef((i = innerNode.data)) && isDef((i = i.transition))) { 71770 for (i = 0; i < cbs.activate.length; ++i) { 71771 cbs.activate[i](emptyNode, innerNode); 71772 } 71773 insertedVnodeQueue.push(innerNode); 71774 break; 71775 } 71776 } 71777 // unlike a newly created component, 71778 // a reactivated keep-alive component doesn't insert itself 71779 insert(parentElm, vnode.elm, refElm); 71780 } 71781 function insert(parent, elm, ref) { 71782 if (isDef(parent)) { 71783 if (isDef(ref)) { 71784 if (nodeOps.parentNode(ref) === parent) { 71785 nodeOps.insertBefore(parent, elm, ref); 71786 } 71787 } 71788 else { 71789 nodeOps.appendChild(parent, elm); 71790 } 71791 } 71792 } 71793 function createChildren(vnode, children, insertedVnodeQueue) { 71794 if (isArray(children)) { 71795 { 71796 checkDuplicateKeys(children); 71797 } 71798 for (var i_1 = 0; i_1 < children.length; ++i_1) { 71799 createElm(children[i_1], insertedVnodeQueue, vnode.elm, null, true, children, i_1); 71800 } 71801 } 71802 else if (isPrimitive(vnode.text)) { 71803 nodeOps.appendChild(vnode.elm, nodeOps.createTextNode(String(vnode.text))); 71804 } 71805 } 71806 function isPatchable(vnode) { 71807 while (vnode.componentInstance) { 71808 vnode = vnode.componentInstance._vnode; 71809 } 71810 return isDef(vnode.tag); 71811 } 71812 function invokeCreateHooks(vnode, insertedVnodeQueue) { 71813 for (var i_2 = 0; i_2 < cbs.create.length; ++i_2) { 71814 cbs.create[i_2](emptyNode, vnode); 71815 } 71816 i = vnode.data.hook; // Reuse variable 71817 if (isDef(i)) { 71818 if (isDef(i.create)) 71819 i.create(emptyNode, vnode); 71820 if (isDef(i.insert)) 71821 insertedVnodeQueue.push(vnode); 71822 } 71823 } 71824 // set scope id attribute for scoped CSS. 71825 // this is implemented as a special case to avoid the overhead 71826 // of going through the normal attribute patching process. 71827 function setScope(vnode) { 71828 var i; 71829 if (isDef((i = vnode.fnScopeId))) { 71830 nodeOps.setStyleScope(vnode.elm, i); 71831 } 71832 else { 71833 var ancestor = vnode; 71834 while (ancestor) { 71835 if (isDef((i = ancestor.context)) && isDef((i = i.$options._scopeId))) { 71836 nodeOps.setStyleScope(vnode.elm, i); 71837 } 71838 ancestor = ancestor.parent; 71839 } 71840 } 71841 // for slot content they should also get the scopeId from the host instance. 71842 if (isDef((i = activeInstance)) && 71843 i !== vnode.context && 71844 i !== vnode.fnContext && 71845 isDef((i = i.$options._scopeId))) { 71846 nodeOps.setStyleScope(vnode.elm, i); 71847 } 71848 } 71849 function addVnodes(parentElm, refElm, vnodes, startIdx, endIdx, insertedVnodeQueue) { 71850 for (; startIdx <= endIdx; ++startIdx) { 71851 createElm(vnodes[startIdx], insertedVnodeQueue, parentElm, refElm, false, vnodes, startIdx); 71852 } 71853 } 71854 function invokeDestroyHook(vnode) { 71855 var i, j; 71856 var data = vnode.data; 71857 if (isDef(data)) { 71858 if (isDef((i = data.hook)) && isDef((i = i.destroy))) 71859 i(vnode); 71860 for (i = 0; i < cbs.destroy.length; ++i) 71861 cbs.destroy[i](vnode); 71862 } 71863 if (isDef((i = vnode.children))) { 71864 for (j = 0; j < vnode.children.length; ++j) { 71865 invokeDestroyHook(vnode.children[j]); 71866 } 71867 } 71868 } 71869 function removeVnodes(vnodes, startIdx, endIdx) { 71870 for (; startIdx <= endIdx; ++startIdx) { 71871 var ch = vnodes[startIdx]; 71872 if (isDef(ch)) { 71873 if (isDef(ch.tag)) { 71874 removeAndInvokeRemoveHook(ch); 71875 invokeDestroyHook(ch); 71876 } 71877 else { 71878 // Text node 71879 removeNode(ch.elm); 71880 } 71881 } 71882 } 71883 } 71884 function removeAndInvokeRemoveHook(vnode, rm) { 71885 if (isDef(rm) || isDef(vnode.data)) { 71886 var i_3; 71887 var listeners = cbs.remove.length + 1; 71888 if (isDef(rm)) { 71889 // we have a recursively passed down rm callback 71890 // increase the listeners count 71891 rm.listeners += listeners; 71892 } 71893 else { 71894 // directly removing 71895 rm = createRmCb(vnode.elm, listeners); 71896 } 71897 // recursively invoke hooks on child component root node 71898 if (isDef((i_3 = vnode.componentInstance)) && 71899 isDef((i_3 = i_3._vnode)) && 71900 isDef(i_3.data)) { 71901 removeAndInvokeRemoveHook(i_3, rm); 71902 } 71903 for (i_3 = 0; i_3 < cbs.remove.length; ++i_3) { 71904 cbs.remove[i_3](vnode, rm); 71905 } 71906 if (isDef((i_3 = vnode.data.hook)) && isDef((i_3 = i_3.remove))) { 71907 i_3(vnode, rm); 71908 } 71909 else { 71910 rm(); 71911 } 71912 } 71913 else { 71914 removeNode(vnode.elm); 71915 } 71916 } 71917 function updateChildren(parentElm, oldCh, newCh, insertedVnodeQueue, removeOnly) { 71918 var oldStartIdx = 0; 71919 var newStartIdx = 0; 71920 var oldEndIdx = oldCh.length - 1; 71921 var oldStartVnode = oldCh[0]; 71922 var oldEndVnode = oldCh[oldEndIdx]; 71923 var newEndIdx = newCh.length - 1; 71924 var newStartVnode = newCh[0]; 71925 var newEndVnode = newCh[newEndIdx]; 71926 var oldKeyToIdx, idxInOld, vnodeToMove, refElm; 71927 // removeOnly is a special flag used only by <transition-group> 71928 // to ensure removed elements stay in correct relative positions 71929 // during leaving transitions 71930 var canMove = !removeOnly; 71931 { 71932 checkDuplicateKeys(newCh); 71933 } 71934 while (oldStartIdx <= oldEndIdx && newStartIdx <= newEndIdx) { 71935 if (isUndef(oldStartVnode)) { 71936 oldStartVnode = oldCh[++oldStartIdx]; // Vnode has been moved left 71937 } 71938 else if (isUndef(oldEndVnode)) { 71939 oldEndVnode = oldCh[--oldEndIdx]; 71940 } 71941 else if (sameVnode(oldStartVnode, newStartVnode)) { 71942 patchVnode(oldStartVnode, newStartVnode, insertedVnodeQueue, newCh, newStartIdx); 71943 oldStartVnode = oldCh[++oldStartIdx]; 71944 newStartVnode = newCh[++newStartIdx]; 71945 } 71946 else if (sameVnode(oldEndVnode, newEndVnode)) { 71947 patchVnode(oldEndVnode, newEndVnode, insertedVnodeQueue, newCh, newEndIdx); 71948 oldEndVnode = oldCh[--oldEndIdx]; 71949 newEndVnode = newCh[--newEndIdx]; 71950 } 71951 else if (sameVnode(oldStartVnode, newEndVnode)) { 71952 // Vnode moved right 71953 patchVnode(oldStartVnode, newEndVnode, insertedVnodeQueue, newCh, newEndIdx); 71954 canMove && 71955 nodeOps.insertBefore(parentElm, oldStartVnode.elm, nodeOps.nextSibling(oldEndVnode.elm)); 71956 oldStartVnode = oldCh[++oldStartIdx]; 71957 newEndVnode = newCh[--newEndIdx]; 71958 } 71959 else if (sameVnode(oldEndVnode, newStartVnode)) { 71960 // Vnode moved left 71961 patchVnode(oldEndVnode, newStartVnode, insertedVnodeQueue, newCh, newStartIdx); 71962 canMove && 71963 nodeOps.insertBefore(parentElm, oldEndVnode.elm, oldStartVnode.elm); 71964 oldEndVnode = oldCh[--oldEndIdx]; 71965 newStartVnode = newCh[++newStartIdx]; 71966 } 71967 else { 71968 if (isUndef(oldKeyToIdx)) 71969 oldKeyToIdx = createKeyToOldIdx(oldCh, oldStartIdx, oldEndIdx); 71970 idxInOld = isDef(newStartVnode.key) 71971 ? oldKeyToIdx[newStartVnode.key] 71972 : findIdxInOld(newStartVnode, oldCh, oldStartIdx, oldEndIdx); 71973 if (isUndef(idxInOld)) { 71974 // New element 71975 createElm(newStartVnode, insertedVnodeQueue, parentElm, oldStartVnode.elm, false, newCh, newStartIdx); 71976 } 71977 else { 71978 vnodeToMove = oldCh[idxInOld]; 71979 if (sameVnode(vnodeToMove, newStartVnode)) { 71980 patchVnode(vnodeToMove, newStartVnode, insertedVnodeQueue, newCh, newStartIdx); 71981 oldCh[idxInOld] = undefined; 71982 canMove && 71983 nodeOps.insertBefore(parentElm, vnodeToMove.elm, oldStartVnode.elm); 71984 } 71985 else { 71986 // same key but different element. treat as new element 71987 createElm(newStartVnode, insertedVnodeQueue, parentElm, oldStartVnode.elm, false, newCh, newStartIdx); 71988 } 71989 } 71990 newStartVnode = newCh[++newStartIdx]; 71991 } 71992 } 71993 if (oldStartIdx > oldEndIdx) { 71994 refElm = isUndef(newCh[newEndIdx + 1]) ? null : newCh[newEndIdx + 1].elm; 71995 addVnodes(parentElm, refElm, newCh, newStartIdx, newEndIdx, insertedVnodeQueue); 71996 } 71997 else if (newStartIdx > newEndIdx) { 71998 removeVnodes(oldCh, oldStartIdx, oldEndIdx); 71999 } 72000 } 72001 function checkDuplicateKeys(children) { 72002 var seenKeys = {}; 72003 for (var i_4 = 0; i_4 < children.length; i_4++) { 72004 var vnode = children[i_4]; 72005 var key = vnode.key; 72006 if (isDef(key)) { 72007 if (seenKeys[key]) { 72008 warn$2("Duplicate keys detected: '".concat(key, "'. This may cause an update error."), vnode.context); 72009 } 72010 else { 72011 seenKeys[key] = true; 72012 } 72013 } 72014 } 72015 } 72016 function findIdxInOld(node, oldCh, start, end) { 72017 for (var i_5 = start; i_5 < end; i_5++) { 72018 var c = oldCh[i_5]; 72019 if (isDef(c) && sameVnode(node, c)) 72020 return i_5; 72021 } 72022 } 72023 function patchVnode(oldVnode, vnode, insertedVnodeQueue, ownerArray, index, removeOnly) { 72024 if (oldVnode === vnode) { 72025 return; 72026 } 72027 if (isDef(vnode.elm) && isDef(ownerArray)) { 72028 // clone reused vnode 72029 vnode = ownerArray[index] = cloneVNode(vnode); 72030 } 72031 var elm = (vnode.elm = oldVnode.elm); 72032 if (isTrue(oldVnode.isAsyncPlaceholder)) { 72033 if (isDef(vnode.asyncFactory.resolved)) { 72034 hydrate(oldVnode.elm, vnode, insertedVnodeQueue); 72035 } 72036 else { 72037 vnode.isAsyncPlaceholder = true; 72038 } 72039 return; 72040 } 72041 // reuse element for static trees. 72042 // note we only do this if the vnode is cloned - 72043 // if the new node is not cloned it means the render functions have been 72044 // reset by the hot-reload-api and we need to do a proper re-render. 72045 if (isTrue(vnode.isStatic) && 72046 isTrue(oldVnode.isStatic) && 72047 vnode.key === oldVnode.key && 72048 (isTrue(vnode.isCloned) || isTrue(vnode.isOnce))) { 72049 vnode.componentInstance = oldVnode.componentInstance; 72050 return; 72051 } 72052 var i; 72053 var data = vnode.data; 72054 if (isDef(data) && isDef((i = data.hook)) && isDef((i = i.prepatch))) { 72055 i(oldVnode, vnode); 72056 } 72057 var oldCh = oldVnode.children; 72058 var ch = vnode.children; 72059 if (isDef(data) && isPatchable(vnode)) { 72060 for (i = 0; i < cbs.update.length; ++i) 72061 cbs.update[i](oldVnode, vnode); 72062 if (isDef((i = data.hook)) && isDef((i = i.update))) 72063 i(oldVnode, vnode); 72064 } 72065 if (isUndef(vnode.text)) { 72066 if (isDef(oldCh) && isDef(ch)) { 72067 if (oldCh !== ch) 72068 updateChildren(elm, oldCh, ch, insertedVnodeQueue, removeOnly); 72069 } 72070 else if (isDef(ch)) { 72071 { 72072 checkDuplicateKeys(ch); 72073 } 72074 if (isDef(oldVnode.text)) 72075 nodeOps.setTextContent(elm, ''); 72076 addVnodes(elm, null, ch, 0, ch.length - 1, insertedVnodeQueue); 72077 } 72078 else if (isDef(oldCh)) { 72079 removeVnodes(oldCh, 0, oldCh.length - 1); 72080 } 72081 else if (isDef(oldVnode.text)) { 72082 nodeOps.setTextContent(elm, ''); 72083 } 72084 } 72085 else if (oldVnode.text !== vnode.text) { 72086 nodeOps.setTextContent(elm, vnode.text); 72087 } 72088 if (isDef(data)) { 72089 if (isDef((i = data.hook)) && isDef((i = i.postpatch))) 72090 i(oldVnode, vnode); 72091 } 72092 } 72093 function invokeInsertHook(vnode, queue, initial) { 72094 // delay insert hooks for component root nodes, invoke them after the 72095 // element is really inserted 72096 if (isTrue(initial) && isDef(vnode.parent)) { 72097 vnode.parent.data.pendingInsert = queue; 72098 } 72099 else { 72100 for (var i_6 = 0; i_6 < queue.length; ++i_6) { 72101 queue[i_6].data.hook.insert(queue[i_6]); 72102 } 72103 } 72104 } 72105 var hydrationBailed = false; 72106 // list of modules that can skip create hook during hydration because they 72107 // are already rendered on the client or has no need for initialization 72108 // Note: style is excluded because it relies on initial clone for future 72109 // deep updates (#7063). 72110 var isRenderedModule = makeMap('attrs,class,staticClass,staticStyle,key'); 72111 // Note: this is a browser-only function so we can assume elms are DOM nodes. 72112 function hydrate(elm, vnode, insertedVnodeQueue, inVPre) { 72113 var i; 72114 var tag = vnode.tag, data = vnode.data, children = vnode.children; 72115 inVPre = inVPre || (data && data.pre); 72116 vnode.elm = elm; 72117 if (isTrue(vnode.isComment) && isDef(vnode.asyncFactory)) { 72118 vnode.isAsyncPlaceholder = true; 72119 return true; 72120 } 72121 // assert node match 72122 { 72123 if (!assertNodeMatch(elm, vnode, inVPre)) { 72124 return false; 72125 } 72126 } 72127 if (isDef(data)) { 72128 if (isDef((i = data.hook)) && isDef((i = i.init))) 72129 i(vnode, true /* hydrating */); 72130 if (isDef((i = vnode.componentInstance))) { 72131 // child component. it should have hydrated its own tree. 72132 initComponent(vnode, insertedVnodeQueue); 72133 return true; 72134 } 72135 } 72136 if (isDef(tag)) { 72137 if (isDef(children)) { 72138 // empty element, allow client to pick up and populate children 72139 if (!elm.hasChildNodes()) { 72140 createChildren(vnode, children, insertedVnodeQueue); 72141 } 72142 else { 72143 // v-html and domProps: innerHTML 72144 if (isDef((i = data)) && 72145 isDef((i = i.domProps)) && 72146 isDef((i = i.innerHTML))) { 72147 if (i !== elm.innerHTML) { 72148 /* istanbul ignore if */ 72149 if (typeof console !== 'undefined' && 72150 !hydrationBailed) { 72151 hydrationBailed = true; 72152 console.warn('Parent: ', elm); 72153 console.warn('server innerHTML: ', i); 72154 console.warn('client innerHTML: ', elm.innerHTML); 72155 } 72156 return false; 72157 } 72158 } 72159 else { 72160 // iterate and compare children lists 72161 var childrenMatch = true; 72162 var childNode = elm.firstChild; 72163 for (var i_7 = 0; i_7 < children.length; i_7++) { 72164 if (!childNode || 72165 !hydrate(childNode, children[i_7], insertedVnodeQueue, inVPre)) { 72166 childrenMatch = false; 72167 break; 72168 } 72169 childNode = childNode.nextSibling; 72170 } 72171 // if childNode is not null, it means the actual childNodes list is 72172 // longer than the virtual children list. 72173 if (!childrenMatch || childNode) { 72174 /* istanbul ignore if */ 72175 if (typeof console !== 'undefined' && 72176 !hydrationBailed) { 72177 hydrationBailed = true; 72178 console.warn('Parent: ', elm); 72179 console.warn('Mismatching childNodes vs. VNodes: ', elm.childNodes, children); 72180 } 72181 return false; 72182 } 72183 } 72184 } 72185 } 72186 if (isDef(data)) { 72187 var fullInvoke = false; 72188 for (var key in data) { 72189 if (!isRenderedModule(key)) { 72190 fullInvoke = true; 72191 invokeCreateHooks(vnode, insertedVnodeQueue); 72192 break; 72193 } 72194 } 72195 if (!fullInvoke && data['class']) { 72196 // ensure collecting deps for deep class bindings for future updates 72197 traverse(data['class']); 72198 } 72199 } 72200 } 72201 else if (elm.data !== vnode.text) { 72202 elm.data = vnode.text; 72203 } 72204 return true; 72205 } 72206 function assertNodeMatch(node, vnode, inVPre) { 72207 if (isDef(vnode.tag)) { 72208 return (vnode.tag.indexOf('vue-component') === 0 || 72209 (!isUnknownElement(vnode, inVPre) && 72210 vnode.tag.toLowerCase() === 72211 (node.tagName && node.tagName.toLowerCase()))); 72212 } 72213 else { 72214 return node.nodeType === (vnode.isComment ? 8 : 3); 72215 } 72216 } 72217 return function patch(oldVnode, vnode, hydrating, removeOnly) { 72218 if (isUndef(vnode)) { 72219 if (isDef(oldVnode)) 72220 invokeDestroyHook(oldVnode); 72221 return; 72222 } 72223 var isInitialPatch = false; 72224 var insertedVnodeQueue = []; 72225 if (isUndef(oldVnode)) { 72226 // empty mount (likely as component), create new root element 72227 isInitialPatch = true; 72228 createElm(vnode, insertedVnodeQueue); 72229 } 72230 else { 72231 var isRealElement = isDef(oldVnode.nodeType); 72232 if (!isRealElement && sameVnode(oldVnode, vnode)) { 72233 // patch existing root node 72234 patchVnode(oldVnode, vnode, insertedVnodeQueue, null, null, removeOnly); 72235 } 72236 else { 72237 if (isRealElement) { 72238 // mounting to a real element 72239 // check if this is server-rendered content and if we can perform 72240 // a successful hydration. 72241 if (oldVnode.nodeType === 1 && oldVnode.hasAttribute(SSR_ATTR)) { 72242 oldVnode.removeAttribute(SSR_ATTR); 72243 hydrating = true; 72244 } 72245 if (isTrue(hydrating)) { 72246 if (hydrate(oldVnode, vnode, insertedVnodeQueue)) { 72247 invokeInsertHook(vnode, insertedVnodeQueue, true); 72248 return oldVnode; 72249 } 72250 else { 72251 warn$2('The client-side rendered virtual DOM tree is not matching ' + 72252 'server-rendered content. This is likely caused by incorrect ' + 72253 'HTML markup, for example nesting block-level elements inside ' + 72254 '<p>, or missing <tbody>. Bailing hydration and performing ' + 72255 'full client-side render.'); 72256 } 72257 } 72258 // either not server-rendered, or hydration failed. 72259 // create an empty node and replace it 72260 oldVnode = emptyNodeAt(oldVnode); 72261 } 72262 // replacing existing element 72263 var oldElm = oldVnode.elm; 72264 var parentElm = nodeOps.parentNode(oldElm); 72265 // create new node 72266 createElm(vnode, insertedVnodeQueue, 72267 // extremely rare edge case: do not insert if old element is in a 72268 // leaving transition. Only happens when combining transition + 72269 // keep-alive + HOCs. (#4590) 72270 oldElm._leaveCb ? null : parentElm, nodeOps.nextSibling(oldElm)); 72271 // update parent placeholder node element, recursively 72272 if (isDef(vnode.parent)) { 72273 var ancestor = vnode.parent; 72274 var patchable = isPatchable(vnode); 72275 while (ancestor) { 72276 for (var i_8 = 0; i_8 < cbs.destroy.length; ++i_8) { 72277 cbs.destroy[i_8](ancestor); 72278 } 72279 ancestor.elm = vnode.elm; 72280 if (patchable) { 72281 for (var i_9 = 0; i_9 < cbs.create.length; ++i_9) { 72282 cbs.create[i_9](emptyNode, ancestor); 72283 } 72284 // #6513 72285 // invoke insert hooks that may have been merged by create hooks. 72286 // e.g. for directives that uses the "inserted" hook. 72287 var insert_1 = ancestor.data.hook.insert; 72288 if (insert_1.merged) { 72289 // start at index 1 to avoid re-invoking component mounted hook 72290 // clone insert hooks to avoid being mutated during iteration. 72291 // e.g. for customed directives under transition group. 72292 var cloned = insert_1.fns.slice(1); 72293 for (var i_10 = 0; i_10 < cloned.length; i_10++) { 72294 cloned[i_10](); 72295 } 72296 } 72297 } 72298 else { 72299 registerRef(ancestor); 72300 } 72301 ancestor = ancestor.parent; 72302 } 72303 } 72304 // destroy old node 72305 if (isDef(parentElm)) { 72306 removeVnodes([oldVnode], 0, 0); 72307 } 72308 else if (isDef(oldVnode.tag)) { 72309 invokeDestroyHook(oldVnode); 72310 } 72311 } 72312 } 72313 invokeInsertHook(vnode, insertedVnodeQueue, isInitialPatch); 72314 return vnode.elm; 72315 }; 72316 } 72317 72318 var directives$1 = { 72319 create: updateDirectives, 72320 update: updateDirectives, 72321 destroy: function unbindDirectives(vnode) { 72322 // @ts-expect-error emptyNode is not VNodeWithData 72323 updateDirectives(vnode, emptyNode); 72324 } 72325 }; 72326 function updateDirectives(oldVnode, vnode) { 72327 if (oldVnode.data.directives || vnode.data.directives) { 72328 _update(oldVnode, vnode); 72329 } 72330 } 72331 function _update(oldVnode, vnode) { 72332 var isCreate = oldVnode === emptyNode; 72333 var isDestroy = vnode === emptyNode; 72334 var oldDirs = normalizeDirectives(oldVnode.data.directives, oldVnode.context); 72335 var newDirs = normalizeDirectives(vnode.data.directives, vnode.context); 72336 var dirsWithInsert = []; 72337 var dirsWithPostpatch = []; 72338 var key, oldDir, dir; 72339 for (key in newDirs) { 72340 oldDir = oldDirs[key]; 72341 dir = newDirs[key]; 72342 if (!oldDir) { 72343 // new directive, bind 72344 callHook(dir, 'bind', vnode, oldVnode); 72345 if (dir.def && dir.def.inserted) { 72346 dirsWithInsert.push(dir); 72347 } 72348 } 72349 else { 72350 // existing directive, update 72351 dir.oldValue = oldDir.value; 72352 dir.oldArg = oldDir.arg; 72353 callHook(dir, 'update', vnode, oldVnode); 72354 if (dir.def && dir.def.componentUpdated) { 72355 dirsWithPostpatch.push(dir); 72356 } 72357 } 72358 } 72359 if (dirsWithInsert.length) { 72360 var callInsert = function () { 72361 for (var i = 0; i < dirsWithInsert.length; i++) { 72362 callHook(dirsWithInsert[i], 'inserted', vnode, oldVnode); 72363 } 72364 }; 72365 if (isCreate) { 72366 mergeVNodeHook(vnode, 'insert', callInsert); 72367 } 72368 else { 72369 callInsert(); 72370 } 72371 } 72372 if (dirsWithPostpatch.length) { 72373 mergeVNodeHook(vnode, 'postpatch', function () { 72374 for (var i = 0; i < dirsWithPostpatch.length; i++) { 72375 callHook(dirsWithPostpatch[i], 'componentUpdated', vnode, oldVnode); 72376 } 72377 }); 72378 } 72379 if (!isCreate) { 72380 for (key in oldDirs) { 72381 if (!newDirs[key]) { 72382 // no longer present, unbind 72383 callHook(oldDirs[key], 'unbind', oldVnode, oldVnode, isDestroy); 72384 } 72385 } 72386 } 72387 } 72388 var emptyModifiers = Object.create(null); 72389 function normalizeDirectives(dirs, vm) { 72390 var res = Object.create(null); 72391 if (!dirs) { 72392 // $flow-disable-line 72393 return res; 72394 } 72395 var i, dir; 72396 for (i = 0; i < dirs.length; i++) { 72397 dir = dirs[i]; 72398 if (!dir.modifiers) { 72399 // $flow-disable-line 72400 dir.modifiers = emptyModifiers; 72401 } 72402 res[getRawDirName(dir)] = dir; 72403 if (vm._setupState && vm._setupState.__sfc) { 72404 var setupDef = dir.def || resolveAsset(vm, '_setupState', 'v-' + dir.name); 72405 if (typeof setupDef === 'function') { 72406 dir.def = { 72407 bind: setupDef, 72408 update: setupDef, 72409 }; 72410 } 72411 else { 72412 dir.def = setupDef; 72413 } 72414 } 72415 dir.def = dir.def || resolveAsset(vm.$options, 'directives', dir.name, true); 72416 } 72417 // $flow-disable-line 72418 return res; 72419 } 72420 function getRawDirName(dir) { 72421 return (dir.rawName || "".concat(dir.name, ".").concat(Object.keys(dir.modifiers || {}).join('.'))); 72422 } 72423 function callHook(dir, hook, vnode, oldVnode, isDestroy) { 72424 var fn = dir.def && dir.def[hook]; 72425 if (fn) { 72426 try { 72427 fn(vnode.elm, dir, vnode, oldVnode, isDestroy); 72428 } 72429 catch (e) { 72430 handleError(e, vnode.context, "directive ".concat(dir.name, " ").concat(hook, " hook")); 72431 } 72432 } 72433 } 72434 72435 var baseModules = [ref, directives$1]; 72436 72437 function updateAttrs(oldVnode, vnode) { 72438 var opts = vnode.componentOptions; 72439 if (isDef(opts) && opts.Ctor.options.inheritAttrs === false) { 72440 return; 72441 } 72442 if (isUndef(oldVnode.data.attrs) && isUndef(vnode.data.attrs)) { 72443 return; 72444 } 72445 var key, cur, old; 72446 var elm = vnode.elm; 72447 var oldAttrs = oldVnode.data.attrs || {}; 72448 var attrs = vnode.data.attrs || {}; 72449 // clone observed objects, as the user probably wants to mutate it 72450 if (isDef(attrs.__ob__) || isTrue(attrs._v_attr_proxy)) { 72451 attrs = vnode.data.attrs = extend({}, attrs); 72452 } 72453 for (key in attrs) { 72454 cur = attrs[key]; 72455 old = oldAttrs[key]; 72456 if (old !== cur) { 72457 setAttr(elm, key, cur, vnode.data.pre); 72458 } 72459 } 72460 // #4391: in IE9, setting type can reset value for input[type=radio] 72461 // #6666: IE/Edge forces progress value down to 1 before setting a max 72462 /* istanbul ignore if */ 72463 if ((isIE || isEdge) && attrs.value !== oldAttrs.value) { 72464 setAttr(elm, 'value', attrs.value); 72465 } 72466 for (key in oldAttrs) { 72467 if (isUndef(attrs[key])) { 72468 if (isXlink(key)) { 72469 elm.removeAttributeNS(xlinkNS, getXlinkProp(key)); 72470 } 72471 else if (!isEnumeratedAttr(key)) { 72472 elm.removeAttribute(key); 72473 } 72474 } 72475 } 72476 } 72477 function setAttr(el, key, value, isInPre) { 72478 if (isInPre || el.tagName.indexOf('-') > -1) { 72479 baseSetAttr(el, key, value); 72480 } 72481 else if (isBooleanAttr(key)) { 72482 // set attribute for blank value 72483 // e.g. <option disabled>Select one</option> 72484 if (isFalsyAttrValue(value)) { 72485 el.removeAttribute(key); 72486 } 72487 else { 72488 // technically allowfullscreen is a boolean attribute for <iframe>, 72489 // but Flash expects a value of "true" when used on <embed> tag 72490 value = key === 'allowfullscreen' && el.tagName === 'EMBED' ? 'true' : key; 72491 el.setAttribute(key, value); 72492 } 72493 } 72494 else if (isEnumeratedAttr(key)) { 72495 el.setAttribute(key, convertEnumeratedValue(key, value)); 72496 } 72497 else if (isXlink(key)) { 72498 if (isFalsyAttrValue(value)) { 72499 el.removeAttributeNS(xlinkNS, getXlinkProp(key)); 72500 } 72501 else { 72502 el.setAttributeNS(xlinkNS, key, value); 72503 } 72504 } 72505 else { 72506 baseSetAttr(el, key, value); 72507 } 72508 } 72509 function baseSetAttr(el, key, value) { 72510 if (isFalsyAttrValue(value)) { 72511 el.removeAttribute(key); 72512 } 72513 else { 72514 // #7138: IE10 & 11 fires input event when setting placeholder on 72515 // <textarea>... block the first input event and remove the blocker 72516 // immediately. 72517 /* istanbul ignore if */ 72518 if (isIE && 72519 !isIE9 && 72520 el.tagName === 'TEXTAREA' && 72521 key === 'placeholder' && 72522 value !== '' && 72523 !el.__ieph) { 72524 var blocker_1 = function (e) { 72525 e.stopImmediatePropagation(); 72526 el.removeEventListener('input', blocker_1); 72527 }; 72528 el.addEventListener('input', blocker_1); 72529 // $flow-disable-line 72530 el.__ieph = true; /* IE placeholder patched */ 72531 } 72532 el.setAttribute(key, value); 72533 } 72534 } 72535 var attrs = { 72536 create: updateAttrs, 72537 update: updateAttrs 72538 }; 72539 72540 function updateClass(oldVnode, vnode) { 72541 var el = vnode.elm; 72542 var data = vnode.data; 72543 var oldData = oldVnode.data; 72544 if (isUndef(data.staticClass) && 72545 isUndef(data.class) && 72546 (isUndef(oldData) || 72547 (isUndef(oldData.staticClass) && isUndef(oldData.class)))) { 72548 return; 72549 } 72550 var cls = genClassForVnode(vnode); 72551 // handle transition classes 72552 var transitionClass = el._transitionClasses; 72553 if (isDef(transitionClass)) { 72554 cls = concat(cls, stringifyClass(transitionClass)); 72555 } 72556 // set the class 72557 if (cls !== el._prevClass) { 72558 el.setAttribute('class', cls); 72559 el._prevClass = cls; 72560 } 72561 } 72562 var klass$1 = { 72563 create: updateClass, 72564 update: updateClass 72565 }; 72566 72567 var validDivisionCharRE = /[\w).+\-_$\]]/; 72568 function parseFilters(exp) { 72569 var inSingle = false; 72570 var inDouble = false; 72571 var inTemplateString = false; 72572 var inRegex = false; 72573 var curly = 0; 72574 var square = 0; 72575 var paren = 0; 72576 var lastFilterIndex = 0; 72577 var c, prev, i, expression, filters; 72578 for (i = 0; i < exp.length; i++) { 72579 prev = c; 72580 c = exp.charCodeAt(i); 72581 if (inSingle) { 72582 if (c === 0x27 && prev !== 0x5c) 72583 inSingle = false; 72584 } 72585 else if (inDouble) { 72586 if (c === 0x22 && prev !== 0x5c) 72587 inDouble = false; 72588 } 72589 else if (inTemplateString) { 72590 if (c === 0x60 && prev !== 0x5c) 72591 inTemplateString = false; 72592 } 72593 else if (inRegex) { 72594 if (c === 0x2f && prev !== 0x5c) 72595 inRegex = false; 72596 } 72597 else if (c === 0x7c && // pipe 72598 exp.charCodeAt(i + 1) !== 0x7c && 72599 exp.charCodeAt(i - 1) !== 0x7c && 72600 !curly && 72601 !square && 72602 !paren) { 72603 if (expression === undefined) { 72604 // first filter, end of expression 72605 lastFilterIndex = i + 1; 72606 expression = exp.slice(0, i).trim(); 72607 } 72608 else { 72609 pushFilter(); 72610 } 72611 } 72612 else { 72613 switch (c) { 72614 case 0x22: 72615 inDouble = true; 72616 break; // " 72617 case 0x27: 72618 inSingle = true; 72619 break; // ' 72620 case 0x60: 72621 inTemplateString = true; 72622 break; // ` 72623 case 0x28: 72624 paren++; 72625 break; // ( 72626 case 0x29: 72627 paren--; 72628 break; // ) 72629 case 0x5b: 72630 square++; 72631 break; // [ 72632 case 0x5d: 72633 square--; 72634 break; // ] 72635 case 0x7b: 72636 curly++; 72637 break; // { 72638 case 0x7d: 72639 curly--; 72640 break; // } 72641 } 72642 if (c === 0x2f) { 72643 // / 72644 var j = i - 1; 72645 var p 72646 // find first non-whitespace prev char 72647 = void 0; 72648 // find first non-whitespace prev char 72649 for (; j >= 0; j--) { 72650 p = exp.charAt(j); 72651 if (p !== ' ') 72652 break; 72653 } 72654 if (!p || !validDivisionCharRE.test(p)) { 72655 inRegex = true; 72656 } 72657 } 72658 } 72659 } 72660 if (expression === undefined) { 72661 expression = exp.slice(0, i).trim(); 72662 } 72663 else if (lastFilterIndex !== 0) { 72664 pushFilter(); 72665 } 72666 function pushFilter() { 72667 (filters || (filters = [])).push(exp.slice(lastFilterIndex, i).trim()); 72668 lastFilterIndex = i + 1; 72669 } 72670 if (filters) { 72671 for (i = 0; i < filters.length; i++) { 72672 expression = wrapFilter(expression, filters[i]); 72673 } 72674 } 72675 return expression; 72676 } 72677 function wrapFilter(exp, filter) { 72678 var i = filter.indexOf('('); 72679 if (i < 0) { 72680 // _f: resolveFilter 72681 return "_f(\"".concat(filter, "\")(").concat(exp, ")"); 72682 } 72683 else { 72684 var name_1 = filter.slice(0, i); 72685 var args = filter.slice(i + 1); 72686 return "_f(\"".concat(name_1, "\")(").concat(exp).concat(args !== ')' ? ',' + args : args); 72687 } 72688 } 72689 72690 /* eslint-disable no-unused-vars */ 72691 function baseWarn(msg, range) { 72692 console.error("[Vue compiler]: ".concat(msg)); 72693 } 72694 /* eslint-enable no-unused-vars */ 72695 function pluckModuleFunction(modules, key) { 72696 return modules ? modules.map(function (m) { return m[key]; }).filter(function (_) { return _; }) : []; 72697 } 72698 function addProp(el, name, value, range, dynamic) { 72699 (el.props || (el.props = [])).push(rangeSetItem({ name: name, value: value, dynamic: dynamic }, range)); 72700 el.plain = false; 72701 } 72702 function addAttr(el, name, value, range, dynamic) { 72703 var attrs = dynamic 72704 ? el.dynamicAttrs || (el.dynamicAttrs = []) 72705 : el.attrs || (el.attrs = []); 72706 attrs.push(rangeSetItem({ name: name, value: value, dynamic: dynamic }, range)); 72707 el.plain = false; 72708 } 72709 // add a raw attr (use this in preTransforms) 72710 function addRawAttr(el, name, value, range) { 72711 el.attrsMap[name] = value; 72712 el.attrsList.push(rangeSetItem({ name: name, value: value }, range)); 72713 } 72714 function addDirective(el, name, rawName, value, arg, isDynamicArg, modifiers, range) { 72715 (el.directives || (el.directives = [])).push(rangeSetItem({ 72716 name: name, 72717 rawName: rawName, 72718 value: value, 72719 arg: arg, 72720 isDynamicArg: isDynamicArg, 72721 modifiers: modifiers 72722 }, range)); 72723 el.plain = false; 72724 } 72725 function prependModifierMarker(symbol, name, dynamic) { 72726 return dynamic ? "_p(".concat(name, ",\"").concat(symbol, "\")") : symbol + name; // mark the event as captured 72727 } 72728 function addHandler(el, name, value, modifiers, important, warn, range, dynamic) { 72729 modifiers = modifiers || emptyObject; 72730 // warn prevent and passive modifier 72731 /* istanbul ignore if */ 72732 if (warn && modifiers.prevent && modifiers.passive) { 72733 warn("passive and prevent can't be used together. " + 72734 "Passive handler can't prevent default event.", range); 72735 } 72736 // normalize click.right and click.middle since they don't actually fire 72737 // this is technically browser-specific, but at least for now browsers are 72738 // the only target envs that have right/middle clicks. 72739 if (modifiers.right) { 72740 if (dynamic) { 72741 name = "(".concat(name, ")==='click'?'contextmenu':(").concat(name, ")"); 72742 } 72743 else if (name === 'click') { 72744 name = 'contextmenu'; 72745 delete modifiers.right; 72746 } 72747 } 72748 else if (modifiers.middle) { 72749 if (dynamic) { 72750 name = "(".concat(name, ")==='click'?'mouseup':(").concat(name, ")"); 72751 } 72752 else if (name === 'click') { 72753 name = 'mouseup'; 72754 } 72755 } 72756 // check capture modifier 72757 if (modifiers.capture) { 72758 delete modifiers.capture; 72759 name = prependModifierMarker('!', name, dynamic); 72760 } 72761 if (modifiers.once) { 72762 delete modifiers.once; 72763 name = prependModifierMarker('~', name, dynamic); 72764 } 72765 /* istanbul ignore if */ 72766 if (modifiers.passive) { 72767 delete modifiers.passive; 72768 name = prependModifierMarker('&', name, dynamic); 72769 } 72770 var events; 72771 if (modifiers.native) { 72772 delete modifiers.native; 72773 events = el.nativeEvents || (el.nativeEvents = {}); 72774 } 72775 else { 72776 events = el.events || (el.events = {}); 72777 } 72778 var newHandler = rangeSetItem({ value: value.trim(), dynamic: dynamic }, range); 72779 if (modifiers !== emptyObject) { 72780 newHandler.modifiers = modifiers; 72781 } 72782 var handlers = events[name]; 72783 /* istanbul ignore if */ 72784 if (Array.isArray(handlers)) { 72785 important ? handlers.unshift(newHandler) : handlers.push(newHandler); 72786 } 72787 else if (handlers) { 72788 events[name] = important ? [newHandler, handlers] : [handlers, newHandler]; 72789 } 72790 else { 72791 events[name] = newHandler; 72792 } 72793 el.plain = false; 72794 } 72795 function getRawBindingAttr(el, name) { 72796 return (el.rawAttrsMap[':' + name] || 72797 el.rawAttrsMap['v-bind:' + name] || 72798 el.rawAttrsMap[name]); 72799 } 72800 function getBindingAttr(el, name, getStatic) { 72801 var dynamicValue = getAndRemoveAttr(el, ':' + name) || getAndRemoveAttr(el, 'v-bind:' + name); 72802 if (dynamicValue != null) { 72803 return parseFilters(dynamicValue); 72804 } 72805 else if (getStatic !== false) { 72806 var staticValue = getAndRemoveAttr(el, name); 72807 if (staticValue != null) { 72808 return JSON.stringify(staticValue); 72809 } 72810 } 72811 } 72812 // note: this only removes the attr from the Array (attrsList) so that it 72813 // doesn't get processed by processAttrs. 72814 // By default it does NOT remove it from the map (attrsMap) because the map is 72815 // needed during codegen. 72816 function getAndRemoveAttr(el, name, removeFromMap) { 72817 var val; 72818 if ((val = el.attrsMap[name]) != null) { 72819 var list = el.attrsList; 72820 for (var i = 0, l = list.length; i < l; i++) { 72821 if (list[i].name === name) { 72822 list.splice(i, 1); 72823 break; 72824 } 72825 } 72826 } 72827 if (removeFromMap) { 72828 delete el.attrsMap[name]; 72829 } 72830 return val; 72831 } 72832 function getAndRemoveAttrByRegex(el, name) { 72833 var list = el.attrsList; 72834 for (var i = 0, l = list.length; i < l; i++) { 72835 var attr = list[i]; 72836 if (name.test(attr.name)) { 72837 list.splice(i, 1); 72838 return attr; 72839 } 72840 } 72841 } 72842 function rangeSetItem(item, range) { 72843 if (range) { 72844 if (range.start != null) { 72845 item.start = range.start; 72846 } 72847 if (range.end != null) { 72848 item.end = range.end; 72849 } 72850 } 72851 return item; 72852 } 72853 72854 /** 72855 * Cross-platform code generation for component v-model 72856 */ 72857 function genComponentModel(el, value, modifiers) { 72858 var _a = modifiers || {}, number = _a.number, trim = _a.trim; 72859 var baseValueExpression = '$$v'; 72860 var valueExpression = baseValueExpression; 72861 if (trim) { 72862 valueExpression = 72863 "(typeof ".concat(baseValueExpression, " === 'string'") + 72864 "? ".concat(baseValueExpression, ".trim()") + 72865 ": ".concat(baseValueExpression, ")"); 72866 } 72867 if (number) { 72868 valueExpression = "_n(".concat(valueExpression, ")"); 72869 } 72870 var assignment = genAssignmentCode(value, valueExpression); 72871 el.model = { 72872 value: "(".concat(value, ")"), 72873 expression: JSON.stringify(value), 72874 callback: "function (".concat(baseValueExpression, ") {").concat(assignment, "}") 72875 }; 72876 } 72877 /** 72878 * Cross-platform codegen helper for generating v-model value assignment code. 72879 */ 72880 function genAssignmentCode(value, assignment) { 72881 var res = parseModel(value); 72882 if (res.key === null) { 72883 return "".concat(value, "=").concat(assignment); 72884 } 72885 else { 72886 return "$set(".concat(res.exp, ", ").concat(res.key, ", ").concat(assignment, ")"); 72887 } 72888 } 72889 /** 72890 * Parse a v-model expression into a base path and a final key segment. 72891 * Handles both dot-path and possible square brackets. 72892 * 72893 * Possible cases: 72894 * 72895 * - test 72896 * - test[key] 72897 * - test[test1[key]] 72898 * - test["a"][key] 72899 * - xxx.test[a[a].test1[key]] 72900 * - test.xxx.a["asa"][test1[key]] 72901 * 72902 */ 72903 var len, str, chr, index, expressionPos, expressionEndPos; 72904 function parseModel(val) { 72905 // Fix https://github.com/vuejs/vue/pull/7730 72906 // allow v-model="obj.val " (trailing whitespace) 72907 val = val.trim(); 72908 len = val.length; 72909 if (val.indexOf('[') < 0 || val.lastIndexOf(']') < len - 1) { 72910 index = val.lastIndexOf('.'); 72911 if (index > -1) { 72912 return { 72913 exp: val.slice(0, index), 72914 key: '"' + val.slice(index + 1) + '"' 72915 }; 72916 } 72917 else { 72918 return { 72919 exp: val, 72920 key: null 72921 }; 72922 } 72923 } 72924 str = val; 72925 index = expressionPos = expressionEndPos = 0; 72926 while (!eof()) { 72927 chr = next(); 72928 /* istanbul ignore if */ 72929 if (isStringStart(chr)) { 72930 parseString(chr); 72931 } 72932 else if (chr === 0x5b) { 72933 parseBracket(chr); 72934 } 72935 } 72936 return { 72937 exp: val.slice(0, expressionPos), 72938 key: val.slice(expressionPos + 1, expressionEndPos) 72939 }; 72940 } 72941 function next() { 72942 return str.charCodeAt(++index); 72943 } 72944 function eof() { 72945 return index >= len; 72946 } 72947 function isStringStart(chr) { 72948 return chr === 0x22 || chr === 0x27; 72949 } 72950 function parseBracket(chr) { 72951 var inBracket = 1; 72952 expressionPos = index; 72953 while (!eof()) { 72954 chr = next(); 72955 if (isStringStart(chr)) { 72956 parseString(chr); 72957 continue; 72958 } 72959 if (chr === 0x5b) 72960 inBracket++; 72961 if (chr === 0x5d) 72962 inBracket--; 72963 if (inBracket === 0) { 72964 expressionEndPos = index; 72965 break; 72966 } 72967 } 72968 } 72969 function parseString(chr) { 72970 var stringQuote = chr; 72971 while (!eof()) { 72972 chr = next(); 72973 if (chr === stringQuote) { 72974 break; 72975 } 72976 } 72977 } 72978 72979 var warn$1; 72980 // in some cases, the event used has to be determined at runtime 72981 // so we used some reserved tokens during compile. 72982 var RANGE_TOKEN = '__r'; 72983 var CHECKBOX_RADIO_TOKEN = '__c'; 72984 function model$1(el, dir, _warn) { 72985 warn$1 = _warn; 72986 var value = dir.value; 72987 var modifiers = dir.modifiers; 72988 var tag = el.tag; 72989 var type = el.attrsMap.type; 72990 { 72991 // inputs with type="file" are read only and setting the input's 72992 // value will throw an error. 72993 if (tag === 'input' && type === 'file') { 72994 warn$1("<".concat(el.tag, " v-model=\"").concat(value, "\" type=\"file\">:\n") + 72995 "File inputs are read only. Use a v-on:change listener instead.", el.rawAttrsMap['v-model']); 72996 } 72997 } 72998 if (el.component) { 72999 genComponentModel(el, value, modifiers); 73000 // component v-model doesn't need extra runtime 73001 return false; 73002 } 73003 else if (tag === 'select') { 73004 genSelect(el, value, modifiers); 73005 } 73006 else if (tag === 'input' && type === 'checkbox') { 73007 genCheckboxModel(el, value, modifiers); 73008 } 73009 else if (tag === 'input' && type === 'radio') { 73010 genRadioModel(el, value, modifiers); 73011 } 73012 else if (tag === 'input' || tag === 'textarea') { 73013 genDefaultModel(el, value, modifiers); 73014 } 73015 else if (!config.isReservedTag(tag)) { 73016 genComponentModel(el, value, modifiers); 73017 // component v-model doesn't need extra runtime 73018 return false; 73019 } 73020 else { 73021 warn$1("<".concat(el.tag, " v-model=\"").concat(value, "\">: ") + 73022 "v-model is not supported on this element type. " + 73023 "If you are working with contenteditable, it's recommended to " + 73024 'wrap a library dedicated for that purpose inside a custom component.', el.rawAttrsMap['v-model']); 73025 } 73026 // ensure runtime directive metadata 73027 return true; 73028 } 73029 function genCheckboxModel(el, value, modifiers) { 73030 var number = modifiers && modifiers.number; 73031 var valueBinding = getBindingAttr(el, 'value') || 'null'; 73032 var trueValueBinding = getBindingAttr(el, 'true-value') || 'true'; 73033 var falseValueBinding = getBindingAttr(el, 'false-value') || 'false'; 73034 addProp(el, 'checked', "Array.isArray(".concat(value, ")") + 73035 "?_i(".concat(value, ",").concat(valueBinding, ")>-1") + 73036 (trueValueBinding === 'true' 73037 ? ":(".concat(value, ")") 73038 : ":_q(".concat(value, ",").concat(trueValueBinding, ")"))); 73039 addHandler(el, 'change', "var $$a=".concat(value, ",") + 73040 '$$el=$event.target,' + 73041 "$$c=$$el.checked?(".concat(trueValueBinding, "):(").concat(falseValueBinding, ");") + 73042 'if(Array.isArray($$a)){' + 73043 "var $$v=".concat(number ? '_n(' + valueBinding + ')' : valueBinding, ",") + 73044 '$$i=_i($$a,$$v);' + 73045 "if($$el.checked){$$i<0&&(".concat(genAssignmentCode(value, '$$a.concat([$$v])'), ")}") + 73046 "else{$$i>-1&&(".concat(genAssignmentCode(value, '$$a.slice(0,$$i).concat($$a.slice($$i+1))'), ")}") + 73047 "}else{".concat(genAssignmentCode(value, '$$c'), "}"), null, true); 73048 } 73049 function genRadioModel(el, value, modifiers) { 73050 var number = modifiers && modifiers.number; 73051 var valueBinding = getBindingAttr(el, 'value') || 'null'; 73052 valueBinding = number ? "_n(".concat(valueBinding, ")") : valueBinding; 73053 addProp(el, 'checked', "_q(".concat(value, ",").concat(valueBinding, ")")); 73054 addHandler(el, 'change', genAssignmentCode(value, valueBinding), null, true); 73055 } 73056 function genSelect(el, value, modifiers) { 73057 var number = modifiers && modifiers.number; 73058 var selectedVal = "Array.prototype.filter" + 73059 ".call($event.target.options,function(o){return o.selected})" + 73060 ".map(function(o){var val = \"_value\" in o ? o._value : o.value;" + 73061 "return ".concat(number ? '_n(val)' : 'val', "})"); 73062 var assignment = '$event.target.multiple ? $$selectedVal : $$selectedVal[0]'; 73063 var code = "var $$selectedVal = ".concat(selectedVal, ";"); 73064 code = "".concat(code, " ").concat(genAssignmentCode(value, assignment)); 73065 addHandler(el, 'change', code, null, true); 73066 } 73067 function genDefaultModel(el, value, modifiers) { 73068 var type = el.attrsMap.type; 73069 // warn if v-bind:value conflicts with v-model 73070 // except for inputs with v-bind:type 73071 { 73072 var value_1 = el.attrsMap['v-bind:value'] || el.attrsMap[':value']; 73073 var typeBinding = el.attrsMap['v-bind:type'] || el.attrsMap[':type']; 73074 if (value_1 && !typeBinding) { 73075 var binding = el.attrsMap['v-bind:value'] ? 'v-bind:value' : ':value'; 73076 warn$1("".concat(binding, "=\"").concat(value_1, "\" conflicts with v-model on the same element ") + 73077 'because the latter already expands to a value binding internally', el.rawAttrsMap[binding]); 73078 } 73079 } 73080 var _a = modifiers || {}, lazy = _a.lazy, number = _a.number, trim = _a.trim; 73081 var needCompositionGuard = !lazy && type !== 'range'; 73082 var event = lazy ? 'change' : type === 'range' ? RANGE_TOKEN : 'input'; 73083 var valueExpression = '$event.target.value'; 73084 if (trim) { 73085 valueExpression = "$event.target.value.trim()"; 73086 } 73087 if (number) { 73088 valueExpression = "_n(".concat(valueExpression, ")"); 73089 } 73090 var code = genAssignmentCode(value, valueExpression); 73091 if (needCompositionGuard) { 73092 code = "if($event.target.composing)return;".concat(code); 73093 } 73094 addProp(el, 'value', "(".concat(value, ")")); 73095 addHandler(el, event, code, null, true); 73096 if (trim || number) { 73097 addHandler(el, 'blur', '$forceUpdate()'); 73098 } 73099 } 73100 73101 // normalize v-model event tokens that can only be determined at runtime. 73102 // it's important to place the event as the first in the array because 73103 // the whole point is ensuring the v-model callback gets called before 73104 // user-attached handlers. 73105 function normalizeEvents(on) { 73106 /* istanbul ignore if */ 73107 if (isDef(on[RANGE_TOKEN])) { 73108 // IE input[type=range] only supports `change` event 73109 var event_1 = isIE ? 'change' : 'input'; 73110 on[event_1] = [].concat(on[RANGE_TOKEN], on[event_1] || []); 73111 delete on[RANGE_TOKEN]; 73112 } 73113 // This was originally intended to fix #4521 but no longer necessary 73114 // after 2.5. Keeping it for backwards compat with generated code from < 2.4 73115 /* istanbul ignore if */ 73116 if (isDef(on[CHECKBOX_RADIO_TOKEN])) { 73117 on.change = [].concat(on[CHECKBOX_RADIO_TOKEN], on.change || []); 73118 delete on[CHECKBOX_RADIO_TOKEN]; 73119 } 73120 } 73121 var target; 73122 function createOnceHandler(event, handler, capture) { 73123 var _target = target; // save current target element in closure 73124 return function onceHandler() { 73125 var res = handler.apply(null, arguments); 73126 if (res !== null) { 73127 remove(event, onceHandler, capture, _target); 73128 } 73129 }; 73130 } 73131 // #9446: Firefox <= 53 (in particular, ESR 52) has incorrect Event.timeStamp 73132 // implementation and does not fire microtasks in between event propagation, so 73133 // safe to exclude. 73134 var useMicrotaskFix = isUsingMicroTask && !(isFF && Number(isFF[1]) <= 53); 73135 function add(name, handler, capture, passive) { 73136 // async edge case #6566: inner click event triggers patch, event handler 73137 // attached to outer element during patch, and triggered again. This 73138 // happens because browsers fire microtask ticks between event propagation. 73139 // the solution is simple: we save the timestamp when a handler is attached, 73140 // and the handler would only fire if the event passed to it was fired 73141 // AFTER it was attached. 73142 if (useMicrotaskFix) { 73143 var attachedTimestamp_1 = currentFlushTimestamp; 73144 var original_1 = handler; 73145 //@ts-expect-error 73146 handler = original_1._wrapper = function (e) { 73147 if ( 73148 // no bubbling, should always fire. 73149 // this is just a safety net in case event.timeStamp is unreliable in 73150 // certain weird environments... 73151 e.target === e.currentTarget || 73152 // event is fired after handler attachment 73153 e.timeStamp >= attachedTimestamp_1 || 73154 // bail for environments that have buggy event.timeStamp implementations 73155 // #9462 iOS 9 bug: event.timeStamp is 0 after history.pushState 73156 // #9681 QtWebEngine event.timeStamp is negative value 73157 e.timeStamp <= 0 || 73158 // #9448 bail if event is fired in another document in a multi-page 73159 // electron/nw.js app, since event.timeStamp will be using a different 73160 // starting reference 73161 e.target.ownerDocument !== document) { 73162 return original_1.apply(this, arguments); 73163 } 73164 }; 73165 } 73166 target.addEventListener(name, handler, supportsPassive ? { capture: capture, passive: passive } : capture); 73167 } 73168 function remove(name, handler, capture, _target) { 73169 (_target || target).removeEventListener(name, 73170 //@ts-expect-error 73171 handler._wrapper || handler, capture); 73172 } 73173 function updateDOMListeners(oldVnode, vnode) { 73174 if (isUndef(oldVnode.data.on) && isUndef(vnode.data.on)) { 73175 return; 73176 } 73177 var on = vnode.data.on || {}; 73178 var oldOn = oldVnode.data.on || {}; 73179 // vnode is empty when removing all listeners, 73180 // and use old vnode dom element 73181 target = vnode.elm || oldVnode.elm; 73182 normalizeEvents(on); 73183 updateListeners(on, oldOn, add, remove, createOnceHandler, vnode.context); 73184 target = undefined; 73185 } 73186 var events = { 73187 create: updateDOMListeners, 73188 update: updateDOMListeners, 73189 // @ts-expect-error emptyNode has actually data 73190 destroy: function (vnode) { return updateDOMListeners(vnode, emptyNode); } 73191 }; 73192 73193 var svgContainer; 73194 function updateDOMProps(oldVnode, vnode) { 73195 if (isUndef(oldVnode.data.domProps) && isUndef(vnode.data.domProps)) { 73196 return; 73197 } 73198 var key, cur; 73199 var elm = vnode.elm; 73200 var oldProps = oldVnode.data.domProps || {}; 73201 var props = vnode.data.domProps || {}; 73202 // clone observed objects, as the user probably wants to mutate it 73203 if (isDef(props.__ob__) || isTrue(props._v_attr_proxy)) { 73204 props = vnode.data.domProps = extend({}, props); 73205 } 73206 for (key in oldProps) { 73207 if (!(key in props)) { 73208 elm[key] = ''; 73209 } 73210 } 73211 for (key in props) { 73212 cur = props[key]; 73213 // ignore children if the node has textContent or innerHTML, 73214 // as these will throw away existing DOM nodes and cause removal errors 73215 // on subsequent patches (#3360) 73216 if (key === 'textContent' || key === 'innerHTML') { 73217 if (vnode.children) 73218 vnode.children.length = 0; 73219 if (cur === oldProps[key]) 73220 continue; 73221 // #6601 work around Chrome version <= 55 bug where single textNode 73222 // replaced by innerHTML/textContent retains its parentNode property 73223 if (elm.childNodes.length === 1) { 73224 elm.removeChild(elm.childNodes[0]); 73225 } 73226 } 73227 if (key === 'value' && elm.tagName !== 'PROGRESS') { 73228 // store value as _value as well since 73229 // non-string values will be stringified 73230 elm._value = cur; 73231 // avoid resetting cursor position when value is the same 73232 var strCur = isUndef(cur) ? '' : String(cur); 73233 if (shouldUpdateValue(elm, strCur)) { 73234 elm.value = strCur; 73235 } 73236 } 73237 else if (key === 'innerHTML' && 73238 isSVG(elm.tagName) && 73239 isUndef(elm.innerHTML)) { 73240 // IE doesn't support innerHTML for SVG elements 73241 svgContainer = svgContainer || document.createElement('div'); 73242 svgContainer.innerHTML = "<svg>".concat(cur, "</svg>"); 73243 var svg = svgContainer.firstChild; 73244 while (elm.firstChild) { 73245 elm.removeChild(elm.firstChild); 73246 } 73247 while (svg.firstChild) { 73248 elm.appendChild(svg.firstChild); 73249 } 73250 } 73251 else if ( 73252 // skip the update if old and new VDOM state is the same. 73253 // `value` is handled separately because the DOM value may be temporarily 73254 // out of sync with VDOM state due to focus, composition and modifiers. 73255 // This #4521 by skipping the unnecessary `checked` update. 73256 cur !== oldProps[key]) { 73257 // some property updates can throw 73258 // e.g. `value` on <progress> w/ non-finite value 73259 try { 73260 elm[key] = cur; 73261 } 73262 catch (e) { } 73263 } 73264 } 73265 } 73266 function shouldUpdateValue(elm, checkVal) { 73267 return ( 73268 //@ts-expect-error 73269 !elm.composing && 73270 (elm.tagName === 'OPTION' || 73271 isNotInFocusAndDirty(elm, checkVal) || 73272 isDirtyWithModifiers(elm, checkVal))); 73273 } 73274 function isNotInFocusAndDirty(elm, checkVal) { 73275 // return true when textbox (.number and .trim) loses focus and its value is 73276 // not equal to the updated value 73277 var notInFocus = true; 73278 // #6157 73279 // work around IE bug when accessing document.activeElement in an iframe 73280 try { 73281 notInFocus = document.activeElement !== elm; 73282 } 73283 catch (e) { } 73284 return notInFocus && elm.value !== checkVal; 73285 } 73286 function isDirtyWithModifiers(elm, newVal) { 73287 var value = elm.value; 73288 var modifiers = elm._vModifiers; // injected by v-model runtime 73289 if (isDef(modifiers)) { 73290 if (modifiers.number) { 73291 return toNumber(value) !== toNumber(newVal); 73292 } 73293 if (modifiers.trim) { 73294 return value.trim() !== newVal.trim(); 73295 } 73296 } 73297 return value !== newVal; 73298 } 73299 var domProps = { 73300 create: updateDOMProps, 73301 update: updateDOMProps 73302 }; 73303 73304 var parseStyleText = cached(function (cssText) { 73305 var res = {}; 73306 var listDelimiter = /;(?![^(]*\))/g; 73307 var propertyDelimiter = /:(.+)/; 73308 cssText.split(listDelimiter).forEach(function (item) { 73309 if (item) { 73310 var tmp = item.split(propertyDelimiter); 73311 tmp.length > 1 && (res[tmp[0].trim()] = tmp[1].trim()); 73312 } 73313 }); 73314 return res; 73315 }); 73316 // merge static and dynamic style data on the same vnode 73317 function normalizeStyleData(data) { 73318 var style = normalizeStyleBinding(data.style); 73319 // static style is pre-processed into an object during compilation 73320 // and is always a fresh object, so it's safe to merge into it 73321 return data.staticStyle ? extend(data.staticStyle, style) : style; 73322 } 73323 // normalize possible array / string values into Object 73324 function normalizeStyleBinding(bindingStyle) { 73325 if (Array.isArray(bindingStyle)) { 73326 return toObject(bindingStyle); 73327 } 73328 if (typeof bindingStyle === 'string') { 73329 return parseStyleText(bindingStyle); 73330 } 73331 return bindingStyle; 73332 } 73333 /** 73334 * parent component style should be after child's 73335 * so that parent component's style could override it 73336 */ 73337 function getStyle(vnode, checkChild) { 73338 var res = {}; 73339 var styleData; 73340 if (checkChild) { 73341 var childNode = vnode; 73342 while (childNode.componentInstance) { 73343 childNode = childNode.componentInstance._vnode; 73344 if (childNode && 73345 childNode.data && 73346 (styleData = normalizeStyleData(childNode.data))) { 73347 extend(res, styleData); 73348 } 73349 } 73350 } 73351 if ((styleData = normalizeStyleData(vnode.data))) { 73352 extend(res, styleData); 73353 } 73354 var parentNode = vnode; 73355 // @ts-expect-error parentNode.parent not VNodeWithData 73356 while ((parentNode = parentNode.parent)) { 73357 if (parentNode.data && (styleData = normalizeStyleData(parentNode.data))) { 73358 extend(res, styleData); 73359 } 73360 } 73361 return res; 73362 } 73363 73364 var cssVarRE = /^--/; 73365 var importantRE = /\s*!important$/; 73366 var setProp = function (el, name, val) { 73367 /* istanbul ignore if */ 73368 if (cssVarRE.test(name)) { 73369 el.style.setProperty(name, val); 73370 } 73371 else if (importantRE.test(val)) { 73372 el.style.setProperty(hyphenate(name), val.replace(importantRE, ''), 'important'); 73373 } 73374 else { 73375 var normalizedName = normalize(name); 73376 if (Array.isArray(val)) { 73377 // Support values array created by autoprefixer, e.g. 73378 // {display: ["-webkit-box", "-ms-flexbox", "flex"]} 73379 // Set them one by one, and the browser will only set those it can recognize 73380 for (var i = 0, len = val.length; i < len; i++) { 73381 el.style[normalizedName] = val[i]; 73382 } 73383 } 73384 else { 73385 el.style[normalizedName] = val; 73386 } 73387 } 73388 }; 73389 var vendorNames = ['Webkit', 'Moz', 'ms']; 73390 var emptyStyle; 73391 var normalize = cached(function (prop) { 73392 emptyStyle = emptyStyle || document.createElement('div').style; 73393 prop = camelize(prop); 73394 if (prop !== 'filter' && prop in emptyStyle) { 73395 return prop; 73396 } 73397 var capName = prop.charAt(0).toUpperCase() + prop.slice(1); 73398 for (var i = 0; i < vendorNames.length; i++) { 73399 var name_1 = vendorNames[i] + capName; 73400 if (name_1 in emptyStyle) { 73401 return name_1; 73402 } 73403 } 73404 }); 73405 function updateStyle(oldVnode, vnode) { 73406 var data = vnode.data; 73407 var oldData = oldVnode.data; 73408 if (isUndef(data.staticStyle) && 73409 isUndef(data.style) && 73410 isUndef(oldData.staticStyle) && 73411 isUndef(oldData.style)) { 73412 return; 73413 } 73414 var cur, name; 73415 var el = vnode.elm; 73416 var oldStaticStyle = oldData.staticStyle; 73417 var oldStyleBinding = oldData.normalizedStyle || oldData.style || {}; 73418 // if static style exists, stylebinding already merged into it when doing normalizeStyleData 73419 var oldStyle = oldStaticStyle || oldStyleBinding; 73420 var style = normalizeStyleBinding(vnode.data.style) || {}; 73421 // store normalized style under a different key for next diff 73422 // make sure to clone it if it's reactive, since the user likely wants 73423 // to mutate it. 73424 vnode.data.normalizedStyle = isDef(style.__ob__) ? extend({}, style) : style; 73425 var newStyle = getStyle(vnode, true); 73426 for (name in oldStyle) { 73427 if (isUndef(newStyle[name])) { 73428 setProp(el, name, ''); 73429 } 73430 } 73431 for (name in newStyle) { 73432 cur = newStyle[name]; 73433 // ie9 setting to null has no effect, must use empty string 73434 setProp(el, name, cur == null ? '' : cur); 73435 } 73436 } 73437 var style$1 = { 73438 create: updateStyle, 73439 update: updateStyle 73440 }; 73441 73442 var whitespaceRE$1 = /\s+/; 73443 /** 73444 * Add class with compatibility for SVG since classList is not supported on 73445 * SVG elements in IE 73446 */ 73447 function addClass(el, cls) { 73448 /* istanbul ignore if */ 73449 if (!cls || !(cls = cls.trim())) { 73450 return; 73451 } 73452 /* istanbul ignore else */ 73453 if (el.classList) { 73454 if (cls.indexOf(' ') > -1) { 73455 cls.split(whitespaceRE$1).forEach(function (c) { return el.classList.add(c); }); 73456 } 73457 else { 73458 el.classList.add(cls); 73459 } 73460 } 73461 else { 73462 var cur = " ".concat(el.getAttribute('class') || '', " "); 73463 if (cur.indexOf(' ' + cls + ' ') < 0) { 73464 el.setAttribute('class', (cur + cls).trim()); 73465 } 73466 } 73467 } 73468 /** 73469 * Remove class with compatibility for SVG since classList is not supported on 73470 * SVG elements in IE 73471 */ 73472 function removeClass(el, cls) { 73473 /* istanbul ignore if */ 73474 if (!cls || !(cls = cls.trim())) { 73475 return; 73476 } 73477 /* istanbul ignore else */ 73478 if (el.classList) { 73479 if (cls.indexOf(' ') > -1) { 73480 cls.split(whitespaceRE$1).forEach(function (c) { return el.classList.remove(c); }); 73481 } 73482 else { 73483 el.classList.remove(cls); 73484 } 73485 if (!el.classList.length) { 73486 el.removeAttribute('class'); 73487 } 73488 } 73489 else { 73490 var cur = " ".concat(el.getAttribute('class') || '', " "); 73491 var tar = ' ' + cls + ' '; 73492 while (cur.indexOf(tar) >= 0) { 73493 cur = cur.replace(tar, ' '); 73494 } 73495 cur = cur.trim(); 73496 if (cur) { 73497 el.setAttribute('class', cur); 73498 } 73499 else { 73500 el.removeAttribute('class'); 73501 } 73502 } 73503 } 73504 73505 function resolveTransition(def) { 73506 if (!def) { 73507 return; 73508 } 73509 /* istanbul ignore else */ 73510 if (typeof def === 'object') { 73511 var res = {}; 73512 if (def.css !== false) { 73513 extend(res, autoCssTransition(def.name || 'v')); 73514 } 73515 extend(res, def); 73516 return res; 73517 } 73518 else if (typeof def === 'string') { 73519 return autoCssTransition(def); 73520 } 73521 } 73522 var autoCssTransition = cached(function (name) { 73523 return { 73524 enterClass: "".concat(name, "-enter"), 73525 enterToClass: "".concat(name, "-enter-to"), 73526 enterActiveClass: "".concat(name, "-enter-active"), 73527 leaveClass: "".concat(name, "-leave"), 73528 leaveToClass: "".concat(name, "-leave-to"), 73529 leaveActiveClass: "".concat(name, "-leave-active") 73530 }; 73531 }); 73532 var hasTransition = inBrowser && !isIE9; 73533 var TRANSITION = 'transition'; 73534 var ANIMATION = 'animation'; 73535 // Transition property/event sniffing 73536 var transitionProp = 'transition'; 73537 var transitionEndEvent = 'transitionend'; 73538 var animationProp = 'animation'; 73539 var animationEndEvent = 'animationend'; 73540 if (hasTransition) { 73541 /* istanbul ignore if */ 73542 if (window.ontransitionend === undefined && 73543 window.onwebkittransitionend !== undefined) { 73544 transitionProp = 'WebkitTransition'; 73545 transitionEndEvent = 'webkitTransitionEnd'; 73546 } 73547 if (window.onanimationend === undefined && 73548 window.onwebkitanimationend !== undefined) { 73549 animationProp = 'WebkitAnimation'; 73550 animationEndEvent = 'webkitAnimationEnd'; 73551 } 73552 } 73553 // binding to window is necessary to make hot reload work in IE in strict mode 73554 var raf = inBrowser 73555 ? window.requestAnimationFrame 73556 ? window.requestAnimationFrame.bind(window) 73557 : setTimeout 73558 : /* istanbul ignore next */ function (/* istanbul ignore next */ fn) { return fn(); }; 73559 function nextFrame(fn) { 73560 raf(function () { 73561 // @ts-expect-error 73562 raf(fn); 73563 }); 73564 } 73565 function addTransitionClass(el, cls) { 73566 var transitionClasses = el._transitionClasses || (el._transitionClasses = []); 73567 if (transitionClasses.indexOf(cls) < 0) { 73568 transitionClasses.push(cls); 73569 addClass(el, cls); 73570 } 73571 } 73572 function removeTransitionClass(el, cls) { 73573 if (el._transitionClasses) { 73574 remove$2(el._transitionClasses, cls); 73575 } 73576 removeClass(el, cls); 73577 } 73578 function whenTransitionEnds(el, expectedType, cb) { 73579 var _a = getTransitionInfo(el, expectedType), type = _a.type, timeout = _a.timeout, propCount = _a.propCount; 73580 if (!type) 73581 return cb(); 73582 var event = type === TRANSITION ? transitionEndEvent : animationEndEvent; 73583 var ended = 0; 73584 var end = function () { 73585 el.removeEventListener(event, onEnd); 73586 cb(); 73587 }; 73588 var onEnd = function (e) { 73589 if (e.target === el) { 73590 if (++ended >= propCount) { 73591 end(); 73592 } 73593 } 73594 }; 73595 setTimeout(function () { 73596 if (ended < propCount) { 73597 end(); 73598 } 73599 }, timeout + 1); 73600 el.addEventListener(event, onEnd); 73601 } 73602 var transformRE = /\b(transform|all)(,|$)/; 73603 function getTransitionInfo(el, expectedType) { 73604 var styles = window.getComputedStyle(el); 73605 // JSDOM may return undefined for transition properties 73606 var transitionDelays = (styles[transitionProp + 'Delay'] || '').split(', '); 73607 var transitionDurations = (styles[transitionProp + 'Duration'] || '').split(', '); 73608 var transitionTimeout = getTimeout(transitionDelays, transitionDurations); 73609 var animationDelays = (styles[animationProp + 'Delay'] || '').split(', '); 73610 var animationDurations = (styles[animationProp + 'Duration'] || '').split(', '); 73611 var animationTimeout = getTimeout(animationDelays, animationDurations); 73612 var type; 73613 var timeout = 0; 73614 var propCount = 0; 73615 /* istanbul ignore if */ 73616 if (expectedType === TRANSITION) { 73617 if (transitionTimeout > 0) { 73618 type = TRANSITION; 73619 timeout = transitionTimeout; 73620 propCount = transitionDurations.length; 73621 } 73622 } 73623 else if (expectedType === ANIMATION) { 73624 if (animationTimeout > 0) { 73625 type = ANIMATION; 73626 timeout = animationTimeout; 73627 propCount = animationDurations.length; 73628 } 73629 } 73630 else { 73631 timeout = Math.max(transitionTimeout, animationTimeout); 73632 type = 73633 timeout > 0 73634 ? transitionTimeout > animationTimeout 73635 ? TRANSITION 73636 : ANIMATION 73637 : null; 73638 propCount = type 73639 ? type === TRANSITION 73640 ? transitionDurations.length 73641 : animationDurations.length 73642 : 0; 73643 } 73644 var hasTransform = type === TRANSITION && transformRE.test(styles[transitionProp + 'Property']); 73645 return { 73646 type: type, 73647 timeout: timeout, 73648 propCount: propCount, 73649 hasTransform: hasTransform 73650 }; 73651 } 73652 function getTimeout(delays, durations) { 73653 /* istanbul ignore next */ 73654 while (delays.length < durations.length) { 73655 delays = delays.concat(delays); 73656 } 73657 return Math.max.apply(null, durations.map(function (d, i) { 73658 return toMs(d) + toMs(delays[i]); 73659 })); 73660 } 73661 // Old versions of Chromium (below 61.0.3163.100) formats floating pointer numbers 73662 // in a locale-dependent way, using a comma instead of a dot. 73663 // If comma is not replaced with a dot, the input will be rounded down (i.e. acting 73664 // as a floor function) causing unexpected behaviors 73665 function toMs(s) { 73666 return Number(s.slice(0, -1).replace(',', '.')) * 1000; 73667 } 73668 73669 function enter(vnode, toggleDisplay) { 73670 var el = vnode.elm; 73671 // call leave callback now 73672 if (isDef(el._leaveCb)) { 73673 el._leaveCb.cancelled = true; 73674 el._leaveCb(); 73675 } 73676 var data = resolveTransition(vnode.data.transition); 73677 if (isUndef(data)) { 73678 return; 73679 } 73680 /* istanbul ignore if */ 73681 if (isDef(el._enterCb) || el.nodeType !== 1) { 73682 return; 73683 } 73684 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; 73685 // activeInstance will always be the <transition> component managing this 73686 // transition. One edge case to check is when the <transition> is placed 73687 // as the root node of a child component. In that case we need to check 73688 // <transition>'s parent for appear check. 73689 var context = activeInstance; 73690 var transitionNode = activeInstance.$vnode; 73691 while (transitionNode && transitionNode.parent) { 73692 context = transitionNode.context; 73693 transitionNode = transitionNode.parent; 73694 } 73695 var isAppear = !context._isMounted || !vnode.isRootInsert; 73696 if (isAppear && !appear && appear !== '') { 73697 return; 73698 } 73699 var startClass = isAppear && appearClass ? appearClass : enterClass; 73700 var activeClass = isAppear && appearActiveClass ? appearActiveClass : enterActiveClass; 73701 var toClass = isAppear && appearToClass ? appearToClass : enterToClass; 73702 var beforeEnterHook = isAppear ? beforeAppear || beforeEnter : beforeEnter; 73703 var enterHook = isAppear ? (isFunction(appear) ? appear : enter) : enter; 73704 var afterEnterHook = isAppear ? afterAppear || afterEnter : afterEnter; 73705 var enterCancelledHook = isAppear 73706 ? appearCancelled || enterCancelled 73707 : enterCancelled; 73708 var explicitEnterDuration = toNumber(isObject(duration) ? duration.enter : duration); 73709 if (explicitEnterDuration != null) { 73710 checkDuration(explicitEnterDuration, 'enter', vnode); 73711 } 73712 var expectsCSS = css !== false && !isIE9; 73713 var userWantsControl = getHookArgumentsLength(enterHook); 73714 var cb = (el._enterCb = once(function () { 73715 if (expectsCSS) { 73716 removeTransitionClass(el, toClass); 73717 removeTransitionClass(el, activeClass); 73718 } 73719 // @ts-expect-error 73720 if (cb.cancelled) { 73721 if (expectsCSS) { 73722 removeTransitionClass(el, startClass); 73723 } 73724 enterCancelledHook && enterCancelledHook(el); 73725 } 73726 else { 73727 afterEnterHook && afterEnterHook(el); 73728 } 73729 el._enterCb = null; 73730 })); 73731 if (!vnode.data.show) { 73732 // remove pending leave element on enter by injecting an insert hook 73733 mergeVNodeHook(vnode, 'insert', function () { 73734 var parent = el.parentNode; 73735 var pendingNode = parent && parent._pending && parent._pending[vnode.key]; 73736 if (pendingNode && 73737 pendingNode.tag === vnode.tag && 73738 pendingNode.elm._leaveCb) { 73739 pendingNode.elm._leaveCb(); 73740 } 73741 enterHook && enterHook(el, cb); 73742 }); 73743 } 73744 // start enter transition 73745 beforeEnterHook && beforeEnterHook(el); 73746 if (expectsCSS) { 73747 addTransitionClass(el, startClass); 73748 addTransitionClass(el, activeClass); 73749 nextFrame(function () { 73750 removeTransitionClass(el, startClass); 73751 // @ts-expect-error 73752 if (!cb.cancelled) { 73753 addTransitionClass(el, toClass); 73754 if (!userWantsControl) { 73755 if (isValidDuration(explicitEnterDuration)) { 73756 setTimeout(cb, explicitEnterDuration); 73757 } 73758 else { 73759 whenTransitionEnds(el, type, cb); 73760 } 73761 } 73762 } 73763 }); 73764 } 73765 if (vnode.data.show) { 73766 toggleDisplay && toggleDisplay(); 73767 enterHook && enterHook(el, cb); 73768 } 73769 if (!expectsCSS && !userWantsControl) { 73770 cb(); 73771 } 73772 } 73773 function leave(vnode, rm) { 73774 var el = vnode.elm; 73775 // call enter callback now 73776 if (isDef(el._enterCb)) { 73777 el._enterCb.cancelled = true; 73778 el._enterCb(); 73779 } 73780 var data = resolveTransition(vnode.data.transition); 73781 if (isUndef(data) || el.nodeType !== 1) { 73782 return rm(); 73783 } 73784 /* istanbul ignore if */ 73785 if (isDef(el._leaveCb)) { 73786 return; 73787 } 73788 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; 73789 var expectsCSS = css !== false && !isIE9; 73790 var userWantsControl = getHookArgumentsLength(leave); 73791 var explicitLeaveDuration = toNumber(isObject(duration) ? duration.leave : duration); 73792 if (isDef(explicitLeaveDuration)) { 73793 checkDuration(explicitLeaveDuration, 'leave', vnode); 73794 } 73795 var cb = (el._leaveCb = once(function () { 73796 if (el.parentNode && el.parentNode._pending) { 73797 el.parentNode._pending[vnode.key] = null; 73798 } 73799 if (expectsCSS) { 73800 removeTransitionClass(el, leaveToClass); 73801 removeTransitionClass(el, leaveActiveClass); 73802 } 73803 // @ts-expect-error 73804 if (cb.cancelled) { 73805 if (expectsCSS) { 73806 removeTransitionClass(el, leaveClass); 73807 } 73808 leaveCancelled && leaveCancelled(el); 73809 } 73810 else { 73811 rm(); 73812 afterLeave && afterLeave(el); 73813 } 73814 el._leaveCb = null; 73815 })); 73816 if (delayLeave) { 73817 delayLeave(performLeave); 73818 } 73819 else { 73820 performLeave(); 73821 } 73822 function performLeave() { 73823 // the delayed leave may have already been cancelled 73824 // @ts-expect-error 73825 if (cb.cancelled) { 73826 return; 73827 } 73828 // record leaving element 73829 if (!vnode.data.show && el.parentNode) { 73830 (el.parentNode._pending || (el.parentNode._pending = {}))[vnode.key] = 73831 vnode; 73832 } 73833 beforeLeave && beforeLeave(el); 73834 if (expectsCSS) { 73835 addTransitionClass(el, leaveClass); 73836 addTransitionClass(el, leaveActiveClass); 73837 nextFrame(function () { 73838 removeTransitionClass(el, leaveClass); 73839 // @ts-expect-error 73840 if (!cb.cancelled) { 73841 addTransitionClass(el, leaveToClass); 73842 if (!userWantsControl) { 73843 if (isValidDuration(explicitLeaveDuration)) { 73844 setTimeout(cb, explicitLeaveDuration); 73845 } 73846 else { 73847 whenTransitionEnds(el, type, cb); 73848 } 73849 } 73850 } 73851 }); 73852 } 73853 leave && leave(el, cb); 73854 if (!expectsCSS && !userWantsControl) { 73855 cb(); 73856 } 73857 } 73858 } 73859 // only used in dev mode 73860 function checkDuration(val, name, vnode) { 73861 if (typeof val !== 'number') { 73862 warn$2("<transition> explicit ".concat(name, " duration is not a valid number - ") + 73863 "got ".concat(JSON.stringify(val), "."), vnode.context); 73864 } 73865 else if (isNaN(val)) { 73866 warn$2("<transition> explicit ".concat(name, " duration is NaN - ") + 73867 'the duration expression might be incorrect.', vnode.context); 73868 } 73869 } 73870 function isValidDuration(val) { 73871 return typeof val === 'number' && !isNaN(val); 73872 } 73873 /** 73874 * Normalize a transition hook's argument length. The hook may be: 73875 * - a merged hook (invoker) with the original in .fns 73876 * - a wrapped component method (check ._length) 73877 * - a plain function (.length) 73878 */ 73879 function getHookArgumentsLength(fn) { 73880 if (isUndef(fn)) { 73881 return false; 73882 } 73883 // @ts-expect-error 73884 var invokerFns = fn.fns; 73885 if (isDef(invokerFns)) { 73886 // invoker 73887 return getHookArgumentsLength(Array.isArray(invokerFns) ? invokerFns[0] : invokerFns); 73888 } 73889 else { 73890 // @ts-expect-error 73891 return (fn._length || fn.length) > 1; 73892 } 73893 } 73894 function _enter(_, vnode) { 73895 if (vnode.data.show !== true) { 73896 enter(vnode); 73897 } 73898 } 73899 var transition = inBrowser 73900 ? { 73901 create: _enter, 73902 activate: _enter, 73903 remove: function (vnode, rm) { 73904 /* istanbul ignore else */ 73905 if (vnode.data.show !== true) { 73906 // @ts-expect-error 73907 leave(vnode, rm); 73908 } 73909 else { 73910 rm(); 73911 } 73912 } 73913 } 73914 : {}; 73915 73916 var platformModules = [attrs, klass$1, events, domProps, style$1, transition]; 73917 73918 // the directive module should be applied last, after all 73919 // built-in modules have been applied. 73920 var modules$1 = platformModules.concat(baseModules); 73921 var patch = createPatchFunction({ nodeOps: nodeOps, modules: modules$1 }); 73922 73923 /** 73924 * Not type checking this file because flow doesn't like attaching 73925 * properties to Elements. 73926 */ 73927 /* istanbul ignore if */ 73928 if (isIE9) { 73929 // http://www.matts411.com/post/internet-explorer-9-oninput/ 73930 document.addEventListener('selectionchange', function () { 73931 var el = document.activeElement; 73932 // @ts-expect-error 73933 if (el && el.vmodel) { 73934 trigger(el, 'input'); 73935 } 73936 }); 73937 } 73938 var directive = { 73939 inserted: function (el, binding, vnode, oldVnode) { 73940 if (vnode.tag === 'select') { 73941 // #6903 73942 if (oldVnode.elm && !oldVnode.elm._vOptions) { 73943 mergeVNodeHook(vnode, 'postpatch', function () { 73944 directive.componentUpdated(el, binding, vnode); 73945 }); 73946 } 73947 else { 73948 setSelected(el, binding, vnode.context); 73949 } 73950 el._vOptions = [].map.call(el.options, getValue); 73951 } 73952 else if (vnode.tag === 'textarea' || isTextInputType(el.type)) { 73953 el._vModifiers = binding.modifiers; 73954 if (!binding.modifiers.lazy) { 73955 el.addEventListener('compositionstart', onCompositionStart); 73956 el.addEventListener('compositionend', onCompositionEnd); 73957 // Safari < 10.2 & UIWebView doesn't fire compositionend when 73958 // switching focus before confirming composition choice 73959 // this also fixes the issue where some browsers e.g. iOS Chrome 73960 // fires "change" instead of "input" on autocomplete. 73961 el.addEventListener('change', onCompositionEnd); 73962 /* istanbul ignore if */ 73963 if (isIE9) { 73964 el.vmodel = true; 73965 } 73966 } 73967 } 73968 }, 73969 componentUpdated: function (el, binding, vnode) { 73970 if (vnode.tag === 'select') { 73971 setSelected(el, binding, vnode.context); 73972 // in case the options rendered by v-for have changed, 73973 // it's possible that the value is out-of-sync with the rendered options. 73974 // detect such cases and filter out values that no longer has a matching 73975 // option in the DOM. 73976 var prevOptions_1 = el._vOptions; 73977 var curOptions_1 = (el._vOptions = [].map.call(el.options, getValue)); 73978 if (curOptions_1.some(function (o, i) { return !looseEqual(o, prevOptions_1[i]); })) { 73979 // trigger change event if 73980 // no matching option found for at least one value 73981 var needReset = el.multiple 73982 ? binding.value.some(function (v) { return hasNoMatchingOption(v, curOptions_1); }) 73983 : binding.value !== binding.oldValue && 73984 hasNoMatchingOption(binding.value, curOptions_1); 73985 if (needReset) { 73986 trigger(el, 'change'); 73987 } 73988 } 73989 } 73990 } 73991 }; 73992 function setSelected(el, binding, vm) { 73993 actuallySetSelected(el, binding, vm); 73994 /* istanbul ignore if */ 73995 if (isIE || isEdge) { 73996 setTimeout(function () { 73997 actuallySetSelected(el, binding, vm); 73998 }, 0); 73999 } 74000 } 74001 function actuallySetSelected(el, binding, vm) { 74002 var value = binding.value; 74003 var isMultiple = el.multiple; 74004 if (isMultiple && !Array.isArray(value)) { 74005 warn$2("<select multiple v-model=\"".concat(binding.expression, "\"> ") + 74006 "expects an Array value for its binding, but got ".concat(Object.prototype.toString 74007 .call(value) 74008 .slice(8, -1)), vm); 74009 return; 74010 } 74011 var selected, option; 74012 for (var i = 0, l = el.options.length; i < l; i++) { 74013 option = el.options[i]; 74014 if (isMultiple) { 74015 selected = looseIndexOf(value, getValue(option)) > -1; 74016 if (option.selected !== selected) { 74017 option.selected = selected; 74018 } 74019 } 74020 else { 74021 if (looseEqual(getValue(option), value)) { 74022 if (el.selectedIndex !== i) { 74023 el.selectedIndex = i; 74024 } 74025 return; 74026 } 74027 } 74028 } 74029 if (!isMultiple) { 74030 el.selectedIndex = -1; 74031 } 74032 } 74033 function hasNoMatchingOption(value, options) { 74034 return options.every(function (o) { return !looseEqual(o, value); }); 74035 } 74036 function getValue(option) { 74037 return '_value' in option ? option._value : option.value; 74038 } 74039 function onCompositionStart(e) { 74040 e.target.composing = true; 74041 } 74042 function onCompositionEnd(e) { 74043 // prevent triggering an input event for no reason 74044 if (!e.target.composing) 74045 return; 74046 e.target.composing = false; 74047 trigger(e.target, 'input'); 74048 } 74049 function trigger(el, type) { 74050 var e = document.createEvent('HTMLEvents'); 74051 e.initEvent(type, true, true); 74052 el.dispatchEvent(e); 74053 } 74054 74055 // recursively search for possible transition defined inside the component root 74056 function locateNode(vnode) { 74057 // @ts-expect-error 74058 return vnode.componentInstance && (!vnode.data || !vnode.data.transition) 74059 ? locateNode(vnode.componentInstance._vnode) 74060 : vnode; 74061 } 74062 var show = { 74063 bind: function (el, _a, vnode) { 74064 var value = _a.value; 74065 vnode = locateNode(vnode); 74066 var transition = vnode.data && vnode.data.transition; 74067 var originalDisplay = (el.__vOriginalDisplay = 74068 el.style.display === 'none' ? '' : el.style.display); 74069 if (value && transition) { 74070 vnode.data.show = true; 74071 enter(vnode, function () { 74072 el.style.display = originalDisplay; 74073 }); 74074 } 74075 else { 74076 el.style.display = value ? originalDisplay : 'none'; 74077 } 74078 }, 74079 update: function (el, _a, vnode) { 74080 var value = _a.value, oldValue = _a.oldValue; 74081 /* istanbul ignore if */ 74082 if (!value === !oldValue) 74083 return; 74084 vnode = locateNode(vnode); 74085 var transition = vnode.data && vnode.data.transition; 74086 if (transition) { 74087 vnode.data.show = true; 74088 if (value) { 74089 enter(vnode, function () { 74090 el.style.display = el.__vOriginalDisplay; 74091 }); 74092 } 74093 else { 74094 leave(vnode, function () { 74095 el.style.display = 'none'; 74096 }); 74097 } 74098 } 74099 else { 74100 el.style.display = value ? el.__vOriginalDisplay : 'none'; 74101 } 74102 }, 74103 unbind: function (el, binding, vnode, oldVnode, isDestroy) { 74104 if (!isDestroy) { 74105 el.style.display = el.__vOriginalDisplay; 74106 } 74107 } 74108 }; 74109 74110 var platformDirectives = { 74111 model: directive, 74112 show: show 74113 }; 74114 74115 // Provides transition support for a single element/component. 74116 var transitionProps = { 74117 name: String, 74118 appear: Boolean, 74119 css: Boolean, 74120 mode: String, 74121 type: String, 74122 enterClass: String, 74123 leaveClass: String, 74124 enterToClass: String, 74125 leaveToClass: String, 74126 enterActiveClass: String, 74127 leaveActiveClass: String, 74128 appearClass: String, 74129 appearActiveClass: String, 74130 appearToClass: String, 74131 duration: [Number, String, Object] 74132 }; 74133 // in case the child is also an abstract component, e.g. <keep-alive> 74134 // we want to recursively retrieve the real component to be rendered 74135 function getRealChild(vnode) { 74136 var compOptions = vnode && vnode.componentOptions; 74137 if (compOptions && compOptions.Ctor.options.abstract) { 74138 return getRealChild(getFirstComponentChild(compOptions.children)); 74139 } 74140 else { 74141 return vnode; 74142 } 74143 } 74144 function extractTransitionData(comp) { 74145 var data = {}; 74146 var options = comp.$options; 74147 // props 74148 for (var key in options.propsData) { 74149 data[key] = comp[key]; 74150 } 74151 // events. 74152 // extract listeners and pass them directly to the transition methods 74153 var listeners = options._parentListeners; 74154 for (var key in listeners) { 74155 data[camelize(key)] = listeners[key]; 74156 } 74157 return data; 74158 } 74159 function placeholder(h, rawChild) { 74160 // @ts-expect-error 74161 if (/\d-keep-alive$/.test(rawChild.tag)) { 74162 return h('keep-alive', { 74163 props: rawChild.componentOptions.propsData 74164 }); 74165 } 74166 } 74167 function hasParentTransition(vnode) { 74168 while ((vnode = vnode.parent)) { 74169 if (vnode.data.transition) { 74170 return true; 74171 } 74172 } 74173 } 74174 function isSameChild(child, oldChild) { 74175 return oldChild.key === child.key && oldChild.tag === child.tag; 74176 } 74177 var isNotTextNode = function (c) { return c.tag || isAsyncPlaceholder(c); }; 74178 var isVShowDirective = function (d) { return d.name === 'show'; }; 74179 var Transition = { 74180 name: 'transition', 74181 props: transitionProps, 74182 abstract: true, 74183 render: function (h) { 74184 var _this = this; 74185 var children = this.$slots.default; 74186 if (!children) { 74187 return; 74188 } 74189 // filter out text nodes (possible whitespaces) 74190 children = children.filter(isNotTextNode); 74191 /* istanbul ignore if */ 74192 if (!children.length) { 74193 return; 74194 } 74195 // warn multiple elements 74196 if (children.length > 1) { 74197 warn$2('<transition> can only be used on a single element. Use ' + 74198 '<transition-group> for lists.', this.$parent); 74199 } 74200 var mode = this.mode; 74201 // warn invalid mode 74202 if (mode && mode !== 'in-out' && mode !== 'out-in') { 74203 warn$2('invalid <transition> mode: ' + mode, this.$parent); 74204 } 74205 var rawChild = children[0]; 74206 // if this is a component root node and the component's 74207 // parent container node also has transition, skip. 74208 if (hasParentTransition(this.$vnode)) { 74209 return rawChild; 74210 } 74211 // apply transition data to child 74212 // use getRealChild() to ignore abstract components e.g. keep-alive 74213 var child = getRealChild(rawChild); 74214 /* istanbul ignore if */ 74215 if (!child) { 74216 return rawChild; 74217 } 74218 if (this._leaving) { 74219 return placeholder(h, rawChild); 74220 } 74221 // ensure a key that is unique to the vnode type and to this transition 74222 // component instance. This key will be used to remove pending leaving nodes 74223 // during entering. 74224 var id = "__transition-".concat(this._uid, "-"); 74225 child.key = 74226 child.key == null 74227 ? child.isComment 74228 ? id + 'comment' 74229 : id + child.tag 74230 : isPrimitive(child.key) 74231 ? String(child.key).indexOf(id) === 0 74232 ? child.key 74233 : id + child.key 74234 : child.key; 74235 var data = ((child.data || (child.data = {})).transition = 74236 extractTransitionData(this)); 74237 var oldRawChild = this._vnode; 74238 var oldChild = getRealChild(oldRawChild); 74239 // mark v-show 74240 // so that the transition module can hand over the control to the directive 74241 if (child.data.directives && child.data.directives.some(isVShowDirective)) { 74242 child.data.show = true; 74243 } 74244 if (oldChild && 74245 oldChild.data && 74246 !isSameChild(child, oldChild) && 74247 !isAsyncPlaceholder(oldChild) && 74248 // #6687 component root is a comment node 74249 !(oldChild.componentInstance && 74250 oldChild.componentInstance._vnode.isComment)) { 74251 // replace old child transition data with fresh one 74252 // important for dynamic transitions! 74253 var oldData = (oldChild.data.transition = extend({}, data)); 74254 // handle transition mode 74255 if (mode === 'out-in') { 74256 // return placeholder node and queue update when leave finishes 74257 this._leaving = true; 74258 mergeVNodeHook(oldData, 'afterLeave', function () { 74259 _this._leaving = false; 74260 _this.$forceUpdate(); 74261 }); 74262 return placeholder(h, rawChild); 74263 } 74264 else if (mode === 'in-out') { 74265 if (isAsyncPlaceholder(child)) { 74266 return oldRawChild; 74267 } 74268 var delayedLeave_1; 74269 var performLeave = function () { 74270 delayedLeave_1(); 74271 }; 74272 mergeVNodeHook(data, 'afterEnter', performLeave); 74273 mergeVNodeHook(data, 'enterCancelled', performLeave); 74274 mergeVNodeHook(oldData, 'delayLeave', function (leave) { 74275 delayedLeave_1 = leave; 74276 }); 74277 } 74278 } 74279 return rawChild; 74280 } 74281 }; 74282 74283 // Provides transition support for list items. 74284 var props = extend({ 74285 tag: String, 74286 moveClass: String 74287 }, transitionProps); 74288 delete props.mode; 74289 var TransitionGroup = { 74290 props: props, 74291 beforeMount: function () { 74292 var _this = this; 74293 var update = this._update; 74294 this._update = function (vnode, hydrating) { 74295 var restoreActiveInstance = setActiveInstance(_this); 74296 // force removing pass 74297 _this.__patch__(_this._vnode, _this.kept, false, // hydrating 74298 true // removeOnly (!important, avoids unnecessary moves) 74299 ); 74300 _this._vnode = _this.kept; 74301 restoreActiveInstance(); 74302 update.call(_this, vnode, hydrating); 74303 }; 74304 }, 74305 render: function (h) { 74306 var tag = this.tag || this.$vnode.data.tag || 'span'; 74307 var map = Object.create(null); 74308 var prevChildren = (this.prevChildren = this.children); 74309 var rawChildren = this.$slots.default || []; 74310 var children = (this.children = []); 74311 var transitionData = extractTransitionData(this); 74312 for (var i = 0; i < rawChildren.length; i++) { 74313 var c = rawChildren[i]; 74314 if (c.tag) { 74315 if (c.key != null && String(c.key).indexOf('__vlist') !== 0) { 74316 children.push(c); 74317 map[c.key] = c; 74318 (c.data || (c.data = {})).transition = transitionData; 74319 } 74320 else { 74321 var opts = c.componentOptions; 74322 var name_1 = opts 74323 ? getComponentName(opts.Ctor.options) || opts.tag || '' 74324 : c.tag; 74325 warn$2("<transition-group> children must be keyed: <".concat(name_1, ">")); 74326 } 74327 } 74328 } 74329 if (prevChildren) { 74330 var kept = []; 74331 var removed = []; 74332 for (var i = 0; i < prevChildren.length; i++) { 74333 var c = prevChildren[i]; 74334 c.data.transition = transitionData; 74335 // @ts-expect-error .getBoundingClientRect is not typed in Node 74336 c.data.pos = c.elm.getBoundingClientRect(); 74337 if (map[c.key]) { 74338 kept.push(c); 74339 } 74340 else { 74341 removed.push(c); 74342 } 74343 } 74344 this.kept = h(tag, null, kept); 74345 this.removed = removed; 74346 } 74347 return h(tag, null, children); 74348 }, 74349 updated: function () { 74350 var children = this.prevChildren; 74351 var moveClass = this.moveClass || (this.name || 'v') + '-move'; 74352 if (!children.length || !this.hasMove(children[0].elm, moveClass)) { 74353 return; 74354 } 74355 // we divide the work into three loops to avoid mixing DOM reads and writes 74356 // in each iteration - which helps prevent layout thrashing. 74357 children.forEach(callPendingCbs); 74358 children.forEach(recordPosition); 74359 children.forEach(applyTranslation); 74360 // force reflow to put everything in position 74361 // assign to this to avoid being removed in tree-shaking 74362 // $flow-disable-line 74363 this._reflow = document.body.offsetHeight; 74364 children.forEach(function (c) { 74365 if (c.data.moved) { 74366 var el_1 = c.elm; 74367 var s = el_1.style; 74368 addTransitionClass(el_1, moveClass); 74369 s.transform = s.WebkitTransform = s.transitionDuration = ''; 74370 el_1.addEventListener(transitionEndEvent, (el_1._moveCb = function cb(e) { 74371 if (e && e.target !== el_1) { 74372 return; 74373 } 74374 if (!e || /transform$/.test(e.propertyName)) { 74375 el_1.removeEventListener(transitionEndEvent, cb); 74376 el_1._moveCb = null; 74377 removeTransitionClass(el_1, moveClass); 74378 } 74379 })); 74380 } 74381 }); 74382 }, 74383 methods: { 74384 hasMove: function (el, moveClass) { 74385 /* istanbul ignore if */ 74386 if (!hasTransition) { 74387 return false; 74388 } 74389 /* istanbul ignore if */ 74390 if (this._hasMove) { 74391 return this._hasMove; 74392 } 74393 // Detect whether an element with the move class applied has 74394 // CSS transitions. Since the element may be inside an entering 74395 // transition at this very moment, we make a clone of it and remove 74396 // all other transition classes applied to ensure only the move class 74397 // is applied. 74398 var clone = el.cloneNode(); 74399 if (el._transitionClasses) { 74400 el._transitionClasses.forEach(function (cls) { 74401 removeClass(clone, cls); 74402 }); 74403 } 74404 addClass(clone, moveClass); 74405 clone.style.display = 'none'; 74406 this.$el.appendChild(clone); 74407 var info = getTransitionInfo(clone); 74408 this.$el.removeChild(clone); 74409 return (this._hasMove = info.hasTransform); 74410 } 74411 } 74412 }; 74413 function callPendingCbs(c) { 74414 /* istanbul ignore if */ 74415 if (c.elm._moveCb) { 74416 c.elm._moveCb(); 74417 } 74418 /* istanbul ignore if */ 74419 if (c.elm._enterCb) { 74420 c.elm._enterCb(); 74421 } 74422 } 74423 function recordPosition(c) { 74424 c.data.newPos = c.elm.getBoundingClientRect(); 74425 } 74426 function applyTranslation(c) { 74427 var oldPos = c.data.pos; 74428 var newPos = c.data.newPos; 74429 var dx = oldPos.left - newPos.left; 74430 var dy = oldPos.top - newPos.top; 74431 if (dx || dy) { 74432 c.data.moved = true; 74433 var s = c.elm.style; 74434 s.transform = s.WebkitTransform = "translate(".concat(dx, "px,").concat(dy, "px)"); 74435 s.transitionDuration = '0s'; 74436 } 74437 } 74438 74439 var platformComponents = { 74440 Transition: Transition, 74441 TransitionGroup: TransitionGroup 74442 }; 74443 74444 // install platform specific utils 74445 Vue.config.mustUseProp = mustUseProp; 74446 Vue.config.isReservedTag = isReservedTag; 74447 Vue.config.isReservedAttr = isReservedAttr; 74448 Vue.config.getTagNamespace = getTagNamespace; 74449 Vue.config.isUnknownElement = isUnknownElement; 74450 // install platform runtime directives & components 74451 extend(Vue.options.directives, platformDirectives); 74452 extend(Vue.options.components, platformComponents); 74453 // install platform patch function 74454 Vue.prototype.__patch__ = inBrowser ? patch : noop; 74455 // public mount method 74456 Vue.prototype.$mount = function (el, hydrating) { 74457 el = el && inBrowser ? query(el) : undefined; 74458 return mountComponent(this, el, hydrating); 74459 }; 74460 // devtools global hook 74461 /* istanbul ignore next */ 74462 if (inBrowser) { 74463 setTimeout(function () { 74464 if (config.devtools) { 74465 if (devtools) { 74466 devtools.emit('init', Vue); 74467 } 74468 else { 74469 // @ts-expect-error 74470 console[console.info ? 'info' : 'log']('Download the Vue Devtools extension for a better development experience:\n' + 74471 'https://github.com/vuejs/vue-devtools'); 74472 } 74473 } 74474 if (config.productionTip !== false && 74475 typeof console !== 'undefined') { 74476 // @ts-expect-error 74477 console[console.info ? 'info' : 'log']("You are running Vue in development mode.\n" + 74478 "Make sure to turn on production mode when deploying for production.\n" + 74479 "See more tips at https://vuejs.org/guide/deployment.html"); 74480 } 74481 }, 0); 74482 } 74483 74484 var defaultTagRE = /\{\{((?:.|\r?\n)+?)\}\}/g; 74485 var regexEscapeRE = /[-.*+?^${}()|[\]\/\\]/g; 74486 var buildRegex = cached(function (delimiters) { 74487 var open = delimiters[0].replace(regexEscapeRE, '\\$&'); 74488 var close = delimiters[1].replace(regexEscapeRE, '\\$&'); 74489 return new RegExp(open + '((?:.|\\n)+?)' + close, 'g'); 74490 }); 74491 function parseText(text, delimiters) { 74492 //@ts-expect-error 74493 var tagRE = delimiters ? buildRegex(delimiters) : defaultTagRE; 74494 if (!tagRE.test(text)) { 74495 return; 74496 } 74497 var tokens = []; 74498 var rawTokens = []; 74499 var lastIndex = (tagRE.lastIndex = 0); 74500 var match, index, tokenValue; 74501 while ((match = tagRE.exec(text))) { 74502 index = match.index; 74503 // push text token 74504 if (index > lastIndex) { 74505 rawTokens.push((tokenValue = text.slice(lastIndex, index))); 74506 tokens.push(JSON.stringify(tokenValue)); 74507 } 74508 // tag token 74509 var exp = parseFilters(match[1].trim()); 74510 tokens.push("_s(".concat(exp, ")")); 74511 rawTokens.push({ '@binding': exp }); 74512 lastIndex = index + match[0].length; 74513 } 74514 if (lastIndex < text.length) { 74515 rawTokens.push((tokenValue = text.slice(lastIndex))); 74516 tokens.push(JSON.stringify(tokenValue)); 74517 } 74518 return { 74519 expression: tokens.join('+'), 74520 tokens: rawTokens 74521 }; 74522 } 74523 74524 function transformNode$1(el, options) { 74525 var warn = options.warn || baseWarn; 74526 var staticClass = getAndRemoveAttr(el, 'class'); 74527 if (staticClass) { 74528 var res = parseText(staticClass, options.delimiters); 74529 if (res) { 74530 warn("class=\"".concat(staticClass, "\": ") + 74531 'Interpolation inside attributes has been removed. ' + 74532 'Use v-bind or the colon shorthand instead. For example, ' + 74533 'instead of <div class="{{ val }}">, use <div :class="val">.', el.rawAttrsMap['class']); 74534 } 74535 } 74536 if (staticClass) { 74537 el.staticClass = JSON.stringify(staticClass.replace(/\s+/g, ' ').trim()); 74538 } 74539 var classBinding = getBindingAttr(el, 'class', false /* getStatic */); 74540 if (classBinding) { 74541 el.classBinding = classBinding; 74542 } 74543 } 74544 function genData$2(el) { 74545 var data = ''; 74546 if (el.staticClass) { 74547 data += "staticClass:".concat(el.staticClass, ","); 74548 } 74549 if (el.classBinding) { 74550 data += "class:".concat(el.classBinding, ","); 74551 } 74552 return data; 74553 } 74554 var klass = { 74555 staticKeys: ['staticClass'], 74556 transformNode: transformNode$1, 74557 genData: genData$2 74558 }; 74559 74560 function transformNode(el, options) { 74561 var warn = options.warn || baseWarn; 74562 var staticStyle = getAndRemoveAttr(el, 'style'); 74563 if (staticStyle) { 74564 /* istanbul ignore if */ 74565 { 74566 var res = parseText(staticStyle, options.delimiters); 74567 if (res) { 74568 warn("style=\"".concat(staticStyle, "\": ") + 74569 'Interpolation inside attributes has been removed. ' + 74570 'Use v-bind or the colon shorthand instead. For example, ' + 74571 'instead of <div style="{{ val }}">, use <div :style="val">.', el.rawAttrsMap['style']); 74572 } 74573 } 74574 el.staticStyle = JSON.stringify(parseStyleText(staticStyle)); 74575 } 74576 var styleBinding = getBindingAttr(el, 'style', false /* getStatic */); 74577 if (styleBinding) { 74578 el.styleBinding = styleBinding; 74579 } 74580 } 74581 function genData$1(el) { 74582 var data = ''; 74583 if (el.staticStyle) { 74584 data += "staticStyle:".concat(el.staticStyle, ","); 74585 } 74586 if (el.styleBinding) { 74587 data += "style:(".concat(el.styleBinding, "),"); 74588 } 74589 return data; 74590 } 74591 var style = { 74592 staticKeys: ['staticStyle'], 74593 transformNode: transformNode, 74594 genData: genData$1 74595 }; 74596 74597 var decoder; 74598 var he = { 74599 decode: function (html) { 74600 decoder = decoder || document.createElement('div'); 74601 decoder.innerHTML = html; 74602 return decoder.textContent; 74603 } 74604 }; 74605 74606 var isUnaryTag = makeMap('area,base,br,col,embed,frame,hr,img,input,isindex,keygen,' + 74607 'link,meta,param,source,track,wbr'); 74608 // Elements that you can, intentionally, leave open 74609 // (and which close themselves) 74610 var canBeLeftOpenTag = makeMap('colgroup,dd,dt,li,options,p,td,tfoot,th,thead,tr,source'); 74611 // HTML5 tags https://html.spec.whatwg.org/multipage/indices.html#elements-3 74612 // Phrasing Content https://html.spec.whatwg.org/multipage/dom.html#phrasing-content 74613 var isNonPhrasingTag = makeMap('address,article,aside,base,blockquote,body,caption,col,colgroup,dd,' + 74614 'details,dialog,div,dl,dt,fieldset,figcaption,figure,footer,form,' + 74615 'h1,h2,h3,h4,h5,h6,head,header,hgroup,hr,html,legend,li,menuitem,meta,' + 74616 'optgroup,option,param,rp,rt,source,style,summary,tbody,td,tfoot,th,thead,' + 74617 'title,tr,track'); 74618 74619 /** 74620 * Not type-checking this file because it's mostly vendor code. 74621 */ 74622 // Regular Expressions for parsing tags and attributes 74623 var attribute = /^\s*([^\s"'<>\/=]+)(?:\s*(=)\s*(?:"([^"]*)"+|'([^']*)'+|([^\s"'=<>`]+)))?/; 74624 var dynamicArgAttribute = /^\s*((?:v-[\w-]+:|@|:|#)\[[^=]+?\][^\s"'<>\/=]*)(?:\s*(=)\s*(?:"([^"]*)"+|'([^']*)'+|([^\s"'=<>`]+)))?/; 74625 var ncname = "[a-zA-Z_][\\-\\.0-9_a-zA-Z".concat(unicodeRegExp.source, "]*"); 74626 var qnameCapture = "((?:".concat(ncname, "\\:)?").concat(ncname, ")"); 74627 var startTagOpen = new RegExp("^<".concat(qnameCapture)); 74628 var startTagClose = /^\s*(\/?)>/; 74629 var endTag = new RegExp("^<\\/".concat(qnameCapture, "[^>]*>")); 74630 var doctype = /^<!DOCTYPE [^>]+>/i; 74631 // #7298: escape - to avoid being passed as HTML comment when inlined in page 74632 var comment = /^<!\--/; 74633 var conditionalComment = /^<!\[/; 74634 // Special Elements (can contain anything) 74635 var isPlainTextElement = makeMap('script,style,textarea', true); 74636 var reCache = {}; 74637 var decodingMap = { 74638 '<': '<', 74639 '>': '>', 74640 '"': '"', 74641 '&': '&', 74642 ' ': '\n', 74643 '	': '\t', 74644 ''': "'" 74645 }; 74646 var encodedAttr = /&(?:lt|gt|quot|amp|#39);/g; 74647 var encodedAttrWithNewLines = /&(?:lt|gt|quot|amp|#39|#10|#9);/g; 74648 // #5992 74649 var isIgnoreNewlineTag = makeMap('pre,textarea', true); 74650 var shouldIgnoreFirstNewline = function (tag, html) { 74651 return tag && isIgnoreNewlineTag(tag) && html[0] === '\n'; 74652 }; 74653 function decodeAttr(value, shouldDecodeNewlines) { 74654 var re = shouldDecodeNewlines ? encodedAttrWithNewLines : encodedAttr; 74655 return value.replace(re, function (match) { return decodingMap[match]; }); 74656 } 74657 function parseHTML(html, options) { 74658 var stack = []; 74659 var expectHTML = options.expectHTML; 74660 var isUnaryTag = options.isUnaryTag || no; 74661 var canBeLeftOpenTag = options.canBeLeftOpenTag || no; 74662 var index = 0; 74663 var last, lastTag; 74664 var _loop_1 = function () { 74665 last = html; 74666 // Make sure we're not in a plaintext content element like script/style 74667 if (!lastTag || !isPlainTextElement(lastTag)) { 74668 var textEnd = html.indexOf('<'); 74669 if (textEnd === 0) { 74670 // Comment: 74671 if (comment.test(html)) { 74672 var commentEnd = html.indexOf('-->'); 74673 if (commentEnd >= 0) { 74674 if (options.shouldKeepComment && options.comment) { 74675 options.comment(html.substring(4, commentEnd), index, index + commentEnd + 3); 74676 } 74677 advance(commentEnd + 3); 74678 return "continue"; 74679 } 74680 } 74681 // https://en.wikipedia.org/wiki/Conditional_comment#Downlevel-revealed_conditional_comment 74682 if (conditionalComment.test(html)) { 74683 var conditionalEnd = html.indexOf(']>'); 74684 if (conditionalEnd >= 0) { 74685 advance(conditionalEnd + 2); 74686 return "continue"; 74687 } 74688 } 74689 // Doctype: 74690 var doctypeMatch = html.match(doctype); 74691 if (doctypeMatch) { 74692 advance(doctypeMatch[0].length); 74693 return "continue"; 74694 } 74695 // End tag: 74696 var endTagMatch = html.match(endTag); 74697 if (endTagMatch) { 74698 var curIndex = index; 74699 advance(endTagMatch[0].length); 74700 parseEndTag(endTagMatch[1], curIndex, index); 74701 return "continue"; 74702 } 74703 // Start tag: 74704 var startTagMatch = parseStartTag(); 74705 if (startTagMatch) { 74706 handleStartTag(startTagMatch); 74707 if (shouldIgnoreFirstNewline(startTagMatch.tagName, html)) { 74708 advance(1); 74709 } 74710 return "continue"; 74711 } 74712 } 74713 var text = void 0, rest = void 0, next = void 0; 74714 if (textEnd >= 0) { 74715 rest = html.slice(textEnd); 74716 while (!endTag.test(rest) && 74717 !startTagOpen.test(rest) && 74718 !comment.test(rest) && 74719 !conditionalComment.test(rest)) { 74720 // < in plain text, be forgiving and treat it as text 74721 next = rest.indexOf('<', 1); 74722 if (next < 0) 74723 break; 74724 textEnd += next; 74725 rest = html.slice(textEnd); 74726 } 74727 text = html.substring(0, textEnd); 74728 } 74729 if (textEnd < 0) { 74730 text = html; 74731 } 74732 if (text) { 74733 advance(text.length); 74734 } 74735 if (options.chars && text) { 74736 options.chars(text, index - text.length, index); 74737 } 74738 } 74739 else { 74740 var endTagLength_1 = 0; 74741 var stackedTag_1 = lastTag.toLowerCase(); 74742 var reStackedTag = reCache[stackedTag_1] || 74743 (reCache[stackedTag_1] = new RegExp('([\\s\\S]*?)(</' + stackedTag_1 + '[^>]*>)', 'i')); 74744 var rest = html.replace(reStackedTag, function (all, text, endTag) { 74745 endTagLength_1 = endTag.length; 74746 if (!isPlainTextElement(stackedTag_1) && stackedTag_1 !== 'noscript') { 74747 text = text 74748 .replace(/<!\--([\s\S]*?)-->/g, '$1') // #7298 74749 .replace(/<!\[CDATA\[([\s\S]*?)]]>/g, '$1'); 74750 } 74751 if (shouldIgnoreFirstNewline(stackedTag_1, text)) { 74752 text = text.slice(1); 74753 } 74754 if (options.chars) { 74755 options.chars(text); 74756 } 74757 return ''; 74758 }); 74759 index += html.length - rest.length; 74760 html = rest; 74761 parseEndTag(stackedTag_1, index - endTagLength_1, index); 74762 } 74763 if (html === last) { 74764 options.chars && options.chars(html); 74765 if (!stack.length && options.warn) { 74766 options.warn("Mal-formatted tag at end of template: \"".concat(html, "\""), { 74767 start: index + html.length 74768 }); 74769 } 74770 return "break"; 74771 } 74772 }; 74773 while (html) { 74774 var state_1 = _loop_1(); 74775 if (state_1 === "break") 74776 break; 74777 } 74778 // Clean up any remaining tags 74779 parseEndTag(); 74780 function advance(n) { 74781 index += n; 74782 html = html.substring(n); 74783 } 74784 function parseStartTag() { 74785 var start = html.match(startTagOpen); 74786 if (start) { 74787 var match = { 74788 tagName: start[1], 74789 attrs: [], 74790 start: index 74791 }; 74792 advance(start[0].length); 74793 var end = void 0, attr = void 0; 74794 while (!(end = html.match(startTagClose)) && 74795 (attr = html.match(dynamicArgAttribute) || html.match(attribute))) { 74796 attr.start = index; 74797 advance(attr[0].length); 74798 attr.end = index; 74799 match.attrs.push(attr); 74800 } 74801 if (end) { 74802 match.unarySlash = end[1]; 74803 advance(end[0].length); 74804 match.end = index; 74805 return match; 74806 } 74807 } 74808 } 74809 function handleStartTag(match) { 74810 var tagName = match.tagName; 74811 var unarySlash = match.unarySlash; 74812 if (expectHTML) { 74813 if (lastTag === 'p' && isNonPhrasingTag(tagName)) { 74814 parseEndTag(lastTag); 74815 } 74816 if (canBeLeftOpenTag(tagName) && lastTag === tagName) { 74817 parseEndTag(tagName); 74818 } 74819 } 74820 var unary = isUnaryTag(tagName) || !!unarySlash; 74821 var l = match.attrs.length; 74822 var attrs = new Array(l); 74823 for (var i = 0; i < l; i++) { 74824 var args = match.attrs[i]; 74825 var value = args[3] || args[4] || args[5] || ''; 74826 var shouldDecodeNewlines = tagName === 'a' && args[1] === 'href' 74827 ? options.shouldDecodeNewlinesForHref 74828 : options.shouldDecodeNewlines; 74829 attrs[i] = { 74830 name: args[1], 74831 value: decodeAttr(value, shouldDecodeNewlines) 74832 }; 74833 if (options.outputSourceRange) { 74834 attrs[i].start = args.start + args[0].match(/^\s*/).length; 74835 attrs[i].end = args.end; 74836 } 74837 } 74838 if (!unary) { 74839 stack.push({ 74840 tag: tagName, 74841 lowerCasedTag: tagName.toLowerCase(), 74842 attrs: attrs, 74843 start: match.start, 74844 end: match.end 74845 }); 74846 lastTag = tagName; 74847 } 74848 if (options.start) { 74849 options.start(tagName, attrs, unary, match.start, match.end); 74850 } 74851 } 74852 function parseEndTag(tagName, start, end) { 74853 var pos, lowerCasedTagName; 74854 if (start == null) 74855 start = index; 74856 if (end == null) 74857 end = index; 74858 // Find the closest opened tag of the same type 74859 if (tagName) { 74860 lowerCasedTagName = tagName.toLowerCase(); 74861 for (pos = stack.length - 1; pos >= 0; pos--) { 74862 if (stack[pos].lowerCasedTag === lowerCasedTagName) { 74863 break; 74864 } 74865 } 74866 } 74867 else { 74868 // If no tag name is provided, clean shop 74869 pos = 0; 74870 } 74871 if (pos >= 0) { 74872 // Close all the open elements, up the stack 74873 for (var i = stack.length - 1; i >= pos; i--) { 74874 if ((i > pos || !tagName) && options.warn) { 74875 options.warn("tag <".concat(stack[i].tag, "> has no matching end tag."), { 74876 start: stack[i].start, 74877 end: stack[i].end 74878 }); 74879 } 74880 if (options.end) { 74881 options.end(stack[i].tag, start, end); 74882 } 74883 } 74884 // Remove the open elements from the stack 74885 stack.length = pos; 74886 lastTag = pos && stack[pos - 1].tag; 74887 } 74888 else if (lowerCasedTagName === 'br') { 74889 if (options.start) { 74890 options.start(tagName, [], true, start, end); 74891 } 74892 } 74893 else if (lowerCasedTagName === 'p') { 74894 if (options.start) { 74895 options.start(tagName, [], false, start, end); 74896 } 74897 if (options.end) { 74898 options.end(tagName, start, end); 74899 } 74900 } 74901 } 74902 } 74903 74904 var onRE = /^@|^v-on:/; 74905 var dirRE = /^v-|^@|^:|^#/; 74906 var forAliasRE = /([\s\S]*?)\s+(?:in|of)\s+([\s\S]*)/; 74907 var forIteratorRE = /,([^,\}\]]*)(?:,([^,\}\]]*))?$/; 74908 var stripParensRE = /^\(|\)$/g; 74909 var dynamicArgRE = /^\[.*\]$/; 74910 var argRE = /:(.*)$/; 74911 var bindRE = /^:|^\.|^v-bind:/; 74912 var modifierRE = /\.[^.\]]+(?=[^\]]*$)/g; 74913 var slotRE = /^v-slot(:|$)|^#/; 74914 var lineBreakRE = /[\r\n]/; 74915 var whitespaceRE = /[ \f\t\r\n]+/g; 74916 var invalidAttributeRE = /[\s"'<>\/=]/; 74917 var decodeHTMLCached = cached(he.decode); 74918 var emptySlotScopeToken = "_empty_"; 74919 // configurable state 74920 var warn; 74921 var delimiters; 74922 var transforms; 74923 var preTransforms; 74924 var postTransforms; 74925 var platformIsPreTag; 74926 var platformMustUseProp; 74927 var platformGetTagNamespace; 74928 var maybeComponent; 74929 function createASTElement(tag, attrs, parent) { 74930 return { 74931 type: 1, 74932 tag: tag, 74933 attrsList: attrs, 74934 attrsMap: makeAttrsMap(attrs), 74935 rawAttrsMap: {}, 74936 parent: parent, 74937 children: [] 74938 }; 74939 } 74940 /** 74941 * Convert HTML string to AST. 74942 */ 74943 function parse(template, options) { 74944 warn = options.warn || baseWarn; 74945 platformIsPreTag = options.isPreTag || no; 74946 platformMustUseProp = options.mustUseProp || no; 74947 platformGetTagNamespace = options.getTagNamespace || no; 74948 var isReservedTag = options.isReservedTag || no; 74949 maybeComponent = function (el) { 74950 return !!(el.component || 74951 el.attrsMap[':is'] || 74952 el.attrsMap['v-bind:is'] || 74953 !(el.attrsMap.is ? isReservedTag(el.attrsMap.is) : isReservedTag(el.tag))); 74954 }; 74955 transforms = pluckModuleFunction(options.modules, 'transformNode'); 74956 preTransforms = pluckModuleFunction(options.modules, 'preTransformNode'); 74957 postTransforms = pluckModuleFunction(options.modules, 'postTransformNode'); 74958 delimiters = options.delimiters; 74959 var stack = []; 74960 var preserveWhitespace = options.preserveWhitespace !== false; 74961 var whitespaceOption = options.whitespace; 74962 var root; 74963 var currentParent; 74964 var inVPre = false; 74965 var inPre = false; 74966 var warned = false; 74967 function warnOnce(msg, range) { 74968 if (!warned) { 74969 warned = true; 74970 warn(msg, range); 74971 } 74972 } 74973 function closeElement(element) { 74974 trimEndingWhitespace(element); 74975 if (!inVPre && !element.processed) { 74976 element = processElement(element, options); 74977 } 74978 // tree management 74979 if (!stack.length && element !== root) { 74980 // allow root elements with v-if, v-else-if and v-else 74981 if (root.if && (element.elseif || element.else)) { 74982 { 74983 checkRootConstraints(element); 74984 } 74985 addIfCondition(root, { 74986 exp: element.elseif, 74987 block: element 74988 }); 74989 } 74990 else { 74991 warnOnce("Component template should contain exactly one root element. " + 74992 "If you are using v-if on multiple elements, " + 74993 "use v-else-if to chain them instead.", { start: element.start }); 74994 } 74995 } 74996 if (currentParent && !element.forbidden) { 74997 if (element.elseif || element.else) { 74998 processIfConditions(element, currentParent); 74999 } 75000 else { 75001 if (element.slotScope) { 75002 // scoped slot 75003 // keep it in the children list so that v-else(-if) conditions can 75004 // find it as the prev node. 75005 var name_1 = element.slotTarget || '"default"'; 75006 (currentParent.scopedSlots || (currentParent.scopedSlots = {}))[name_1] = element; 75007 } 75008 currentParent.children.push(element); 75009 element.parent = currentParent; 75010 } 75011 } 75012 // final children cleanup 75013 // filter out scoped slots 75014 element.children = element.children.filter(function (c) { return !c.slotScope; }); 75015 // remove trailing whitespace node again 75016 trimEndingWhitespace(element); 75017 // check pre state 75018 if (element.pre) { 75019 inVPre = false; 75020 } 75021 if (platformIsPreTag(element.tag)) { 75022 inPre = false; 75023 } 75024 // apply post-transforms 75025 for (var i = 0; i < postTransforms.length; i++) { 75026 postTransforms[i](element, options); 75027 } 75028 } 75029 function trimEndingWhitespace(el) { 75030 // remove trailing whitespace node 75031 if (!inPre) { 75032 var lastNode = void 0; 75033 while ((lastNode = el.children[el.children.length - 1]) && 75034 lastNode.type === 3 && 75035 lastNode.text === ' ') { 75036 el.children.pop(); 75037 } 75038 } 75039 } 75040 function checkRootConstraints(el) { 75041 if (el.tag === 'slot' || el.tag === 'template') { 75042 warnOnce("Cannot use <".concat(el.tag, "> as component root element because it may ") + 75043 'contain multiple nodes.', { start: el.start }); 75044 } 75045 if (el.attrsMap.hasOwnProperty('v-for')) { 75046 warnOnce('Cannot use v-for on stateful component root element because ' + 75047 'it renders multiple elements.', el.rawAttrsMap['v-for']); 75048 } 75049 } 75050 parseHTML(template, { 75051 warn: warn, 75052 expectHTML: options.expectHTML, 75053 isUnaryTag: options.isUnaryTag, 75054 canBeLeftOpenTag: options.canBeLeftOpenTag, 75055 shouldDecodeNewlines: options.shouldDecodeNewlines, 75056 shouldDecodeNewlinesForHref: options.shouldDecodeNewlinesForHref, 75057 shouldKeepComment: options.comments, 75058 outputSourceRange: options.outputSourceRange, 75059 start: function (tag, attrs, unary, start, end) { 75060 // check namespace. 75061 // inherit parent ns if there is one 75062 var ns = (currentParent && currentParent.ns) || platformGetTagNamespace(tag); 75063 // handle IE svg bug 75064 /* istanbul ignore if */ 75065 if (isIE && ns === 'svg') { 75066 attrs = guardIESVGBug(attrs); 75067 } 75068 var element = createASTElement(tag, attrs, currentParent); 75069 if (ns) { 75070 element.ns = ns; 75071 } 75072 { 75073 if (options.outputSourceRange) { 75074 element.start = start; 75075 element.end = end; 75076 element.rawAttrsMap = element.attrsList.reduce(function (cumulated, attr) { 75077 cumulated[attr.name] = attr; 75078 return cumulated; 75079 }, {}); 75080 } 75081 attrs.forEach(function (attr) { 75082 if (invalidAttributeRE.test(attr.name)) { 75083 warn("Invalid dynamic argument expression: attribute names cannot contain " + 75084 "spaces, quotes, <, >, / or =.", options.outputSourceRange 75085 ? { 75086 start: attr.start + attr.name.indexOf("["), 75087 end: attr.start + attr.name.length 75088 } 75089 : undefined); 75090 } 75091 }); 75092 } 75093 if (isForbiddenTag(element) && !isServerRendering()) { 75094 element.forbidden = true; 75095 warn('Templates should only be responsible for mapping the state to the ' + 75096 'UI. Avoid placing tags with side-effects in your templates, such as ' + 75097 "<".concat(tag, ">") + 75098 ', as they will not be parsed.', { start: element.start }); 75099 } 75100 // apply pre-transforms 75101 for (var i = 0; i < preTransforms.length; i++) { 75102 element = preTransforms[i](element, options) || element; 75103 } 75104 if (!inVPre) { 75105 processPre(element); 75106 if (element.pre) { 75107 inVPre = true; 75108 } 75109 } 75110 if (platformIsPreTag(element.tag)) { 75111 inPre = true; 75112 } 75113 if (inVPre) { 75114 processRawAttrs(element); 75115 } 75116 else if (!element.processed) { 75117 // structural directives 75118 processFor(element); 75119 processIf(element); 75120 processOnce(element); 75121 } 75122 if (!root) { 75123 root = element; 75124 { 75125 checkRootConstraints(root); 75126 } 75127 } 75128 if (!unary) { 75129 currentParent = element; 75130 stack.push(element); 75131 } 75132 else { 75133 closeElement(element); 75134 } 75135 }, 75136 end: function (tag, start, end) { 75137 var element = stack[stack.length - 1]; 75138 // pop stack 75139 stack.length -= 1; 75140 currentParent = stack[stack.length - 1]; 75141 if (options.outputSourceRange) { 75142 element.end = end; 75143 } 75144 closeElement(element); 75145 }, 75146 chars: function (text, start, end) { 75147 if (!currentParent) { 75148 { 75149 if (text === template) { 75150 warnOnce('Component template requires a root element, rather than just text.', { start: start }); 75151 } 75152 else if ((text = text.trim())) { 75153 warnOnce("text \"".concat(text, "\" outside root element will be ignored."), { 75154 start: start 75155 }); 75156 } 75157 } 75158 return; 75159 } 75160 // IE textarea placeholder bug 75161 /* istanbul ignore if */ 75162 if (isIE && 75163 currentParent.tag === 'textarea' && 75164 currentParent.attrsMap.placeholder === text) { 75165 return; 75166 } 75167 var children = currentParent.children; 75168 if (inPre || text.trim()) { 75169 text = isTextTag(currentParent) 75170 ? text 75171 : decodeHTMLCached(text); 75172 } 75173 else if (!children.length) { 75174 // remove the whitespace-only node right after an opening tag 75175 text = ''; 75176 } 75177 else if (whitespaceOption) { 75178 if (whitespaceOption === 'condense') { 75179 // in condense mode, remove the whitespace node if it contains 75180 // line break, otherwise condense to a single space 75181 text = lineBreakRE.test(text) ? '' : ' '; 75182 } 75183 else { 75184 text = ' '; 75185 } 75186 } 75187 else { 75188 text = preserveWhitespace ? ' ' : ''; 75189 } 75190 if (text) { 75191 if (!inPre && whitespaceOption === 'condense') { 75192 // condense consecutive whitespaces into single space 75193 text = text.replace(whitespaceRE, ' '); 75194 } 75195 var res = void 0; 75196 var child = void 0; 75197 if (!inVPre && text !== ' ' && (res = parseText(text, delimiters))) { 75198 child = { 75199 type: 2, 75200 expression: res.expression, 75201 tokens: res.tokens, 75202 text: text 75203 }; 75204 } 75205 else if (text !== ' ' || 75206 !children.length || 75207 children[children.length - 1].text !== ' ') { 75208 child = { 75209 type: 3, 75210 text: text 75211 }; 75212 } 75213 if (child) { 75214 if (options.outputSourceRange) { 75215 child.start = start; 75216 child.end = end; 75217 } 75218 children.push(child); 75219 } 75220 } 75221 }, 75222 comment: function (text, start, end) { 75223 // adding anything as a sibling to the root node is forbidden 75224 // comments should still be allowed, but ignored 75225 if (currentParent) { 75226 var child = { 75227 type: 3, 75228 text: text, 75229 isComment: true 75230 }; 75231 if (options.outputSourceRange) { 75232 child.start = start; 75233 child.end = end; 75234 } 75235 currentParent.children.push(child); 75236 } 75237 } 75238 }); 75239 return root; 75240 } 75241 function processPre(el) { 75242 if (getAndRemoveAttr(el, 'v-pre') != null) { 75243 el.pre = true; 75244 } 75245 } 75246 function processRawAttrs(el) { 75247 var list = el.attrsList; 75248 var len = list.length; 75249 if (len) { 75250 var attrs = (el.attrs = new Array(len)); 75251 for (var i = 0; i < len; i++) { 75252 attrs[i] = { 75253 name: list[i].name, 75254 value: JSON.stringify(list[i].value) 75255 }; 75256 if (list[i].start != null) { 75257 attrs[i].start = list[i].start; 75258 attrs[i].end = list[i].end; 75259 } 75260 } 75261 } 75262 else if (!el.pre) { 75263 // non root node in pre blocks with no attributes 75264 el.plain = true; 75265 } 75266 } 75267 function processElement(element, options) { 75268 processKey(element); 75269 // determine whether this is a plain element after 75270 // removing structural attributes 75271 element.plain = 75272 !element.key && !element.scopedSlots && !element.attrsList.length; 75273 processRef(element); 75274 processSlotContent(element); 75275 processSlotOutlet(element); 75276 processComponent(element); 75277 for (var i = 0; i < transforms.length; i++) { 75278 element = transforms[i](element, options) || element; 75279 } 75280 processAttrs(element); 75281 return element; 75282 } 75283 function processKey(el) { 75284 var exp = getBindingAttr(el, 'key'); 75285 if (exp) { 75286 { 75287 if (el.tag === 'template') { 75288 warn("<template> cannot be keyed. Place the key on real elements instead.", getRawBindingAttr(el, 'key')); 75289 } 75290 if (el.for) { 75291 var iterator = el.iterator2 || el.iterator1; 75292 var parent_1 = el.parent; 75293 if (iterator && 75294 iterator === exp && 75295 parent_1 && 75296 parent_1.tag === 'transition-group') { 75297 warn("Do not use v-for index as key on <transition-group> children, " + 75298 "this is the same as not using keys.", getRawBindingAttr(el, 'key'), true /* tip */); 75299 } 75300 } 75301 } 75302 el.key = exp; 75303 } 75304 } 75305 function processRef(el) { 75306 var ref = getBindingAttr(el, 'ref'); 75307 if (ref) { 75308 el.ref = ref; 75309 el.refInFor = checkInFor(el); 75310 } 75311 } 75312 function processFor(el) { 75313 var exp; 75314 if ((exp = getAndRemoveAttr(el, 'v-for'))) { 75315 var res = parseFor(exp); 75316 if (res) { 75317 extend(el, res); 75318 } 75319 else { 75320 warn("Invalid v-for expression: ".concat(exp), el.rawAttrsMap['v-for']); 75321 } 75322 } 75323 } 75324 function parseFor(exp) { 75325 var inMatch = exp.match(forAliasRE); 75326 if (!inMatch) 75327 return; 75328 var res = {}; 75329 res.for = inMatch[2].trim(); 75330 var alias = inMatch[1].trim().replace(stripParensRE, ''); 75331 var iteratorMatch = alias.match(forIteratorRE); 75332 if (iteratorMatch) { 75333 res.alias = alias.replace(forIteratorRE, '').trim(); 75334 res.iterator1 = iteratorMatch[1].trim(); 75335 if (iteratorMatch[2]) { 75336 res.iterator2 = iteratorMatch[2].trim(); 75337 } 75338 } 75339 else { 75340 res.alias = alias; 75341 } 75342 return res; 75343 } 75344 function processIf(el) { 75345 var exp = getAndRemoveAttr(el, 'v-if'); 75346 if (exp) { 75347 el.if = exp; 75348 addIfCondition(el, { 75349 exp: exp, 75350 block: el 75351 }); 75352 } 75353 else { 75354 if (getAndRemoveAttr(el, 'v-else') != null) { 75355 el.else = true; 75356 } 75357 var elseif = getAndRemoveAttr(el, 'v-else-if'); 75358 if (elseif) { 75359 el.elseif = elseif; 75360 } 75361 } 75362 } 75363 function processIfConditions(el, parent) { 75364 var prev = findPrevElement(parent.children); 75365 if (prev && prev.if) { 75366 addIfCondition(prev, { 75367 exp: el.elseif, 75368 block: el 75369 }); 75370 } 75371 else { 75372 warn("v-".concat(el.elseif ? 'else-if="' + el.elseif + '"' : 'else', " ") + 75373 "used on element <".concat(el.tag, "> without corresponding v-if."), el.rawAttrsMap[el.elseif ? 'v-else-if' : 'v-else']); 75374 } 75375 } 75376 function findPrevElement(children) { 75377 var i = children.length; 75378 while (i--) { 75379 if (children[i].type === 1) { 75380 return children[i]; 75381 } 75382 else { 75383 if (children[i].text !== ' ') { 75384 warn("text \"".concat(children[i].text.trim(), "\" between v-if and v-else(-if) ") + 75385 "will be ignored.", children[i]); 75386 } 75387 children.pop(); 75388 } 75389 } 75390 } 75391 function addIfCondition(el, condition) { 75392 if (!el.ifConditions) { 75393 el.ifConditions = []; 75394 } 75395 el.ifConditions.push(condition); 75396 } 75397 function processOnce(el) { 75398 var once = getAndRemoveAttr(el, 'v-once'); 75399 if (once != null) { 75400 el.once = true; 75401 } 75402 } 75403 // handle content being passed to a component as slot, 75404 // e.g. <template slot="xxx">, <div slot-scope="xxx"> 75405 function processSlotContent(el) { 75406 var slotScope; 75407 if (el.tag === 'template') { 75408 slotScope = getAndRemoveAttr(el, 'scope'); 75409 /* istanbul ignore if */ 75410 if (slotScope) { 75411 warn("the \"scope\" attribute for scoped slots have been deprecated and " + 75412 "replaced by \"slot-scope\" since 2.5. The new \"slot-scope\" attribute " + 75413 "can also be used on plain elements in addition to <template> to " + 75414 "denote scoped slots.", el.rawAttrsMap['scope'], true); 75415 } 75416 el.slotScope = slotScope || getAndRemoveAttr(el, 'slot-scope'); 75417 } 75418 else if ((slotScope = getAndRemoveAttr(el, 'slot-scope'))) { 75419 /* istanbul ignore if */ 75420 if (el.attrsMap['v-for']) { 75421 warn("Ambiguous combined usage of slot-scope and v-for on <".concat(el.tag, "> ") + 75422 "(v-for takes higher priority). Use a wrapper <template> for the " + 75423 "scoped slot to make it clearer.", el.rawAttrsMap['slot-scope'], true); 75424 } 75425 el.slotScope = slotScope; 75426 } 75427 // slot="xxx" 75428 var slotTarget = getBindingAttr(el, 'slot'); 75429 if (slotTarget) { 75430 el.slotTarget = slotTarget === '""' ? '"default"' : slotTarget; 75431 el.slotTargetDynamic = !!(el.attrsMap[':slot'] || el.attrsMap['v-bind:slot']); 75432 // preserve slot as an attribute for native shadow DOM compat 75433 // only for non-scoped slots. 75434 if (el.tag !== 'template' && !el.slotScope) { 75435 addAttr(el, 'slot', slotTarget, getRawBindingAttr(el, 'slot')); 75436 } 75437 } 75438 // 2.6 v-slot syntax 75439 { 75440 if (el.tag === 'template') { 75441 // v-slot on <template> 75442 var slotBinding = getAndRemoveAttrByRegex(el, slotRE); 75443 if (slotBinding) { 75444 { 75445 if (el.slotTarget || el.slotScope) { 75446 warn("Unexpected mixed usage of different slot syntaxes.", el); 75447 } 75448 if (el.parent && !maybeComponent(el.parent)) { 75449 warn("<template v-slot> can only appear at the root level inside " + 75450 "the receiving component", el); 75451 } 75452 } 75453 var _a = getSlotName(slotBinding), name_2 = _a.name, dynamic = _a.dynamic; 75454 el.slotTarget = name_2; 75455 el.slotTargetDynamic = dynamic; 75456 el.slotScope = slotBinding.value || emptySlotScopeToken; // force it into a scoped slot for perf 75457 } 75458 } 75459 else { 75460 // v-slot on component, denotes default slot 75461 var slotBinding = getAndRemoveAttrByRegex(el, slotRE); 75462 if (slotBinding) { 75463 { 75464 if (!maybeComponent(el)) { 75465 warn("v-slot can only be used on components or <template>.", slotBinding); 75466 } 75467 if (el.slotScope || el.slotTarget) { 75468 warn("Unexpected mixed usage of different slot syntaxes.", el); 75469 } 75470 if (el.scopedSlots) { 75471 warn("To avoid scope ambiguity, the default slot should also use " + 75472 "<template> syntax when there are other named slots.", slotBinding); 75473 } 75474 } 75475 // add the component's children to its default slot 75476 var slots = el.scopedSlots || (el.scopedSlots = {}); 75477 var _b = getSlotName(slotBinding), name_3 = _b.name, dynamic = _b.dynamic; 75478 var slotContainer_1 = (slots[name_3] = createASTElement('template', [], el)); 75479 slotContainer_1.slotTarget = name_3; 75480 slotContainer_1.slotTargetDynamic = dynamic; 75481 slotContainer_1.children = el.children.filter(function (c) { 75482 if (!c.slotScope) { 75483 c.parent = slotContainer_1; 75484 return true; 75485 } 75486 }); 75487 slotContainer_1.slotScope = slotBinding.value || emptySlotScopeToken; 75488 // remove children as they are returned from scopedSlots now 75489 el.children = []; 75490 // mark el non-plain so data gets generated 75491 el.plain = false; 75492 } 75493 } 75494 } 75495 } 75496 function getSlotName(binding) { 75497 var name = binding.name.replace(slotRE, ''); 75498 if (!name) { 75499 if (binding.name[0] !== '#') { 75500 name = 'default'; 75501 } 75502 else { 75503 warn("v-slot shorthand syntax requires a slot name.", binding); 75504 } 75505 } 75506 return dynamicArgRE.test(name) 75507 ? // dynamic [name] 75508 { name: name.slice(1, -1), dynamic: true } 75509 : // static name 75510 { name: "\"".concat(name, "\""), dynamic: false }; 75511 } 75512 // handle <slot/> outlets 75513 function processSlotOutlet(el) { 75514 if (el.tag === 'slot') { 75515 el.slotName = getBindingAttr(el, 'name'); 75516 if (el.key) { 75517 warn("`key` does not work on <slot> because slots are abstract outlets " + 75518 "and can possibly expand into multiple elements. " + 75519 "Use the key on a wrapping element instead.", getRawBindingAttr(el, 'key')); 75520 } 75521 } 75522 } 75523 function processComponent(el) { 75524 var binding; 75525 if ((binding = getBindingAttr(el, 'is'))) { 75526 el.component = binding; 75527 } 75528 if (getAndRemoveAttr(el, 'inline-template') != null) { 75529 el.inlineTemplate = true; 75530 } 75531 } 75532 function processAttrs(el) { 75533 var list = el.attrsList; 75534 var i, l, name, rawName, value, modifiers, syncGen, isDynamic; 75535 for (i = 0, l = list.length; i < l; i++) { 75536 name = rawName = list[i].name; 75537 value = list[i].value; 75538 if (dirRE.test(name)) { 75539 // mark element as dynamic 75540 el.hasBindings = true; 75541 // modifiers 75542 modifiers = parseModifiers(name.replace(dirRE, '')); 75543 // support .foo shorthand syntax for the .prop modifier 75544 if (modifiers) { 75545 name = name.replace(modifierRE, ''); 75546 } 75547 if (bindRE.test(name)) { 75548 // v-bind 75549 name = name.replace(bindRE, ''); 75550 value = parseFilters(value); 75551 isDynamic = dynamicArgRE.test(name); 75552 if (isDynamic) { 75553 name = name.slice(1, -1); 75554 } 75555 if (value.trim().length === 0) { 75556 warn("The value for a v-bind expression cannot be empty. Found in \"v-bind:".concat(name, "\"")); 75557 } 75558 if (modifiers) { 75559 if (modifiers.prop && !isDynamic) { 75560 name = camelize(name); 75561 if (name === 'innerHtml') 75562 name = 'innerHTML'; 75563 } 75564 if (modifiers.camel && !isDynamic) { 75565 name = camelize(name); 75566 } 75567 if (modifiers.sync) { 75568 syncGen = genAssignmentCode(value, "$event"); 75569 if (!isDynamic) { 75570 addHandler(el, "update:".concat(camelize(name)), syncGen, null, false, warn, list[i]); 75571 if (hyphenate(name) !== camelize(name)) { 75572 addHandler(el, "update:".concat(hyphenate(name)), syncGen, null, false, warn, list[i]); 75573 } 75574 } 75575 else { 75576 // handler w/ dynamic event name 75577 addHandler(el, "\"update:\"+(".concat(name, ")"), syncGen, null, false, warn, list[i], true // dynamic 75578 ); 75579 } 75580 } 75581 } 75582 if ((modifiers && modifiers.prop) || 75583 (!el.component && platformMustUseProp(el.tag, el.attrsMap.type, name))) { 75584 addProp(el, name, value, list[i], isDynamic); 75585 } 75586 else { 75587 addAttr(el, name, value, list[i], isDynamic); 75588 } 75589 } 75590 else if (onRE.test(name)) { 75591 // v-on 75592 name = name.replace(onRE, ''); 75593 isDynamic = dynamicArgRE.test(name); 75594 if (isDynamic) { 75595 name = name.slice(1, -1); 75596 } 75597 addHandler(el, name, value, modifiers, false, warn, list[i], isDynamic); 75598 } 75599 else { 75600 // normal directives 75601 name = name.replace(dirRE, ''); 75602 // parse arg 75603 var argMatch = name.match(argRE); 75604 var arg = argMatch && argMatch[1]; 75605 isDynamic = false; 75606 if (arg) { 75607 name = name.slice(0, -(arg.length + 1)); 75608 if (dynamicArgRE.test(arg)) { 75609 arg = arg.slice(1, -1); 75610 isDynamic = true; 75611 } 75612 } 75613 addDirective(el, name, rawName, value, arg, isDynamic, modifiers, list[i]); 75614 if (name === 'model') { 75615 checkForAliasModel(el, value); 75616 } 75617 } 75618 } 75619 else { 75620 // literal attribute 75621 { 75622 var res = parseText(value, delimiters); 75623 if (res) { 75624 warn("".concat(name, "=\"").concat(value, "\": ") + 75625 'Interpolation inside attributes has been removed. ' + 75626 'Use v-bind or the colon shorthand instead. For example, ' + 75627 'instead of <div id="{{ val }}">, use <div :id="val">.', list[i]); 75628 } 75629 } 75630 addAttr(el, name, JSON.stringify(value), list[i]); 75631 // #6887 firefox doesn't update muted state if set via attribute 75632 // even immediately after element creation 75633 if (!el.component && 75634 name === 'muted' && 75635 platformMustUseProp(el.tag, el.attrsMap.type, name)) { 75636 addProp(el, name, 'true', list[i]); 75637 } 75638 } 75639 } 75640 } 75641 function checkInFor(el) { 75642 var parent = el; 75643 while (parent) { 75644 if (parent.for !== undefined) { 75645 return true; 75646 } 75647 parent = parent.parent; 75648 } 75649 return false; 75650 } 75651 function parseModifiers(name) { 75652 var match = name.match(modifierRE); 75653 if (match) { 75654 var ret_1 = {}; 75655 match.forEach(function (m) { 75656 ret_1[m.slice(1)] = true; 75657 }); 75658 return ret_1; 75659 } 75660 } 75661 function makeAttrsMap(attrs) { 75662 var map = {}; 75663 for (var i = 0, l = attrs.length; i < l; i++) { 75664 if (map[attrs[i].name] && !isIE && !isEdge) { 75665 warn('duplicate attribute: ' + attrs[i].name, attrs[i]); 75666 } 75667 map[attrs[i].name] = attrs[i].value; 75668 } 75669 return map; 75670 } 75671 // for script (e.g. type="x/template") or style, do not decode content 75672 function isTextTag(el) { 75673 return el.tag === 'script' || el.tag === 'style'; 75674 } 75675 function isForbiddenTag(el) { 75676 return (el.tag === 'style' || 75677 (el.tag === 'script' && 75678 (!el.attrsMap.type || el.attrsMap.type === 'text/javascript'))); 75679 } 75680 var ieNSBug = /^xmlns:NS\d+/; 75681 var ieNSPrefix = /^NS\d+:/; 75682 /* istanbul ignore next */ 75683 function guardIESVGBug(attrs) { 75684 var res = []; 75685 for (var i = 0; i < attrs.length; i++) { 75686 var attr = attrs[i]; 75687 if (!ieNSBug.test(attr.name)) { 75688 attr.name = attr.name.replace(ieNSPrefix, ''); 75689 res.push(attr); 75690 } 75691 } 75692 return res; 75693 } 75694 function checkForAliasModel(el, value) { 75695 var _el = el; 75696 while (_el) { 75697 if (_el.for && _el.alias === value) { 75698 warn("<".concat(el.tag, " v-model=\"").concat(value, "\">: ") + 75699 "You are binding v-model directly to a v-for iteration alias. " + 75700 "This will not be able to modify the v-for source array because " + 75701 "writing to the alias is like modifying a function local variable. " + 75702 "Consider using an array of objects and use v-model on an object property instead.", el.rawAttrsMap['v-model']); 75703 } 75704 _el = _el.parent; 75705 } 75706 } 75707 75708 /** 75709 * Expand input[v-model] with dynamic type bindings into v-if-else chains 75710 * Turn this: 75711 * <input v-model="data[type]" :type="type"> 75712 * into this: 75713 * <input v-if="type === 'checkbox'" type="checkbox" v-model="data[type]"> 75714 * <input v-else-if="type === 'radio'" type="radio" v-model="data[type]"> 75715 * <input v-else :type="type" v-model="data[type]"> 75716 */ 75717 function preTransformNode(el, options) { 75718 if (el.tag === 'input') { 75719 var map = el.attrsMap; 75720 if (!map['v-model']) { 75721 return; 75722 } 75723 var typeBinding = void 0; 75724 if (map[':type'] || map['v-bind:type']) { 75725 typeBinding = getBindingAttr(el, 'type'); 75726 } 75727 if (!map.type && !typeBinding && map['v-bind']) { 75728 typeBinding = "(".concat(map['v-bind'], ").type"); 75729 } 75730 if (typeBinding) { 75731 var ifCondition = getAndRemoveAttr(el, 'v-if', true); 75732 var ifConditionExtra = ifCondition ? "&&(".concat(ifCondition, ")") : ""; 75733 var hasElse = getAndRemoveAttr(el, 'v-else', true) != null; 75734 var elseIfCondition = getAndRemoveAttr(el, 'v-else-if', true); 75735 // 1. checkbox 75736 var branch0 = cloneASTElement(el); 75737 // process for on the main node 75738 processFor(branch0); 75739 addRawAttr(branch0, 'type', 'checkbox'); 75740 processElement(branch0, options); 75741 branch0.processed = true; // prevent it from double-processed 75742 branch0.if = "(".concat(typeBinding, ")==='checkbox'") + ifConditionExtra; 75743 addIfCondition(branch0, { 75744 exp: branch0.if, 75745 block: branch0 75746 }); 75747 // 2. add radio else-if condition 75748 var branch1 = cloneASTElement(el); 75749 getAndRemoveAttr(branch1, 'v-for', true); 75750 addRawAttr(branch1, 'type', 'radio'); 75751 processElement(branch1, options); 75752 addIfCondition(branch0, { 75753 exp: "(".concat(typeBinding, ")==='radio'") + ifConditionExtra, 75754 block: branch1 75755 }); 75756 // 3. other 75757 var branch2 = cloneASTElement(el); 75758 getAndRemoveAttr(branch2, 'v-for', true); 75759 addRawAttr(branch2, ':type', typeBinding); 75760 processElement(branch2, options); 75761 addIfCondition(branch0, { 75762 exp: ifCondition, 75763 block: branch2 75764 }); 75765 if (hasElse) { 75766 branch0.else = true; 75767 } 75768 else if (elseIfCondition) { 75769 branch0.elseif = elseIfCondition; 75770 } 75771 return branch0; 75772 } 75773 } 75774 } 75775 function cloneASTElement(el) { 75776 return createASTElement(el.tag, el.attrsList.slice(), el.parent); 75777 } 75778 var model = { 75779 preTransformNode: preTransformNode 75780 }; 75781 75782 var modules = [klass, style, model]; 75783 75784 function text(el, dir) { 75785 if (dir.value) { 75786 addProp(el, 'textContent', "_s(".concat(dir.value, ")"), dir); 75787 } 75788 } 75789 75790 function html(el, dir) { 75791 if (dir.value) { 75792 addProp(el, 'innerHTML', "_s(".concat(dir.value, ")"), dir); 75793 } 75794 } 75795 75796 var directives = { 75797 model: model$1, 75798 text: text, 75799 html: html 75800 }; 75801 75802 var baseOptions = { 75803 expectHTML: true, 75804 modules: modules, 75805 directives: directives, 75806 isPreTag: isPreTag, 75807 isUnaryTag: isUnaryTag, 75808 mustUseProp: mustUseProp, 75809 canBeLeftOpenTag: canBeLeftOpenTag, 75810 isReservedTag: isReservedTag, 75811 getTagNamespace: getTagNamespace, 75812 staticKeys: genStaticKeys$1(modules) 75813 }; 75814 75815 var isStaticKey; 75816 var isPlatformReservedTag; 75817 var genStaticKeysCached = cached(genStaticKeys); 75818 /** 75819 * Goal of the optimizer: walk the generated template AST tree 75820 * and detect sub-trees that are purely static, i.e. parts of 75821 * the DOM that never needs to change. 75822 * 75823 * Once we detect these sub-trees, we can: 75824 * 75825 * 1. Hoist them into constants, so that we no longer need to 75826 * create fresh nodes for them on each re-render; 75827 * 2. Completely skip them in the patching process. 75828 */ 75829 function optimize(root, options) { 75830 if (!root) 75831 return; 75832 isStaticKey = genStaticKeysCached(options.staticKeys || ''); 75833 isPlatformReservedTag = options.isReservedTag || no; 75834 // first pass: mark all non-static nodes. 75835 markStatic(root); 75836 // second pass: mark static roots. 75837 markStaticRoots(root, false); 75838 } 75839 function genStaticKeys(keys) { 75840 return makeMap('type,tag,attrsList,attrsMap,plain,parent,children,attrs,start,end,rawAttrsMap' + 75841 (keys ? ',' + keys : '')); 75842 } 75843 function markStatic(node) { 75844 node.static = isStatic(node); 75845 if (node.type === 1) { 75846 // do not make component slot content static. this avoids 75847 // 1. components not able to mutate slot nodes 75848 // 2. static slot content fails for hot-reloading 75849 if (!isPlatformReservedTag(node.tag) && 75850 node.tag !== 'slot' && 75851 node.attrsMap['inline-template'] == null) { 75852 return; 75853 } 75854 for (var i = 0, l = node.children.length; i < l; i++) { 75855 var child = node.children[i]; 75856 markStatic(child); 75857 if (!child.static) { 75858 node.static = false; 75859 } 75860 } 75861 if (node.ifConditions) { 75862 for (var i = 1, l = node.ifConditions.length; i < l; i++) { 75863 var block = node.ifConditions[i].block; 75864 markStatic(block); 75865 if (!block.static) { 75866 node.static = false; 75867 } 75868 } 75869 } 75870 } 75871 } 75872 function markStaticRoots(node, isInFor) { 75873 if (node.type === 1) { 75874 if (node.static || node.once) { 75875 node.staticInFor = isInFor; 75876 } 75877 // For a node to qualify as a static root, it should have children that 75878 // are not just static text. Otherwise the cost of hoisting out will 75879 // outweigh the benefits and it's better off to just always render it fresh. 75880 if (node.static && 75881 node.children.length && 75882 !(node.children.length === 1 && node.children[0].type === 3)) { 75883 node.staticRoot = true; 75884 return; 75885 } 75886 else { 75887 node.staticRoot = false; 75888 } 75889 if (node.children) { 75890 for (var i = 0, l = node.children.length; i < l; i++) { 75891 markStaticRoots(node.children[i], isInFor || !!node.for); 75892 } 75893 } 75894 if (node.ifConditions) { 75895 for (var i = 1, l = node.ifConditions.length; i < l; i++) { 75896 markStaticRoots(node.ifConditions[i].block, isInFor); 75897 } 75898 } 75899 } 75900 } 75901 function isStatic(node) { 75902 if (node.type === 2) { 75903 // expression 75904 return false; 75905 } 75906 if (node.type === 3) { 75907 // text 75908 return true; 75909 } 75910 return !!(node.pre || 75911 (!node.hasBindings && // no dynamic bindings 75912 !node.if && 75913 !node.for && // not v-if or v-for or v-else 75914 !isBuiltInTag(node.tag) && // not a built-in 75915 isPlatformReservedTag(node.tag) && // not a component 75916 !isDirectChildOfTemplateFor(node) && 75917 Object.keys(node).every(isStaticKey))); 75918 } 75919 function isDirectChildOfTemplateFor(node) { 75920 while (node.parent) { 75921 node = node.parent; 75922 if (node.tag !== 'template') { 75923 return false; 75924 } 75925 if (node.for) { 75926 return true; 75927 } 75928 } 75929 return false; 75930 } 75931 75932 var fnExpRE = /^([\w$_]+|\([^)]*?\))\s*=>|^function(?:\s+[\w$]+)?\s*\(/; 75933 var fnInvokeRE = /\([^)]*?\);*$/; 75934 var simplePathRE = /^[A-Za-z_$][\w$]*(?:\.[A-Za-z_$][\w$]*|\['[^']*?']|\["[^"]*?"]|\[\d+]|\[[A-Za-z_$][\w$]*])*$/; 75935 // KeyboardEvent.keyCode aliases 75936 var keyCodes = { 75937 esc: 27, 75938 tab: 9, 75939 enter: 13, 75940 space: 32, 75941 up: 38, 75942 left: 37, 75943 right: 39, 75944 down: 40, 75945 delete: [8, 46] 75946 }; 75947 // KeyboardEvent.key aliases 75948 var keyNames = { 75949 // #7880: IE11 and Edge use `Esc` for Escape key name. 75950 esc: ['Esc', 'Escape'], 75951 tab: 'Tab', 75952 enter: 'Enter', 75953 // #9112: IE11 uses `Spacebar` for Space key name. 75954 space: [' ', 'Spacebar'], 75955 // #7806: IE11 uses key names without `Arrow` prefix for arrow keys. 75956 up: ['Up', 'ArrowUp'], 75957 left: ['Left', 'ArrowLeft'], 75958 right: ['Right', 'ArrowRight'], 75959 down: ['Down', 'ArrowDown'], 75960 // #9112: IE11 uses `Del` for Delete key name. 75961 delete: ['Backspace', 'Delete', 'Del'] 75962 }; 75963 // #4868: modifiers that prevent the execution of the listener 75964 // need to explicitly return null so that we can determine whether to remove 75965 // the listener for .once 75966 var genGuard = function (condition) { return "if(".concat(condition, ")return null;"); }; 75967 var modifierCode = { 75968 stop: '$event.stopPropagation();', 75969 prevent: '$event.preventDefault();', 75970 self: genGuard("$event.target !== $event.currentTarget"), 75971 ctrl: genGuard("!$event.ctrlKey"), 75972 shift: genGuard("!$event.shiftKey"), 75973 alt: genGuard("!$event.altKey"), 75974 meta: genGuard("!$event.metaKey"), 75975 left: genGuard("'button' in $event && $event.button !== 0"), 75976 middle: genGuard("'button' in $event && $event.button !== 1"), 75977 right: genGuard("'button' in $event && $event.button !== 2") 75978 }; 75979 function genHandlers(events, isNative) { 75980 var prefix = isNative ? 'nativeOn:' : 'on:'; 75981 var staticHandlers = ""; 75982 var dynamicHandlers = ""; 75983 for (var name_1 in events) { 75984 var handlerCode = genHandler(events[name_1]); 75985 //@ts-expect-error 75986 if (events[name_1] && events[name_1].dynamic) { 75987 dynamicHandlers += "".concat(name_1, ",").concat(handlerCode, ","); 75988 } 75989 else { 75990 staticHandlers += "\"".concat(name_1, "\":").concat(handlerCode, ","); 75991 } 75992 } 75993 staticHandlers = "{".concat(staticHandlers.slice(0, -1), "}"); 75994 if (dynamicHandlers) { 75995 return prefix + "_d(".concat(staticHandlers, ",[").concat(dynamicHandlers.slice(0, -1), "])"); 75996 } 75997 else { 75998 return prefix + staticHandlers; 75999 } 76000 } 76001 function genHandler(handler) { 76002 if (!handler) { 76003 return 'function(){}'; 76004 } 76005 if (Array.isArray(handler)) { 76006 return "[".concat(handler.map(function (handler) { return genHandler(handler); }).join(','), "]"); 76007 } 76008 var isMethodPath = simplePathRE.test(handler.value); 76009 var isFunctionExpression = fnExpRE.test(handler.value); 76010 var isFunctionInvocation = simplePathRE.test(handler.value.replace(fnInvokeRE, '')); 76011 if (!handler.modifiers) { 76012 if (isMethodPath || isFunctionExpression) { 76013 return handler.value; 76014 } 76015 return "function($event){".concat(isFunctionInvocation ? "return ".concat(handler.value) : handler.value, "}"); // inline statement 76016 } 76017 else { 76018 var code = ''; 76019 var genModifierCode = ''; 76020 var keys = []; 76021 var _loop_1 = function (key) { 76022 if (modifierCode[key]) { 76023 genModifierCode += modifierCode[key]; 76024 // left/right 76025 if (keyCodes[key]) { 76026 keys.push(key); 76027 } 76028 } 76029 else if (key === 'exact') { 76030 var modifiers_1 = handler.modifiers; 76031 genModifierCode += genGuard(['ctrl', 'shift', 'alt', 'meta'] 76032 .filter(function (keyModifier) { return !modifiers_1[keyModifier]; }) 76033 .map(function (keyModifier) { return "$event.".concat(keyModifier, "Key"); }) 76034 .join('||')); 76035 } 76036 else { 76037 keys.push(key); 76038 } 76039 }; 76040 for (var key in handler.modifiers) { 76041 _loop_1(key); 76042 } 76043 if (keys.length) { 76044 code += genKeyFilter(keys); 76045 } 76046 // Make sure modifiers like prevent and stop get executed after key filtering 76047 if (genModifierCode) { 76048 code += genModifierCode; 76049 } 76050 var handlerCode = isMethodPath 76051 ? "return ".concat(handler.value, ".apply(null, arguments)") 76052 : isFunctionExpression 76053 ? "return (".concat(handler.value, ").apply(null, arguments)") 76054 : isFunctionInvocation 76055 ? "return ".concat(handler.value) 76056 : handler.value; 76057 return "function($event){".concat(code).concat(handlerCode, "}"); 76058 } 76059 } 76060 function genKeyFilter(keys) { 76061 return ( 76062 // make sure the key filters only apply to KeyboardEvents 76063 // #9441: can't use 'keyCode' in $event because Chrome autofill fires fake 76064 // key events that do not have keyCode property... 76065 "if(!$event.type.indexOf('key')&&" + 76066 "".concat(keys.map(genFilterCode).join('&&'), ")return null;")); 76067 } 76068 function genFilterCode(key) { 76069 var keyVal = parseInt(key, 10); 76070 if (keyVal) { 76071 return "$event.keyCode!==".concat(keyVal); 76072 } 76073 var keyCode = keyCodes[key]; 76074 var keyName = keyNames[key]; 76075 return ("_k($event.keyCode," + 76076 "".concat(JSON.stringify(key), ",") + 76077 "".concat(JSON.stringify(keyCode), ",") + 76078 "$event.key," + 76079 "".concat(JSON.stringify(keyName)) + 76080 ")"); 76081 } 76082 76083 function on(el, dir) { 76084 if (dir.modifiers) { 76085 warn$2("v-on without argument does not support modifiers."); 76086 } 76087 el.wrapListeners = function (code) { return "_g(".concat(code, ",").concat(dir.value, ")"); }; 76088 } 76089 76090 function bind(el, dir) { 76091 el.wrapData = function (code) { 76092 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' : '', ")"); 76093 }; 76094 } 76095 76096 var baseDirectives = { 76097 on: on, 76098 bind: bind, 76099 cloak: noop 76100 }; 76101 76102 var CodegenState = /** @class */ (function () { 76103 function CodegenState(options) { 76104 this.options = options; 76105 this.warn = options.warn || baseWarn; 76106 this.transforms = pluckModuleFunction(options.modules, 'transformCode'); 76107 this.dataGenFns = pluckModuleFunction(options.modules, 'genData'); 76108 this.directives = extend(extend({}, baseDirectives), options.directives); 76109 var isReservedTag = options.isReservedTag || no; 76110 this.maybeComponent = function (el) { 76111 return !!el.component || !isReservedTag(el.tag); 76112 }; 76113 this.onceId = 0; 76114 this.staticRenderFns = []; 76115 this.pre = false; 76116 } 76117 return CodegenState; 76118 }()); 76119 function generate(ast, options) { 76120 var state = new CodegenState(options); 76121 // fix #11483, Root level <script> tags should not be rendered. 76122 var code = ast 76123 ? ast.tag === 'script' 76124 ? 'null' 76125 : genElement(ast, state) 76126 : '_c("div")'; 76127 return { 76128 render: "with(this){return ".concat(code, "}"), 76129 staticRenderFns: state.staticRenderFns 76130 }; 76131 } 76132 function genElement(el, state) { 76133 if (el.parent) { 76134 el.pre = el.pre || el.parent.pre; 76135 } 76136 if (el.staticRoot && !el.staticProcessed) { 76137 return genStatic(el, state); 76138 } 76139 else if (el.once && !el.onceProcessed) { 76140 return genOnce(el, state); 76141 } 76142 else if (el.for && !el.forProcessed) { 76143 return genFor(el, state); 76144 } 76145 else if (el.if && !el.ifProcessed) { 76146 return genIf(el, state); 76147 } 76148 else if (el.tag === 'template' && !el.slotTarget && !state.pre) { 76149 return genChildren(el, state) || 'void 0'; 76150 } 76151 else if (el.tag === 'slot') { 76152 return genSlot(el, state); 76153 } 76154 else { 76155 // component or element 76156 var code = void 0; 76157 if (el.component) { 76158 code = genComponent(el.component, el, state); 76159 } 76160 else { 76161 var data = void 0; 76162 var maybeComponent = state.maybeComponent(el); 76163 if (!el.plain || (el.pre && maybeComponent)) { 76164 data = genData(el, state); 76165 } 76166 var tag 76167 // check if this is a component in <script setup> 76168 = void 0; 76169 // check if this is a component in <script setup> 76170 var bindings = state.options.bindings; 76171 if (maybeComponent && bindings && bindings.__isScriptSetup !== false) { 76172 tag = checkBindingType(bindings, el.tag); 76173 } 76174 if (!tag) 76175 tag = "'".concat(el.tag, "'"); 76176 var children = el.inlineTemplate ? null : genChildren(el, state, true); 76177 code = "_c(".concat(tag).concat(data ? ",".concat(data) : '' // data 76178 ).concat(children ? ",".concat(children) : '' // children 76179 , ")"); 76180 } 76181 // module transforms 76182 for (var i = 0; i < state.transforms.length; i++) { 76183 code = state.transforms[i](el, code); 76184 } 76185 return code; 76186 } 76187 } 76188 function checkBindingType(bindings, key) { 76189 var camelName = camelize(key); 76190 var PascalName = capitalize(camelName); 76191 var checkType = function (type) { 76192 if (bindings[key] === type) { 76193 return key; 76194 } 76195 if (bindings[camelName] === type) { 76196 return camelName; 76197 } 76198 if (bindings[PascalName] === type) { 76199 return PascalName; 76200 } 76201 }; 76202 var fromConst = checkType("setup-const" /* BindingTypes.SETUP_CONST */) || 76203 checkType("setup-reactive-const" /* BindingTypes.SETUP_REACTIVE_CONST */); 76204 if (fromConst) { 76205 return fromConst; 76206 } 76207 var fromMaybeRef = checkType("setup-let" /* BindingTypes.SETUP_LET */) || 76208 checkType("setup-ref" /* BindingTypes.SETUP_REF */) || 76209 checkType("setup-maybe-ref" /* BindingTypes.SETUP_MAYBE_REF */); 76210 if (fromMaybeRef) { 76211 return fromMaybeRef; 76212 } 76213 } 76214 // hoist static sub-trees out 76215 function genStatic(el, state) { 76216 el.staticProcessed = true; 76217 // Some elements (templates) need to behave differently inside of a v-pre 76218 // node. All pre nodes are static roots, so we can use this as a location to 76219 // wrap a state change and reset it upon exiting the pre node. 76220 var originalPreState = state.pre; 76221 if (el.pre) { 76222 state.pre = el.pre; 76223 } 76224 state.staticRenderFns.push("with(this){return ".concat(genElement(el, state), "}")); 76225 state.pre = originalPreState; 76226 return "_m(".concat(state.staticRenderFns.length - 1).concat(el.staticInFor ? ',true' : '', ")"); 76227 } 76228 // v-once 76229 function genOnce(el, state) { 76230 el.onceProcessed = true; 76231 if (el.if && !el.ifProcessed) { 76232 return genIf(el, state); 76233 } 76234 else if (el.staticInFor) { 76235 var key = ''; 76236 var parent_1 = el.parent; 76237 while (parent_1) { 76238 if (parent_1.for) { 76239 key = parent_1.key; 76240 break; 76241 } 76242 parent_1 = parent_1.parent; 76243 } 76244 if (!key) { 76245 state.warn("v-once can only be used inside v-for that is keyed. ", el.rawAttrsMap['v-once']); 76246 return genElement(el, state); 76247 } 76248 return "_o(".concat(genElement(el, state), ",").concat(state.onceId++, ",").concat(key, ")"); 76249 } 76250 else { 76251 return genStatic(el, state); 76252 } 76253 } 76254 function genIf(el, state, altGen, altEmpty) { 76255 el.ifProcessed = true; // avoid recursion 76256 return genIfConditions(el.ifConditions.slice(), state, altGen, altEmpty); 76257 } 76258 function genIfConditions(conditions, state, altGen, altEmpty) { 76259 if (!conditions.length) { 76260 return altEmpty || '_e()'; 76261 } 76262 var condition = conditions.shift(); 76263 if (condition.exp) { 76264 return "(".concat(condition.exp, ")?").concat(genTernaryExp(condition.block), ":").concat(genIfConditions(conditions, state, altGen, altEmpty)); 76265 } 76266 else { 76267 return "".concat(genTernaryExp(condition.block)); 76268 } 76269 // v-if with v-once should generate code like (a)?_m(0):_m(1) 76270 function genTernaryExp(el) { 76271 return altGen 76272 ? altGen(el, state) 76273 : el.once 76274 ? genOnce(el, state) 76275 : genElement(el, state); 76276 } 76277 } 76278 function genFor(el, state, altGen, altHelper) { 76279 var exp = el.for; 76280 var alias = el.alias; 76281 var iterator1 = el.iterator1 ? ",".concat(el.iterator1) : ''; 76282 var iterator2 = el.iterator2 ? ",".concat(el.iterator2) : ''; 76283 if (state.maybeComponent(el) && 76284 el.tag !== 'slot' && 76285 el.tag !== 'template' && 76286 !el.key) { 76287 state.warn("<".concat(el.tag, " v-for=\"").concat(alias, " in ").concat(exp, "\">: component lists rendered with ") + 76288 "v-for should have explicit keys. " + 76289 "See https://v2.vuejs.org/v2/guide/list.html#key for more info.", el.rawAttrsMap['v-for'], true /* tip */); 76290 } 76291 el.forProcessed = true; // avoid recursion 76292 return ("".concat(altHelper || '_l', "((").concat(exp, "),") + 76293 "function(".concat(alias).concat(iterator1).concat(iterator2, "){") + 76294 "return ".concat((altGen || genElement)(el, state)) + 76295 '})'); 76296 } 76297 function genData(el, state) { 76298 var data = '{'; 76299 // directives first. 76300 // directives may mutate the el's other properties before they are generated. 76301 var dirs = genDirectives(el, state); 76302 if (dirs) 76303 data += dirs + ','; 76304 // key 76305 if (el.key) { 76306 data += "key:".concat(el.key, ","); 76307 } 76308 // ref 76309 if (el.ref) { 76310 data += "ref:".concat(el.ref, ","); 76311 } 76312 if (el.refInFor) { 76313 data += "refInFor:true,"; 76314 } 76315 // pre 76316 if (el.pre) { 76317 data += "pre:true,"; 76318 } 76319 // record original tag name for components using "is" attribute 76320 if (el.component) { 76321 data += "tag:\"".concat(el.tag, "\","); 76322 } 76323 // module data generation functions 76324 for (var i = 0; i < state.dataGenFns.length; i++) { 76325 data += state.dataGenFns[i](el); 76326 } 76327 // attributes 76328 if (el.attrs) { 76329 data += "attrs:".concat(genProps(el.attrs), ","); 76330 } 76331 // DOM props 76332 if (el.props) { 76333 data += "domProps:".concat(genProps(el.props), ","); 76334 } 76335 // event handlers 76336 if (el.events) { 76337 data += "".concat(genHandlers(el.events, false), ","); 76338 } 76339 if (el.nativeEvents) { 76340 data += "".concat(genHandlers(el.nativeEvents, true), ","); 76341 } 76342 // slot target 76343 // only for non-scoped slots 76344 if (el.slotTarget && !el.slotScope) { 76345 data += "slot:".concat(el.slotTarget, ","); 76346 } 76347 // scoped slots 76348 if (el.scopedSlots) { 76349 data += "".concat(genScopedSlots(el, el.scopedSlots, state), ","); 76350 } 76351 // component v-model 76352 if (el.model) { 76353 data += "model:{value:".concat(el.model.value, ",callback:").concat(el.model.callback, ",expression:").concat(el.model.expression, "},"); 76354 } 76355 // inline-template 76356 if (el.inlineTemplate) { 76357 var inlineTemplate = genInlineTemplate(el, state); 76358 if (inlineTemplate) { 76359 data += "".concat(inlineTemplate, ","); 76360 } 76361 } 76362 data = data.replace(/,$/, '') + '}'; 76363 // v-bind dynamic argument wrap 76364 // v-bind with dynamic arguments must be applied using the same v-bind object 76365 // merge helper so that class/style/mustUseProp attrs are handled correctly. 76366 if (el.dynamicAttrs) { 76367 data = "_b(".concat(data, ",\"").concat(el.tag, "\",").concat(genProps(el.dynamicAttrs), ")"); 76368 } 76369 // v-bind data wrap 76370 if (el.wrapData) { 76371 data = el.wrapData(data); 76372 } 76373 // v-on data wrap 76374 if (el.wrapListeners) { 76375 data = el.wrapListeners(data); 76376 } 76377 return data; 76378 } 76379 function genDirectives(el, state) { 76380 var dirs = el.directives; 76381 if (!dirs) 76382 return; 76383 var res = 'directives:['; 76384 var hasRuntime = false; 76385 var i, l, dir, needRuntime; 76386 for (i = 0, l = dirs.length; i < l; i++) { 76387 dir = dirs[i]; 76388 needRuntime = true; 76389 var gen = state.directives[dir.name]; 76390 if (gen) { 76391 // compile-time directive that manipulates AST. 76392 // returns true if it also needs a runtime counterpart. 76393 needRuntime = !!gen(el, dir, state.warn); 76394 } 76395 if (needRuntime) { 76396 hasRuntime = true; 76397 res += "{name:\"".concat(dir.name, "\",rawName:\"").concat(dir.rawName, "\"").concat(dir.value 76398 ? ",value:(".concat(dir.value, "),expression:").concat(JSON.stringify(dir.value)) 76399 : '').concat(dir.arg ? ",arg:".concat(dir.isDynamicArg ? dir.arg : "\"".concat(dir.arg, "\"")) : '').concat(dir.modifiers ? ",modifiers:".concat(JSON.stringify(dir.modifiers)) : '', "},"); 76400 } 76401 } 76402 if (hasRuntime) { 76403 return res.slice(0, -1) + ']'; 76404 } 76405 } 76406 function genInlineTemplate(el, state) { 76407 var ast = el.children[0]; 76408 if ((el.children.length !== 1 || ast.type !== 1)) { 76409 state.warn('Inline-template components must have exactly one child element.', { start: el.start }); 76410 } 76411 if (ast && ast.type === 1) { 76412 var inlineRenderFns = generate(ast, state.options); 76413 return "inlineTemplate:{render:function(){".concat(inlineRenderFns.render, "},staticRenderFns:[").concat(inlineRenderFns.staticRenderFns 76414 .map(function (code) { return "function(){".concat(code, "}"); }) 76415 .join(','), "]}"); 76416 } 76417 } 76418 function genScopedSlots(el, slots, state) { 76419 // by default scoped slots are considered "stable", this allows child 76420 // components with only scoped slots to skip forced updates from parent. 76421 // but in some cases we have to bail-out of this optimization 76422 // for example if the slot contains dynamic names, has v-if or v-for on them... 76423 var needsForceUpdate = el.for || 76424 Object.keys(slots).some(function (key) { 76425 var slot = slots[key]; 76426 return (slot.slotTargetDynamic || slot.if || slot.for || containsSlotChild(slot) // is passing down slot from parent which may be dynamic 76427 ); 76428 }); 76429 // #9534: if a component with scoped slots is inside a conditional branch, 76430 // it's possible for the same component to be reused but with different 76431 // compiled slot content. To avoid that, we generate a unique key based on 76432 // the generated code of all the slot contents. 76433 var needsKey = !!el.if; 76434 // OR when it is inside another scoped slot or v-for (the reactivity may be 76435 // disconnected due to the intermediate scope variable) 76436 // #9438, #9506 76437 // TODO: this can be further optimized by properly analyzing in-scope bindings 76438 // and skip force updating ones that do not actually use scope variables. 76439 if (!needsForceUpdate) { 76440 var parent_2 = el.parent; 76441 while (parent_2) { 76442 if ((parent_2.slotScope && parent_2.slotScope !== emptySlotScopeToken) || 76443 parent_2.for) { 76444 needsForceUpdate = true; 76445 break; 76446 } 76447 if (parent_2.if) { 76448 needsKey = true; 76449 } 76450 parent_2 = parent_2.parent; 76451 } 76452 } 76453 var generatedSlots = Object.keys(slots) 76454 .map(function (key) { return genScopedSlot(slots[key], state); }) 76455 .join(','); 76456 return "scopedSlots:_u([".concat(generatedSlots, "]").concat(needsForceUpdate ? ",null,true" : "").concat(!needsForceUpdate && needsKey ? ",null,false,".concat(hash(generatedSlots)) : "", ")"); 76457 } 76458 function hash(str) { 76459 var hash = 5381; 76460 var i = str.length; 76461 while (i) { 76462 hash = (hash * 33) ^ str.charCodeAt(--i); 76463 } 76464 return hash >>> 0; 76465 } 76466 function containsSlotChild(el) { 76467 if (el.type === 1) { 76468 if (el.tag === 'slot') { 76469 return true; 76470 } 76471 return el.children.some(containsSlotChild); 76472 } 76473 return false; 76474 } 76475 function genScopedSlot(el, state) { 76476 var isLegacySyntax = el.attrsMap['slot-scope']; 76477 if (el.if && !el.ifProcessed && !isLegacySyntax) { 76478 return genIf(el, state, genScopedSlot, "null"); 76479 } 76480 if (el.for && !el.forProcessed) { 76481 return genFor(el, state, genScopedSlot); 76482 } 76483 var slotScope = el.slotScope === emptySlotScopeToken ? "" : String(el.slotScope); 76484 var fn = "function(".concat(slotScope, "){") + 76485 "return ".concat(el.tag === 'template' 76486 ? el.if && isLegacySyntax 76487 ? "(".concat(el.if, ")?").concat(genChildren(el, state) || 'undefined', ":undefined") 76488 : genChildren(el, state) || 'undefined' 76489 : genElement(el, state), "}"); 76490 // reverse proxy v-slot without scope on this.$slots 76491 var reverseProxy = slotScope ? "" : ",proxy:true"; 76492 return "{key:".concat(el.slotTarget || "\"default\"", ",fn:").concat(fn).concat(reverseProxy, "}"); 76493 } 76494 function genChildren(el, state, checkSkip, altGenElement, altGenNode) { 76495 var children = el.children; 76496 if (children.length) { 76497 var el_1 = children[0]; 76498 // optimize single v-for 76499 if (children.length === 1 && 76500 el_1.for && 76501 el_1.tag !== 'template' && 76502 el_1.tag !== 'slot') { 76503 var normalizationType_1 = checkSkip 76504 ? state.maybeComponent(el_1) 76505 ? ",1" 76506 : ",0" 76507 : ""; 76508 return "".concat((altGenElement || genElement)(el_1, state)).concat(normalizationType_1); 76509 } 76510 var normalizationType = checkSkip 76511 ? getNormalizationType(children, state.maybeComponent) 76512 : 0; 76513 var gen_1 = altGenNode || genNode; 76514 return "[".concat(children.map(function (c) { return gen_1(c, state); }).join(','), "]").concat(normalizationType ? ",".concat(normalizationType) : ''); 76515 } 76516 } 76517 // determine the normalization needed for the children array. 76518 // 0: no normalization needed 76519 // 1: simple normalization needed (possible 1-level deep nested array) 76520 // 2: full normalization needed 76521 function getNormalizationType(children, maybeComponent) { 76522 var res = 0; 76523 for (var i = 0; i < children.length; i++) { 76524 var el = children[i]; 76525 if (el.type !== 1) { 76526 continue; 76527 } 76528 if (needsNormalization(el) || 76529 (el.ifConditions && 76530 el.ifConditions.some(function (c) { return needsNormalization(c.block); }))) { 76531 res = 2; 76532 break; 76533 } 76534 if (maybeComponent(el) || 76535 (el.ifConditions && el.ifConditions.some(function (c) { return maybeComponent(c.block); }))) { 76536 res = 1; 76537 } 76538 } 76539 return res; 76540 } 76541 function needsNormalization(el) { 76542 return el.for !== undefined || el.tag === 'template' || el.tag === 'slot'; 76543 } 76544 function genNode(node, state) { 76545 if (node.type === 1) { 76546 return genElement(node, state); 76547 } 76548 else if (node.type === 3 && node.isComment) { 76549 return genComment(node); 76550 } 76551 else { 76552 return genText(node); 76553 } 76554 } 76555 function genText(text) { 76556 return "_v(".concat(text.type === 2 76557 ? text.expression // no need for () because already wrapped in _s() 76558 : transformSpecialNewlines(JSON.stringify(text.text)), ")"); 76559 } 76560 function genComment(comment) { 76561 return "_e(".concat(JSON.stringify(comment.text), ")"); 76562 } 76563 function genSlot(el, state) { 76564 var slotName = el.slotName || '"default"'; 76565 var children = genChildren(el, state); 76566 var res = "_t(".concat(slotName).concat(children ? ",function(){return ".concat(children, "}") : ''); 76567 var attrs = el.attrs || el.dynamicAttrs 76568 ? genProps((el.attrs || []).concat(el.dynamicAttrs || []).map(function (attr) { return ({ 76569 // slot props are camelized 76570 name: camelize(attr.name), 76571 value: attr.value, 76572 dynamic: attr.dynamic 76573 }); })) 76574 : null; 76575 var bind = el.attrsMap['v-bind']; 76576 if ((attrs || bind) && !children) { 76577 res += ",null"; 76578 } 76579 if (attrs) { 76580 res += ",".concat(attrs); 76581 } 76582 if (bind) { 76583 res += "".concat(attrs ? '' : ',null', ",").concat(bind); 76584 } 76585 return res + ')'; 76586 } 76587 // componentName is el.component, take it as argument to shun flow's pessimistic refinement 76588 function genComponent(componentName, el, state) { 76589 var children = el.inlineTemplate ? null : genChildren(el, state, true); 76590 return "_c(".concat(componentName, ",").concat(genData(el, state)).concat(children ? ",".concat(children) : '', ")"); 76591 } 76592 function genProps(props) { 76593 var staticProps = ""; 76594 var dynamicProps = ""; 76595 for (var i = 0; i < props.length; i++) { 76596 var prop = props[i]; 76597 var value = transformSpecialNewlines(prop.value); 76598 if (prop.dynamic) { 76599 dynamicProps += "".concat(prop.name, ",").concat(value, ","); 76600 } 76601 else { 76602 staticProps += "\"".concat(prop.name, "\":").concat(value, ","); 76603 } 76604 } 76605 staticProps = "{".concat(staticProps.slice(0, -1), "}"); 76606 if (dynamicProps) { 76607 return "_d(".concat(staticProps, ",[").concat(dynamicProps.slice(0, -1), "])"); 76608 } 76609 else { 76610 return staticProps; 76611 } 76612 } 76613 // #3895, #4268 76614 function transformSpecialNewlines(text) { 76615 return text.replace(/\u2028/g, '\\u2028').replace(/\u2029/g, '\\u2029'); 76616 } 76617 76618 // these keywords should not appear inside expressions, but operators like 76619 // typeof, instanceof and in are allowed 76620 var prohibitedKeywordRE = new RegExp('\\b' + 76621 ('do,if,for,let,new,try,var,case,else,with,await,break,catch,class,const,' + 76622 'super,throw,while,yield,delete,export,import,return,switch,default,' + 76623 'extends,finally,continue,debugger,function,arguments') 76624 .split(',') 76625 .join('\\b|\\b') + 76626 '\\b'); 76627 // these unary operators should not be used as property/method names 76628 var unaryOperatorsRE = new RegExp('\\b' + 76629 'delete,typeof,void'.split(',').join('\\s*\\([^\\)]*\\)|\\b') + 76630 '\\s*\\([^\\)]*\\)'); 76631 // strip strings in expressions 76632 var stripStringRE = /'(?:[^'\\]|\\.)*'|"(?:[^"\\]|\\.)*"|`(?:[^`\\]|\\.)*\$\{|\}(?:[^`\\]|\\.)*`|`(?:[^`\\]|\\.)*`/g; 76633 // detect problematic expressions in a template 76634 function detectErrors(ast, warn) { 76635 if (ast) { 76636 checkNode(ast, warn); 76637 } 76638 } 76639 function checkNode(node, warn) { 76640 if (node.type === 1) { 76641 for (var name_1 in node.attrsMap) { 76642 if (dirRE.test(name_1)) { 76643 var value = node.attrsMap[name_1]; 76644 if (value) { 76645 var range = node.rawAttrsMap[name_1]; 76646 if (name_1 === 'v-for') { 76647 checkFor(node, "v-for=\"".concat(value, "\""), warn, range); 76648 } 76649 else if (name_1 === 'v-slot' || name_1[0] === '#') { 76650 checkFunctionParameterExpression(value, "".concat(name_1, "=\"").concat(value, "\""), warn, range); 76651 } 76652 else if (onRE.test(name_1)) { 76653 checkEvent(value, "".concat(name_1, "=\"").concat(value, "\""), warn, range); 76654 } 76655 else { 76656 checkExpression(value, "".concat(name_1, "=\"").concat(value, "\""), warn, range); 76657 } 76658 } 76659 } 76660 } 76661 if (node.children) { 76662 for (var i = 0; i < node.children.length; i++) { 76663 checkNode(node.children[i], warn); 76664 } 76665 } 76666 } 76667 else if (node.type === 2) { 76668 checkExpression(node.expression, node.text, warn, node); 76669 } 76670 } 76671 function checkEvent(exp, text, warn, range) { 76672 var stripped = exp.replace(stripStringRE, ''); 76673 var keywordMatch = stripped.match(unaryOperatorsRE); 76674 if (keywordMatch && stripped.charAt(keywordMatch.index - 1) !== '$') { 76675 warn("avoid using JavaScript unary operator as property name: " + 76676 "\"".concat(keywordMatch[0], "\" in expression ").concat(text.trim()), range); 76677 } 76678 checkExpression(exp, text, warn, range); 76679 } 76680 function checkFor(node, text, warn, range) { 76681 checkExpression(node.for || '', text, warn, range); 76682 checkIdentifier(node.alias, 'v-for alias', text, warn, range); 76683 checkIdentifier(node.iterator1, 'v-for iterator', text, warn, range); 76684 checkIdentifier(node.iterator2, 'v-for iterator', text, warn, range); 76685 } 76686 function checkIdentifier(ident, type, text, warn, range) { 76687 if (typeof ident === 'string') { 76688 try { 76689 new Function("var ".concat(ident, "=_")); 76690 } 76691 catch (e) { 76692 warn("invalid ".concat(type, " \"").concat(ident, "\" in expression: ").concat(text.trim()), range); 76693 } 76694 } 76695 } 76696 function checkExpression(exp, text, warn, range) { 76697 try { 76698 new Function("return ".concat(exp)); 76699 } 76700 catch (e) { 76701 var keywordMatch = exp 76702 .replace(stripStringRE, '') 76703 .match(prohibitedKeywordRE); 76704 if (keywordMatch) { 76705 warn("avoid using JavaScript keyword as property name: " + 76706 "\"".concat(keywordMatch[0], "\"\n Raw expression: ").concat(text.trim()), range); 76707 } 76708 else { 76709 warn("invalid expression: ".concat(e.message, " in\n\n") + 76710 " ".concat(exp, "\n\n") + 76711 " Raw expression: ".concat(text.trim(), "\n"), range); 76712 } 76713 } 76714 } 76715 function checkFunctionParameterExpression(exp, text, warn, range) { 76716 try { 76717 new Function(exp, ''); 76718 } 76719 catch (e) { 76720 warn("invalid function parameter expression: ".concat(e.message, " in\n\n") + 76721 " ".concat(exp, "\n\n") + 76722 " Raw expression: ".concat(text.trim(), "\n"), range); 76723 } 76724 } 76725 76726 var range = 2; 76727 function generateCodeFrame(source, start, end) { 76728 if (start === void 0) { start = 0; } 76729 if (end === void 0) { end = source.length; } 76730 var lines = source.split(/\r?\n/); 76731 var count = 0; 76732 var res = []; 76733 for (var i = 0; i < lines.length; i++) { 76734 count += lines[i].length + 1; 76735 if (count >= start) { 76736 for (var j = i - range; j <= i + range || end > count; j++) { 76737 if (j < 0 || j >= lines.length) 76738 continue; 76739 res.push("".concat(j + 1).concat(repeat(" ", 3 - String(j + 1).length), "| ").concat(lines[j])); 76740 var lineLength = lines[j].length; 76741 if (j === i) { 76742 // push underline 76743 var pad = start - (count - lineLength) + 1; 76744 var length_1 = end > count ? lineLength - pad : end - start; 76745 res.push(" | " + repeat(" ", pad) + repeat("^", length_1)); 76746 } 76747 else if (j > i) { 76748 if (end > count) { 76749 var length_2 = Math.min(end - count, lineLength); 76750 res.push(" | " + repeat("^", length_2)); 76751 } 76752 count += lineLength + 1; 76753 } 76754 } 76755 break; 76756 } 76757 } 76758 return res.join('\n'); 76759 } 76760 function repeat(str, n) { 76761 var result = ''; 76762 if (n > 0) { 76763 // eslint-disable-next-line no-constant-condition 76764 while (true) { 76765 // eslint-disable-line 76766 if (n & 1) 76767 result += str; 76768 n >>>= 1; 76769 if (n <= 0) 76770 break; 76771 str += str; 76772 } 76773 } 76774 return result; 76775 } 76776 76777 function createFunction(code, errors) { 76778 try { 76779 return new Function(code); 76780 } 76781 catch (err) { 76782 errors.push({ err: err, code: code }); 76783 return noop; 76784 } 76785 } 76786 function createCompileToFunctionFn(compile) { 76787 var cache = Object.create(null); 76788 return function compileToFunctions(template, options, vm) { 76789 options = extend({}, options); 76790 var warn = options.warn || warn$2; 76791 delete options.warn; 76792 /* istanbul ignore if */ 76793 { 76794 // detect possible CSP restriction 76795 try { 76796 new Function('return 1'); 76797 } 76798 catch (e) { 76799 if (e.toString().match(/unsafe-eval|CSP/)) { 76800 warn('It seems you are using the standalone build of Vue.js in an ' + 76801 'environment with Content Security Policy that prohibits unsafe-eval. ' + 76802 'The template compiler cannot work in this environment. Consider ' + 76803 'relaxing the policy to allow unsafe-eval or pre-compiling your ' + 76804 'templates into render functions.'); 76805 } 76806 } 76807 } 76808 // check cache 76809 var key = options.delimiters 76810 ? String(options.delimiters) + template 76811 : template; 76812 if (cache[key]) { 76813 return cache[key]; 76814 } 76815 // compile 76816 var compiled = compile(template, options); 76817 // check compilation errors/tips 76818 { 76819 if (compiled.errors && compiled.errors.length) { 76820 if (options.outputSourceRange) { 76821 compiled.errors.forEach(function (e) { 76822 warn("Error compiling template:\n\n".concat(e.msg, "\n\n") + 76823 generateCodeFrame(template, e.start, e.end), vm); 76824 }); 76825 } 76826 else { 76827 warn("Error compiling template:\n\n".concat(template, "\n\n") + 76828 compiled.errors.map(function (e) { return "- ".concat(e); }).join('\n') + 76829 '\n', vm); 76830 } 76831 } 76832 if (compiled.tips && compiled.tips.length) { 76833 if (options.outputSourceRange) { 76834 compiled.tips.forEach(function (e) { return tip(e.msg, vm); }); 76835 } 76836 else { 76837 compiled.tips.forEach(function (msg) { return tip(msg, vm); }); 76838 } 76839 } 76840 } 76841 // turn code into functions 76842 var res = {}; 76843 var fnGenErrors = []; 76844 res.render = createFunction(compiled.render, fnGenErrors); 76845 res.staticRenderFns = compiled.staticRenderFns.map(function (code) { 76846 return createFunction(code, fnGenErrors); 76847 }); 76848 // check function generation errors. 76849 // this should only happen if there is a bug in the compiler itself. 76850 // mostly for codegen development use 76851 /* istanbul ignore if */ 76852 { 76853 if ((!compiled.errors || !compiled.errors.length) && fnGenErrors.length) { 76854 warn("Failed to generate render function:\n\n" + 76855 fnGenErrors 76856 .map(function (_a) { 76857 var err = _a.err, code = _a.code; 76858 return "".concat(err.toString(), " in\n\n").concat(code, "\n"); 76859 }) 76860 .join('\n'), vm); 76861 } 76862 } 76863 return (cache[key] = res); 76864 }; 76865 } 76866 76867 function createCompilerCreator(baseCompile) { 76868 return function createCompiler(baseOptions) { 76869 function compile(template, options) { 76870 var finalOptions = Object.create(baseOptions); 76871 var errors = []; 76872 var tips = []; 76873 var warn = function (msg, range, tip) { 76874 (tip ? tips : errors).push(msg); 76875 }; 76876 if (options) { 76877 if (options.outputSourceRange) { 76878 // $flow-disable-line 76879 var leadingSpaceLength_1 = template.match(/^\s*/)[0].length; 76880 warn = function (msg, range, tip) { 76881 var data = typeof msg === 'string' ? { msg: msg } : msg; 76882 if (range) { 76883 if (range.start != null) { 76884 data.start = range.start + leadingSpaceLength_1; 76885 } 76886 if (range.end != null) { 76887 data.end = range.end + leadingSpaceLength_1; 76888 } 76889 } 76890 (tip ? tips : errors).push(data); 76891 }; 76892 } 76893 // merge custom modules 76894 if (options.modules) { 76895 finalOptions.modules = (baseOptions.modules || []).concat(options.modules); 76896 } 76897 // merge custom directives 76898 if (options.directives) { 76899 finalOptions.directives = extend(Object.create(baseOptions.directives || null), options.directives); 76900 } 76901 // copy other options 76902 for (var key in options) { 76903 if (key !== 'modules' && key !== 'directives') { 76904 finalOptions[key] = options[key]; 76905 } 76906 } 76907 } 76908 finalOptions.warn = warn; 76909 var compiled = baseCompile(template.trim(), finalOptions); 76910 { 76911 detectErrors(compiled.ast, warn); 76912 } 76913 compiled.errors = errors; 76914 compiled.tips = tips; 76915 return compiled; 76916 } 76917 return { 76918 compile: compile, 76919 compileToFunctions: createCompileToFunctionFn(compile) 76920 }; 76921 }; 76922 } 76923 76924 // `createCompilerCreator` allows creating compilers that use alternative 76925 // parser/optimizer/codegen, e.g the SSR optimizing compiler. 76926 // Here we just export a default compiler using the default parts. 76927 var createCompiler = createCompilerCreator(function baseCompile(template, options) { 76928 var ast = parse(template.trim(), options); 76929 if (options.optimize !== false) { 76930 optimize(ast, options); 76931 } 76932 var code = generate(ast, options); 76933 return { 76934 ast: ast, 76935 render: code.render, 76936 staticRenderFns: code.staticRenderFns 76937 }; 76938 }); 76939 76940 var _a = createCompiler(baseOptions), compileToFunctions = _a.compileToFunctions; 76941 76942 // check whether current browser encodes a char inside attribute values 76943 var div; 76944 function getShouldDecode(href) { 76945 div = div || document.createElement('div'); 76946 div.innerHTML = href ? "<a href=\"\n\"/>" : "<div a=\"\n\"/>"; 76947 return div.innerHTML.indexOf(' ') > 0; 76948 } 76949 // #3663: IE encodes newlines inside attribute values while other browsers don't 76950 var shouldDecodeNewlines = inBrowser ? getShouldDecode(false) : false; 76951 // #6828: chrome encodes content in a[href] 76952 var shouldDecodeNewlinesForHref = inBrowser 76953 ? getShouldDecode(true) 76954 : false; 76955 76956 var idToTemplate = cached(function (id) { 76957 var el = query(id); 76958 return el && el.innerHTML; 76959 }); 76960 var mount = Vue.prototype.$mount; 76961 Vue.prototype.$mount = function (el, hydrating) { 76962 el = el && query(el); 76963 /* istanbul ignore if */ 76964 if (el === document.body || el === document.documentElement) { 76965 warn$2("Do not mount Vue to <html> or <body> - mount to normal elements instead."); 76966 return this; 76967 } 76968 var options = this.$options; 76969 // resolve template/el and convert to render function 76970 if (!options.render) { 76971 var template = options.template; 76972 if (template) { 76973 if (typeof template === 'string') { 76974 if (template.charAt(0) === '#') { 76975 template = idToTemplate(template); 76976 /* istanbul ignore if */ 76977 if (!template) { 76978 warn$2("Template element not found or is empty: ".concat(options.template), this); 76979 } 76980 } 76981 } 76982 else if (template.nodeType) { 76983 template = template.innerHTML; 76984 } 76985 else { 76986 { 76987 warn$2('invalid template option:' + template, this); 76988 } 76989 return this; 76990 } 76991 } 76992 else if (el) { 76993 // @ts-expect-error 76994 template = getOuterHTML(el); 76995 } 76996 if (template) { 76997 /* istanbul ignore if */ 76998 if (config.performance && mark) { 76999 mark('compile'); 77000 } 77001 var _a = compileToFunctions(template, { 77002 outputSourceRange: true, 77003 shouldDecodeNewlines: shouldDecodeNewlines, 77004 shouldDecodeNewlinesForHref: shouldDecodeNewlinesForHref, 77005 delimiters: options.delimiters, 77006 comments: options.comments 77007 }, this), render = _a.render, staticRenderFns = _a.staticRenderFns; 77008 options.render = render; 77009 options.staticRenderFns = staticRenderFns; 77010 /* istanbul ignore if */ 77011 if (config.performance && mark) { 77012 mark('compile end'); 77013 measure("vue ".concat(this._name, " compile"), 'compile', 'compile end'); 77014 } 77015 } 77016 } 77017 return mount.call(this, el, hydrating); 77018 }; 77019 /** 77020 * Get outerHTML of elements, taking care 77021 * of SVG elements in IE as well. 77022 */ 77023 function getOuterHTML(el) { 77024 if (el.outerHTML) { 77025 return el.outerHTML; 77026 } 77027 else { 77028 var container = document.createElement('div'); 77029 container.appendChild(el.cloneNode(true)); 77030 return container.innerHTML; 77031 } 77032 } 77033 Vue.compile = compileToFunctions; 77034 77035 // export type EffectScheduler = (...args: any[]) => any 77036 /** 77037 * @internal since we are not exposing this in Vue 2, it's used only for 77038 * internal testing. 77039 */ 77040 function effect(fn, scheduler) { 77041 var watcher = new Watcher(currentInstance, fn, noop, { 77042 sync: true 77043 }); 77044 if (scheduler) { 77045 watcher.update = function () { 77046 scheduler(function () { return watcher.run(); }); 77047 }; 77048 } 77049 } 77050 77051 extend(Vue, vca); 77052 Vue.effect = effect; 77053 77054 return Vue; 77055 77056})); 77057 77058/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../webpack/buildin/global.js */ "./node_modules/webpack/buildin/global.js"), __webpack_require__(/*! ./../../timers-browserify/main.js */ "./node_modules/timers-browserify/main.js").setImmediate)) 77059 77060/***/ }), 77061
vendor: 724 bytes, lines 77062-77092
77062/***/ "./node_modules/webpack/buildin/global.js": 77063/*!***********************************!*\ 77064 !*** (webpack)/buildin/global.js ***! 77065 \***********************************/ 77066/*! no static exports found */ 77067/***/ (function(module, exports) { 77068 77069var g; 77070 77071// This works in non-strict mode 77072g = (function() { 77073 return this; 77074})(); 77075 77076try { 77077 // This works if eval is allowed (see CSP) 77078 g = g || new Function("return this")(); 77079} catch (e) { 77080 // This works if the window reference is available 77081 if (typeof window === "object") g = window; 77082} 77083 77084// g can still be undefined, but nothing to do about it... 77085// We return undefined, instead of nothing here, so it's 77086// easier to handle this case. if(!global) { ...} 77087 77088module.exports = g; 77089 77090 77091/***/ }), 77092
vendor: 749 bytes, lines 77093-77125
77093/***/ "./node_modules/webpack/buildin/module.js": 77094/*!***********************************!*\ 77095 !*** (webpack)/buildin/module.js ***! 77096 \***********************************/ 77097/*! no static exports found */ 77098/***/ (function(module, exports) { 77099 77100module.exports = function(module) { 77101 if (!module.webpackPolyfill) { 77102 module.deprecate = function() {}; 77103 module.paths = []; 77104 // module.parent = undefined by default 77105 if (!module.children) module.children = []; 77106 Object.defineProperty(module, "loaded", { 77107 enumerable: true, 77108 get: function() { 77109 return module.l; 77110 } 77111 }); 77112 Object.defineProperty(module, "id", { 77113 enumerable: true, 77114 get: function() { 77115 return module.i; 77116 } 77117 }); 77118 module.webpackPolyfill = 1; 77119 } 77120 return module; 77121}; 77122 77123 77124/***/ }), 77125
77126/***/ "./resources/js/app.js": 77127/*!*****************************!*\ 77128 !*** ./resources/js/app.js ***! 77129 \*****************************/ 77130/*! no static exports found */ 77131/***/ (function(module, exports, __webpack_require__) { 77132 77133/* 77134 |-------------------------------------------------------------------------- 77135 | Laravel Spark Bootstrap 77136 |-------------------------------------------------------------------------- 77137 | 77138 | First, we will load all of the "core" dependencies for Spark which are 77139 | libraries such as Vue and jQuery. This also loads the Spark helpers 77140 | for things such as HTTP calls, forms, and form validation errors. 77141 | 77142 | Next, we'll create the root Vue application for Spark. This will start 77143 | the entire application and attach it to the DOM. Of course, you may 77144 | customize this script as you desire and load your own components. 77145 | 77146 */ 77147 77148__webpack_require__(/*! spark-bootstrap */ "./vendor/laravel/spark-aurelius/resources/assets/js/spark-bootstrap.js"); 77149__webpack_require__(/*! ./components/bootstrap */ "./resources/js/components/bootstrap.js"); 77150__webpack_require__(/*! ./custom-scripts/custom */ "./resources/js/custom-scripts/custom.js"); 77151var app = new Vue({ 77152 mixins: [__webpack_require__(/*! spark */ "./vendor/laravel/spark-aurelius/resources/assets/js/spark.js")] 77153}); 77154 77155/***/ }), 77156
77157/***/ "./resources/js/components/bootstrap.js": 77158/*!**********************************************!*\ 77159 !*** ./resources/js/components/bootstrap.js ***! 77160 \**********************************************/ 77161/*! no static exports found */ 77162/***/ (function(module, exports, __webpack_require__) { 77163 77164/* 77165 |-------------------------------------------------------------------------- 77166 | Laravel Spark Components 77167 |-------------------------------------------------------------------------- 77168 | 77169 | Here we will load the Spark components which makes up the core client 77170 | application. This is also a convenient spot for you to load all of 77171 | your components that you write while building your applications. 77172 */ 77173 77174__webpack_require__(/*! ./../spark-components/bootstrap */ "./resources/js/spark-components/bootstrap.js"); 77175__webpack_require__(/*! ./home */ "./resources/js/components/home.js"); 77176__webpack_require__(/*! ./widget/create */ "./resources/js/components/widget/create.js"); 77177__webpack_require__(/*! ./widget/create-list */ "./resources/js/components/widget/create-list.js"); 77178 77179// Load the new Vue component... 77180__webpack_require__(/*! ./settings/profile/update-profile-details */ "./resources/js/components/settings/profile/update-profile-details.js"); 77181__webpack_require__(/*! ./settings/profile/update-sendgrid-marketing-campaigns-version */ "./resources/js/components/settings/profile/update-sendgrid-marketing-campaigns-version.js"); 77182__webpack_require__(/*! ./settings/profile/update-api-token */ "./resources/js/components/settings/profile/update-api-token.js"); 77183__webpack_require__(/*! ./settings/profile/manage-api-keys */ "./resources/js/components/settings/profile/manage-api-keys.js"); 77184__webpack_require__(/*! ./settings/profile/update-api-key */ "./resources/js/components/settings/profile/update-api-key.js"); 77185__webpack_require__(/*! ./settings/profile/add-api-key-btn */ "./resources/js/components/settings/profile/add-api-key-btn.js"); 77186 77187/***/ }), 77188
77189/***/ "./resources/js/components/home.js": 77190/*!*****************************************!*\ 77191 !*** ./resources/js/components/home.js ***! 77192 \*****************************************/ 77193/*! no static exports found */ 77194/***/ (function(module, exports) { 77195 77196Vue.component('home', { 77197 props: ['user'], 77198 mounted: function mounted() { 77199 // 77200 } 77201}); 77202 77203/***/ }), 77204
77205/***/ "./resources/js/components/settings/profile/add-api-key-btn.js": 77206/*!*********************************************************************!*\ 77207 !*** ./resources/js/components/settings/profile/add-api-key-btn.js ***! 77208 \*********************************************************************/ 77209/*! no static exports found */ 77210/***/ (function(module, exports) { 77211 77212Vue.component('add-api-key-btn', { 77213 props: ['user', 'apikeys'], 77214 data: function data() { 77215 return { 77216 form: new SparkForm({ 77217 sendgrid_token: '' 77218 }) 77219 }; 77220 }, 77221 mounted: function mounted() { 77222 console.log('api keys btn'); 77223 }, 77224 methods: { 77225 addKey: function addKey(event) { 77226 var _this = this; 77227 Spark.put('/settings/profile/add-api-key', this.form).then(function (response) { 77228 console.log(response); 77229 _this.$emit('add-key', _this.form.id); 77230 }); 77231 } 77232 } 77233}); 77234 77235/***/ }), 77236
77237/***/ "./resources/js/components/settings/profile/manage-api-keys.js": 77238/*!*********************************************************************!*\ 77239 !*** ./resources/js/components/settings/profile/manage-api-keys.js ***! 77240 \*********************************************************************/ 77241/*! no static exports found */ 77242/***/ (function(module, exports) { 77243 77244Vue.component('manage-api-keys', { 77245 props: ['user'], 77246 data: function data() { 77247 return { 77248 form: new SparkForm({ 77249 sendgrid_token: '' 77250 }), 77251 apiKeys: [] 77252 }; 77253 }, 77254 mounted: function mounted() { 77255 this.getApiKeys(); 77256 }, 77257 methods: { 77258 getApiKeys: function getApiKeys() { 77259 var _this = this; 77260 axios.get('/settings/profile/get-api-keys').then(function (response) { 77261 _this.apiKeys = response.data; 77262 })["catch"](function (error) { 77263 // this.connected = false; 77264 // this.notConnected = true; 77265 })["finally"](function (e) { 77266 //console.log('test finished1'); 77267 }); 77268 }, 77269 destroyKey: function destroyKey(apikey) { 77270 window.location.reload(); 77271 }, 77272 //listen to add key event and call all keys again to update UI 77273 addKey: function addKey() { 77274 this.getApiKeys(); 77275 this.$forceUpdate(); 77276 } 77277 } 77278}); 77279 77280/***/ }), 77281
77282/***/ "./resources/js/components/settings/profile/update-api-key.js": 77283/*!********************************************************************!*\ 77284 !*** ./resources/js/components/settings/profile/update-api-key.js ***! 77285 \********************************************************************/ 77286/*! no static exports found */ 77287/***/ (function(module, exports) { 77288 77289Vue.component('update-api-key', { 77290 props: ['user', 'apikey', 'index', 'apikeys'], 77291 data: function data() { 77292 return { 77293 form: new SparkForm({ 77294 id: this.apikey.id, 77295 sendgrid_token: this.apikey.sendgrid_token, 77296 name: this.apikey.name, 77297 marketing_campaigns_version: this.apikey.marketing_campaigns_version 77298 }), 77299 connected: false, 77300 testing: true, 77301 apiKeys: [], 77302 errors: [] 77303 }; 77304 }, 77305 mounted: function mounted() { 77306 this.testSendgridApiConnection(this.form.id); 77307 }, 77308 methods: { 77309 update: function update(e) { 77310 var _this = this; 77311 this.testing = true; 77312 this.errors = []; 77313 if (!this.form.sendgrid_token) { 77314 this.errors.push('Sendgrid Token required'); 77315 this.testing = false; 77316 } 77317 if (!this.form.name) { 77318 this.errors.push('Name required'); 77319 this.testing = false; 77320 } 77321 Spark.put('/settings/profile/update-api-key', this.form).then(function (response) { 77322 Bus.$emit('updateUser'); 77323 _this.testSendgridApiConnection(_this.form.id); 77324 })["catch"](function (error) { 77325 console.log('catch'); 77326 console.log(error.errors.name[0]); 77327 })["finally"](function (e) { 77328 // 77329 }); 77330 }, 77331 destroy: function destroy(apikey) { 77332 var _this2 = this; 77333 if (confirm("Do you really want to delete? Any widget using this key will break ")) { 77334 axios["delete"]('/settings/profile/delete-api-key/' + this.form.id).then(function (resp) { 77335 //emit an event that parent component listens to and handles 77336 _this2.$emit('destroy-key', apikey); 77337 })["catch"](function (error) { 77338 console.log(error); 77339 }); 77340 } 77341 }, 77342 testSendgridApiConnection: function testSendgridApiConnection(key_id) { 77343 var _this3 = this; 77344 axios.get('/settings/profile/test-sendgrid-api/' + key_id).then(function (response) { 77345 //console.log(response); 77346 77347 if (response.data.status == true) { 77348 _this3.connected = true; 77349 _this3.testing = false; 77350 } else { 77351 _this3.errors = []; 77352 _this3.connected = false; 77353 _this3.testing = false; 77354 if (response.data.error != false && response.data.error != undefined) { 77355 _this3.errors.push(response.data.error); 77356 } 77357 if (response.data.help_msg != false && response.data.help_msg != undefined) { 77358 _this3.errors.push(response.data.help_msg); 77359 } 77360 } 77361 })["catch"](function (error) { 77362 _this3.connected = false; 77363 _this3.notConnected = true; 77364 })["finally"](function (e) { 77365 //console.log('test finished'); 77366 }); 77367 } 77368 } 77369}); 77370 77371/***/ }), 77372
77373/***/ "./resources/js/components/settings/profile/update-api-token.js": 77374/*!**********************************************************************!*\ 77375 !*** ./resources/js/components/settings/profile/update-api-token.js ***! 77376 \**********************************************************************/ 77377/*! no static exports found */ 77378/***/ (function(module, exports) { 77379 77380Vue.component('update-api-token', { 77381 props: ['user'], 77382 data: function data() { 77383 return { 77384 form: new SparkForm({ 77385 api_token: this.user.api_token 77386 }) 77387 }; 77388 }, 77389 created: function created() { 77390 console.log(this.user); 77391 }, 77392 methods: { 77393 update: function update() { 77394 Spark.put('/settings/profile/token', this.form).then(function (response) { 77395 window.location.reload(); 77396 }); 77397 } 77398 } 77399}); 77400 77401/***/ }), 77402
77403/***/ "./resources/js/components/settings/profile/update-profile-details.js": 77404/*!****************************************************************************!*\ 77405 !*** ./resources/js/components/settings/profile/update-profile-details.js ***! 77406 \****************************************************************************/ 77407/*! no static exports found */ 77408/***/ (function(module, exports) { 77409 77410Vue.component('update-profile-details', { 77411 props: ['user'], 77412 data: function data() { 77413 return { 77414 form: new SparkForm({ 77415 sendgrid_token: '' 77416 }), 77417 apiConnection: false, 77418 notConnected: false, 77419 connected: false, 77420 error: false, 77421 help_msg: false 77422 }; 77423 }, 77424 mounted: function mounted() { 77425 if (this.user.sendgrid_token) { 77426 this.apiConnection = true; 77427 this.testSendgridApiConnection(); 77428 } 77429 }, 77430 methods: { 77431 update: function update() { 77432 var _this = this; 77433 Spark.put('/settings/profile/details', this.form).then(function (response) { 77434 Bus.$emit('updateUser'); 77435 _this.testSendgridApiConnection(); 77436 }); 77437 }, 77438 testSendgridApiConnection: function testSendgridApiConnection() { 77439 var _this2 = this; 77440 axios.get('/settings/profile/test-sendgrid-api').then(function (response) { 77441 console.log(response); 77442 if (response.data.status == true) { 77443 _this2.connected = true; 77444 _this2.notConnected = false; 77445 } else { 77446 _this2.connected = false; 77447 _this2.notConnected = true; 77448 if (response.data.error != false) { 77449 _this2.error = response.data.error; 77450 } 77451 if (response.data.help_msg != false) { 77452 _this2.help_msg = response.data.help_msg; 77453 } 77454 } 77455 })["catch"](function (error) { 77456 _this2.connected = false; 77457 _this2.notConnected = true; 77458 })["finally"](function (e) { 77459 console.log('test finished'); 77460 }); 77461 } 77462 } 77463}); 77464 77465/***/ }), 77466
77467/***/ "./resources/js/components/settings/profile/update-sendgrid-marketing-campaigns-version.js": 77468/*!*************************************************************************************************!*\ 77469 !*** ./resources/js/components/settings/profile/update-sendgrid-marketing-campaigns-version.js ***! 77470 \*************************************************************************************************/ 77471/*! no static exports found */ 77472/***/ (function(module, exports) { 77473 77474Vue.component('update-sendgrid-marketing-campaigns-version', { 77475 props: ['user'], 77476 data: function data() { 77477 return { 77478 form: new SparkForm({ 77479 marketing_campaigns_version: this.user.marketing_campaigns_version 77480 }) 77481 }; 77482 }, 77483 methods: { 77484 update: function update() { 77485 console.log(this.form); 77486 Spark.put('/settings/profile/marketing-campaigns-version', this.form).then(function (response) { 77487 Bus.$emit('updateUser'); 77488 }); 77489 } 77490 } 77491}); 77492 77493/***/ }), 77494
77495/***/ "./resources/js/components/widget/create-list.js": 77496/*!*******************************************************!*\ 77497 !*** ./resources/js/components/widget/create-list.js ***! 77498 \*******************************************************/ 77499/*! no static exports found */ 77500/***/ (function(module, exports) { 77501 77502Vue.component('create-list', { 77503 props: ['user', 'apikey'], 77504 data: function data() { 77505 return { 77506 form: new SparkForm({ 77507 list_name: '', 77508 apikey_id: this.apikey, 77509 new_list_id: '' 77510 }), 77511 selected: '', 77512 keyselected: false, 77513 listsloading: false, 77514 creating: false, 77515 created: false, 77516 errors: [] 77517 }; 77518 }, 77519 mounted: function mounted() { 77520 console.log('create list called ' + this.apikey); 77521 //this.getlists(); 77522 }, 77523 methods: { 77524 create: function create(event) { 77525 var _this = this; 77526 console.log('create clicked'); 77527 this.errors = []; 77528 if (!this.form.list_name) { 77529 this.errors.push('List Name required'); 77530 this.testing = false; 77531 this.status = false; 77532 return; 77533 } 77534 this.creating = true; 77535 Spark.put('/create-list', this.form).then(function (response) { 77536 _this.form.new_list_id = response.list_id; 77537 _this.creating = false; 77538 _this.created = true; 77539 })["catch"](function (error) { 77540 console.log('error triggered'); 77541 console.log(error.error); 77542 _this.errors.push(error.error); 77543 _this.testing = false; 77544 _this.status = false; 77545 // this.connected = false; 77546 // this.notConnected = true; 77547 }); 77548 } 77549 } 77550}); 77551 77552/***/ }), 77553
77554/***/ "./resources/js/components/widget/create.js": 77555/*!**************************************************!*\ 77556 !*** ./resources/js/components/widget/create.js ***! 77557 \**************************************************/ 77558/*! no static exports found */ 77559/***/ (function(module, exports) { 77560 77561Vue.component('create', { 77562 props: ['user'], 77563 data: function data() { 77564 return { 77565 apikey: '', 77566 lists: [], 77567 list: '', 77568 new_list_id: '', 77569 list_id: '', 77570 keyselected: false, 77571 listsloading: false, 77572 subuser: '' 77573 }; 77574 }, 77575 mounted: function mounted() { 77576 console.log('create widget called'); 77577 }, 77578 methods: { 77579 getLists: function getLists() { 77580 var _this = this; 77581 axios.get('/get-lists/' + this.apikey).then(function (response) { 77582 var lists = response.data; 77583 for (i = 0; i < lists.length; i++) { 77584 console.log(lists[i].id); 77585 } 77586 _this.lists = response.data; 77587 _this.listsloading = false; 77588 })["catch"](function (error) { 77589 // this.connected = false; 77590 // this.notConnected = true; 77591 })["finally"](function (e) { 77592 //console.log('test finished1'); 77593 }); 77594 }, 77595 onApiKeyChange: function onApiKeyChange() { 77596 this.getLists(); 77597 this.keyselected = true; 77598 this.listsloading = true; 77599 }, 77600 onListChange: function onListChange(list) { 77601 this.list_id = this.list.id; 77602 this.subuser = this.list.subuser; 77603 } 77604 } 77605}); 77606 77607/***/ }), 77608
77609/***/ "./resources/js/custom-scripts/custom.js": 77610/*!***********************************************!*\ 77611 !*** ./resources/js/custom-scripts/custom.js ***! 77612 \***********************************************/ 77613/*! no static exports found */ 77614/***/ (function(module, exports) { 77615 77616$(document).ready(function () { 77617 $(function () { 77618 $('.confirm').click(function () { 77619 return window.confirm("Are you sure?"); 77620 }); 77621 }); 77622 $("#how-to-find-list-id-link").click(function () { 77623 $(".how-to-find-list-id").show("slow", function () { 77624 // Animation complete. 77625 }); 77626 }); 77627 $("#how-to-create-api-key").click(function () { 77628 $(".how-to-create-api-key").show("slow", function () { 77629 // Animation complete. 77630 }); 77631 }); 77632 $('#range-dropdown').on('change', function () { 77633 var url = window.location.href.substr(0, window.location.href.indexOf('#')); 77634 if (url.indexOf('?') > -1) { 77635 url += '&range=' + this.value; 77636 } else { 77637 url += '?range=' + this.value; 77638 } 77639 window.location.href = url; 77640 }); 77641 $('input[id=single_opt_in_radio]').change(function () { 77642 if ($(this).is(':checked')) { 77643 $(".single-opt-in-container").show(); 77644 $(".double-opt-in-container").hide(); 77645 } else { 77646 $(".single-opt-in-container").hide(); 77647 $(".double-opt-in-container").show(); 77648 } 77649 }); 77650 $('input[id=double_opt_in_radio]').change(function () { 77651 if ($(this).is(':checked')) { 77652 $(".double-opt-in-container").show(); 77653 $(".single-opt-in-container").hide(); 77654 } else { 77655 $(".double-opt-in-container").hide(); 77656 $(".single-opt-in-container").show(); 77657 } 77658 }); 77659 $('input[name=signup_name]').change(function () { 77660 if ($(this).is(':checked')) { 77661 $("#signup_name_err_msg").show(); 77662 } else { 77663 $("#signup_name_err_msg").hide(); 77664 } 77665 }); 77666 $('input[name=consent_checkbox]').change(function () { 77667 if ($(this).is(':checked')) { 77668 $(".consent-container").show(); 77669 } else { 77670 $(".consent-container").hide(); 77671 } 77672 }); 77673 $('input[name=welcome_email]').change(function () { 77674 if ($(this).is(':checked')) { 77675 $(".welcome-email-container").show(); 77676 } else { 77677 $(".welcome-email-container").hide(); 77678 } 77679 }); 77680 $('input[id=welcome_email_template_default_radio]').change(function () { 77681 if ($(this).is(':checked')) { 77682 $(".welcome_email_default").show(); 77683 $(".welcome_email_custom").hide(); 77684 } else { 77685 $(".welcome_email_default").hide(); 77686 $(".welcome_email_custom").show(); 77687 } 77688 }); 77689 $('input[id=welcome_email_template_custom_radio]').change(function () { 77690 if ($(this).is(':checked')) { 77691 $(".welcome_email_custom").show(); 77692 $(".welcome_email_default").hide(); 77693 } else { 77694 $(".welcome_email_custom").hide(); 77695 $(".welcome_email_default").show(); 77696 } 77697 }); 77698 $('input[id=dbl_optin_email_template_default_radio]').change(function () { 77699 if ($(this).is(':checked')) { 77700 $(".dbl_optin_email_default").show(); 77701 $(".dbl_optin_email_custom").hide(); 77702 } else { 77703 $(".dbl_optin_email_default").hide(); 77704 $(".dbl_optin_email_custom").show(); 77705 } 77706 }); 77707 $('input[id=dbl_optin_email_template_custom_radio]').change(function () { 77708 if ($(this).is(':checked')) { 77709 $(".dbl_optin_email_custom").show(); 77710 $(".dbl_optin_email_default").hide(); 77711 } else { 77712 $(".dbl_optin_email_custom").hide(); 77713 $(".dbl_optin_email_default").show(); 77714 } 77715 }); 77716 $('#list').on('change', function () { 77717 $("#subuser").val($(this).find(':selected').data('subuser')); 77718 }); 77719 $('input[name=custom_fields]').change(function () { 77720 if ($(this).is(':checked')) { 77721 $(".custom-fields-container").show(); 77722 } else { 77723 $(".custom-fields-container").hide(); 77724 } 77725 }); 77726 $(".custom-fields-container").on("click", "#add-custom-field", function () { 77727 event.preventDefault(); 77728 $(".custom-fields-container").show(); 77729 var io_item_count = $('#item_count').val(); 77730 io_item_count++; 77731 $('#item_count').val(io_item_count); 77732 var predefined_custom_fields = []; 77733 var current_widget_id = localStorage.getItem("widget_id"); 77734 var current_widget_id = current_widget_id.replace(/"/g, ''); 77735 for (var i = 0; i < localStorage.length; i++) { 77736 if (localStorage.key(i).includes('widget-' + current_widget_id + '-predefined-custom-field')) { 77737 var field = JSON.parse(localStorage.getItem(localStorage.key(i))); 77738 var field_value = field.value; 77739 var field_value = field_value.replace(/"/g, ''); 77740 var field_name = field.name; 77741 var field_name = field_name.replace(/"/g, ''); 77742 predefined_custom_fields.push('<option value="' + field_value + '" class="custom-fields-name-option">' + field_name + '</option>'); 77743 } 77744 } 77745 $("#custom-fields").append("<div class='row'></div>" + "<div class='form-row item custom-field-row-id-" + io_item_count + "'>" + "<div class='form-group col-md-3'>" + "<select name='custom_fields_values[" + io_item_count + "][name]' class='form-control custom-fields-name-option' data-id='" + io_item_count + "'>" + predefined_custom_fields + "</select>" + "</div>" + "<div class='form-group col-md-3'>" + "<select name='custom_fields_values[" + io_item_count + "][type]' class='form-control custom-fields-type-option' data-id='" + io_item_count + "'>" + "<option value='text' class='custom-fields-type-option'>Text</option>" + "<option value='number' class='custom-fields-type-option'>Number</option>" + "<option value='email' class='custom-fields-type-option'>Email</option>
77745" + "<option value='tel' class='custom-fields-type-option'>Tel</option>" + "<option value='checkbox' class='custom-fields-type-option'>Checkbox</option>" + "<option value='select' class='custom-fields-type-option'>Select(Dropdown)</option>" + "<option value='hidden' class='custom-fields-type-option'>Hidden</option>" + "</select>" + "</div>" + "<div class='form-group col-md-3'>" + "<input type='text' class='form-control' id='custom-fields-placeholder-option-" + io_item_count + "' name='custom_fields_values[" + io_item_count + "][placeholder]'>" + "</div>" + "<div class='form-group col-md-2'>" + "<select name='custom_fields_values[" + io_item_count + "][required]' class='form-control' id='custom-fields-required-option-" + io_item_count + "'>" + "<option value='yes'>Yes</option>" + "<option value='no'>No</option>" + "</select>" + "</div>" + "<div class='form-group col-md-1'>" + "<a class='remove-custom-field' data-id='" + io_item_count + "'><i class='fa fa-minus-circle' aria-hidden='true'></i></a>" + "</div>" + "</div>"); 77746 }); 77747 $(".custom-fields-container").on("click", ".remove-custom-field", function () { 77748 var clicked_id = $(this).attr("data-id"); 77749 $('.custom-field-row-id-' + clicked_id).remove(); 77750 }); 77751 $(".custom-fields-container").on("click", ".remove-select-option", function () { 77752 var clicked_id = $(this).attr("data-id"); 77753 var parent_id = $(this).attr("parent-id"); 77754 $('.select-item-' + parent_id + ' .option-' + clicked_id).remove(); 77755 }); 77756 $(".custom-fields-container").on('change', '.custom-fields-type-option', function () { 77757 var clicked_id = $(this).attr("data-id"); 77758 if (this.value == 'hidden') { 77759 $("#custom-fields-required-option-" + clicked_id).val("no"); 77760 $("#custom-fields-placeholder-option-" + clicked_id).hide(); 77761 } 77762 if (this.value == 'select') { 77763 $(".custom-field-row-id-" + clicked_id).after("<div class='form-row item select-options-wrap select-item-" + clicked_id + "'>" + "<div class='form-group col-md-3'>" + "</div>" + "<div class='form-group col-md-3'>" + "<span class='titles' style='display:none;'>" + "<div class='form-row col-md-11'>" + "<div class='col-md-6 no-padding text-left'>" + "Display Text" + "<div class='help-tip'>" + "<p>Text that will display in the dropdown</p>" + "</div>" + "</div>" + "<div class='col-md-6 no-padding text-left'>" + "Value" + "<div class='help-tip'>" + "<p>Form value that will be submitted when this option is selected</p>" + "</div>" + "</div>" + "</div>" + "<div class='col-md-1'></div>" + "</span>" + "<ul id='select-options-" + clicked_id + "'></ul>" + "<div class='form-row flex-row-reverse'><p class='text-right'><span class='add-select-option' data-id='" + clicked_id + "'><i class='fa fa-plus-circle'></i> <small>Add option<small></span></p></div>" + "</div>" + "<div class='form-group col-md-3'>" + " " + "</div>" + "<div class='form-group col-md-2'>" + " " + "</div>" + "<div class='form-group col-md-1'>" + " " + "</div>" + "</div>" + "<div class='row'></div>"); 77764 } else { 77765 $(".select-item-" + clicked_id).remove(); 77766 } 77767 }); 77768 $(".custom-fields-container").on("click", ".add-select-option", function () { 77769 event.preventDefault(); 77770 $(".select-options-wrap .titles").show(); 77771 var item_id = $(this).attr("data-id"); 77772 var count = $("#select-options-" + item_id + " li").length; 77773 count = count + 1; 77774 $("#select-options-" + item_id).append("<li class='form-row select-option option-" + count + "'>" + "<div class='form-group col-md-6 no-padding'><input type='text' name='custom_fields_values[" + item_id + "][selectoptions][" + count + "][text]'/></div>" + "<div class='form-group col-md-5 no-padding'><input type='text' name='custom_fields_values[" + item_id + "][selectoptions][" + count + "][value]'/></div>" + "<div class='form-group col-md-1 no-padding'>" + "<a class='remove-select-option' parent-id='" + item_id + "' data-id='" + count + "'><i class='fa fa-minus-circle' aria-hidden='true'></i></a>" + "</div>" + "</li>"); 77775 }); 77776}); 77777 77778/***/ }), 77779
77780/***/ "./resources/js/spark-components/auth/register-stripe.js": 77781/*!***************************************************************!*\ 77782 !*** ./resources/js/spark-components/auth/register-stripe.js ***! 77783 \***************************************************************/ 77784/*! no static exports found */ 77785/***/ (function(module, exports, __webpack_require__) { 77786 77787var base = __webpack_require__(/*! auth/register-stripe */ "./vendor/laravel/spark-aurelius/resources/assets/js/auth/register-stripe.js"); 77788Vue.component('spark-register-stripe', { 77789 mixins: [base] 77790}); 77791 77792/***/ }), 77793
77794/***/ "./resources/js/spark-components/bootstrap.js": 77795/*!****************************************************!*\ 77796 !*** ./resources/js/spark-components/bootstrap.js ***! 77797 \****************************************************/ 77798/*! no static exports found */ 77799/***/ (function(module, exports, __webpack_require__) { 77800 77801/** 77802 * Layout Components... 77803 */ 77804__webpack_require__(/*! ./navbar/navbar */ "./resources/js/spark-components/navbar/navbar.js"); 77805__webpack_require__(/*! ./notifications/notifications */ "./resources/js/spark-components/notifications/notifications.js"); 77806 77807/** 77808 * Authentication Components... 77809 */ 77810__webpack_require__(/*! ./auth/register-stripe */ "./resources/js/spark-components/auth/register-stripe.js"); 77811 77812/** 77813 * Settings Component... 77814 */ 77815__webpack_require__(/*! ./settings/settings */ "./resources/js/spark-components/settings/settings.js"); 77816 77817/** 77818 * Profile Settings Components... 77819 */ 77820__webpack_require__(/*! ./settings/profile */ "./resources/js/spark-components/settings/profile.js"); 77821__webpack_require__(/*! ./settings/profile/update-profile-photo */ "./resources/js/spark-components/settings/profile/update-profile-photo.js"); 77822__webpack_require__(/*! ./settings/profile/update-contact-information */ "./resources/js/spark-components/settings/profile/update-contact-information.js"); 77823 77824/** 77825 * Teams Settings Components... 77826 */ 77827__webpack_require__(/*! ./settings/teams */ "./resources/js/spark-components/settings/teams.js"); 77828__webpack_require__(/*! ./settings/teams/create-team */ "./resources/js/spark-components/settings/teams/create-team.js"); 77829__webpack_require__(/*! ./settings/teams/pending-invitations */ "./resources/js/spark-components/settings/teams/pending-invitations.js"); 77830__webpack_require__(/*! ./settings/teams/current-teams */ "./resources/js/spark-components/settings/teams/current-teams.js"); 77831__webpack_require__(/*! ./settings/teams/team-settings */ "./resources/js/spark-components/settings/teams/team-settings.js"); 77832__webpack_require__(/*! ./settings/teams/team-profile */ "./resources/js/spark-components/settings/teams/team-profile.js"); 77833__webpack_require__(/*! ./settings/teams/update-team-photo */ "./resources/js/spark-components/settings/teams/update-team-photo.js"); 77834__webpack_require__(/*! ./settings/teams/update-team-name */ "./resources/js/spark-components/settings/teams/update-team-name.js"); 77835__webpack_require__(/*! ./settings/teams/team-membership */ "./resources/js/spark-components/settings/teams/team-membership.js"); 77836__webpack_require__(/*! ./settings/teams/send-invitation */ "./resources/js/spark-components/settings/teams/send-invitation.js"); 77837__webpack_require__(/*! ./settings/teams/mailed-invitations */ "./resources/js/spark-components/settings/teams/mailed-invitations.js"); 77838__webpack_require__(/*! ./settings/teams/team-members */ "./resources/js/spark-components/settings/teams/team-members.js"); 77839 77840/** 77841 * Security Settings Components... 77842 */ 77843__webpack_require__(/*! ./settings/security */ "./resources/js/spark-components/settings/security.js"); 77844__webpack_require__(/*! ./settings/security/update-password */ "./resources/js/spark-components/settings/security/update-password.js"); 77845__webpack_require__(/*! ./settings/security/enable-two-factor-auth */ "./resources/js/spark-components/settings/security/enable-two-factor-auth.js"); 77846__webpack_require__(/*! ./settings/security/disable-two-factor-auth */ "./resources/js/spark-components/settings/security/disable-two-factor-auth.js"); 77847 77848/** 77849 * API Settings Components... 77850 */ 77851__webpack_require__(/*! ./settings/api */ "./resources/js/spark-components/settings/api.js"); 77852__webpack_require__(/*! ./settings/api/create-token */ "./resources/js/spark-components/settings/api/create-token.js"); 77853__webpack_require__(/*! ./settings/api/tokens */ "./resources/js/spark-components/settings/api/tokens.js"); 77854 77855/** 77856 * Subscription Settings Components... 77857 */ 77858__webpack_require__(/*! ./settings/subscription */ "./resources/js/spark-components/settings/subscription.js"); 77859__webpack_require__(/*! ./settings/subscription/subscribe-stripe */ "./resources/js/spark-components/settings/subscription/subscribe-stripe.js"); 77860__webpack_require__(/*! ./settings/subscription/update-subscription */ "./resources/js/spark-components/settings/subscription/update-subscription.js"); 77861__webpack_require__(/*! ./settings/subscription/resume-subscription */ "./resources/js/spark-components/settings/subscription/resume-subscription.js"); 77862__webpack_require__(/*! ./settings/subscription/cancel-subscription */ "./resources/js/spark-components/settings/subscription/cancel-subscription.js"); 77863 77864/** 77865 * Payment Method Components... 77866 */ 77867__webpack_require__(/*! ./settings/payment-method-stripe */ "./resources/js/spark-components/settings/payment-method-stripe.js"); 77868__webpack_require__(/*! ./settings/payment-method/update-vat-id */ "./resources/js/spark-components/settings/payment-method/update-vat-id.js"); 77869__webpack_require__(/*! ./settings/payment-method/update-payment-method-stripe */ "./resources/js/spark-components/settings/payment-method/update-payment-method-stripe.js"); 77870__webpack_require__(/*! ./settings/payment-method/redeem-coupon */ "./resources/js/spark-components/settings/payment-method/redeem-coupon.js"); 77871 77872/** 77873 * Billing History Components... 77874 */ 77875__webpack_require__(/*! ./settings/invoices */ "./resources/js/spark-components/settings/invoices.js"); 77876__webpack_require__(/*! ./settings/invoices/update-extra-billing-information */ "./resources/js/spark-components/settings/invoices/update-extra-billing-information.js"); 77877__webpack_require__(/*! ./settings/invoices/invoice-list */ "./resources/js/spark-components/settings/invoices/invoice-list.js"); 77878 77879/** 77880 * Kiosk Components... 77881 */ 77882__webpack_require__(/*! ./kiosk/kiosk */ "./resources/js/spark-components/kiosk/kiosk.js"); 77883__webpack_require__(/*! ./kiosk/announcements */ "./resources/js/spark-components/kiosk/announcements.js"); 77884__webpack_require__(/*! ./kiosk/metrics */ "./resources/js/spark-components/kiosk/metrics.js"); 77885__webpack_require__(/*! ./kiosk/users */ "./resources/js/spark-components/kiosk/users.js"); 77886__webpack_require__(/*! ./kiosk/profile */ "./resources/js/spark-components/kiosk/profile.js"); 77887__webpack_require__(/*! ./kiosk/add-discount */ "./resources/js/spark-components/kiosk/add-discount.js"); 77888 77889/***/ }), 77890
77891/***/ "./resources/js/spark-components/kiosk/add-discount.js": 77892/*!*************************************************************!*\ 77893 !*** ./resources/js/spark-components/kiosk/add-discount.js ***! 77894 \*************************************************************/ 77895/*! no static exports found */ 77896/***/ (function(module, exports, __webpack_require__) { 77897 77898var base = __webpack_require__(/*! kiosk/add-discount */ "./vendor/laravel/spark-aurelius/resources/assets/js/kiosk/add-discount.js"); 77899Vue.component('spark-kiosk-add-discount', { 77900 mixins: [base] 77901}); 77902 77903/***/ }), 77904
77905/***/ "./resources/js/spark-components/kiosk/announcements.js": 77906/*!**************************************************************!*\ 77907 !*** ./resources/js/spark-components/kiosk/announcements.js ***! 77908 \**************************************************************/ 77909/*! no static exports found */ 77910/***/ (function(module, exports, __webpack_require__) { 77911 77912var base = __webpack_require__(/*! kiosk/announcements */ "./vendor/laravel/spark-aurelius/resources/assets/js/kiosk/announcements.js"); 77913Vue.component('spark-kiosk-announcements', { 77914 mixins: [base] 77915}); 77916 77917/***/ }), 77918
77919/***/ "./resources/js/spark-components/kiosk/kiosk.js": 77920/*!******************************************************!*\ 77921 !*** ./resources/js/spark-components/kiosk/kiosk.js ***! 77922 \******************************************************/ 77923/*! no static exports found */ 77924/***/ (function(module, exports, __webpack_require__) { 77925 77926var base = __webpack_require__(/*! kiosk/kiosk */ "./vendor/laravel/spark-aurelius/resources/assets/js/kiosk/kiosk.js"); 77927Vue.component('spark-kiosk', { 77928 mixins: [base] 77929}); 77930 77931/***/ }), 77932
77933/***/ "./resources/js/spark-components/kiosk/metrics.js": 77934/*!********************************************************!*\ 77935 !*** ./resources/js/spark-components/kiosk/metrics.js ***! 77936 \********************************************************/ 77937/*! no static exports found */ 77938/***/ (function(module, exports, __webpack_require__) { 77939 77940var base = __webpack_require__(/*! kiosk/metrics */ "./vendor/laravel/spark-aurelius/resources/assets/js/kiosk/metrics.js"); 77941Vue.component('spark-kiosk-metrics', { 77942 mixins: [base] 77943}); 77944 77945/***/ }), 77946
77947/***/ "./resources/js/spark-components/kiosk/profile.js": 77948/*!********************************************************!*\ 77949 !*** ./resources/js/spark-components/kiosk/profile.js ***! 77950 \********************************************************/ 77951/*! no static exports found */ 77952/***/ (function(module, exports, __webpack_require__) { 77953 77954var base = __webpack_require__(/*! kiosk/profile */ "./vendor/laravel/spark-aurelius/resources/assets/js/kiosk/profile.js"); 77955Vue.component('spark-kiosk-profile', { 77956 mixins: [base] 77957}); 77958 77959/***/ }), 77960
77961/***/ "./resources/js/spark-components/kiosk/users.js": 77962/*!******************************************************!*\ 77963 !*** ./resources/js/spark-components/kiosk/users.js ***! 77964 \******************************************************/ 77965/*! no static exports found */ 77966/***/ (function(module, exports, __webpack_require__) { 77967 77968var base = __webpack_require__(/*! kiosk/users */ "./vendor/laravel/spark-aurelius/resources/assets/js/kiosk/users.js"); 77969Vue.component('spark-kiosk-users', { 77970 mixins: [base] 77971}); 77972 77973/***/ }), 77974
77975/***/ "./resources/js/spark-components/navbar/navbar.js": 77976/*!********************************************************!*\ 77977 !*** ./resources/js/spark-components/navbar/navbar.js ***! 77978 \********************************************************/ 77979/*! no static exports found */ 77980/***/ (function(module, exports, __webpack_require__) { 77981 77982var base = __webpack_require__(/*! navbar/navbar */ "./vendor/laravel/spark-aurelius/resources/assets/js/navbar/navbar.js"); 77983Vue.component('spark-navbar', { 77984 mixins: [base] 77985}); 77986 77987/***/ }), 77988
77989/***/ "./resources/js/spark-components/notifications/notifications.js": 77990/*!**********************************************************************!*\ 77991 !*** ./resources/js/spark-components/notifications/notifications.js ***! 77992 \**********************************************************************/ 77993/*! no static exports found */ 77994/***/ (function(module, exports, __webpack_require__) { 77995 77996var base = __webpack_require__(/*! notifications/notifications */ "./vendor/laravel/spark-aurelius/resources/assets/js/notifications/notifications.js"); 77997Vue.component('spark-notifications', { 77998 mixins: [base] 77999}); 78000 78001/***/ }), 78002
78003/***/ "./resources/js/spark-components/settings/api.js": 78004/*!*******************************************************!*\ 78005 !*** ./resources/js/spark-components/settings/api.js ***! 78006 \*******************************************************/ 78007/*! no static exports found */ 78008/***/ (function(module, exports, __webpack_require__) { 78009 78010var base = __webpack_require__(/*! settings/api */ "./vendor/laravel/spark-aurelius/resources/assets/js/settings/api.js"); 78011Vue.component('spark-api', { 78012 mixins: [base] 78013}); 78014 78015/***/ }), 78016
78017/***/ "./resources/js/spark-components/settings/api/create-token.js": 78018/*!********************************************************************!*\ 78019 !*** ./resources/js/spark-components/settings/api/create-token.js ***! 78020 \********************************************************************/ 78021/*! no static exports found */ 78022/***/ (function(module, exports, __webpack_require__) { 78023 78024var base = __webpack_require__(/*! settings/api/create-token */ "./vendor/laravel/spark-aurelius/resources/assets/js/settings/api/create-token.js"); 78025Vue.component('spark-create-token', { 78026 mixins: [base] 78027}); 78028 78029/***/ }), 78030
78031/***/ "./resources/js/spark-components/settings/api/tokens.js": 78032/*!**************************************************************!*\ 78033 !*** ./resources/js/spark-components/settings/api/tokens.js ***! 78034 \**************************************************************/ 78035/*! no static exports found */ 78036/***/ (function(module, exports, __webpack_require__) { 78037 78038var base = __webpack_require__(/*! settings/api/tokens */ "./vendor/laravel/spark-aurelius/resources/assets/js/settings/api/tokens.js"); 78039Vue.component('spark-tokens', { 78040 mixins: [base] 78041}); 78042 78043/***/ }), 78044
78045/***/ "./resources/js/spark-components/settings/invoices.js": 78046/*!************************************************************!*\ 78047 !*** ./resources/js/spark-components/settings/invoices.js ***! 78048 \************************************************************/ 78049/*! no static exports found */ 78050/***/ (function(module, exports, __webpack_require__) { 78051 78052var base = __webpack_require__(/*! settings/invoices */ "./vendor/laravel/spark-aurelius/resources/assets/js/settings/invoices.js"); 78053Vue.component('spark-invoices', { 78054 mixins: [base] 78055}); 78056 78057/***/ }), 78058
78059/***/ "./resources/js/spark-components/settings/invoices/invoice-list.js": 78060/*!*************************************************************************!*\ 78061 !*** ./resources/js/spark-components/settings/invoices/invoice-list.js ***! 78062 \*************************************************************************/ 78063/*! no static exports found */ 78064/***/ (function(module, exports, __webpack_require__) { 78065 78066var base = __webpack_require__(/*! settings/invoices/invoice-list */ "./vendor/laravel/spark-aurelius/resources/assets/js/settings/invoices/invoice-list.js"); 78067Vue.component('spark-invoice-list', { 78068 mixins: [base] 78069}); 78070 78071/***/ }), 78072
78073/***/ "./resources/js/spark-components/settings/invoices/update-extra-billing-information.js": 78074/*!*********************************************************************************************!*\ 78075 !*** ./resources/js/spark-components/settings/invoices/update-extra-billing-information.js ***! 78076 \*********************************************************************************************/ 78077/*! no static exports found */ 78078/***/ (function(module, exports, __webpack_require__) { 78079 78080var base = __webpack_require__(/*! settings/invoices/update-extra-billing-information */ "./vendor/laravel/spark-aurelius/resources/assets/js/settings/invoices/update-extra-billing-information.js"); 78081Vue.component('spark-update-extra-billing-information', { 78082 mixins: [base] 78083}); 78084 78085/***/ }), 78086
78087/***/ "./resources/js/spark-components/settings/payment-method-stripe.js": 78088/*!*************************************************************************!*\ 78089 !*** ./resources/js/spark-components/settings/payment-method-stripe.js ***! 78090 \*************************************************************************/ 78091/*! no static exports found */ 78092/***/ (function(module, exports, __webpack_require__) { 78093 78094var base = __webpack_require__(/*! settings/payment-method-stripe */ "./vendor/laravel/spark-aurelius/resources/assets/js/settings/payment-method-stripe.js"); 78095Vue.component('spark-payment-method-stripe', { 78096 mixins: [base] 78097}); 78098 78099/***/ }), 78100
78101/***/ "./resources/js/spark-components/settings/payment-method/redeem-coupon.js": 78102/*!********************************************************************************!*\ 78103 !*** ./resources/js/spark-components/settings/payment-method/redeem-coupon.js ***! 78104 \********************************************************************************/ 78105/*! no static exports found */ 78106/***/ (function(module, exports, __webpack_require__) { 78107 78108var base = __webpack_require__(/*! settings/payment-method/redeem-coupon */ "./vendor/laravel/spark-aurelius/resources/assets/js/settings/payment-method/redeem-coupon.js"); 78109Vue.component('spark-redeem-coupon', { 78110 mixins: [base] 78111}); 78112 78113/***/ }), 78114
78115/***/ "./resources/js/spark-components/settings/payment-method/update-payment-method-stripe.js": 78116/*!***********************************************************************************************!*\ 78117 !*** ./resources/js/spark-components/settings/payment-method/update-payment-method-stripe.js ***! 78118 \***********************************************************************************************/ 78119/*! no static exports found */ 78120/***/ (function(module, exports, __webpack_require__) { 78121 78122var base = __webpack_require__(/*! settings/payment-method/update-payment-method-stripe */ "./vendor/laravel/spark-aurelius/resources/assets/js/settings/payment-method/update-payment-method-stripe.js"); 78123Vue.component('spark-update-payment-method-stripe', { 78124 mixins: [base] 78125}); 78126 78127/***/ }), 78128
78129/***/ "./resources/js/spark-components/settings/payment-method/update-vat-id.js": 78130/*!********************************************************************************!*\ 78131 !*** ./resources/js/spark-components/settings/payment-method/update-vat-id.js ***! 78132 \********************************************************************************/ 78133/*! no static exports found */ 78134/***/ (function(module, exports, __webpack_require__) { 78135 78136var base = __webpack_require__(/*! settings/payment-method/update-vat-id */ "./vendor/laravel/spark-aurelius/resources/assets/js/settings/payment-method/update-vat-id.js"); 78137Vue.component('spark-update-vat-id', { 78138 mixins: [base] 78139}); 78140 78141/***/ }), 78142
78143/***/ "./resources/js/spark-components/settings/profile.js": 78144/*!***********************************************************!*\ 78145 !*** ./resources/js/spark-components/settings/profile.js ***! 78146 \***********************************************************/ 78147/*! no static exports found */ 78148/***/ (function(module, exports, __webpack_require__) { 78149 78150var base = __webpack_require__(/*! settings/profile */ "./vendor/laravel/spark-aurelius/resources/assets/js/settings/profile.js"); 78151Vue.component('spark-profile', { 78152 mixins: [base] 78153}); 78154 78155/***/ }), 78156
78157/***/ "./resources/js/spark-components/settings/profile/update-contact-information.js": 78158/*!**************************************************************************************!*\ 78159 !*** ./resources/js/spark-components/settings/profile/update-contact-information.js ***! 78160 \**************************************************************************************/ 78161/*! no static exports found */ 78162/***/ (function(module, exports, __webpack_require__) { 78163 78164var base = __webpack_require__(/*! settings/profile/update-contact-information */ "./vendor/laravel/spark-aurelius/resources/assets/js/settings/profile/update-contact-information.js"); 78165Vue.component('spark-update-contact-information', { 78166 mixins: [base] 78167}); 78168 78169/***/ }), 78170
78171/***/ "./resources/js/spark-components/settings/profile/update-profile-photo.js": 78172/*!********************************************************************************!*\ 78173 !*** ./resources/js/spark-components/settings/profile/update-profile-photo.js ***! 78174 \********************************************************************************/ 78175/*! no static exports found */ 78176/***/ (function(module, exports, __webpack_require__) { 78177 78178var base = __webpack_require__(/*! settings/profile/update-profile-photo */ "./vendor/laravel/spark-aurelius/resources/assets/js/settings/profile/update-profile-photo.js"); 78179Vue.component('spark-update-profile-photo', { 78180 mixins: [base] 78181}); 78182 78183/***/ }), 78184
78185/***/ "./resources/js/spark-components/settings/security.js": 78186/*!************************************************************!*\ 78187 !*** ./resources/js/spark-components/settings/security.js ***! 78188 \************************************************************/ 78189/*! no static exports found */ 78190/***/ (function(module, exports, __webpack_require__) { 78191 78192var base = __webpack_require__(/*! settings/security */ "./vendor/laravel/spark-aurelius/resources/assets/js/settings/security.js"); 78193Vue.component('spark-security', { 78194 mixins: [base] 78195}); 78196 78197/***/ }), 78198
78199/***/ "./resources/js/spark-components/settings/security/disable-two-factor-auth.js": 78200/*!************************************************************************************!*\ 78201 !*** ./resources/js/spark-components/settings/security/disable-two-factor-auth.js ***! 78202 \************************************************************************************/ 78203/*! no static exports found */ 78204/***/ (function(module, exports, __webpack_require__) { 78205 78206var base = __webpack_require__(/*! settings/security/disable-two-factor-auth */ "./vendor/laravel/spark-aurelius/resources/assets/js/settings/security/disable-two-factor-auth.js"); 78207Vue.component('spark-disable-two-factor-auth', { 78208 mixins: [base] 78209}); 78210 78211/***/ }), 78212
78213/***/ "./resources/js/spark-components/settings/security/enable-two-factor-auth.js": 78214/*!***********************************************************************************!*\ 78215 !*** ./resources/js/spark-components/settings/security/enable-two-factor-auth.js ***! 78216 \***********************************************************************************/ 78217/*! no static exports found */ 78218/***/ (function(module, exports, __webpack_require__) { 78219 78220var base = __webpack_require__(/*! settings/security/enable-two-factor-auth */ "./vendor/laravel/spark-aurelius/resources/assets/js/settings/security/enable-two-factor-auth.js"); 78221Vue.component('spark-enable-two-factor-auth', { 78222 mixins: [base] 78223}); 78224 78225/***/ }), 78226
78227/***/ "./resources/js/spark-components/settings/security/update-password.js": 78228/*!****************************************************************************!*\ 78229 !*** ./resources/js/spark-components/settings/security/update-password.js ***! 78230 \****************************************************************************/ 78231/*! no static exports found */ 78232/***/ (function(module, exports, __webpack_require__) { 78233 78234var base = __webpack_require__(/*! settings/security/update-password */ "./vendor/laravel/spark-aurelius/resources/assets/js/settings/security/update-password.js"); 78235Vue.component('spark-update-password', { 78236 mixins: [base] 78237}); 78238 78239/***/ }), 78240
78241/***/ "./resources/js/spark-components/settings/settings.js": 78242/*!************************************************************!*\ 78243 !*** ./resources/js/spark-components/settings/settings.js ***! 78244 \************************************************************/ 78245/*! no static exports found */ 78246/***/ (function(module, exports, __webpack_require__) { 78247 78248var base = __webpack_require__(/*! settings/settings */ "./vendor/laravel/spark-aurelius/resources/assets/js/settings/settings.js"); 78249Vue.component('spark-settings', { 78250 mixins: [base] 78251}); 78252 78253/***/ }), 78254
78255/***/ "./resources/js/spark-components/settings/subscription.js": 78256/*!****************************************************************!*\ 78257 !*** ./resources/js/spark-components/settings/subscription.js ***! 78258 \****************************************************************/ 78259/*! no static exports found */ 78260/***/ (function(module, exports, __webpack_require__) { 78261 78262var base = __webpack_require__(/*! settings/subscription */ "./vendor/laravel/spark-aurelius/resources/assets/js/settings/subscription.js"); 78263Vue.component('spark-subscription', { 78264 mixins: [base] 78265}); 78266 78267/***/ }), 78268
78269/***/ "./resources/js/spark-components/settings/subscription/cancel-subscription.js": 78270/*!************************************************************************************!*\ 78271 !*** ./resources/js/spark-components/settings/subscription/cancel-subscription.js ***! 78272 \************************************************************************************/ 78273/*! no static exports found */ 78274/***/ (function(module, exports, __webpack_require__) { 78275 78276var base = __webpack_require__(/*! settings/subscription/cancel-subscription */ "./vendor/laravel/spark-aurelius/resources/assets/js/settings/subscription/cancel-subscription.js"); 78277Vue.component('spark-cancel-subscription', { 78278 mixins: [base] 78279}); 78280 78281/***/ }), 78282
78283/***/ "./resources/js/spark-components/settings/subscription/resume-subscription.js": 78284/*!************************************************************************************!*\ 78285 !*** ./resources/js/spark-components/settings/subscription/resume-subscription.js ***! 78286 \************************************************************************************/ 78287/*! no static exports found */ 78288/***/ (function(module, exports, __webpack_require__) { 78289 78290var base = __webpack_require__(/*! settings/subscription/resume-subscription */ "./vendor/laravel/spark-aurelius/resources/assets/js/settings/subscription/resume-subscription.js"); 78291Vue.component('spark-resume-subscription', { 78292 mixins: [base] 78293}); 78294 78295/***/ }), 78296
78297/***/ "./resources/js/spark-components/settings/subscription/subscribe-stripe.js": 78298/*!*********************************************************************************!*\ 78299 !*** ./resources/js/spark-components/settings/subscription/subscribe-stripe.js ***! 78300 \*********************************************************************************/ 78301/*! no static exports found */ 78302/***/ (function(module, exports, __webpack_require__) { 78303 78304var base = __webpack_require__(/*! settings/subscription/subscribe-stripe */ "./vendor/laravel/spark-aurelius/resources/assets/js/settings/subscription/subscribe-stripe.js"); 78305Vue.component('spark-subscribe-stripe', { 78306 mixins: [base] 78307}); 78308 78309/***/ }), 78310
78311/***/ "./resources/js/spark-components/settings/subscription/update-subscription.js": 78312/*!************************************************************************************!*\ 78313 !*** ./resources/js/spark-components/settings/subscription/update-subscription.js ***! 78314 \************************************************************************************/ 78315/*! no static exports found */ 78316/***/ (function(module, exports, __webpack_require__) { 78317 78318var base = __webpack_require__(/*! settings/subscription/update-subscription */ "./vendor/laravel/spark-aurelius/resources/assets/js/settings/subscription/update-subscription.js"); 78319Vue.component('spark-update-subscription', { 78320 mixins: [base] 78321}); 78322 78323/***/ }), 78324
78325/***/ "./resources/js/spark-components/settings/teams.js": 78326/*!*********************************************************!*\ 78327 !*** ./resources/js/spark-components/settings/teams.js ***! 78328 \*********************************************************/ 78329/*! no static exports found */ 78330/***/ (function(module, exports, __webpack_require__) { 78331 78332var base = __webpack_require__(/*! settings/teams */ "./vendor/laravel/spark-aurelius/resources/assets/js/settings/teams.js"); 78333Vue.component('spark-teams', { 78334 mixins: [base] 78335}); 78336 78337/***/ }), 78338
78339/***/ "./resources/js/spark-components/settings/teams/create-team.js": 78340/*!*********************************************************************!*\ 78341 !*** ./resources/js/spark-components/settings/teams/create-team.js ***! 78342 \*********************************************************************/ 78343/*! no static exports found */ 78344/***/ (function(module, exports, __webpack_require__) { 78345 78346var base = __webpack_require__(/*! settings/teams/create-team */ "./vendor/laravel/spark-aurelius/resources/assets/js/settings/teams/create-team.js"); 78347Vue.component('spark-create-team', { 78348 mixins: [base] 78349}); 78350 78351/***/ }), 78352
78353/***/ "./resources/js/spark-components/settings/teams/current-teams.js": 78354/*!***********************************************************************!*\ 78355 !*** ./resources/js/spark-components/settings/teams/current-teams.js ***! 78356 \***********************************************************************/ 78357/*! no static exports found */ 78358/***/ (function(module, exports, __webpack_require__) { 78359 78360var base = __webpack_require__(/*! settings/teams/current-teams */ "./vendor/laravel/spark-aurelius/resources/assets/js/settings/teams/current-teams.js"); 78361Vue.component('spark-current-teams', { 78362 mixins: [base] 78363}); 78364 78365/***/ }), 78366
78367/***/ "./resources/js/spark-components/settings/teams/mailed-invitations.js": 78368/*!****************************************************************************!*\ 78369 !*** ./resources/js/spark-components/settings/teams/mailed-invitations.js ***! 78370 \****************************************************************************/ 78371/*! no static exports found */ 78372/***/ (function(module, exports, __webpack_require__) { 78373 78374var base = __webpack_require__(/*! settings/teams/mailed-invitations */ "./vendor/laravel/spark-aurelius/resources/assets/js/settings/teams/mailed-invitations.js"); 78375Vue.component('spark-mailed-invitations', { 78376 mixins: [base] 78377}); 78378 78379/***/ }), 78380
78381/***/ "./resources/js/spark-components/settings/teams/pending-invitations.js": 78382/*!*****************************************************************************!*\ 78383 !*** ./resources/js/spark-components/settings/teams/pending-invitations.js ***! 78384 \*****************************************************************************/ 78385/*! no static exports found */ 78386/***/ (function(module, exports, __webpack_require__) { 78387 78388var base = __webpack_require__(/*! settings/teams/pending-invitations */ "./vendor/laravel/spark-aurelius/resources/assets/js/settings/teams/pending-invitations.js"); 78389Vue.component('spark-pending-invitations', { 78390 mixins: [base] 78391}); 78392 78393/***/ }), 78394
78395/***/ "./resources/js/spark-components/settings/teams/send-invitation.js": 78396/*!*************************************************************************!*\ 78397 !*** ./resources/js/spark-components/settings/teams/send-invitation.js ***! 78398 \*************************************************************************/ 78399/*! no static exports found */ 78400/***/ (function(module, exports, __webpack_require__) { 78401 78402var base = __webpack_require__(/*! settings/teams/send-invitation */ "./vendor/laravel/spark-aurelius/resources/assets/js/settings/teams/send-invitation.js"); 78403Vue.component('spark-send-invitation', { 78404 mixins: [base] 78405}); 78406 78407/***/ }), 78408
78409/***/ "./resources/js/spark-components/settings/teams/team-members.js": 78410/*!**********************************************************************!*\ 78411 !*** ./resources/js/spark-components/settings/teams/team-members.js ***! 78412 \**********************************************************************/ 78413/*! no static exports found */ 78414/***/ (function(module, exports, __webpack_require__) { 78415 78416var base = __webpack_require__(/*! settings/teams/team-members */ "./vendor/laravel/spark-aurelius/resources/assets/js/settings/teams/team-members.js"); 78417Vue.component('spark-team-members', { 78418 mixins: [base] 78419}); 78420 78421/***/ }), 78422
78423/***/ "./resources/js/spark-components/settings/teams/team-membership.js": 78424/*!*************************************************************************!*\ 78425 !*** ./resources/js/spark-components/settings/teams/team-membership.js ***! 78426 \*************************************************************************/ 78427/*! no static exports found */ 78428/***/ (function(module, exports, __webpack_require__) { 78429 78430var base = __webpack_require__(/*! settings/teams/team-membership */ "./vendor/laravel/spark-aurelius/resources/assets/js/settings/teams/team-membership.js"); 78431Vue.component('spark-team-membership', { 78432 mixins: [base] 78433}); 78434 78435/***/ }), 78436
78437/***/ "./resources/js/spark-components/settings/teams/team-profile.js": 78438/*!**********************************************************************!*\ 78439 !*** ./resources/js/spark-components/settings/teams/team-profile.js ***! 78440 \**********************************************************************/ 78441/*! no static exports found */ 78442/***/ (function(module, exports, __webpack_require__) { 78443 78444var base = __webpack_require__(/*! settings/teams/team-profile */ "./vendor/laravel/spark-aurelius/resources/assets/js/settings/teams/team-profile.js"); 78445Vue.component('spark-team-profile', { 78446 mixins: [base] 78447}); 78448 78449/***/ }), 78450
78451/***/ "./resources/js/spark-components/settings/teams/team-settings.js": 78452/*!***********************************************************************!*\ 78453 !*** ./resources/js/spark-components/settings/teams/team-settings.js ***! 78454 \***********************************************************************/ 78455/*! no static exports found */ 78456/***/ (function(module, exports, __webpack_require__) { 78457 78458var base = __webpack_require__(/*! settings/teams/team-settings */ "./vendor/laravel/spark-aurelius/resources/assets/js/settings/teams/team-settings.js"); 78459Vue.component('spark-team-settings', { 78460 mixins: [base] 78461}); 78462 78463/***/ }), 78464
78465/***/ "./resources/js/spark-components/settings/teams/update-team-name.js": 78466/*!**************************************************************************!*\ 78467 !*** ./resources/js/spark-components/settings/teams/update-team-name.js ***! 78468 \**************************************************************************/ 78469/*! no static exports found */ 78470/***/ (function(module, exports, __webpack_require__) { 78471 78472var base = __webpack_require__(/*! settings/teams/update-team-name */ "./vendor/laravel/spark-aurelius/resources/assets/js/settings/teams/update-team-name.js"); 78473Vue.component('spark-update-team-name', { 78474 mixins: [base] 78475}); 78476 78477/***/ }), 78478
78479/***/ "./resources/js/spark-components/settings/teams/update-team-photo.js": 78480/*!***************************************************************************!*\ 78481 !*** ./resources/js/spark-components/settings/teams/update-team-photo.js ***! 78482 \***************************************************************************/ 78483/*! no static exports found */ 78484/***/ (function(module, exports, __webpack_require__) { 78485 78486var base = __webpack_require__(/*! settings/teams/update-team-photo */ "./vendor/laravel/spark-aurelius/resources/assets/js/settings/teams/update-team-photo.js"); 78487Vue.component('spark-update-team-photo', { 78488 mixins: [base] 78489}); 78490 78491/***/ }), 78492
78493/***/ "./resources/sass/app-rtl.scss": 78494/*!*************************************!*\ 78495 !*** ./resources/sass/app-rtl.scss ***! 78496 \*************************************/ 78497/*! no static exports found */ 78498/***/ (function(module, exports) { 78499 78500// removed by extract-text-webpack-plugin 78501 78502/***/ }), 78503
78504/***/ "./resources/sass/app.scss": 78505/*!*********************************!*\ 78506 !*** ./resources/sass/app.scss ***! 78507 \*********************************/ 78508/*! no static exports found */ 78509/***/ (function(module, exports) { 78510 78511// removed by extract-text-webpack-plugin 78512 78513/***/ }), 78514
78515/***/ "./vendor/laravel/spark-aurelius/resources/assets/js/auth/register-stripe.js": 78516/*!***********************************************************************************!*\ 78517 !*** ./vendor/laravel/spark-aurelius/resources/assets/js/auth/register-stripe.js ***! 78518 \***********************************************************************************/ 78519/*! no static exports found */ 78520/***/ (function(module, exports, __webpack_require__) { 78521 78522module.exports = { 78523 /** 78524 * Load mixins for the component. 78525 */ 78526 mixins: [__webpack_require__(/*! ./../mixins/register */ "./vendor/laravel/spark-aurelius/resources/assets/js/mixins/register.js"), __webpack_require__(/*! ./../mixins/plans */ "./vendor/laravel/spark-aurelius/resources/assets/js/mixins/plans.js"), __webpack_require__(/*! ./../mixins/vat */ "./vendor/laravel/spark-aurelius/resources/assets/js/mixins/vat.js"), __webpack_require__(/*! ./../mixins/stripe */ "./vendor/laravel/spark-aurelius/resources/assets/js/mixins/stripe.js")], 78527 /** 78528 * The component's data. 78529 */ 78530 data: function data() { 78531 return { 78532 query: null, 78533 cardElement: null, 78534 coupon: null, 78535 invalidCoupon: false, 78536 country: null, 78537 taxRate: 0, 78538 registerForm: $.extend(true, new SparkForm({ 78539 stripe_payment_method: '', 78540 plan: '', 78541 team: '', 78542 team_slug: '', 78543 name: '', 78544 email: '', 78545 password: '', 78546 password_confirmation: '', 78547 address: '', 78548 address_line_2: '', 78549 city: '', 78550 state: '', 78551 zip: '', 78552 country: 'US', 78553 vat_id: '', 78554 terms: false, 78555 coupon: null, 78556 invitation: null 78557 }), Spark.forms.register), 78558 cardForm: new SparkForm({ 78559 name: '', 78560 number: '', 78561 cvc: '', 78562 month: '', 78563 year: '' 78564 }) 78565 }; 78566 }, 78567 watch: { 78568 /** 78569 * Watch for changes on the entire billing address. 78570 */ 78571 'currentBillingAddress': function currentBillingAddress(value) { 78572 if (!Spark.collectsEuropeanVat) { 78573 return; 78574 } 78575 this.refreshTaxRate(this.registerForm); 78576 }, 78577 /** 78578 * Watch the team name for changes. 78579 */ 78580 'registerForm.team': function registerFormTeam(val, oldVal) { 78581 if (this.registerForm.team_slug === '' || this.registerForm.team_slug === oldVal.toLowerCase().replace(/[\s\W-]+/g, '-')) { 78582 this.registerForm.team_slug = val.toLowerCase().replace(/[\s\W-]+/g, '-'); 78583 } 78584 }, 78585 /** 78586 * Watch for changes on the selected plan. 78587 */ 78588 selectedPlan: function selectedPlan(val) { 78589 var _this = this; 78590 if (!val || val.price === 0) { 78591 this.cardElement = null; 78592 return; 78593 } 78594 if (!this.cardElement) { 78595 this.$nextTick(function () { 78596 _this.cardElement = _this.createCardElement('#card-element'); 78597 }); 78598 } 78599 } 78600 }, 78601 /** 78602 * The component has been created by Vue. 78603 */ 78604 created: function created() { 78605 this.getPlans(); 78606 this.guessCountry(); 78607 this.query = URI(document.URL).query(true); 78608 if (this.query.coupon) { 78609 this.getCoupon(); 78610 this.registerForm.coupon = this.query.coupon; 78611 } 78612 if (this.query.invitation) { 78613 this.getInvitation(); 78614 this.registerForm.invitation = this.query.invitation; 78615 } 78616 }, 78617 methods: { 78618 /** 78619 * Attempt to guess the user's country. 78620 */ 78621 guessCountry: function guessCountry() { 78622 var _this2 = this; 78623 axios.get('/geocode/country').then(function (response) { 78624 if (response.data != 'ZZ' && response.data != '') { 78625 _this2.registerForm.country = response.data; 78626 } 78627 })["catch"](function (response) { 78628 // 78629 }); 78630 }, 78631 /** 78632 * Get the coupon specified in the query string. 78633 */ 78634 getCoupon: function getCoupon() { 78635 var _this3 = this; 78636 axios.get('/coupon/' + this.query.coupon).then(function (response) { 78637 _this3.coupon = response.data; 78638 })["catch"](function (response) { 78639 _this3.invalidCoupon = true; 78640 }); 78641 }, 78642 /** 78643 * Attempt to register with the application. 78644 */ 78645 register: function register() { 78646 var _this4 = this; 78647 this.cardForm.errors.forget(); 78648 this.registerForm.busy = true; 78649 this.registerForm.errors.forget();
78650 if (!Spark.cardUpFront || this.registerForm.invitation || this.selectedPlan.price === 0) { 78651 return this.sendRegistration(); 78652 } 78653 var payload = { 78654 name: this.cardForm.name, 78655 address: { 78656 line1: this.registerForm.address || '', 78657 line2: this.registerForm.address_line_2 || '', 78658 city: this.registerForm.city || '', 78659 state: this.registerForm.state || '', 78660 postal_code: this.registerForm.zip || '', 78661 country: this.registerForm.country || '' 78662 } 78663 }; 78664 this.generateToken(function (secret) { 78665 _this4.stripe.handleCardSetup(secret, _this4.cardElement, { 78666 payment_method_data: { 78667 billing_details: payload 78668 } 78669 }).then(function (response) { 78670 if (response.error) { 78671 _this4.cardForm.errors.set({ 78672 card: [response.error.message] 78673 }); 78674 _this4.registerForm.busy = false; 78675 } else { 78676 _this4.sendRegistration(response.setupIntent.payment_method); 78677 } 78678 }); 78679 }); 78680 }, 78681 /* 78682 * After obtaining the Stripe token, send the registration to Spark. 78683 */ 78684 sendRegistration: function sendRegistration(paymentMethod) { 78685 this.registerForm.stripe_payment_method = paymentMethod; 78686 Spark.post('/register', this.registerForm).then(function (response) { 78687 window.location = response.redirect; 78688 }); 78689 } 78690 }, 78691 computed: { 78692 /** 78693 * Determine if the selected country collects European VAT. 78694 */ 78695 countryCollectsVat: function countryCollectsVat() { 78696 return this.collectsVat(this.registerForm.country); 78697 }, 78698 /** 78699 * Get the displayable discount for the coupon. 78700 */ 78701 discount: function discount() { 78702 if (this.coupon) { 78703 if (this.coupon.percent_off) { 78704 return this.coupon.percent_off + '%'; 78705 } else { 78706 return Vue.filter('currency')(this.coupon.amount_off / 100); 78707 } 78708 } 78709 }, 78710 /** 78711 * Get the current billing address from the register form. 78712 * 78713 * This used primarily for watching. 78714 */ 78715 currentBillingAddress: function currentBillingAddress() { 78716 return this.registerForm.address + this.registerForm.address_line_2 + this.registerForm.city + this.registerForm.state + this.registerForm.zip + this.registerForm.country + this.registerForm.vat_id; 78717 } 78718 } 78719}; 78720 78721/***/ }), 78722
78723/***/ "./vendor/laravel/spark-aurelius/resources/assets/js/filters.js": 78724/*!**********************************************************************!*\ 78725 !*** ./vendor/laravel/spark-aurelius/resources/assets/js/filters.js ***! 78726 \**********************************************************************/ 78727/*! no static exports found */ 78728/***/ (function(module, exports, __webpack_require__) { 78729 78730/** 78731 * Format the given date. 78732 */ 78733Vue.filter('date', function (value) { 78734 return moment.utc(value).local().format('MMMM Do, YYYY'); 78735}); 78736 78737/** 78738 * Format the given date as a timestamp. 78739 */ 78740Vue.filter('datetime', function (value) { 78741 return moment.utc(value).local().format('MMMM Do, YYYY h:mm A'); 78742}); 78743 78744/** 78745 * Format the given date into a relative time. 78746 */ 78747Vue.filter('relative', function (value) { 78748 return moment.utc(value).local().locale('en-short').fromNow(); 78749}); 78750 78751/** 78752 * Convert the first character to upper case. 78753 * 78754 * Source: https://github.com/vuejs/vue/blob/1.0/src/filters/index.js#L37 78755 */ 78756Vue.filter('capitalize', function (value) { 78757 if (!value && value !== 0) { 78758 return ''; 78759 } 78760 return value.toString().charAt(0).toUpperCase() + value.slice(1); 78761}); 78762 78763/** 78764 * Format the given money value. 78765 */ 78766Vue.filter('currency', function (value) { 78767 var Dinero = __webpack_require__(/*! dinero.js */ "./node_modules/dinero.js/build/esm/dinero.js")["default"]; 78768 return Dinero({ 78769 amount: Math.round(value * 100), 78770 currency: window.Spark.currency 78771 }).setLocale(window.Spark.currencyLocale).toFormat('$0,0.00'); 78772}); 78773 78774/***/ }), 78775
78776/***/ "./vendor/laravel/spark-aurelius/resources/assets/js/forms/bootstrap.js": 78777/*!******************************************************************************!*\ 78778 !*** ./vendor/laravel/spark-aurelius/resources/assets/js/forms/bootstrap.js ***! 78779 \******************************************************************************/ 78780/*! no static exports found */ 78781/***/ (function(module, exports, __webpack_require__) { 78782 78783/** 78784 * Initialize the Spark form extension points. 78785 */ 78786Spark.forms = { 78787 register: {}, 78788 updateContactInformation: {}, 78789 updateTeamMember: {} 78790}; 78791 78792/** 78793 * Load the SparkForm helper class. 78794 */ 78795__webpack_require__(/*! ./form */ "./vendor/laravel/spark-aurelius/resources/assets/js/forms/form.js"); 78796 78797/** 78798 * Define the SparkFormError collection class. 78799 */ 78800__webpack_require__(/*! ./errors */ "./vendor/laravel/spark-aurelius/resources/assets/js/forms/errors.js"); 78801 78802/** 78803 * Add additional HTTP / form helpers to the Spark object. 78804 */ 78805$.extend(Spark, __webpack_require__(/*! ./http */ "./vendor/laravel/spark-aurelius/resources/assets/js/forms/http.js")); 78806 78807/***/ }), 78808
78809/***/ "./vendor/laravel/spark-aurelius/resources/assets/js/forms/errors.js": 78810/*!***************************************************************************!*\ 78811 !*** ./vendor/laravel/spark-aurelius/resources/assets/js/forms/errors.js ***! 78812 \***************************************************************************/ 78813/*! no static exports found */ 78814/***/ (function(module, exports) { 78815 78816function _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); } 78817/** 78818 * Spark form error collection class. 78819 */ 78820window.SparkFormErrors = function () { 78821 this.errors = {}; 78822 78823 /** 78824 * Determine if the collection has any errors. 78825 */ 78826 this.hasErrors = function () { 78827 return !_.isEmpty(this.errors); 78828 }; 78829 78830 /** 78831 * Determine if the collection has errors for a given field. 78832 */ 78833 this.has = function (field) { 78834 return _.indexOf(_.keys(this.errors), field) > -1; 78835 }; 78836 78837 /** 78838 * Get all of the raw errors for the collection. 78839 */ 78840 this.all = function () { 78841 return this.errors; 78842 }; 78843 78844 /** 78845 * Get all of the errors for the collection in a flat array. 78846 */ 78847 this.flatten = function () { 78848 return _.flatten(_.toArray(this.errors)); 78849 }; 78850 78851 /** 78852 * Get the first error message for a given field. 78853 */ 78854 this.get = function (field) { 78855 if (this.has(field)) { 78856 return this.errors[field][0]; 78857 } 78858 }; 78859 78860 /** 78861 * Set the raw errors for the collection. 78862 */ 78863 this.set = function (errors) { 78864 if (_typeof(errors) === 'object') { 78865 this.errors = errors; 78866 } else { 78867 this.errors = { 78868 'form': [__('Something went wrong. Please try again or contact customer support.')] 78869 }; 78870 } 78871 }; 78872 78873 /** 78874 * Remove errors from the collection. 78875 */ 78876 this.forget = function (field) { 78877 if (typeof field === 'undefined') { 78878 this.errors = {}; 78879 } else { 78880 Vue["delete"](this.errors, field); 78881 } 78882 }; 78883}; 78884 78885/***/ }), 78886
78887/***/ "./vendor/laravel/spark-aurelius/resources/assets/js/forms/form.js": 78888/*!*************************************************************************!*\ 78889 !*** ./vendor/laravel/spark-aurelius/resources/assets/js/forms/form.js ***! 78890 \*************************************************************************/ 78891/*! no static exports found */ 78892/***/ (function(module, exports) { 78893 78894/** 78895 * SparkForm helper class. Used to set common properties on all forms. 78896 */ 78897window.SparkForm = function (data) { 78898 var form = this; 78899 var initialData = data; 78900 $.extend(this, data); 78901 78902 /** 78903 * Create the form error helper instance. 78904 */ 78905 this.errors = new SparkFormErrors(); 78906 this.busy = false; 78907 this.successful = false; 78908 78909 /** 78910 * Start processing the form. 78911 */ 78912 this.startProcessing = function () { 78913 form.errors.forget(); 78914 form.busy = true; 78915 form.successful = false; 78916 }; 78917 78918 /** 78919 * Finish processing the form. 78920 */ 78921 this.finishProcessing = function () { 78922 form.busy = false; 78923 form.successful = true; 78924 }; 78925 78926 /** 78927 * Reset the form to its original state. 78928 */ 78929 this.reset = function () { 78930 $.extend(form, initialData); 78931 form.resetStatus(); 78932 }; 78933 78934 /** 78935 * Reset the errors and other state for the form. 78936 */ 78937 this.resetStatus = function () { 78938 form.errors.forget(); 78939 form.busy = false; 78940 form.successful = false; 78941 }; 78942 78943 /** 78944 * Set the errors on the form. 78945 */ 78946 this.setErrors = function (errors) { 78947 form.busy = false; 78948 form.errors.set(errors); 78949 }; 78950}; 78951 78952/***/ }), 78953
78954/***/ "./vendor/laravel/spark-aurelius/resources/assets/js/forms/http.js": 78955/*!*************************************************************************!*\ 78956 !*** ./vendor/laravel/spark-aurelius/resources/assets/js/forms/http.js ***! 78957 \*************************************************************************/ 78958/*! no static exports found */ 78959/***/ (function(module, exports) { 78960 78961module.exports = { 78962 /** 78963 * Helper method for making POST HTTP requests. 78964 */ 78965 post: function post(uri, form) { 78966 return Spark.sendForm('post', uri, form); 78967 }, 78968 /** 78969 * Helper method for making PUT HTTP requests. 78970 */ 78971 put: function put(uri, form) { 78972 return Spark.sendForm('put', uri, form); 78973 }, 78974 /** 78975 * Helper method for making PATCH HTTP requests. 78976 */ 78977 patch: function patch(uri, form) { 78978 return Spark.sendForm('patch', uri, form); 78979 }, 78980 /** 78981 * Helper method for making DELETE HTTP requests. 78982 */ 78983 "delete": function _delete(uri, form) { 78984 return Spark.sendForm('delete', uri, form); 78985 }, 78986 /** 78987 * Send the form to the back-end server. 78988 * 78989 * This function will clear old errors, update "busy" status, etc. 78990 */ 78991 sendForm: function sendForm(method, uri, form) { 78992 return new Promise(function (resolve, reject) { 78993 form.startProcessing(); 78994 axios[method](uri, JSON.parse(JSON.stringify(form))).then(function (response) { 78995 form.finishProcessing(); 78996 resolve(response.data); 78997 })["catch"](function (errors) { 78998 form.setErrors(errors.response.data.errors); 78999 reject(errors.response.data); 79000 }); 79001 }); 79002 } 79003}; 79004 79005/***/ }), 79006
79007/***/ "./vendor/laravel/spark-aurelius/resources/assets/js/kiosk/add-discount.js": 79008/*!*********************************************************************************!*\ 79009 !*** ./vendor/laravel/spark-aurelius/resources/assets/js/kiosk/add-discount.js ***! 79010 \*********************************************************************************/ 79011/*! no static exports found */ 79012/***/ (function(module, exports, __webpack_require__) { 79013 79014function kioskAddDiscountForm() { 79015 return { 79016 type: 'amount', 79017 value: null, 79018 duration: 'once', 79019 months: null 79020 }; 79021} 79022module.exports = { 79023 mixins: [__webpack_require__(/*! ./../mixins/discounts */ "./vendor/laravel/spark-aurelius/resources/assets/js/mixins/discounts.js")], 79024 /** 79025 * The component's data. 79026 */ 79027 data: function data() { 79028 return { 79029 loadingCurrentDiscount: false, 79030 currentDiscount: null, 79031 discountingUser: null, 79032 form: new SparkForm(kioskAddDiscountForm()) 79033 }; 79034 }, 79035 /** 79036 * The component has been created by Vue. 79037 */ 79038 created: function created() { 79039 var self = this; 79040 Bus.$on('addDiscount', function (user) { 79041 self.form = new SparkForm(kioskAddDiscountForm()); 79042 self.setUser(user); 79043 $('#modal-add-discount').modal('show'); 79044 }); 79045 }, 79046 methods: { 79047 /** 79048 * Set the user receiving teh discount. 79049 */ 79050 setUser: function setUser(user) { 79051 this.discountingUser = user; 79052 this.getCurrentDiscountForUser(user); 79053 }, 79054 /** 79055 * Apply the discount to the user. 79056 */ 79057 applyDiscount: function applyDiscount() { 79058 Spark.post('/spark/kiosk/users/discount/' + this.discountingUser.id, this.form).then(function () { 79059 $('#modal-add-discount').modal('hide'); 79060 }); 79061 } 79062 } 79063}; 79064 79065/***/ }), 79066
79067/***/ "./vendor/laravel/spark-aurelius/resources/assets/js/kiosk/announcements.js": 79068/*!**********************************************************************************!*\ 79069 !*** ./vendor/laravel/spark-aurelius/resources/assets/js/kiosk/announcements.js ***! 79070 \**********************************************************************************/ 79071/*! no static exports found */ 79072/***/ (function(module, exports) { 79073 79074var announcementsCreateForm = function announcementsCreateForm() { 79075 return { 79076 body: '', 79077 action_text: '', 79078 action_url: '' 79079 }; 79080}; 79081module.exports = { 79082 /** 79083 * The component's data. 79084 */ 79085 data: function data() { 79086 return { 79087 announcements: [], 79088 updatingAnnouncement: null, 79089 deletingAnnouncement: null, 79090 createForm: new SparkForm(announcementsCreateForm()), 79091 updateForm: new SparkForm(announcementsCreateForm()), 79092 deleteForm: new SparkForm({}) 79093 }; 79094 }, 79095 /** 79096 * The component has been created by Vue. 79097 */ 79098 created: function created() { 79099 var self = this; 79100 Bus.$on('sparkHashChanged', function (hash, parameters) { 79101 if (hash === 'announcements' && self.announcements.length === 0) { 79102 self.getAnnouncements(); 79103 } 79104 }); 79105 }, 79106 methods: { 79107 /** 79108 * Get all of the announcements. 79109 */ 79110 getAnnouncements: function getAnnouncements() { 79111 var _this = this; 79112 axios.get('/spark/kiosk/announcements').then(function (response) { 79113 _this.announcements = response.data; 79114 }); 79115 }, 79116 /** 79117 * Create a new announcement. 79118 */ 79119 create: function create() { 79120 var _this2 = this; 79121 Spark.post('/spark/kiosk/announcements', this.createForm).then(function () { 79122 _this2.createForm = new SparkForm(announcementsCreateForm()); 79123 _this2.getAnnouncements(); 79124 }); 79125 }, 79126 /** 79127 * Edit the given announcement. 79128 */ 79129 editAnnouncement: function editAnnouncement(announcement) { 79130 this.updatingAnnouncement = announcement; 79131 this.updateForm.icon = announcement.icon; 79132 this.updateForm.body = announcement.body; 79133 this.updateForm.action_text = announcement.action_text; 79134 this.updateForm.action_url = announcement.action_url; 79135 $('#modal-update-announcement').modal('show'); 79136 }, 79137 /** 79138 * Update the specified announcement. 79139 */ 79140 update: function update() { 79141 var _this3 = this; 79142 Spark.put('/spark/kiosk/announcements/' + this.updatingAnnouncement.id, this.updateForm).then(function () { 79143 _this3.getAnnouncements(); 79144 $('#modal-update-announcement').modal('hide'); 79145 }); 79146 }, 79147 /** 79148 * Show the approval dialog for deleting an announcement. 79149 */ 79150 approveAnnouncementDelete: function approveAnnouncementDelete(announcement) { 79151 this.deletingAnnouncement = announcement; 79152 $('#modal-delete-announcement').modal('show'); 79153 }, 79154 /** 79155 * Delete the specified announcement. 79156 */ 79157 deleteAnnouncement: function deleteAnnouncement() { 79158 var _this4 = this; 79159 Spark["delete"]('/spark/kiosk/announcements/' + this.deletingAnnouncement.id, this.deleteForm).then(function () { 79160 _this4.getAnnouncements(); 79161 $('#modal-delete-announcement').modal('hide'); 79162 }); 79163 } 79164 } 79165}; 79166 79167/***/ }), 79168
79169/***/ "./vendor/laravel/spark-aurelius/resources/assets/js/kiosk/kiosk.js": 79170/*!**************************************************************************!*\ 79171 !*** ./vendor/laravel/spark-aurelius/resources/assets/js/kiosk/kiosk.js ***! 79172 \**************************************************************************/ 79173/*! no static exports found */ 79174/***/ (function(module, exports, __webpack_require__) { 79175 79176module.exports = { 79177 props: ['user'], 79178 /** 79179 * Load mixins for the component. 79180 */ 79181 mixins: [__webpack_require__(/*! ./../mixins/tab-state */ "./vendor/laravel/spark-aurelius/resources/assets/js/mixins/tab-state.js")], 79182 /** 79183 * Prepare the component. 79184 */ 79185 mounted: function mounted() { 79186 this.usePushStateForTabs('.spark-settings-tabs'); 79187 }, 79188 /** 79189 * The component has been created by Vue. 79190 */ 79191 created: function created() { 79192 Bus.$on('sparkHashChanged', function (hash, parameters) { 79193 if (hash === 'users') { 79194 setTimeout(function () { 79195 $('#kiosk-users-search').focus(); 79196 }, 150); 79197 } 79198 return true; 79199 }); 79200 } 79201}; 79202 79203/***/ }), 79204
79205/***/ "./vendor/laravel/spark-aurelius/resources/assets/js/kiosk/metrics.js": 79206/*!****************************************************************************!*\ 79207 !*** ./vendor/laravel/spark-aurelius/resources/assets/js/kiosk/metrics.js ***! 79208 \****************************************************************************/ 79209/*! no static exports found */ 79210/***/ (function(module, exports) { 79211 79212module.exports = { 79213 props: ['user'], 79214 /** 79215 * The component's data. 79216 */ 79217 data: function data() { 79218 return { 79219 monthlyRecurringRevenue: 0, 79220 yearlyRecurringRevenue: 0, 79221 totalVolume: 0, 79222 genericTrialUsers: 0, 79223 indicators: [], 79224 lastMonthsIndicators: null, 79225 lastYearsIndicators: null, 79226 plans: [] 79227 }; 79228 }, 79229 /** 79230 * The component has been created by Vue. 79231 */ 79232 created: function created() { 79233 var self = this; 79234 Bus.$on('sparkHashChanged', function (hash, parameters) { 79235 if (hash === 'metrics' && self.yearlyRecurringRevenue === 0) { 79236 self.getRevenue(); 79237 self.getPlans(); 79238 self.getTrialUsers(); 79239 self.getPerformanceIndicators(); 79240 } 79241 }); 79242 }, 79243 methods: { 79244 /** 79245 * Get the revenue information for the application. 79246 */ 79247 getRevenue: function getRevenue() { 79248 var _this = this; 79249 axios.get('/spark/kiosk/performance-indicators/revenue').then(function (response) { 79250 _this.yearlyRecurringRevenue = response.data.yearlyRecurringRevenue; 79251 _this.monthlyRecurringRevenue = response.data.monthlyRecurringRevenue; 79252 _this.totalVolume = response.data.totalVolume; 79253 }); 79254 }, 79255 /** 79256 * Get the subscriber information for the application. 79257 */ 79258 getPlans: function getPlans() { 79259 var _this2 = this; 79260 axios.get('/spark/kiosk/performance-indicators/plans').then(function (response) { 79261 _this2.plans = response.data; 79262 }); 79263 }, 79264 /** 79265 * Get the number of users that are on a generic trial. 79266 */ 79267 getTrialUsers: function getTrialUsers() { 79268 var _this3 = this; 79269 axios.get('/spark/kiosk/performance-indicators/trialing').then(function (response) { 79270 _this3.genericTrialUsers = parseInt(response.data); 79271 }); 79272 }, 79273 /** 79274 * Get the performance indicators for the application. 79275 */ 79276 getPerformanceIndicators: function getPerformanceIndicators() { 79277 var _this4 = this; 79278 axios.get('/spark/kiosk/performance-indicators').then(function (response) { 79279 _this4.indicators = response.data.indicators; 79280 _this4.lastMonthsIndicators = response.data.last_month; 79281 _this4.lastYearsIndicators = response.data.last_year; 79282 Vue.nextTick(function () { 79283 _this4.drawCharts(); 79284 }); 79285 }); 79286 }, 79287 /** 79288 * Draw the performance indicator charts. 79289 */ 79290 drawCharts: function drawCharts() { 79291 this.drawMonthlyRecurringRevenueChart(); 79292 this.drawYearlyRecurringRevenueChart(); 79293 this.drawDailyVolumeChart(); 79294 this.drawNewUsersChart(); 79295 }, 79296 /** 79297 * Draw the monthly recurring revenue chart. 79298 */ 79299 drawMonthlyRecurringRevenueChart: function drawMonthlyRecurringRevenueChart() { 79300 return this.drawCurrencyChart('monthlyRecurringRevenueChart', 30, function (indicator) { 79301 return indicator.monthly_recurring_revenue; 79302 }); 79303 }, 79304 /** 79305 * Draw the yearly recurring revenue chart. 79306 */ 79307 drawYearlyRecurringRevenueChart: function drawYearlyRecurringRevenueChart() { 79308 return this.drawCurrencyChart('yearlyRecurringRevenueChart', 30, function (indicator) { 79309 return indicator.yearly_recurring_revenue; 79310 }); 79311 }, 79312 /** 79313 * Draw the daily volume chart. 79314 */ 79315 drawDailyVolumeChart: function drawDailyVolumeChart() { 79316 return this.drawCurrencyChart('dailyVolumeChart', 14, function (indicator) { 79317 return indicator.daily_volume; 79318 }); 79319 }, 79320 /** 79321 * Draw the daily new users chart. 79322 */ 79323 drawNewUsersChart: function drawNewUsersChart() { 79324 return this.drawChart('newUsersChart', 14, function (indicator) { 79325 return indicator.new_users; 79326 }); 79327 }, 79328 /** 79329 * Draw a chart with currency formatting on the Y-Axis. 79330 */ 79331 drawCurrencyChart: function drawCurrencyChart(id, days, dataGatherer) { 79332 return this.drawChart(id, days, dataGatherer, function (value) { 79333 return Vue.filter('currency')(value.value); 79334 }); 79335 }, 79336 /** 79337 * Draw a chart with the given parameters. 79338 */ 79339 drawChart: function drawChart(id, days, dataGatherer, scaleLabelFormatter) { 79340 var dataset = JSON.parse(JSON.stringify(this.baseChartDataSet)); 79341 dataset.data = _.map(_.takeRight(this.indicators, days), dataGatherer); 79342 79343 // Here we will build out the dataset for the chart. This will contain the dates and data 79344 // points for the chart. Each chart on the Kiosk only gets one dataset so we only need 79345 // to add it a single element to this array here. But, charts could have more later. 79346 var data = { 79347 labels: _.takeRight(this.availableChartDates, days), 79348 datasets: [dataset] 79349 }; 79350 var options = { 79351 responsive: true 79352 }; 79353 79354 // If a scale label formatter was passed, we will hand that to this chart library to fill 79355 // out the Y-Axis labels. This is particularly useful when we want to format them as a 79356 // currency as we do on all of our revenue charts that we display on the Kiosk here. 79357 if (arguments.length === 4) { 79358 options.scaleLabel = scaleLabelFormatter; 79359 } 79360 var chart = new Chart(document.getElementById(id).getContext('2d'), { 79361 type: 'line', 79362 data: data, 79363 options: options 79364 }); 79365 }, 79366 /** 79367 * Calculate the percent change between two numbers. 79368 */ 79369 percentChange: function percentChange(current, previous) { 79370 var change = Math.round((current - previous) / previous * 100); 79371 return change > 0 ? '+' + change.toFixed(0) : change.toFixed(0); 79372 } 79373 }, 79374 computed: { 79375 /** 79376 * Calculate the monthly change in monthly recurring revenue. 79377 */ 79378 monthlyChangeInMonthlyRecurringRevenue: function monthlyChangeInMonthlyRecurringRevenue() { 79379 if (!this.lastMonthsIndicators || !this.indicators) { 79380 return false;
79381 } 79382 return this.percentChange(_.takeRight(this.indicators).monthly_recurring_revenue, this.lastMonthsIndicators.monthly_recurring_revenue); 79383 }, 79384 /** 79385 * Calculate the yearly change in monthly recurring revenue. 79386 */ 79387 yearlyChangeInMonthlyRecurringRevenue: function yearlyChangeInMonthlyRecurringRevenue() { 79388 if (!this.lastYearsIndicators || !this.indicators) { 79389 return false; 79390 } 79391 return this.percentChange(_.takeRight(this.indicators).monthly_recurring_revenue, this.lastYearsIndicators.monthly_recurring_revenue); 79392 }, 79393 /** 79394 * Calculate the monthly change in yearly recurring revenue. 79395 */ 79396 monthlyChangeInYearlyRecurringRevenue: function monthlyChangeInYearlyRecurringRevenue() { 79397 if (!this.lastMonthsIndicators || !this.indicators) { 79398 return false; 79399 } 79400 return this.percentChange(_.takeRight(this.indicators).yearly_recurring_revenue, this.lastMonthsIndicators.yearly_recurring_revenue); 79401 }, 79402 /** 79403 * Calculate the yearly change in yearly recurring revenue. 79404 */ 79405 yearlyChangeInYearlyRecurringRevenue: function yearlyChangeInYearlyRecurringRevenue() { 79406 if (!this.lastYearsIndicators || !this.indicators) { 79407 return false; 79408 } 79409 return this.percentChange(_.takeRight(this.indicators).yearly_recurring_revenue, this.lastYearsIndicators.yearly_recurring_revenue); 79410 }, 79411 /** 79412 * Get the total number of users trialing. 79413 */ 79414 totalTrialUsers: function totalTrialUsers() { 79415 return this.genericTrialUsers + _.reduce(this.plans, function (memo, plan) { 79416 return memo + plan.trialing; 79417 }, 0); 79418 }, 79419 /** 79420 * Get the available, formatted chart dates for the current indicators. 79421 */ 79422 availableChartDates: function availableChartDates() { 79423 return _.map(this.indicators, function (indicator) { 79424 return moment(indicator.created_at).format('M/D'); 79425 }); 79426 }, 79427 /** 79428 * Get the base chart data set. 79429 */ 79430 baseChartDataSet: function baseChartDataSet() { 79431 return { 79432 label: "Dataset", 79433 fillColor: "rgba(151,187,205,0.2)", 79434 strokeColor: "rgba(151,187,205,1)", 79435 pointColor: "rgba(151,187,205,1)", 79436 pointStrokeColor: "#fff", 79437 pointHighlightFill: "#fff", 79438 pointHighlightStroke: "rgba(151,187,205,1)" 79439 }; 79440 } 79441 } 79442}; 79443 79444/***/ }), 79445
79446/***/ "./vendor/laravel/spark-aurelius/resources/assets/js/kiosk/profile.js": 79447/*!****************************************************************************!*\ 79448 !*** ./vendor/laravel/spark-aurelius/resources/assets/js/kiosk/profile.js ***! 79449 \****************************************************************************/ 79450/*! no static exports found */ 79451/***/ (function(module, exports) { 79452 79453module.exports = { 79454 props: ['user', 'plans'], 79455 /** 79456 * The component's data. 79457 */ 79458 data: function data() { 79459 return { 79460 loading: false, 79461 profile: null, 79462 revenue: 0 79463 }; 79464 }, 79465 /** 79466 * The component has been created by Vue. 79467 */ 79468 created: function created() { 79469 var self = this; 79470 this.$parent.$on('showUserProfile', function (id) { 79471 self.getUserProfile(id); 79472 }); 79473 }, 79474 /** 79475 * Prepare the component. 79476 */ 79477 mounted: function mounted() { 79478 var _this = this; 79479 Mousetrap.bind('esc', function (e) { 79480 return _this.showSearch(); 79481 }); 79482 }, 79483 methods: { 79484 /** 79485 * Get the profile user. 79486 */ 79487 getUserProfile: function getUserProfile(id) { 79488 var _this2 = this; 79489 this.loading = true; 79490 axios.get('/spark/kiosk/users/' + id + '/profile').then(function (response) { 79491 _this2.profile = response.data.user; 79492 _this2.revenue = response.data.revenue; 79493 _this2.loading = false; 79494 }); 79495 }, 79496 /** 79497 * Impersonate the given user. 79498 */ 79499 impersonate: function impersonate(user) { 79500 window.location = '/spark/kiosk/users/impersonate/' + user.id; 79501 }, 79502 /** 79503 * Show the discount modal for the given user. 79504 */ 79505 addDiscount: function addDiscount(user) { 79506 Bus.$emit('addDiscount', user); 79507 }, 79508 /** 79509 * Get the plan the user is actively subscribed to. 79510 */ 79511 activePlan: function activePlan(billable) { 79512 if (this.activeSubscription(billable)) { 79513 var activeSubscription = this.activeSubscription(billable); 79514 return _.find(this.plans, function (plan) { 79515 return plan.id === activeSubscription.provider_plan; 79516 }); 79517 } 79518 }, 79519 /** 79520 * Get the active, valid subscription for the user. 79521 */ 79522 activeSubscription: function activeSubscription(billable) { 79523 var subscription = this.subscription(billable); 79524 if (!subscription || subscription.ends_at && moment.utc().isAfter(moment.utc(subscription.ends_at))) { 79525 return; 79526 } 79527 return subscription; 79528 }, 79529 /** 79530 * Get the active subscription instance. 79531 */ 79532 subscription: function subscription(billable) { 79533 if (!billable) { 79534 return; 79535 } 79536 var subscription = _.find(billable.subscriptions, function (subscription) { 79537 return subscription.name === 'default'; 79538 }); 79539 if (typeof subscription !== 'undefined') { 79540 return subscription; 79541 } 79542 }, 79543 /** 79544 * Get the customer URL on the billing provider's website. 79545 */ 79546 customerUrlOnBillingProvider: function customerUrlOnBillingProvider(billable) { 79547 if (!billable) { 79548 return; 79549 } 79550 return 'https://dashboard.stripe.com/customers/' + billable.stripe_id; 79551 }, 79552 /** 79553 * Show the search results and hide the user profile. 79554 */ 79555 showSearch: function showSearch() { 79556 this.$parent.$emit('showSearch'); 79557 this.profile = null; 79558 } 79559 } 79560}; 79561 79562/***/ }), 79563
79564/***/ "./vendor/laravel/spark-aurelius/resources/assets/js/kiosk/users.js": 79565/*!**************************************************************************!*\ 79566 !*** ./vendor/laravel/spark-aurelius/resources/assets/js/kiosk/users.js ***! 79567 \**************************************************************************/ 79568/*! no static exports found */ 79569/***/ (function(module, exports) { 79570 79571module.exports = { 79572 props: ['user'], 79573 /** 79574 * The component's data. 79575 */ 79576 data: function data() { 79577 return { 79578 plans: [], 79579 searchForm: new SparkForm({ 79580 query: '' 79581 }), 79582 searching: false, 79583 noSearchResults: false, 79584 searchResults: [], 79585 showingUserProfile: false 79586 }; 79587 }, 79588 /** 79589 * The component has been created by Vue. 79590 */ 79591 created: function created() { 79592 var self = this; 79593 this.getPlans(); 79594 this.$on('showSearch', function () { 79595 self.navigateToSearch(); 79596 }); 79597 Bus.$on('sparkHashChanged', function (hash, parameters) { 79598 if (hash != 'users') { 79599 return true; 79600 } 79601 if (parameters && parameters.length > 0) { 79602 self.loadProfile({ 79603 id: parameters[0] 79604 }); 79605 } else { 79606 self.showSearch(); 79607 } 79608 return true; 79609 }); 79610 }, 79611 methods: { 79612 /** 79613 * Get all of the available subscription plans. 79614 */ 79615 getPlans: function getPlans() { 79616 var _this = this; 79617 axios.get('/spark/plans').then(function (response) { 79618 _this.plans = response.data; 79619 }); 79620 }, 79621 /** 79622 * Perform a search for the given query. 79623 */ 79624 search: function search() { 79625 var _this2 = this; 79626 this.searching = true; 79627 this.noSearchResults = false; 79628 axios.post('/spark/kiosk/users/search', this.searchForm).then(function (response) { 79629 _this2.searchResults = response.data; 79630 _this2.noSearchResults = _this2.searchResults.length === 0; 79631 _this2.searching = false; 79632 }); 79633 }, 79634 /** 79635 * Show the search results and update the browser history. 79636 */ 79637 navigateToSearch: function navigateToSearch() { 79638 history.pushState(null, null, '#/users'); 79639 this.showSearch(); 79640 }, 79641 /** 79642 * Show the search results. 79643 */ 79644 showSearch: function showSearch() { 79645 this.showingUserProfile = false; 79646 Vue.nextTick(function () { 79647 $('#kiosk-users-search').focus(); 79648 }); 79649 }, 79650 /** 79651 * Show the user profile for the given user. 79652 */ 79653 showUserProfile: function showUserProfile(user) { 79654 history.pushState(null, null, '#/users/' + user.id); 79655 this.loadProfile(user); 79656 }, 79657 /** 79658 * Load the user profile for the given user. 79659 */ 79660 loadProfile: function loadProfile(user) { 79661 this.$emit('showUserProfile', user.id); 79662 this.showingUserProfile = true; 79663 } 79664 } 79665}; 79666 79667/***/ }), 79668
79669/***/ "./vendor/laravel/spark-aurelius/resources/assets/js/mixin.js": 79670/*!********************************************************************!*\ 79671 !*** ./vendor/laravel/spark-aurelius/resources/assets/js/mixin.js ***! 79672 \********************************************************************/ 79673/*! no static exports found */ 79674/***/ (function(module, exports) { 79675 79676module.exports = { 79677 computed: { 79678 /** 79679 * Get the billable entity. 79680 */ 79681 billable: function billable() { 79682 if (this.billableType) { 79683 return this.billableType === 'user' ? this.user : this.team; 79684 } else { 79685 return this.user; 79686 } 79687 }, 79688 /** 79689 * Determine if the current billable entity is a user. 79690 */ 79691 billingUser: function billingUser() { 79692 return this.billableType && this.billableType === 'user'; 79693 }, 79694 /** 79695 * Access the global Spark object. 79696 */ 79697 spark: function spark() { 79698 return window.Spark; 79699 } 79700 } 79701}; 79702 79703/***/ }), 79704
79705/***/ "./vendor/laravel/spark-aurelius/resources/assets/js/mixins/discounts.js": 79706/*!*******************************************************************************!*\ 79707 !*** ./vendor/laravel/spark-aurelius/resources/assets/js/mixins/discounts.js ***! 79708 \*******************************************************************************/ 79709/*! no static exports found */ 79710/***/ (function(module, exports) { 79711 79712module.exports = { 79713 methods: { 79714 /** 79715 * Get the current discount for the given billable entity. 79716 */ 79717 getCurrentDiscountForBillable: function getCurrentDiscountForBillable(type, billable) { 79718 if (type === 'user') { 79719 return this.getCurrentDiscountForUser(billable); 79720 } else { 79721 return this.getCurrentDiscountForTeam(billable); 79722 } 79723 }, 79724 /** 79725 * Get the current discount for the user. 79726 */ 79727 getCurrentDiscountForUser: function getCurrentDiscountForUser(user) { 79728 var _this = this; 79729 this.currentDiscount = null; 79730 this.loadingCurrentDiscount = true; 79731 axios.get("/coupon/user/".concat(user.id)).then(function (response) { 79732 if (response.status === 200) { 79733 _this.currentDiscount = response.data; 79734 } 79735 _this.loadingCurrentDiscount = false; 79736 }); 79737 }, 79738 /** 79739 * Get the current discount for the team. 79740 */ 79741 getCurrentDiscountForTeam: function getCurrentDiscountForTeam(team) { 79742 var _this2 = this; 79743 this.currentDiscount = null; 79744 this.loadingCurrentDiscount = true; 79745 axios.get("/settings/".concat(Spark.teamsPrefix, "/coupon/").concat(team.id)).then(function (response) { 79746 if (response.status === 200) { 79747 _this2.currentDiscount = response.data; 79748 } 79749 _this2.loadingCurrentDiscount = false; 79750 }); 79751 }, 79752 /** 79753 * Get the formatted discount amount for the given discount. 79754 */ 79755 formattedDiscount: function formattedDiscount(discount) { 79756 if (!discount) { 79757 return; 79758 } 79759 if (discount.percent_off) { 79760 return "".concat(discount.percent_off, "%"); 79761 } else { 79762 return Vue.filter('currency')(this.calculateAmountOff(discount.amount_off)); 79763 } 79764 }, 79765 /** 79766 * Calculate the amount off for the given discount amount. 79767 */ 79768 calculateAmountOff: function calculateAmountOff(amount) { 79769 return amount / 100; 79770 } 79771 } 79772}; 79773 79774/***/ }), 79775
79776/***/ "./vendor/laravel/spark-aurelius/resources/assets/js/mixins/plans.js": 79777/*!***************************************************************************!*\ 79778 !*** ./vendor/laravel/spark-aurelius/resources/assets/js/mixins/plans.js ***! 79779 \***************************************************************************/ 79780/*! no static exports found */ 79781/***/ (function(module, exports) { 79782 79783/* 79784 * This mixin is primarily used to share code for the "interval" selector 79785 * on the registration and subscription screens, which is used to show 79786 * all of the various subscription plans offered by the application. 79787 */ 79788module.exports = { 79789 data: function data() { 79790 return { 79791 selectedPlan: null, 79792 detailingPlan: null, 79793 showingMonthlyPlans: true, 79794 showingYearlyPlans: false 79795 }; 79796 }, 79797 methods: { 79798 /** 79799 * Switch to showing monthly plans. 79800 */ 79801 showMonthlyPlans: function showMonthlyPlans() { 79802 this.showingMonthlyPlans = true; 79803 this.showingYearlyPlans = false; 79804 }, 79805 /** 79806 * Switch to showing yearly plans. 79807 */ 79808 showYearlyPlans: function showYearlyPlans() { 79809 this.showingMonthlyPlans = false; 79810 this.showingYearlyPlans = true; 79811 }, 79812 /** 79813 * Show the plan details for the given plan. 79814 */ 79815 showPlanDetails: function showPlanDetails(plan) { 79816 this.detailingPlan = plan; 79817 $('#modal-plan-details').modal('show'); 79818 } 79819 }, 79820 computed: { 79821 /** 79822 * Get the active "interval" being displayed. 79823 */ 79824 activeInterval: function activeInterval() { 79825 return this.showingMonthlyPlans ? 'monthly' : 'yearly'; 79826 }, 79827 /** 79828 * Get all of the plans for the active interval. 79829 */
79830 plansForActiveInterval: function plansForActiveInterval() { 79831 var _this = this; 79832 return _.filter(this.plans, function (plan) { 79833 return plan.active && (plan.price === 0 || plan.interval === _this.activeInterval); 79834 }); 79835 }, 79836 /** 79837 * Get all of the paid plans. 79838 */ 79839 paidPlans: function paidPlans() { 79840 return _.filter(this.plans, function (plan) { 79841 return plan.active && plan.price > 0; 79842 }); 79843 }, 79844 /** 79845 * Get all of the paid plans for the active interval. 79846 */ 79847 paidPlansForActiveInterval: function paidPlansForActiveInterval() { 79848 return _.filter(this.plansForActiveInterval, function (plan) { 79849 return plan.active && plan.price > 0; 79850 }); 79851 }, 79852 /** 79853 * Determine if both monthly and yearly plans are available. 79854 */ 79855 hasMonthlyAndYearlyPlans: function hasMonthlyAndYearlyPlans() { 79856 return this.monthlyPlans.length > 0 && this.yearlyPlans.length > 0; 79857 }, 79858 /** 79859 * Determine if both monthly and yearly plans are available. 79860 */ 79861 hasMonthlyAndYearlyPaidPlans: function hasMonthlyAndYearlyPaidPlans() { 79862 return _.filter(this.paidPlans, { 79863 interval: 'monthly' 79864 }).length > 0 && _.filter(this.paidPlans, { 79865 interval: 'yearly' 79866 }).length > 0; 79867 }, 79868 /** 79869 * Determine if only yearly plans are available. 79870 */ 79871 onlyHasYearlyPlans: function onlyHasYearlyPlans() { 79872 return this.monthlyPlans.length === 0 && this.yearlyPlans.length > 0; 79873 }, 79874 /** 79875 * Determine if both monthly and yearly plans are available. 79876 */ 79877 onlyHasYearlyPaidPlans: function onlyHasYearlyPaidPlans() { 79878 return _.filter(this.paidPlans, { 79879 interval: 'monthly' 79880 }).length === 0 && _.filter(this.paidPlans, { 79881 interval: 'yearly' 79882 }).length > 0; 79883 }, 79884 /** 79885 * Get all of the monthly plans. 79886 */ 79887 monthlyPlans: function monthlyPlans() { 79888 return _.filter(this.plans, function (plan) { 79889 return plan.active && plan.interval === 'monthly'; 79890 }); 79891 }, 79892 /** 79893 * Get all of the yearly plans. 79894 */ 79895 yearlyPlans: function yearlyPlans() { 79896 return _.filter(this.plans, function (plan) { 79897 return plan.active && plan.interval === 'yearly'; 79898 }); 79899 } 79900 } 79901}; 79902 79903/***/ }), 79904
79905/***/ "./vendor/laravel/spark-aurelius/resources/assets/js/mixins/register.js": 79906/*!******************************************************************************!*\ 79907 !*** ./vendor/laravel/spark-aurelius/resources/assets/js/mixins/register.js ***! 79908 \******************************************************************************/ 79909/*! no static exports found */ 79910/***/ (function(module, exports) { 79911 79912module.exports = { 79913 /** 79914 * The mixin's data. 79915 */ 79916 data: function data() { 79917 return { 79918 plans: [], 79919 selectedPlan: null, 79920 invitation: null, 79921 invalidInvitation: false 79922 }; 79923 }, 79924 methods: { 79925 /** 79926 * Get the active plans for the application. 79927 */ 79928 getPlans: function getPlans() { 79929 var _this = this; 79930 if (!Spark.cardUpFront) { 79931 return; 79932 } 79933 axios.get('/spark/plans').then(function (response) { 79934 var plans = response.data; 79935 _this.plans = _.filter(plans, { 79936 type: "user" 79937 }).length > 0 ? _.filter(plans, { 79938 type: "user" 79939 }) : _.filter(plans, { 79940 type: "team" 79941 }); 79942 _this.selectAppropriateDefaultPlan(); 79943 }); 79944 }, 79945 /** 79946 * Get the invitation specified in the query string. 79947 */ 79948 getInvitation: function getInvitation() { 79949 var _this2 = this; 79950 axios.get("/invitations/".concat(this.query.invitation)).then(function (response) { 79951 _this2.invitation = response.data; 79952 })["catch"](function (response) { 79953 _this2.invalidInvitation = true; 79954 }); 79955 }, 79956 /** 79957 * Select the appropriate default plan for registration. 79958 */ 79959 selectAppropriateDefaultPlan: function selectAppropriateDefaultPlan() { 79960 if (this.query.plan) { 79961 this.selectPlanById(this.query.plan) || this.selectPlanByName(this.query.plan); 79962 } else if (this.query.invitation) { 79963 this.selectFreePlan(); 79964 } else if (this.paidPlansForActiveInterval.length > 0) { 79965 this.selectPlan(this.paidPlansForActiveInterval[0]); 79966 } else { 79967 this.selectFreePlan(); 79968 } 79969 if (this.shouldShowYearlyPlans()) { 79970 this.showYearlyPlans(); 79971 } 79972 }, 79973 /** 79974 * Select the free plan. 79975 */ 79976 selectFreePlan: function selectFreePlan() { 79977 var plan = _.find(this.plans, function (plan) { 79978 return plan.price === 0; 79979 }); 79980 if (typeof plan !== 'undefined') { 79981 this.selectPlan(plan); 79982 } 79983 }, 79984 /** 79985 * Select the plan with the given id. 79986 */ 79987 selectPlanById: function selectPlanById(id) { 79988 var _this3 = this; 79989 _.each(this.plans, function (plan) { 79990 if (plan.id === id) { 79991 _this3.selectPlan(plan); 79992 } 79993 }); 79994 return this.selectedPlan; 79995 }, 79996 /** 79997 * Select the plan with the given name. 79998 */ 79999 selectPlanByName: function selectPlanByName(name) { 80000 var _this4 = this; 80001 _.each(this.plans, function (plan) { 80002 if (plan.name === name) { 80003 _this4.selectPlan(plan); 80004 } 80005 }); 80006 return this.selectedPlan; 80007 }, 80008 /** 80009 * Determine if the given plan is selected. 80010 */ 80011 isSelected: function isSelected(plan) { 80012 return this.selectedPlan && plan.id === this.selectedPlan.id; 80013 }, 80014 /** 80015 * Select the given plan. 80016 */ 80017 selectPlan: function selectPlan(plan) { 80018 this.selectedPlan = plan; 80019 this.registerForm.plan = plan.id; 80020 }, 80021 /** 80022 * Determine if we should show the yearly plans. 80023 */ 80024 shouldShowYearlyPlans: function shouldShowYearlyPlans() { 80025 return this.monthlyPlans.length === 0 && this.yearlyPlans.length > 0 || this.selectedPlan.interval === 'yearly'; 80026 } 80027 } 80028}; 80029 80030/***/ }), 80031
80032/***/ "./vendor/laravel/spark-aurelius/resources/assets/js/mixins/stripe.js": 80033/*!****************************************************************************!*\ 80034 !*** ./vendor/laravel/spark-aurelius/resources/assets/js/mixins/stripe.js ***! 80035 \****************************************************************************/ 80036/*! no static exports found */ 80037/***/ (function(module, exports) { 80038 80039module.exports = { 80040 /** 80041 * The mixin's data. 80042 */ 80043 data: function data() { 80044 return { 80045 stripe: Spark.stripeKey ? Stripe(Spark.stripeKey, { 80046 apiVersion: Spark.stripeApiVersion 80047 }) : null 80048 }; 80049 }, 80050 methods: { 80051 /** 80052 * Create a Stripe Card Element. 80053 */ 80054 createCardElement: function createCardElement(container) { 80055 if (!this.stripe) { 80056 throw "Invalid Stripe Key/Secret"; 80057 } 80058 var card = this.stripe.elements().create('card', { 80059 hideIcon: true, 80060 hidePostalCode: true, 80061 style: { 80062 base: { 80063 '::placeholder': { 80064 color: '#aab7c4' 80065 }, 80066 fontFamily: 'Whitney, Lato, -apple-system, BlinkMacSystemFont,"Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji","Segoe UI Emoji", "Segoe UI Symbol"', 80067 color: '#495057', 80068 fontSize: '15px' 80069 } 80070 } 80071 }); 80072 card.mount(container); 80073 return card; 80074 }, 80075 generateToken: function generateToken(callback) { 80076 return axios.get('/stripe/token').then(function (response) { 80077 return callback(response.data.clientSecret); 80078 }); 80079 } 80080 } 80081}; 80082 80083/***/ }), 80084
80085/***/ "./vendor/laravel/spark-aurelius/resources/assets/js/mixins/subscriptions.js": 80086/*!***********************************************************************************!*\ 80087 !*** ./vendor/laravel/spark-aurelius/resources/assets/js/mixins/subscriptions.js ***! 80088 \***********************************************************************************/ 80089/*! no static exports found */ 80090/***/ (function(module, exports) { 80091 80092/* 80093 * This mixin is used by most of the subscription related screens to select plans 80094 * and send subscription plan changes to the server. This contains helpers for 80095 * the active subscription, trial information and other convenience helpers. 80096 */ 80097module.exports = { 80098 /** 80099 * The mixin's data. 80100 */ 80101 data: function data() { 80102 return { 80103 selectingPlan: null, 80104 planForm: new SparkForm({}) 80105 }; 80106 }, 80107 methods: { 80108 /** 80109 * Update the subscription to the given plan. 80110 * 80111 * Used when updating or resuming the subscription plan. 80112 */ 80113 updateSubscription: function updateSubscription(plan) { 80114 var _this = this; 80115 this.selectingPlan = plan; 80116 this.planForm.errors.forget(); 80117 80118 // Here we will send the request to the server to update the subscription plan and 80119 // update the user and team once the request is complete. This method gets used 80120 // for both updating subscriptions plus resuming any cancelled subscriptions. 80121 axios.put(this.urlForPlanUpdate, { 80122 "plan": plan.id 80123 }).then(function () { 80124 Bus.$emit('updateUser'); 80125 Bus.$emit('updateTeam'); 80126 })["catch"](function (errors) { 80127 if (errors.response.status == 400) { 80128 window.location = '/' + Spark.cashierPath + '/payment/' + errors.response.data.paymentId + '?redirect=' + _this.urlForPlanRedirect; 80129 } else if (errors.response.status === 422) { 80130 _this.planForm.errors.set(errors.response.data.errors); 80131 } else { 80132 _this.planForm.errors.set({ 80133 plan: [__("We were unable to update your subscription. Please contact customer support.")] 80134 }); 80135 } 80136 })["finally"](function () { 80137 _this.selectingPlan = null; 80138 }); 80139 }, 80140 /** 80141 * Determine if the given plan is selected. 80142 */ 80143 isActivePlan: function isActivePlan(plan) { 80144 return this.activeSubscription && this.activeSubscription.provider_plan === plan.id; 80145 } 80146 }, 80147 computed: { 80148 /** 80149 * Get the active plan instance. 80150 */ 80151 activePlan: function activePlan() { 80152 var _this2 = this; 80153 if (this.activeSubscription) { 80154 return _.find(this.plans, function (plan) { 80155 return plan.id === _this2.activeSubscription.provider_plan; 80156 }); 80157 } 80158 }, 80159 /** 80160 * Determine if the active plan is a monthly plan. 80161 */ 80162 activePlanIsMonthly: function activePlanIsMonthly() { 80163 return this.activePlan && this.activePlan.interval === 'monthly'; 80164 }, 80165 /** 80166 * Get the active subscription instance. 80167 */ 80168 activeSubscription: function activeSubscription() { 80169 if (!this.billable) { 80170 return; 80171 } 80172 var subscription = _.find(this.billable.subscriptions, function (subscription) { 80173 return subscription.name === 'default' && !_.includes(['incomplete', 'incomplete_expired', 'past_due', 'unpaid'], subscription.stripe_status); 80174 }); 80175 if (typeof subscription !== 'undefined') { 80176 return subscription; 80177 } 80178 }, 80179 /** 80180 * Determine if the current subscription is active. 80181 */ 80182 subscriptionIsActive: function subscriptionIsActive() { 80183 return this.activeSubscription && !this.activeSubscription.ends_at; 80184 }, 80185 /** 80186 * Determine if the billable entity is on a generic trial. 80187 */ 80188 onGenericTrial: function onGenericTrial() { 80189 return this.billable.trial_ends_at && moment.utc(this.billable.trial_ends_at).isAfter(moment.utc()); 80190 }, 80191 /** 80192 * Determine if the current subscription is active. 80193 */ 80194 subscriptionIsOnTrial: function subscriptionIsOnTrial() { 80195 if (this.onGenericTrial) { 80196 return true; 80197 } 80198 return this.activeSubscription && this.activeSubscription.tri
80198al_ends_at && moment.utc().isBefore(moment.utc(this.activeSubscription.trial_ends_at)); 80199 }, 80200 /** 80201 * Get the formatted trial ending date. 80202 */ 80203 trialEndsAt: function trialEndsAt() { 80204 if (!this.subscriptionIsOnTrial) { 80205 return; 80206 } 80207 if (this.onGenericTrial) { 80208 return moment.utc(this.billable.trial_ends_at).local().format('MMMM Do, YYYY'); 80209 } 80210 return moment.utc(this.activeSubscription.trial_ends_at).local().format('MMMM Do, YYYY'); 80211 }, 80212 /** 80213 * Determine if the current subscription is active. 80214 */ 80215 subscriptionIsOnGracePeriod: function subscriptionIsOnGracePeriod() { 80216 return this.activeSubscription && this.activeSubscription.ends_at && moment.utc().isBefore(moment.utc(this.activeSubscription.ends_at)); 80217 }, 80218 /** 80219 * Determine if the billable entity has no active subscription. 80220 */ 80221 needsSubscription: function needsSubscription() { 80222 return !this.activeSubscription || this.activeSubscription.ends_at && moment.utc().isAfter(moment.utc(this.activeSubscription.ends_at)); 80223 }, 80224 /** 80225 * Get the URL for the subscription plan update. 80226 */ 80227 urlForPlanUpdate: function urlForPlanUpdate() { 80228 return this.billingUser ? '/settings/subscription' : "/settings/".concat(Spark.teamsPrefix, "/").concat(this.team.id, "/subscription"); 80229 }, 80230 /** 80231 * Get the URL to redirect to after confirmation. 80232 */ 80233 urlForPlanRedirect: function urlForPlanRedirect() { 80234 return this.billingUser ? "/settings%23/subscription" : "/settings/".concat(Spark.teamsPrefix, "/").concat(this.team.id, "%23/subscription"); 80235 } 80236 } 80237}; 80238 80239/***/ }), 80240
80241/***/ "./vendor/laravel/spark-aurelius/resources/assets/js/mixins/tab-state.js": 80242/*!*******************************************************************************!*\ 80243 !*** ./vendor/laravel/spark-aurelius/resources/assets/js/mixins/tab-state.js ***! 80244 \*******************************************************************************/ 80245/*! no static exports found */ 80246/***/ (function(module, exports) { 80247 80248module.exports = { 80249 pushStateSelector: null, 80250 methods: { 80251 /** 80252 * Initialize push state handling for tabs. 80253 */ 80254 usePushStateForTabs: function usePushStateForTabs(selector) { 80255 var _this = this; 80256 this.pushStateSelector = selector; 80257 this.registerTabClickHandler(); 80258 window.addEventListener('popstate', function (e) { 80259 _this.activateTabForCurrentHash(); 80260 }); 80261 if (window.location.hash) { 80262 this.activateTabForCurrentHash(); 80263 } else { 80264 this.activateFirstTab(); 80265 } 80266 }, 80267 /** 80268 * Register the click handler for all of the tabs. 80269 */ 80270 registerTabClickHandler: function registerTabClickHandler() { 80271 var self = this; 80272 $("".concat(this.pushStateSelector, " a[data-toggle=\"tab\"]")).on('click', function (e) { 80273 self.removeActiveClassFromTabs(); 80274 history.pushState(null, null, '#/' + $(this).attr('href').substring(1)); 80275 self.broadcastTabChange($(this).attr('href').substring(1)); 80276 }); 80277 }, 80278 /** 80279 * Activate the tab for the current hash in the URL. 80280 */ 80281 activateTabForCurrentHash: function activateTabForCurrentHash() { 80282 var hash = window.location.hash.substring(2); 80283 var parameters = hash.split('/'); 80284 hash = parameters.shift(); 80285 this.removeActiveClassFromTabs(); 80286 var tab = $("".concat(this.pushStateSelector, " a[href=\"#").concat(hash, "\"][data-toggle=\"tab\"]")); 80287 if (tab.length > 0) { 80288 tab.tab('show'); 80289 this.broadcastTabChange(hash, parameters); 80290 } else { 80291 this.activateFirstTab(); 80292 } 80293 }, 80294 /** 80295 * Activate the first tab in a list. 80296 */ 80297 activateFirstTab: function activateFirstTab() { 80298 var tab = $("".concat(this.pushStateSelector, " a[data-toggle=\"tab\"]")).first(); 80299 if (tab.length) { 80300 tab.tab('show'); 80301 this.broadcastTabChange(tab.attr('href').substring(1)); 80302 } 80303 }, 80304 /** 80305 * Remove the active class from the tabs. 80306 */ 80307 removeActiveClassFromTabs: function removeActiveClassFromTabs() { 80308 $("".concat(this.pushStateSelector, " a")).removeClass('active'); 80309 }, 80310 /** 80311 * Broadcast that a tab change happened.
80312 */ 80313 broadcastTabChange: function broadcastTabChange(hash, parameters) { 80314 Bus.$emit('sparkHashChanged', hash, parameters); 80315 } 80316 } 80317}; 80318 80319/***/ }), 80320
80321/***/ "./vendor/laravel/spark-aurelius/resources/assets/js/mixins/vat.js": 80322/*!*************************************************************************!*\ 80323 !*** ./vendor/laravel/spark-aurelius/resources/assets/js/mixins/vat.js ***! 80324 \*************************************************************************/ 80325/*! no static exports found */ 80326/***/ (function(module, exports) { 80327 80328module.exports = { 80329 methods: { 80330 /** 80331 * Determine if the given country collects European VAT. 80332 */ 80333 collectsVat: function collectsVat(country) { 80334 return Spark.collectsEuropeanVat ? _.includes(['BE', 'BG', 'CZ', 'DK', 'DE', 'EE', 'IE', 'GR', 'ES', 'FR', 'HR', 'IT', 'CY', 'LV', 'LT', 'LU', 'HU', 'MT', 'NL', 'AT', 'PL', 'PT', 'RO', 'SI', 'SK', 'FI', 'SE', 'GB'], country) : false; 80335 }, 80336 /** 80337 * Refresh the tax rate using the given form input. 80338 */ 80339 refreshTaxRate: function refreshTaxRate(form) { 80340 var _this = this; 80341 axios.post('/tax-rate', JSON.parse(JSON.stringify(form))).then(function (response) { 80342 _this.taxRate = response.data.rate; 80343 }); 80344 }, 80345 /** 80346 * Get the tax amount for the selected plan. 80347 */ 80348 taxAmount: function taxAmount(plan) { 80349 return plan.price * (this.taxRate / 100); 80350 }, 80351 /** 80352 * Get the total plan price including the applicable tax. 80353 */ 80354 priceWithTax: function priceWithTax(plan) { 80355 return plan.price + this.taxAmount(plan); 80356 } 80357 } 80358}; 80359 80360/***/ }), 80361
80362/***/ "./vendor/laravel/spark-aurelius/resources/assets/js/navbar/navbar.js": 80363/*!****************************************************************************!*\ 80364 !*** ./vendor/laravel/spark-aurelius/resources/assets/js/navbar/navbar.js ***! 80365 \****************************************************************************/ 80366/*! no static exports found */ 80367/***/ (function(module, exports) { 80368 80369module.exports = { 80370 props: ['user', 'teams', 'currentTeam', 'unreadAnnouncementsCount', 'unreadNotificationsCount'], 80371 computed: { 80372 notificationsCount: function notificationsCount() { 80373 return this.unreadAnnouncementsCount + this.unreadNotificationsCount; 80374 } 80375 }, 80376 methods: { 80377 /** 80378 * Show the user's notifications. 80379 */ 80380 showNotifications: function showNotifications() { 80381 Bus.$emit('showNotifications'); 80382 }, 80383 /** 80384 * Show the customer support e-mail form. 80385 */ 80386 showSupportForm: function showSupportForm() { 80387 Bus.$emit('showSupportForm'); 80388 } 80389 } 80390}; 80391 80392/***/ }), 80393
80394/***/ "./vendor/laravel/spark-aurelius/resources/assets/js/notifications/notifications.js": 80395/*!******************************************************************************************!*\ 80396 !*** ./vendor/laravel/spark-aurelius/resources/assets/js/notifications/notifications.js ***! 80397 \******************************************************************************************/ 80398/*! no static exports found */ 80399/***/ (function(module, exports) { 80400 80401module.exports = { 80402 props: ['notifications', 'hasUnreadAnnouncements', 'loadingNotifications'], 80403 /** 80404 * The component's data. 80405 */ 80406 data: function data() { 80407 return { 80408 showingNotifications: true, 80409 showingAnnouncements: false 80410 }; 80411 }, 80412 methods: { 80413 /** 80414 * Show the user notifications. 80415 */ 80416 showNotifications: function showNotifications() { 80417 this.showingNotifications = true; 80418 this.showingAnnouncements = false; 80419 }, 80420 /** 80421 * Show the product announcements. 80422 */ 80423 showAnnouncements: function showAnnouncements() { 80424 this.showingNotifications = false; 80425 this.showingAnnouncements = true; 80426 this.updateLastReadAnnouncementsTimestamp(); 80427 }, 80428 /** 80429 * Update the last read announcements timestamp. 80430 */ 80431 updateLastReadAnnouncementsTimestamp: function updateLastReadAnnouncementsTimestamp() { 80432 axios.put('/user/last-read-announcements-at').then(function () { 80433 Bus.$emit('updateUser'); 80434 }); 80435 } 80436 }, 80437 computed: { 80438 /** 80439 * Get the active notifications or announcements. 80440 */ 80441 activeNotifications: function activeNotifications() { 80442 if (!this.notifications) { 80443 return []; 80444 } 80445 if (this.showingNotifications) { 80446 return this.notifications.notifications; 80447 } else { 80448 return this.notifications.announcements; 80449 } 80450 }, 80451 /** 80452 * Determine if the user has any notifications. 80453 */ 80454 hasNotifications: function hasNotifications() { 80455 return this.notifications && this.notifications.notifications.length > 0; 80456 }, 80457 /** 80458 * Determine if the user has any announcements. 80459 */ 80460 hasAnnouncements: function hasAnnouncements() { 80461 return this.notifications && this.notifications.announcements.length > 0; 80462 } 80463 } 80464}; 80465 80466/***/ }), 80467
80468/***/ "./vendor/laravel/spark-aurelius/resources/assets/js/settings/api.js": 80469/*!***************************************************************************!*\ 80470 !*** ./vendor/laravel/spark-aurelius/resources/assets/js/settings/api.js ***! 80471 \***************************************************************************/ 80472/*! no static exports found */ 80473/***/ (function(module, exports) { 80474 80475module.exports = { 80476 /** 80477 * The component's data. 80478 */ 80479 data: function data() { 80480 return { 80481 tokens: [], 80482 availableAbilities: [] 80483 }; 80484 }, 80485 /** 80486 * Prepare the component. 80487 */ 80488 mounted: function mounted() { 80489 this.getTokens(); 80490 this.getAvailableAbilities(); 80491 }, 80492 /** 80493 * The component has been created by Vue. 80494 */ 80495 created: function created() { 80496 var self = this; 80497 this.$on('updateTokens', function () { 80498 self.getTokens(); 80499 }); 80500 }, 80501 methods: { 80502 /** 80503 * Get the current API tokens for the user. 80504 */ 80505 getTokens: function getTokens() { 80506 var _this = this; 80507 axios.get('/settings/api/tokens').then(function (response) { 80508 return _this.tokens = response.data; 80509 }); 80510 }, 80511 /** 80512 * Get all of the available token abilities. 80513 */ 80514 getAvailableAbilities: function getAvailableAbilities() { 80515 var _this2 = this; 80516 axios.get('/settings/api/token/abilities').then(function (response) { 80517 return _this2.availableAbilities = response.data; 80518 }); 80519 } 80520 } 80521}; 80522 80523/***/ }), 80524
80525/***/ "./vendor/laravel/spark-aurelius/resources/assets/js/settings/api/create-token.js": 80526/*!****************************************************************************************!*\ 80527 !*** ./vendor/laravel/spark-aurelius/resources/assets/js/settings/api/create-token.js ***! 80528 \****************************************************************************************/ 80529/*! no static exports found */ 80530/***/ (function(module, exports) { 80531 80532module.exports = { 80533 props: ['availableAbilities'], 80534 /** 80535 * The component's data. 80536 */ 80537 data: function data() { 80538 return { 80539 showingToken: null, 80540 allAbilitiesAssigned: false, 80541 form: new SparkForm({ 80542 name: '', 80543 abilities: [] 80544 }) 80545 }; 80546 }, 80547 computed: { 80548 copyCommandSupported: function copyCommandSupported() { 80549 return document.queryCommandSupported('copy'); 80550 } 80551 }, 80552 watch: { 80553 /** 80554 * Watch the available abilities for changes. 80555 */ 80556 availableAbilities: function availableAbilities() { 80557 if (this.availableAbilities.length > 0) { 80558 this.assignDefaultAbilities(); 80559 } 80560 } 80561 }, 80562 methods: { 80563 /** 80564 * Assign all of the default abilities. 80565 */ 80566 assignDefaultAbilities: function assignDefaultAbilities() { 80567 var defaults = _.filter(this.availableAbilities, function (a) { 80568 return a["default"]; 80569 }); 80570 this.form.abilities = _.map(defaults, 'value'); 80571 }, 80572 /** 80573 * Enable all the available abilities for the given token. 80574 */ 80575 assignAllAbilities: function assignAllAbilities() { 80576 this.allAbilitiesAssigned = true; 80577 this.form.abilities = _.map(this.availableAbilities, 'value'); 80578 }, 80579 /** 80580 * Remove all of the abilities from the token. 80581 */ 80582 removeAllAbilities: function removeAllAbilities() { 80583 this.allAbilitiesAssigned = false; 80584 this.form.abilities = []; 80585 }, 80586 /** 80587 * Toggle the given ability in the list of assigned abilities. 80588 */ 80589 toggleAbility: function toggleAbility(ability) { 80590 if (this.abilityIsAssigned(ability)) { 80591 this.form.abilities = _.reject(this.form.abilities, function (a) { 80592 return a == ability; 80593 }); 80594 } else { 80595 this.form.abilities.push(ability); 80596 } 80597 }, 80598 /** 80599 * Determine if the given ability has been assigned to the token. 80600 */ 80601 abilityIsAssigned: function abilityIsAssigned(ability) { 80602 return _.includes(this.form.abilities, ability); 80603 }, 80604 /** 80605 * Create a new API token. 80606 */ 80607 create: function create() { 80608 var _this = this; 80609 Spark.post('/settings/api/token', this.form).then(function (response) { 80610 _this.showToken(response.token); 80611 _this.resetForm(); 80612 _this.$parent.$emit('updateTokens'); 80613 }); 80614 }, 80615 /** 80616 * Display the token to the user. 80617 */ 80618 showToken: function showToken(token) { 80619 this.showingToken = token; 80620 $('#modal-show-token').modal('show'); 80621 }, 80622 /** 80623 * Select the token and copy to Clipboard. 80624 */ 80625 selectToken: function selectToken() { 80626 $('#api-token').select(); 80627 if (this.copyCommandSupported) { 80628 document.execCommand("copy"); 80629 } 80630 }, 80631 /** 80632 * Reset the token form back to its default state. 80633 */ 80634 resetForm: function resetForm() { 80635 this.form.name = ''; 80636 this.assignDefaultAbilities(); 80637 this.allAbilitiesAssigned = false; 80638 } 80639 } 80640}; 80641 80642/***/ }), 80643
80644/***/ "./vendor/laravel/spark-aurelius/resources/assets/js/settings/api/tokens.js": 80645/*!**********************************************************************************!*\ 80646 !*** ./vendor/laravel/spark-aurelius/resources/assets/js/settings/api/tokens.js ***! 80647 \**********************************************************************************/ 80648/*! no static exports found */ 80649/***/ (function(module, exports) { 80650 80651module.exports = { 80652 props: ['tokens', 'availableAbilities'], 80653 /** 80654 * The component's data. 80655 */ 80656 data: function data() { 80657 return { 80658 updatingToken: null, 80659 deletingToken: null, 80660 updateTokenForm: new SparkForm({ 80661 name: '', 80662 abilities: [] 80663 }), 80664 deleteTokenForm: new SparkForm({}) 80665 }; 80666 }, 80667 methods: { 80668 /** 80669 * Show the edit token modal. 80670 */ 80671 editToken: function editToken(token) { 80672 this.updatingToken = token; 80673 this.initializeUpdateFormWith(token); 80674 $('#modal-update-token').modal('show'); 80675 }, 80676 /** 80677 * Initialize the edit form with the given token. 80678 */ 80679 initializeUpdateFormWith: function initializeUpdateFormWith(token) { 80680 this.updateTokenForm.name = token.name; 80681 this.updateTokenForm.abilities = token.metadata.abilities; 80682 }, 80683 /** 80684 * Update the token being edited. 80685 */ 80686 updateToken: function updateToken() { 80687 var _this = this; 80688 Spark.put("/settings/api/token/".concat(this.updatingToken.id), this.updateTokenForm).then(function (response) { 80689 _this.$parent.$emit('updateTokens'); 80690 $('#modal-update-token').modal('hide'); 80691 }); 80692 }, 80693 /** 80694 * Toggle the ability on the current token being edited. 80695 */ 80696 toggleAbility: function toggleAbility(ability) { 80697 if (this.abilityIsAssigned(ability)) { 80698 this.updateTokenForm.abilities = _.reject(this.updateTokenForm.abilities, function (a) { 80699 return a == ability; 80700 }); 80701 } else { 80702 this.updateTokenForm.abilities.push(ability); 80703 } 80704 }, 80705 /** 80706 * Determine if the ability has been assigned to the token being edited. 80707 */ 80708 abilityIsAssigned: function abilityIsAssigned(ability) { 80709 return _.includes(this.updateTokenForm.abilities, ability); 80710 }, 80711 /** 80712 * Get user confirmation that the token should be deleted. 80713 */ 80714 approveTokenDelete: function approveTokenDelete(token) { 80715 this.deletingToken = token; 80716 $('#modal-delete-token').modal('show'); 80717 }, 80718 /** 80719 * Delete the specified token. 80720 */ 80721 deleteToken: function deleteToken() { 80722 var _this2 = this; 80723 Spark["delete"]("/settings/api/token/".concat(this.deletingToken.id), this.deleteTokenForm).then(function () { 80724 _this2.$parent.$emit('updateTokens'); 80725 $('#modal-delete-token').modal('hide'); 80726 }); 80727 } 80728 } 80729}; 80730 80731/***/ }), 80732
80733/***/ "./vendor/laravel/spark-aurelius/resources/assets/js/settings/invoices.js": 80734/*!********************************************************************************!*\ 80735 !*** ./vendor/laravel/spark-aurelius/resources/assets/js/settings/invoices.js ***! 80736 \********************************************************************************/ 80737/*! no static exports found */ 80738/***/ (function(module, exports) { 80739 80740module.exports = { 80741 props: ['user', 'team', 'billableType'], 80742 /** 80743 * The component's data. 80744 */ 80745 data: function data() { 80746 return { 80747 invoices: [] 80748 }; 80749 }, 80750 /** 80751 * Prepare the component. 80752 */ 80753 mounted: function mounted() { 80754 this.getInvoices(); 80755 }, 80756 methods: { 80757 /** 80758 * Get the user's billing invoices 80759 */ 80760 getInvoices: function getInvoices() { 80761 var _this = this; 80762 axios.get(this.urlForInvoices).then(function (response) { 80763 _this.invoices = _.filter(response.data, function (invoice) { 80764 return invoice.total != '$0.00'; 80765 }); 80766 }); 80767 } 80768 }, 80769 computed: { 80770 /** 80771 * Get the URL for retrieving the invoices. 80772 */ 80773 urlForInvoices: function urlForInvoices() { 80774 return this.billingUser ? '/settings/invoices' : "/settings/".concat(Spark.teamsPrefix, "/").concat(this.team.id, "/invoices"); 80775 } 80776 } 80777}; 80778 80779/***/ }), 80780
80781/***/ "./vendor/laravel/spark-aurelius/resources/assets/js/settings/invoices/invoice-list.js": 80782/*!*********************************************************************************************!*\ 80783 !*** ./vendor/laravel/spark-aurelius/resources/assets/js/settings/invoices/invoice-list.js ***! 80784 \*********************************************************************************************/ 80785/*! no static exports found */ 80786/***/ (function(module, exports) { 80787 80788module.exports = { 80789 props: ['user', 'team', 'invoices', 'billableType'], 80790 methods: { 80791 /** 80792 * Get the URL for downloading a given invoice. 80793 */ 80794 downloadUrlFor: function downloadUrlFor(invoice) { 80795 return this.billingUser ? "/settings/invoice/".concat(invoice.id) : "/settings/".concat(Spark.teamsPrefix, "/").concat(this.team.id, "/invoice/").concat(invoice.id); 80796 } 80797 } 80798}; 80799 80800/***/ }), 80801
80802/***/ "./vendor/laravel/spark-aurelius/resources/assets/js/settings/invoices/update-extra-billing-information.js": 80803/*!*****************************************************************************************************************!*\ 80804 !*** ./vendor/laravel/spark-aurelius/resources/assets/js/settings/invoices/update-extra-billing-information.js ***! 80805 \*****************************************************************************************************************/ 80806/*! no static exports found */ 80807/***/ (function(module, exports) { 80808 80809module.exports = { 80810 props: ['user', 'team', 'billableType'], 80811 /** 80812 * The component's data. 80813 */ 80814 data: function data() { 80815 return { 80816 form: new SparkForm({ 80817 information: '' 80818 }) 80819 }; 80820 }, 80821 /** 80822 * Prepare the component. 80823 */ 80824 mounted: function mounted() { 80825 this.form.information = this.billable.extra_billing_information; 80826 }, 80827 methods: { 80828 /** 80829 * Update the extra billing information. 80830 */ 80831 update: function update() { 80832 Spark.put(this.urlForUpdate, this.form); 80833 } 80834 }, 80835 computed: { 80836 /** 80837 * Get the URL for the extra billing information method update. 80838 */ 80839 urlForUpdate: function urlForUpdate() { 80840 return this.billingUser ? '/settings/extra-billing-information' : "/settings/".concat(Spark.teamsPrefix, "/").concat(this.team.id, "/extra-billing-information"); 80841 } 80842 } 80843}; 80844 80845/***/ }), 80846
80847/***/ "./vendor/laravel/spark-aurelius/resources/assets/js/settings/payment-method-stripe.js": 80848/*!*********************************************************************************************!*\ 80849 !*** ./vendor/laravel/spark-aurelius/resources/assets/js/settings/payment-method-stripe.js ***! 80850 \*********************************************************************************************/ 80851/*! no static exports found */ 80852/***/ (function(module, exports, __webpack_require__) { 80853 80854module.exports = { 80855 props: ['user', 'team', 'billableType'], 80856 /** 80857 * Load mixins for the component. 80858 */ 80859 mixins: [__webpack_require__(/*! ./../mixins/discounts */ "./vendor/laravel/spark-aurelius/resources/assets/js/mixins/discounts.js")], 80860 /** 80861 * The component's data. 80862 */ 80863 data: function data() { 80864 return { 80865 currentDiscount: null, 80866 loadingCurrentDiscount: false 80867 }; 80868 }, 80869 /** 80870 * The component has been created by Vue. 80871 */ 80872 created: function created() { 80873 var self = this; 80874 this.$on('updateDiscount', function () { 80875 self.getCurrentDiscountForBillable(self.billableType, self.billable); 80876 return true; 80877 }); 80878 }, 80879 /** 80880 * Prepare the component. 80881 */ 80882 mounted: function mounted() { 80883 this.getCurrentDiscountForBillable(this.billableType, this.billable); 80884 } 80885}; 80886 80887/***/ }), 80888
80889/***/ "./vendor/laravel/spark-aurelius/resources/assets/js/settings/payment-method/redeem-coupon.js": 80890/*!****************************************************************************************************!*\ 80891 !*** ./vendor/laravel/spark-aurelius/resources/assets/js/settings/payment-method/redeem-coupon.js ***! 80892 \****************************************************************************************************/ 80893/*! no static exports found */ 80894/***/ (function(module, exports) { 80895 80896module.exports = { 80897 props: ['user', 'team', 'billableType'], 80898 /** 80899 * The component's data. 80900 */ 80901 data: function data() { 80902 return { 80903 form: new SparkForm({ 80904 coupon: '' 80905 }) 80906 }; 80907 }, 80908 methods: { 80909 /** 80910 * Redeem the given coupon code. 80911 */ 80912 redeem: function redeem() { 80913 var _this = this; 80914 Spark.post(this.urlForRedemption, this.form).then(function () { 80915 _this.form.coupon = ''; 80916 _this.$parent.$emit('updateDiscount'); 80917 }); 80918 } 80919 }, 80920 computed: { 80921 /** 80922 * Get the URL for redeeming a coupon. 80923 */ 80924 urlForRedemption: function urlForRedemption() { 80925 return this.billingUser ? '/settings/payment-method/coupon' : "/settings/".concat(Spark.teamsPrefix, "/").concat(this.team.id, "/payment-method/coupon"); 80926 } 80927 } 80928}; 80929 80930/***/ }), 80931
80932/***/ "./vendor/laravel/spark-aurelius/resources/assets/js/settings/payment-method/update-payment-method-stripe.js": 80933/*!*******************************************************************************************************************!*\ 80934 !*** ./vendor/laravel/spark-aurelius/resources/assets/js/settings/payment-method/update-payment-method-stripe.js ***! 80935 \*******************************************************************************************************************/ 80936/*! no static exports found */ 80937/***/ (function(module, exports, __webpack_require__) { 80938 80939module.exports = { 80940 props: ['user', 'team', 'billableType'], 80941 /** 80942 * Load mixins for the component. 80943 */ 80944 mixins: [__webpack_require__(/*! ./../../mixins/stripe */ "./vendor/laravel/spark-aurelius/resources/assets/js/mixins/stripe.js")], 80945 /** 80946 * The component's data. 80947 */ 80948 data: function data() { 80949 return { 80950 cardElement: null, 80951 form: new SparkForm({ 80952 stripe_payment_method: '', 80953 address: '', 80954 address_line_2: '', 80955 city: '', 80956 state: '', 80957 zip: '', 80958 country: 'US' 80959 }), 80960 cardForm: new SparkForm({ 80961 name: '' 80962 }) 80963 }; 80964 }, 80965 /** 80966 * Prepare the component. 80967 */ 80968 mounted: function mounted() { 80969 this.cardElement = this.createCardElement('#payment-card-element'); 80970 this.initializeBillingAddress(); 80971 }, 80972 methods: { 80973 /** 80974 * Initialize the billing address form for the billable entity. 80975 */ 80976 initializeBillingAddress: function initializeBillingAddress() { 80977 if (!Spark.collectsBillingAddress) { 80978 return; 80979 } 80980 this.form.address = this.billable.billing_address; 80981 this.form.address_line_2 = this.billable.billing_address_line_2; 80982 this.form.city = this.billable.billing_city; 80983 this.form.state = this.billable.billing_state; 80984 this.form.zip = this.billable.billing_zip; 80985 this.form.country = this.billable.billing_country || 'US'; 80986 }, 80987 /** 80988 * Update the billable's card information. 80989 */ 80990 update: function update(e) { 80991 var _this = this; 80992 this.form.busy = true; 80993 this.form.errors.forget(); 80994 this.form.successful = false; 80995 this.cardForm.errors.forget(); 80996 var payload = { 80997 name: this.cardForm.name, 80998 address: { 80999 line1: this.form.address || '', 81000 line2: this.form.address_line_2 || '', 81001 city: this.form.city || '', 81002 state: this.form.state || '', 81003 postal_code: this.form.zip || '', 81004 country: this.form.country || '' 81005 } 81006 }; 81007 this.generateToken(function (secret) { 81008 _this.stripe.handleCardSetup(secret, _this.cardElement, { 81009 payment_method_data: { 81010 billing_details: payload 81011 } 81012 }).then(function (response) { 81013 if (response.error) { 81014 _this.cardForm.errors.set({ 81015 card: [response.error.message] 81016 }); 81017 _this.form.busy = false; 81018 } else { 81019 _this.sendUpdateToServer(response.setupIntent.payment_method); 81020 } 81021 }); 81022 }); 81023 }, 81024 /** 81025 * Send the credit card update information to the server. 81026 */ 81027 sendUpdateToServer: function sendUpdateToServer(paymentMethod) { 81028 var _this2 = this; 81029 this.form.stripe_payment_method = paymentMethod; 81030 Spark.put(this.urlForUpdate, this.form).then(function (response) { 81031 Bus.$emit('updateUser'); 81032 Bus.$emit('updateTeam'); 81033 _this2.cardForm.name = ''; 81034 _this2.cardForm.number = ''; 81035 _this2.cardForm.cvc = ''; 81036 _this2.cardForm.month = ''; 81037 _this2.cardForm.year = ''; 81038 if (!Spark.collectsBillingAddress) { 81039 _this2.form.zip = ''; 81040 } 81041 }); 81042 } 81043 }, 81044 computed: { 81045 /** 81046 * Get the billable entity's "billable" name. 81047 */ 81048 billableName: function billableName() { 81049 return this.billingUser ? this.user.name : this.team.owner.name; 81050 }, 81051 /** 81052 * Get the URL for the payment method update. 81053 */ 81054 urlForUpdate: function urlForUpdate() { 81055 return this.billingUser ? '/settings/payment-method' : "/settings/".concat(Spark.teamsPrefix, "/").concat(this.team.id, "/payment-method"); 81056 }, 81057 /** 81058 * Get the proper brand icon for the customer's credit card. 81059 */ 81060 cardIcon: function cardIcon() { 81061 if (!this.billable.card_brand) { 81062 return 'fa-cc-stripe'; 81063 } 81064 switch (this.billable.card_brand) { 81065 case 'amex': 81066 return 'fa-cc-amex'; 81067 case 'diners': 81068 return 'fa-cc-diners-club'; 81069 case 'discover': 81070 return 'fa-cc-discover'; 81071 case 'jcb': 81072 return 'fa-cc-jcb'; 81073 case 'mastercard': 81074 return 'fa-cc-mastercard'; 81075 case 'visa': 81076 return 'fa-cc-visa'; 81077 default: 81078 return 'fa-cc-stripe'; 81079 } 81080 }, 81081 /** 81082 * Get the placeholder for the billable entity's credit card. 81083 */ 81084 placeholder: function placeholder() { 81085 if (this.billable.card_last_four) { 81086 return "************".concat(this.billable.card_last_four); 81087 } 81088 return ''; 81089 } 81090 } 81091}; 81092 81093/***/ }), 81094
81095/***/ "./vendor/laravel/spark-aurelius/resources/assets/js/settings/payment-method/update-vat-id.js": 81096/*!****************************************************************************************************!*\ 81097 !*** ./vendor/laravel/spark-aurelius/resources/assets/js/settings/payment-method/update-vat-id.js ***! 81098 \****************************************************************************************************/ 81099/*! no static exports found */ 81100/***/ (function(module, exports) { 81101 81102module.exports = { 81103 props: ['user', 'team', 'billableType'], 81104 /** 81105 * The component's data. 81106 */ 81107 data: function data() { 81108 return { 81109 form: new SparkForm({ 81110 vat_id: '' 81111 }) 81112 }; 81113 }, 81114 /** 81115 * Bootstrap the component. 81116 */ 81117 mounted: function mounted() { 81118 this.form.vat_id = this.billable.vat_id; 81119 }, 81120 methods: { 81121 /** 81122 * Update the customer's VAT ID. 81123 */ 81124 update: function update() { 81125 Spark.put(this.urlForUpdate, this.form); 81126 } 81127 }, 81128 computed: { 81129 /** 81130 * Get the URL for the VAT ID update. 81131 */ 81132 urlForUpdate: function urlForUpdate() { 81133 return this.billingUser ? '/settings/payment-method/vat-id' : "/settings/".concat(Spark.teamsPrefix, "/").concat(this.team.id, "/payment-method/vat-id"); 81134 } 81135 } 81136}; 81137 81138/***/ }), 81139
81140/***/ "./vendor/laravel/spark-aurelius/resources/assets/js/settings/profile.js": 81141/*!*******************************************************************************!*\ 81142 !*** ./vendor/laravel/spark-aurelius/resources/assets/js/settings/profile.js ***! 81143 \*******************************************************************************/ 81144/*! no static exports found */ 81145/***/ (function(module, exports) { 81146 81147module.exports = { 81148 props: ['user'] 81149}; 81150 81151/***/ }), 81152
81153/***/ "./vendor/laravel/spark-aurelius/resources/assets/js/settings/profile/update-contact-information.js": 81154/*!**********************************************************************************************************!*\ 81155 !*** ./vendor/laravel/spark-aurelius/resources/assets/js/settings/profile/update-contact-information.js ***! 81156 \**********************************************************************************************************/ 81157/*! no static exports found */ 81158/***/ (function(module, exports) { 81159 81160module.exports = { 81161 props: ['user'], 81162 /** 81163 * The component's data. 81164 */ 81165 data: function data() { 81166 return { 81167 form: $.extend(true, new SparkForm({ 81168 name: '', 81169 email: '' 81170 }), Spark.forms.updateContactInformation) 81171 }; 81172 }, 81173 /** 81174 * Bootstrap the component. 81175 */ 81176 mounted: function mounted() { 81177 this.form.name = this.user.name; 81178 this.form.email = this.user.email; 81179 }, 81180 methods: { 81181 /** 81182 * Update the user's contact information. 81183 */ 81184 update: function update() { 81185 Spark.put('/settings/contact', this.form).then(function () { 81186 Bus.$emit('updateUser'); 81187 }); 81188 } 81189 } 81190}; 81191 81192/***/ }), 81193
81194/***/ "./vendor/laravel/spark-aurelius/resources/assets/js/settings/profile/update-profile-photo.js": 81195/*!****************************************************************************************************!*\ 81196 !*** ./vendor/laravel/spark-aurelius/resources/assets/js/settings/profile/update-profile-photo.js ***! 81197 \****************************************************************************************************/ 81198/*! no static exports found */ 81199/***/ (function(module, exports) { 81200 81201module.exports = { 81202 props: ['user'], 81203 /** 81204 * The component's data. 81205 */ 81206 data: function data() { 81207 return { 81208 form: new SparkForm({}) 81209 }; 81210 }, 81211 methods: { 81212 /** 81213 * Update the user's profile photo. 81214 */ 81215 update: function update(e) { 81216 e.preventDefault(); 81217 if (!this.$refs.photo.files.length) { 81218 return; 81219 } 81220 var self = this; 81221 this.form.startProcessing(); 81222 81223 // We need to gather a fresh FormData instance with the profile photo appended to 81224 // the data so we can POST it up to the server. This will allow us to do async 81225 // uploads of the profile photos. We will update the user after this action. 81226 axios.post('/settings/photo', this.gatherFormData()).then(function () { 81227 Bus.$emit('updateUser'); 81228 self.form.finishProcessing(); 81229 }, function (error) { 81230 self.form.setErrors(error.response.data.errors); 81231 }); 81232 }, 81233 /** 81234 * Gather the form data for the photo upload. 81235 */ 81236 gatherFormData: function gatherFormData() { 81237 var data = new FormData(); 81238 data.append('photo', this.$refs.photo.files[0]); 81239 return data; 81240 } 81241 }, 81242 computed: { 81243 /** 81244 * Calculate the style attribute for the photo preview. 81245 */ 81246 previewStyle: function previewStyle() { 81247 return "background-image: url(".concat(this.user.photo_url, ")"); 81248 } 81249 } 81250}; 81251 81252/***/ }), 81253
81254/***/ "./vendor/laravel/spark-aurelius/resources/assets/js/settings/security.js": 81255/*!********************************************************************************!*\ 81256 !*** ./vendor/laravel/spark-aurelius/resources/assets/js/settings/security.js ***! 81257 \********************************************************************************/ 81258/*! no static exports found */ 81259/***/ (function(module, exports) { 81260 81261module.exports = { 81262 props: ['user'], 81263 /** 81264 * The component's data. 81265 */ 81266 data: function data() { 81267 return { 81268 twoFactorResetCode: null 81269 }; 81270 }, 81271 /** 81272 * The component has been created by Vue. 81273 */ 81274 created: function created() { 81275 var self = this; 81276 this.$on('receivedTwoFactorResetCode', function (code) { 81277 self.twoFactorResetCode = code; 81278 $('#modal-show-two-factor-reset-code').modal('show'); 81279 }); 81280 } 81281}; 81282 81283/***/ }), 81284
81285/***/ "./vendor/laravel/spark-aurelius/resources/assets/js/settings/security/disable-two-factor-auth.js": 81286/*!********************************************************************************************************!*\ 81287 !*** ./vendor/laravel/spark-aurelius/resources/assets/js/settings/security/disable-two-factor-auth.js ***! 81288 \********************************************************************************************************/ 81289/*! no static exports found */ 81290/***/ (function(module, exports) { 81291 81292module.exports = { 81293 props: ['user'], 81294 /** 81295 * The component's data. 81296 */ 81297 data: function data() { 81298 return { 81299 form: new SparkForm({}) 81300 }; 81301 }, 81302 methods: { 81303 /** 81304 * Disable two-factor authentication for the user. 81305 */ 81306 disable: function disable() { 81307 Spark["delete"]('/settings/two-factor-auth', this.form).then(function () { 81308 Bus.$emit('updateUser'); 81309 }); 81310 } 81311 } 81312}; 81313 81314/***/ }), 81315
81316/***/ "./vendor/laravel/spark-aurelius/resources/assets/js/settings/security/enable-two-factor-auth.js": 81317/*!*******************************************************************************************************!*\ 81318 !*** ./vendor/laravel/spark-aurelius/resources/assets/js/settings/security/enable-two-factor-auth.js ***! 81319 \*******************************************************************************************************/ 81320/*! no static exports found */ 81321/***/ (function(module, exports) { 81322 81323module.exports = { 81324 props: ['user'], 81325 /** 81326 * The component's data. 81327 */ 81328 data: function data() { 81329 return { 81330 form: new SparkForm({ 81331 country_code: '', 81332 phone: '' 81333 }) 81334 }; 81335 }, 81336 /** 81337 * Prepare the component. 81338 */ 81339 mounted: function mounted() { 81340 this.form.country_code = this.user.country_code; 81341 this.form.phone = this.user.phone; 81342 }, 81343 methods: { 81344 /** 81345 * Enable two-factor authentication for the user. 81346 */ 81347 enable: function enable() { 81348 var _this = this; 81349 Spark.post('/settings/two-factor-auth', this.form).then(function (code) { 81350 _this.$parent.$emit('receivedTwoFactorResetCode', code); 81351 Bus.$emit('updateUser'); 81352 }); 81353 } 81354 } 81355}; 81356 81357/***/ }), 81358
81359/***/ "./vendor/laravel/spark-aurelius/resources/assets/js/settings/security/update-password.js": 81360/*!************************************************************************************************!*\ 81361 !*** ./vendor/laravel/spark-aurelius/resources/assets/js/settings/security/update-password.js ***! 81362 \************************************************************************************************/ 81363/*! no static exports found */ 81364/***/ (function(module, exports) { 81365 81366module.exports = { 81367 /** 81368 * The component's data. 81369 */ 81370 data: function data() { 81371 return { 81372 form: new SparkForm({ 81373 current_password: '', 81374 password: '', 81375 password_confirmation: '' 81376 }) 81377 }; 81378 }, 81379 methods: { 81380 /** 81381 * Update the user's password. 81382 */ 81383 update: function update() { 81384 Spark.put('/settings/password', this.form); 81385 } 81386 } 81387}; 81388 81389/***/ }), 81390
81391/***/ "./vendor/laravel/spark-aurelius/resources/assets/js/settings/settings.js": 81392/*!********************************************************************************!*\ 81393 !*** ./vendor/laravel/spark-aurelius/resources/assets/js/settings/settings.js ***! 81394 \********************************************************************************/ 81395/*! no static exports found */ 81396/***/ (function(module, exports, __webpack_require__) { 81397 81398module.exports = { 81399 props: ['user', 'teams'], 81400 /** 81401 * Load mixins for the component. 81402 */ 81403 mixins: [__webpack_require__(/*! ./../mixins/tab-state */ "./vendor/laravel/spark-aurelius/resources/assets/js/mixins/tab-state.js")], 81404 /** 81405 * The component's data. 81406 */ 81407 data: function data() { 81408 return { 81409 billableType: 'user', 81410 team: null 81411 }; 81412 }, 81413 /** 81414 * Prepare the component. 81415 */ 81416 mounted: function mounted() { 81417 this.usePushStateForTabs('.spark-settings-tabs'); 81418 } 81419}; 81420 81421/***/ }), 81422
81423/***/ "./vendor/laravel/spark-aurelius/resources/assets/js/settings/subscription.js": 81424/*!************************************************************************************!*\ 81425 !*** ./vendor/laravel/spark-aurelius/resources/assets/js/settings/subscription.js ***! 81426 \************************************************************************************/ 81427/*! no static exports found */ 81428/***/ (function(module, exports, __webpack_require__) { 81429 81430module.exports = { 81431 props: ['user', 'team', 'billableType'], 81432 /** 81433 * Load mixins for the component. 81434 */ 81435 mixins: [__webpack_require__(/*! ./../mixins/plans */ "./vendor/laravel/spark-aurelius/resources/assets/js/mixins/plans.js"), __webpack_require__(/*! ./../mixins/subscriptions */ "./vendor/laravel/spark-aurelius/resources/assets/js/mixins/subscriptions.js")], 81436 /** 81437 * The component's data. 81438 */ 81439 data: function data() { 81440 return { 81441 plans: [] 81442 }; 81443 }, 81444 /** 81445 * Prepare the component. 81446 */ 81447 mounted: function mounted() { 81448 var self = this; 81449 this.getPlans(); 81450 this.$on('showPlanDetails', function (plan) { 81451 self.showPlanDetails(plan); 81452 }); 81453 }, 81454 methods: { 81455 /** 81456 * Get the active plans for the application. 81457 */ 81458 getPlans: function getPlans() { 81459 var _this = this; 81460 axios.get('/spark/plans').then(function (response) { 81461 _this.plans = _this.billingUser ? _.filter(response.data, { 81462 type: "user" 81463 }) : _.filter(response.data, { 81464 type: "team" 81465 }); 81466 }); 81467 } 81468 } 81469}; 81470 81471/***/ }), 81472
81473/***/ "./vendor/laravel/spark-aurelius/resources/assets/js/settings/subscription/cancel-subscription.js": 81474/*!********************************************************************************************************!*\ 81475 !*** ./vendor/laravel/spark-aurelius/resources/assets/js/settings/subscription/cancel-subscription.js ***! 81476 \********************************************************************************************************/ 81477/*! no static exports found */ 81478/***/ (function(module, exports) { 81479 81480module.exports = { 81481 props: ['user', 'team', 'billableType'], 81482 /** 81483 * The component's data. 81484 */ 81485 data: function data() { 81486 return { 81487 form: new SparkForm({}) 81488 }; 81489 }, 81490 methods: { 81491 /** 81492 * Confirm the cancellation operation. 81493 */ 81494 confirmCancellation: function confirmCancellation() { 81495 $('#modal-confirm-cancellation').modal('show'); 81496 }, 81497 /** 81498 * Cancel the current subscription. 81499 */ 81500 cancel: function cancel() { 81501 Spark["delete"](this.urlForCancellation, this.form).then(function () { 81502 Bus.$emit('updateUser'); 81503 Bus.$emit('updateTeam'); 81504 $('#modal-confirm-cancellation').modal('hide'); 81505 }); 81506 } 81507 }, 81508 computed: { 81509 /** 81510 * Get the URL for the subscription cancellation. 81511 */ 81512 urlForCancellation: function urlForCancellation() { 81513 return this.billingUser ? '/settings/subscription' : "/settings/".concat(Spark.teamsPrefix, "/").concat(this.team.id, "/subscription"); 81514 } 81515 } 81516}; 81517 81518/***/ }), 81519
81520/***/ "./vendor/laravel/spark-aurelius/resources/assets/js/settings/subscription/resume-subscription.js": 81521/*!********************************************************************************************************!*\ 81522 !*** ./vendor/laravel/spark-aurelius/resources/assets/js/settings/subscription/resume-subscription.js ***! 81523 \********************************************************************************************************/ 81524/*! no static exports found */ 81525/***/ (function(module, exports, __webpack_require__) { 81526 81527module.exports = { 81528 props: ['user', 'team', 'plans', 'billableType'], 81529 /** 81530 * Load mixins for the component. 81531 */ 81532 mixins: [__webpack_require__(/*! ./../../mixins/plans */ "./vendor/laravel/spark-aurelius/resources/assets/js/mixins/plans.js"), __webpack_require__(/*! ./../../mixins/subscriptions */ "./vendor/laravel/spark-aurelius/resources/assets/js/mixins/subscriptions.js")], 81533 /** 81534 * Prepare the component. 81535 */ 81536 mounted: function mounted() { 81537 if (this.onlyHasYearlyPlans) { 81538 this.showYearlyPlans(); 81539 } 81540 }, 81541 methods: { 81542 /** 81543 * Show the plan details for the given plan. 81544 * 81545 * We'll ask the parent subscription component to display it. 81546 */ 81547 showPlanDetails: function showPlanDetails(plan) { 81548 this.$parent.$emit('showPlanDetails', plan); 81549 }, 81550 /** 81551 * Get the plan price with the applicable VAT. 81552 */ 81553 priceWithTax: function priceWithTax(plan) { 81554 return plan.price + plan.price * (this.billable.tax_rate / 100); 81555 } 81556 } 81557}; 81558 81559/***/ }), 81560
81561/***/ "./vendor/laravel/spark-aurelius/resources/assets/js/settings/subscription/subscribe-stripe.js": 81562/*!*****************************************************************************************************!*\ 81563 !*** ./vendor/laravel/spark-aurelius/resources/assets/js/settings/subscription/subscribe-stripe.js ***! 81564 \*****************************************************************************************************/ 81565/*! no static exports found */ 81566/***/ (function(module, exports, __webpack_require__) { 81567 81568module.exports = { 81569 props: ['user', 'team', 'plans', 'billableType'], 81570 /** 81571 * Load mixins for the component. 81572 */ 81573 mixins: [__webpack_require__(/*! ./../../mixins/plans */ "./vendor/laravel/spark-aurelius/resources/assets/js/mixins/plans.js"), __webpack_require__(/*! ./../../mixins/subscriptions */ "./vendor/laravel/spark-aurelius/resources/assets/js/mixins/subscriptions.js"), __webpack_require__(/*! ./../../mixins/vat */ "./vendor/laravel/spark-aurelius/resources/assets/js/mixins/vat.js"), __webpack_require__(/*! ./../../mixins/stripe */ "./vendor/laravel/spark-aurelius/resources/assets/js/mixins/stripe.js")], 81574 /** 81575 * The component's data. 81576 */ 81577 data: function data() { 81578 return { 81579 taxRate: 0, 81580 cardElement: null, 81581 form: new SparkForm({ 81582 use_existing_payment_method: this.hasPaymentMethod() ? '1' : '0', 81583 stripe_payment_method: '', 81584 plan: '', 81585 coupon: null, 81586 address: '', 81587 address_line_2: '', 81588 city: '', 81589 state: '', 81590 zip: '', 81591 country: 'US', 81592 vat_id: '' 81593 }), 81594 cardForm: new SparkForm({ 81595 name: '' 81596 }) 81597 }; 81598 }, 81599 watch: { 81600 /** 81601 * Watch for changes on the entire billing address. 81602 */ 81603 'currentBillingAddress': function currentBillingAddress(value) { 81604 if (!Spark.collectsEuropeanVat) { 81605 return; 81606 } 81607 this.refreshTaxRate(this.form); 81608 } 81609 }, 81610 /** 81611 * Prepare the component. 81612 */ 81613 mounted: function mounted() { 81614 this.cardElement = this.createCardElement('#subscription-card-element'); 81615 this.initializeBillingAddress(); 81616 if (this.onlyHasYearlyPaidPlans) { 81617 this.showYearlyPlans(); 81618 } 81619 }, 81620 methods: { 81621 /** 81622 * Initialize the billing address form for the billable entity. 81623 */ 81624 initializeBillingAddress: function initializeBillingAddress() { 81625 this.form.address = this.billable.billing_address; 81626 this.form.address_line_2 = this.billable.billing_address_line_2; 81627 this.form.city = this.billable.billing_city; 81628 this.form.state = this.billable.billing_state; 81629 this.form.zip = this.billable.billing_zip; 81630 this.form.country = this.billable.billing_country || 'US'; 81631 this.form.vat_id = this.billable.vat_id; 81632 }, 81633 /** 81634 * Mark the given plan as selected. 81635 */ 81636 selectPlan: function selectPlan(plan) { 81637 this.selectedPlan = plan; 81638 this.form.plan = this.selectedPlan.id; 81639 }, 81640 /** 81641 * Subscribe to the specified plan. 81642 */ 81643 subscribe: function subscribe() { 81644 var _this = this; 81645 this.cardForm.errors.forget(); 81646 this.form.startProcessing(); 81647 if (this.form.use_existing_payment_method == '1') { 81648 return this.createSubscription(); 81649 } 81650 var payload = { 81651 name: this.cardForm.name, 81652 address: { 81653 line1: this.form.address || '', 81654 line2: this.form.address_line_2 || '', 81655 city: this.form.city || '', 81656 state: this.form.state || '', 81657 postal_code: this.form.zip || '', 81658 country: this.form.country || '' 81659 } 81660 }; 81661 this.generateToken(function (secret) { 81662 _this.stripe.handleCardSetup(secret, _this.cardElement, { 81663 payment_method_data: { 81664 billing_details: payload 81665 } 81666 }).then(function (response) { 81667 if (response.error) { 81668 _this.cardForm.errors.set({ 81669 card: [response.error.message] 81670 }); 81671 _this.form.busy = false; 81672 } else { 81673 _this.createSubscription(response.setupIntent.payment_method); 81674 } 81675 }); 81676 }); 81677 }, 81678 /* 81679 * After obtaining the Stripe token, create subscription on the Spark server. 81680 */ 81681 createSubscription: function createSubscription(token) { 81682 var _this2 = this; 81683 this.form.stripe_payment_method = token; 81684 axios.post(this.urlForNewSubscription, this.form).then(function (response) { 81685 Bus.$emit('updateUser'); 81686 Bus.$emit('updateTeam'); 81687 })["catch"](function (errors) { 81688 if (errors.response.status == 400) { 81689 window.location = '/' + Spark.cashierPath + '/payment/'
81689+ errors.response.data.paymentId + '?redirect=' + _this2.urlForPlanRedirect; 81690 } else { 81691 _this2.form.setErrors(errors.response.data.errors); 81692 } 81693 }); 81694 }, 81695 /** 81696 * Determine if the user has subscribed to the given plan before. 81697 */ 81698 hasSubscribed: function hasSubscribed(plan) { 81699 return !!_.filter(this.billable.subscriptions, { 81700 provider_plan: plan.id 81701 }).length; 81702 }, 81703 /** 81704 * Show the plan details for the given plan. 81705 * 81706 * We'll ask the parent subscription component to display it. 81707 */ 81708 showPlanDetails: function showPlanDetails(plan) { 81709 this.$parent.$emit('showPlanDetails', plan); 81710 }, 81711 /** 81712 * Determine if the user/team has a payment method defined. 81713 */ 81714 hasPaymentMethod: function hasPaymentMethod() { 81715 return this.team ? this.team.card_last_four : this.user.card_last_four; 81716 } 81717 }, 81718 computed: { 81719 /** 81720 * Get the billable entity's "billable" name. 81721 */ 81722 billableName: function billableName() { 81723 return this.billingUser ? this.user.name : this.team.owner.name; 81724 }, 81725 /** 81726 * Determine if the selected country collects European VAT. 81727 */ 81728 countryCollectsVat: function countryCollectsVat() { 81729 return this.collectsVat(this.form.country); 81730 }, 81731 /** 81732 * Get the URL for subscribing to a plan. 81733 */ 81734 urlForNewSubscription: function urlForNewSubscription() { 81735 return this.billingUser ? '/settings/subscription' : "/settings/".concat(Spark.teamsPrefix, "/").concat(this.team.id, "/subscription"); 81736 }, 81737 /** 81738 * Get the URL to redirect to after confirmation. 81739 */ 81740 urlForPlanRedirect: function urlForPlanRedirect() { 81741 return this.billingUser ? "/settings%23/subscription" : "/settings/".concat(Spark.teamsPrefix, "/").concat(this.team.id, "%23/subscription"); 81742 }, 81743 /** 81744 * Get the current billing address from the subscribe form. 81745 * 81746 * This used primarily for watching. 81747 */ 81748 currentBillingAddress: function currentBillingAddress() { 81749 return this.form.address + this.form.address_line_2 + this.form.city + this.form.state + this.form.zip + this.form.country + this.form.vat_id; 81750 } 81751 } 81752}; 81753 81754/***/ }), 81755
81756/***/ "./vendor/laravel/spark-aurelius/resources/assets/js/settings/subscription/update-subscription.js": 81757/*!********************************************************************************************************!*\ 81758 !*** ./vendor/laravel/spark-aurelius/resources/assets/js/settings/subscription/update-subscription.js ***! 81759 \********************************************************************************************************/ 81760/*! no static exports found */ 81761/***/ (function(module, exports, __webpack_require__) { 81762 81763module.exports = { 81764 props: ['user', 'team', 'plans', 'billableType'], 81765 /** 81766 * Load mixins for the component. 81767 */ 81768 mixins: [__webpack_require__(/*! ./../../mixins/plans */ "./vendor/laravel/spark-aurelius/resources/assets/js/mixins/plans.js"), __webpack_require__(/*! ./../../mixins/subscriptions */ "./vendor/laravel/spark-aurelius/resources/assets/js/mixins/subscriptions.js")], 81769 /** 81770 * The component's data. 81771 */ 81772 data: function data() { 81773 return { 81774 confirmingPlan: null 81775 }; 81776 }, 81777 /** 81778 * Prepare the component. 81779 */ 81780 mounted: function mounted() { 81781 var _this = this; 81782 this.selectActivePlanInterval(); 81783 81784 // We need to watch the activePlan computed property for changes so we can select 81785 // the proper active plan on the plan interval button group. So, we will watch 81786 // this property and fire off a method anytime it changes so it can sync up. 81787 this.$watch('activePlan', function (value) { 81788 _this.selectActivePlanInterval(); 81789 }); 81790 if (this.onlyHasYearlyPlans) { 81791 this.showYearlyPlans(); 81792 } 81793 }, 81794 methods: { 81795 /** 81796 * Confirm the plan update with the user. 81797 */ 81798 confirmPlanUpdate: function confirmPlanUpdate(plan) { 81799 this.confirmingPlan = plan; 81800 $('#modal-confirm-plan-update').modal('show'); 81801 }, 81802 /** 81803 * Approve the plan update. 81804 */ 81805 approvePlanUpdate: function approvePlanUpdate() { 81806 $('#modal-confirm-plan-update').modal('hide'); 81807 this.updateSubscription(this.confirmingPlan); 81808 }, 81809 /** 81810 * Select the active plan interval. 81811 */ 81812 selectActivePlanInterval: function selectActivePlanInterval() { 81813 if (this.activePlanIsMonthly || this.yearlyPlans.length === 0) { 81814 this.showMonthlyPlans(); 81815 } else { 81816 this.showYearlyPlans(); 81817 } 81818 }, 81819 /** 81820 * Show the plan details for the given plan. 81821 * 81822 * We'll ask the parent subscription component to display it. 81823 */ 81824 showPlanDetails: function showPlanDetails(plan) { 81825 this.$parent.$emit('showPlanDetails', plan); 81826 }, 81827 /** 81828 * Get the plan price with the applicable VAT. 81829 */ 81830 priceWithTax: function priceWithTax(plan) { 81831 return plan.price + plan.price * (this.billable.tax_rate / 100); 81832 } 81833 } 81834}; 81835 81836/***/ }), 81837
81838/***/ "./vendor/laravel/spark-aurelius/resources/assets/js/settings/teams.js": 81839/*!*****************************************************************************!*\ 81840 !*** ./vendor/laravel/spark-aurelius/resources/assets/js/settings/teams.js ***! 81841 \*****************************************************************************/ 81842/*! no static exports found */ 81843/***/ (function(module, exports) { 81844 81845module.exports = { 81846 props: ['user', 'teams'] 81847}; 81848 81849/***/ }), 81850
81851/***/ "./vendor/laravel/spark-aurelius/resources/assets/js/settings/teams/create-team.js": 81852/*!*****************************************************************************************!*\ 81853 !*** ./vendor/laravel/spark-aurelius/resources/assets/js/settings/teams/create-team.js ***! 81854 \*****************************************************************************************/ 81855/*! no static exports found */ 81856/***/ (function(module, exports) { 81857 81858module.exports = { 81859 /** 81860 * The component's data. 81861 */ 81862 data: function data() { 81863 return { 81864 plans: [], 81865 form: new SparkForm({ 81866 name: '', 81867 slug: '' 81868 }) 81869 }; 81870 }, 81871 computed: { 81872 /** 81873 * Get the active subscription instance. 81874 */ 81875 activeSubscription: function activeSubscription() { 81876 if (!this.$parent.billable) { 81877 return; 81878 } 81879 var subscription = _.find(this.$parent.billable.subscriptions, function (subscription) { 81880 return subscription.name === 'default'; 81881 }); 81882 if (typeof subscription !== 'undefined') { 81883 return subscription; 81884 } 81885 }, 81886 /** 81887 * Get the active plan instance. 81888 */ 81889 activePlan: function activePlan() { 81890 var _this = this; 81891 if (this.activeSubscription) { 81892 return _.find(this.plans, function (plan) { 81893 return plan.id === _this.activeSubscription.provider_plan; 81894 }); 81895 } 81896 }, 81897 /** 81898 * Check if there's a limit for the number of teams. 81899 */ 81900 hasTeamLimit: function hasTeamLimit() { 81901 if (!this.activePlan) { 81902 return false; 81903 } 81904 return !!this.activePlan.attributes.teams; 81905 }, 81906 /** 81907 * 81908 * Get the remaining teams in the active plan. 81909 */ 81910 remainingTeams: function remainingTeams() { 81911 var ownedTeams = _.filter(this.$parent.teams, { 81912 owner_id: this.$parent.billable.id 81913 }); 81914 return this.activePlan ? this.activePlan.attributes.teams - ownedTeams.length : 0; 81915 }, 81916 /** 81917 * Check if the user can create more teams. 81918 */ 81919 canCreateMoreTeams: function canCreateMoreTeams() { 81920 if (!this.hasTeamLimit) { 81921 return true; 81922 } 81923 return this.remainingTeams > 0; 81924 } 81925 }, 81926 /** 81927 * The component has been created by Vue. 81928 */ 81929 created: function created() { 81930 this.getPlans(); 81931 }, 81932 watch: { 81933 /** 81934 * Watch the team name for changes. 81935 */ 81936 'form.name': function formName(val, oldVal) { 81937 if (this.form.slug === '' || this.form.slug === oldVal.toLowerCase().replace(/[\s\W-]+/g, '-')) { 81938 this.form.slug = val.toLowerCase().replace(/[\s\W-]+/g, '-'); 81939 } 81940 } 81941 }, 81942 methods: { 81943 /** 81944 * Create a new team. 81945 */ 81946 create: function create() { 81947 var _this2 = this; 81948 Spark.post('/settings/' + Spark.teamsPrefix, this.form).then(function (response) { 81949 _this2.form.name = ''; 81950 _this2.form.slug = ''; 81951 if (response.pendingPayment) { 81952 window.location = '/' + Spark.cashierPath + '/payment/' + response.pendingPayment + '?redirect=/settings%23/subscription'; 81953 } else { 81954 Bus.$emit('updateUser'); 81955 Bus.$emit('updateTeams'); 81956 } 81957 }); 81958 }, 81959 /** 81960 * Get all the plans defined in the application. 81961 */ 81962 getPlans: function getPlans() { 81963 var _this3 = this; 81964 axios.get('/spark/plans').then(function (response) { 81965 _this3.plans = response.data; 81966 }); 81967 } 81968 } 81969}; 81970 81971/***/ }), 81972
81973/***/ "./vendor/laravel/spark-aurelius/resources/assets/js/settings/teams/current-teams.js": 81974/*!*******************************************************************************************!*\ 81975 !*** ./vendor/laravel/spark-aurelius/resources/assets/js/settings/teams/current-teams.js ***! 81976 \*******************************************************************************************/ 81977/*! no static exports found */ 81978/***/ (function(module, exports) { 81979 81980module.exports = { 81981 props: ['user', 'teams'], 81982 /** 81983 * The component's data. 81984 */ 81985 data: function data() { 81986 return { 81987 leavingTeam: null, 81988 deletingTeam: null, 81989 leaveTeamForm: new SparkForm({}), 81990 deleteTeamForm: new SparkForm({}) 81991 }; 81992 }, 81993 /** 81994 * Prepare the component. 81995 */ 81996 mounted: function mounted() { 81997 $('[data-toggle="tooltip"]').tooltip(); 81998 }, 81999 computed: { 82000 /** 82001 * Get the URL for leaving a team. 82002 */ 82003 urlForLeaving: function urlForLeaving() { 82004 return "/settings/".concat(Spark.teamsPrefix, "/").concat(this.leavingTeam.id, "/members/").concat(this.user.id); 82005 } 82006 }, 82007 methods: { 82008 /** 82009 * Approve leaving the given team. 82010 */ 82011 approveLeavingTeam: function approveLeavingTeam(team) { 82012 this.leavingTeam = team; 82013 $('#modal-leave-team').modal('show'); 82014 }, 82015 /** 82016 * Leave the given team. 82017 */ 82018 leaveTeam: function leaveTeam() { 82019 Spark["delete"](this.urlForLeaving, this.leaveTeamForm).then(function () { 82020 Bus.$emit('updateUser'); 82021 Bus.$emit('updateTeams'); 82022 $('#modal-leave-team').modal('hide'); 82023 }); 82024 }, 82025 /** 82026 * Approve the deletion of the given team. 82027 */ 82028 approveTeamDelete: function approveTeamDelete(team) { 82029 this.deletingTeam = team; 82030 $('#modal-delete-team').modal('show'); 82031 }, 82032 /** 82033 * Delete the given team. 82034 */ 82035 deleteTeam: function deleteTeam() { 82036 Spark["delete"]("/settings/".concat(Spark.teamsPrefix, "/").concat(this.deletingTeam.id), this.deleteTeamForm).then(function () { 82037 Bus.$emit('updateUser'); 82038 Bus.$emit('updateTeams'); 82039 $('#modal-delete-team').modal('hide'); 82040 }); 82041 } 82042 } 82043}; 82044 82045/***/ }), 82046
82047/***/ "./vendor/laravel/spark-aurelius/resources/assets/js/settings/teams/mailed-invitations.js": 82048/*!************************************************************************************************!*\ 82049 !*** ./vendor/laravel/spark-aurelius/resources/assets/js/settings/teams/mailed-invitations.js ***! 82050 \************************************************************************************************/ 82051/*! no static exports found */ 82052/***/ (function(module, exports) { 82053 82054module.exports = { 82055 props: ['team', 'invitations'], 82056 methods: { 82057 /** 82058 * Cancel the sent invitation. 82059 */ 82060 cancel: function cancel(invitation) { 82061 var _this = this; 82062 axios["delete"]("/settings/invitations/".concat(invitation.id)).then(function () { 82063 _this.$parent.$emit('updateInvitations'); 82064 }); 82065 } 82066 } 82067}; 82068 82069/***/ }), 82070
82071/***/ "./vendor/laravel/spark-aurelius/resources/assets/js/settings/teams/pending-invitations.js": 82072/*!*************************************************************************************************!*\ 82073 !*** ./vendor/laravel/spark-aurelius/resources/assets/js/settings/teams/pending-invitations.js ***! 82074 \*************************************************************************************************/ 82075/*! no static exports found */ 82076/***/ (function(module, exports) { 82077 82078module.exports = { 82079 /** 82080 * The component's data. 82081 */ 82082 data: function data() { 82083 return { 82084 invitations: [] 82085 }; 82086 }, 82087 /** 82088 * The component has been created by Vue. 82089 */ 82090 created: function created() { 82091 this.getPendingInvitations(); 82092 }, 82093 methods: { 82094 /** 82095 * Get the pending invitations for the user. 82096 */ 82097 getPendingInvitations: function getPendingInvitations() { 82098 var _this = this; 82099 axios.get('/settings/invitations/pending').then(function (response) { 82100 _this.invitations = response.data; 82101 }); 82102 }, 82103 /** 82104 * Accept the given invitation. 82105 */ 82106 accept: function accept(invitation) { 82107 var _this2 = this; 82108 axios.post("/settings/invitations/".concat(invitation.id, "/accept")).then(function () { 82109 Bus.$emit('updateTeams'); 82110 _this2.getPendingInvitations(); 82111 }); 82112 this.removeInvitation(invitation); 82113 }, 82114 /** 82115 * Reject the given invitation. 82116 */ 82117 reject: function reject(invitation) { 82118 var _this3 = this; 82119 axios.post("/settings/invitations/".concat(invitation.id, "/reject")).then(function () { 82120 _this3.getPendingInvitations(); 82121 }); 82122 this.removeInvitation(invitation); 82123 }, 82124 /** 82125 * Remove the given invitation from the list. 82126 */ 82127 removeInvitation: function removeInvitation(invitation) { 82128 this.invitations = _.reject(this.invitations, function (i) { 82129 return i.id === invitation.id; 82130 }); 82131 } 82132 } 82133}; 82134 82135/***/ }), 82136
82137/***/ "./vendor/laravel/spark-aurelius/resources/assets/js/settings/teams/send-invitation.js": 82138/*!*********************************************************************************************!*\ 82139 !*** ./vendor/laravel/spark-aurelius/resources/assets/js/settings/teams/send-invitation.js ***! 82140 \*********************************************************************************************/ 82141/*! no static exports found */ 82142/***/ (function(module, exports) { 82143 82144module.exports = { 82145 props: ['user', 'team', 'billableType', 'defaultRole'], 82146 /** 82147 * The component's data. 82148 */ 82149 data: function data() { 82150 return { 82151 plans: [], 82152 roles: [], 82153 form: new SparkForm({ 82154 email: '', 82155 role: this.defaultRole 82156 }) 82157 }; 82158 }, 82159 computed: { 82160 /** 82161 * Get the active subscription instance. 82162 */ 82163 activeSubscription: function activeSubscription() { 82164 if (!this.billable) { 82165 return; 82166 } 82167 var subscription = _.find(this.billable.subscriptions, function (subscription) { 82168 return subscription.name === 'default'; 82169 }); 82170 if (typeof subscription !== 'undefined') { 82171 return subscription; 82172 } 82173 }, 82174 /** 82175 * Get the active plan instance. 82176 */ 82177 activePlan: function activePlan() { 82178 var _this = this; 82179 if (this.activeSubscription) { 82180 return _.find(this.plans, function (plan) { 82181 return plan.id === _this.activeSubscription.provider_plan; 82182 }); 82183 } 82184 }, 82185 /** 82186 * Check if there's a limit for the number of team members. 82187 */ 82188 hasTeamMembersLimit: function hasTeamMembersLimit() { 82189 if (!this.activePlan) { 82190 return false; 82191 } 82192 return !!this.activePlan.attributes.teamMembers; 82193 }, 82194 /** 82195 * 82196 * Get the remaining team members in the active plan. 82197 */ 82198 remainingTeamMembers: function remainingTeamMembers() { 82199 return this.activePlan ? this.activePlan.attributes.teamMembers - this.$parent.team.users.length : 0; 82200 }, 82201 /** 82202 * Check if the user can invite more team members. 82203 */ 82204 canInviteMoreTeamMembers: function canInviteMoreTeamMembers() { 82205 if (!this.hasTeamMembersLimit) { 82206 return true; 82207 } 82208 return this.remainingTeamMembers > 0; 82209 } 82210 }, 82211 /** 82212 * The component has been created by Vue. 82213 */ 82214 created: function created() { 82215 this.getPlans(); 82216 this.getRoles(); 82217 }, 82218 methods: { 82219 /** 82220 * Send a team invitation. 82221 */ 82222 send: function send() { 82223 var _this2 = this; 82224 Spark.post("/settings/".concat(Spark.teamsPrefix, "/").concat(this.team.id, "/invitations"), this.form).then(function () { 82225 _this2.form.email = ''; 82226 _this2.form.role = Spark.defaultRole; 82227 _this2.$parent.$emit('updateInvitations'); 82228 }); 82229 }, 82230 /** 82231 * Get all the plans defined in the application. 82232 */ 82233 getPlans: function getPlans() { 82234 var _this3 = this; 82235 axios.get('/spark/plans').then(function (response) { 82236 _this3.plans = response.data; 82237 }); 82238 }, 82239 /** 82240 * Get the available member roles. 82241 */ 82242 getRoles: function getRoles() { 82243 var _this4 = this; 82244 axios.get("/settings/".concat(Spark.teamsPrefix, "/roles")).then(function (response) { 82245 _this4.roles = response.data; 82246 }); 82247 } 82248 } 82249}; 82250 82251/***/ }), 82252
82253/***/ "./vendor/laravel/spark-aurelius/resources/assets/js/settings/teams/team-members.js": 82254/*!******************************************************************************************!*\ 82255 !*** ./vendor/laravel/spark-aurelius/resources/assets/js/settings/teams/team-members.js ***! 82256 \******************************************************************************************/ 82257/*! no static exports found */ 82258/***/ (function(module, exports) { 82259 82260module.exports = { 82261 props: ['user', 'team'], 82262 /** 82263 * The component's data. 82264 */ 82265 data: function data() { 82266 return { 82267 roles: [], 82268 updatingTeamMember: null, 82269 deletingTeamMember: null, 82270 updateTeamMemberForm: $.extend(true, new SparkForm({ 82271 role: '' 82272 }), Spark.forms.updateTeamMember), 82273 deleteTeamMemberForm: new SparkForm({}) 82274 }; 82275 }, 82276 /** 82277 * The component has been created by Vue. 82278 */ 82279 created: function created() { 82280 this.getRoles(); 82281 }, 82282 computed: { 82283 /** 82284 * Get the URL for updating a team member. 82285 */ 82286 urlForUpdating: function urlForUpdating() { 82287 return "/settings/".concat(Spark.teamsPrefix, "/").concat(this.team.id, "/members/").concat(this.updatingTeamMember.id); 82288 }, 82289 /** 82290 * Get the URL for deleting a team member. 82291 */ 82292 urlForDeleting: function urlForDeleting() { 82293 return "/settings/".concat(Spark.teamsPrefix, "/").concat(this.team.id, "/members/").concat(this.deletingTeamMember.id); 82294 } 82295 }, 82296 methods: { 82297 /** 82298 * Get the available team member roles. 82299 */ 82300 getRoles: function getRoles() { 82301 var _this = this; 82302 axios.get("/settings/".concat(Spark.teamsPrefix, "/roles")).then(function (response) { 82303 _this.roles = response.data; 82304 }); 82305 }, 82306 /** 82307 * Edit the given team member. 82308 */ 82309 editTeamMember: function editTeamMember(member) { 82310 this.updatingTeamMember = member; 82311 this.updateTeamMemberForm.role = member.pivot.role; 82312 $('#modal-update-team-member').modal('show'); 82313 }, 82314 /** 82315 * Update the team member. 82316 */ 82317 update: function update() { 82318 Spark.put(this.urlForUpdating, this.updateTeamMemberForm).then(function () { 82319 Bus.$emit('updateTeam'); 82320 $('#modal-update-team-member').modal('hide'); 82321 }); 82322 }, 82323 /** 82324 * Display the approval modal for the deletion of a team member. 82325 */ 82326 approveTeamMemberDelete: function approveTeamMemberDelete(member) { 82327 this.deletingTeamMember = member; 82328 $('#modal-delete-member').modal('show'); 82329 }, 82330 /** 82331 * Delete the given team member. 82332 */ 82333 deleteMember: function deleteMember() { 82334 Spark["delete"](this.urlForDeleting, this.deleteTeamMemberForm).then(function () { 82335 Bus.$emit('updateTeam'); 82336 $('#modal-delete-member').modal('hide'); 82337 }); 82338 }, 82339 /** 82340 * Determine if the current user can edit a team member. 82341 */ 82342 canEditTeamMember: function canEditTeamMember(member) { 82343 return this.user.id === this.team.owner_id && this.user.id !== member.id; 82344 }, 82345 /** 82346 * Determine if the current user can delete a team member. 82347 */ 82348 canDeleteTeamMember: function canDeleteTeamMember(member) { 82349 return this.user.id === this.team.owner_id && this.user.id !== member.id; 82350 }, 82351 /** 82352 * Get the displayable role for the given team member. 82353 */ 82354 teamMemberRole: function teamMemberRole(member) { 82355 if (this.roles.length === 0) { 82356 return ''; 82357 } 82358 if (member.pivot.role === 'owner') { 82359 return 'Owner'; 82360 } 82361 var role = _.find(this.roles, function (role) { 82362 return role.value == member.pivot.role; 82363 }); 82364 if (typeof role !== 'undefined') { 82365 return role.text; 82366 } 82367 } 82368 } 82369}; 82370 82371/***/ }), 82372
82373/***/ "./vendor/laravel/spark-aurelius/resources/assets/js/settings/teams/team-membership.js": 82374/*!*********************************************************************************************!*\ 82375 !*** ./vendor/laravel/spark-aurelius/resources/assets/js/settings/teams/team-membership.js ***! 82376 \*********************************************************************************************/ 82377/*! no static exports found */ 82378/***/ (function(module, exports) { 82379 82380module.exports = { 82381 props: ['user', 'team', 'billableType'], 82382 /** 82383 * The component's data. 82384 */ 82385 data: function data() { 82386 return { 82387 invitations: [] 82388 }; 82389 }, 82390 /** 82391 * The component has been created by Vue. 82392 */ 82393 created: function created() { 82394 var self = this; 82395 this.getInvitations(); 82396 this.$on('updateInvitations', function () { 82397 self.getInvitations(); 82398 }); 82399 }, 82400 methods: { 82401 /** 82402 * Get all of the invitations for the team. 82403 */ 82404 getInvitations: function getInvitations() { 82405 var _this = this; 82406 axios.get("/settings/".concat(Spark.teamsPrefix, "/").concat(this.team.id, "/invitations")).then(function (response) { 82407 _this.invitations = response.data; 82408 }); 82409 } 82410 } 82411}; 82412 82413/***/ }), 82414
82415/***/ "./vendor/laravel/spark-aurelius/resources/assets/js/settings/teams/team-profile.js": 82416/*!******************************************************************************************!*\ 82417 !*** ./vendor/laravel/spark-aurelius/resources/assets/js/settings/teams/team-profile.js ***! 82418 \******************************************************************************************/ 82419/*! no static exports found */ 82420/***/ (function(module, exports) { 82421 82422module.exports = { 82423 props: ['user', 'team'] 82424}; 82425 82426/***/ }), 82427
82428/***/ "./vendor/laravel/spark-aurelius/resources/assets/js/settings/teams/team-settings.js": 82429/*!*******************************************************************************************!*\ 82430 !*** ./vendor/laravel/spark-aurelius/resources/assets/js/settings/teams/team-settings.js ***! 82431 \*******************************************************************************************/ 82432/*! no static exports found */ 82433/***/ (function(module, exports, __webpack_require__) { 82434 82435module.exports = { 82436 props: ['user', 'teamId'], 82437 /** 82438 * Load mixins for the component. 82439 */ 82440 mixins: [__webpack_require__(/*! ./../../mixins/tab-state */ "./vendor/laravel/spark-aurelius/resources/assets/js/mixins/tab-state.js")], 82441 /** 82442 * The component's data. 82443 */ 82444 data: function data() { 82445 return { 82446 billableType: 'team', 82447 team: null 82448 }; 82449 }, 82450 /** 82451 * The component has been created by Vue. 82452 */ 82453 created: function created() { 82454 var self = this; 82455 this.getTeam(); 82456 Bus.$on('updateTeam', function () { 82457 self.getTeam(); 82458 }); 82459 }, 82460 /** 82461 * Prepare the component. 82462 */ 82463 mounted: function mounted() { 82464 this.usePushStateForTabs('.spark-settings-tabs'); 82465 }, 82466 methods: { 82467 /** 82468 * Get the team being managed. 82469 */ 82470 getTeam: function getTeam() { 82471 var _this = this; 82472 axios.get("/settings/".concat(Spark.teamsPrefix, "/json/").concat(this.teamId)).then(function (response) { 82473 _this.team = response.data; 82474 }); 82475 } 82476 } 82477}; 82478 82479/***/ }), 82480
82481/***/ "./vendor/laravel/spark-aurelius/resources/assets/js/settings/teams/update-team-name.js": 82482/*!**********************************************************************************************!*\ 82483 !*** ./vendor/laravel/spark-aurelius/resources/assets/js/settings/teams/update-team-name.js ***! 82484 \**********************************************************************************************/ 82485/*! no static exports found */ 82486/***/ (function(module, exports) { 82487 82488module.exports = { 82489 props: ['user', 'team'], 82490 /** 82491 * The component's data. 82492 */ 82493 data: function data() { 82494 return { 82495 form: new SparkForm({ 82496 name: '' 82497 }) 82498 }; 82499 }, 82500 /** 82501 * Prepare the component. 82502 */ 82503 mounted: function mounted() { 82504 this.form.name = this.team.name; 82505 }, 82506 methods: { 82507 /** 82508 * Update the team name. 82509 */ 82510 update: function update() { 82511 Spark.put("/settings/".concat(Spark.teamsPrefix, "/").concat(this.team.id, "/name"), this.form).then(function () { 82512 Bus.$emit('updateTeam'); 82513 Bus.$emit('updateTeams'); 82514 }); 82515 } 82516 } 82517}; 82518 82519/***/ }), 82520
82521/***/ "./vendor/laravel/spark-aurelius/resources/assets/js/settings/teams/update-team-photo.js": 82522/*!***********************************************************************************************!*\ 82523 !*** ./vendor/laravel/spark-aurelius/resources/assets/js/settings/teams/update-team-photo.js ***! 82524 \***********************************************************************************************/ 82525/*! no static exports found */ 82526/***/ (function(module, exports) { 82527 82528module.exports = { 82529 props: ['user', 'team'], 82530 /** 82531 * The component's data. 82532 */ 82533 data: function data() { 82534 return { 82535 form: new SparkForm({}) 82536 }; 82537 }, 82538 methods: { 82539 /** 82540 * Update the team's photo. 82541 */ 82542 update: function update(e) { 82543 e.preventDefault(); 82544 if (!this.$refs.photo.files.length) { 82545 return; 82546 } 82547 var self = this; 82548 this.form.startProcessing(); 82549 82550 // We need to gather a fresh FormData instance with the profile photo appended to 82551 // the data so we can POST it up to the server. This will allow us to do async 82552 // uploads of the profile photos. We will update the user after this action. 82553 axios.post(this.urlForUpdate, this.gatherFormData()).then(function () { 82554 Bus.$emit('updateTeam'); 82555 Bus.$emit('updateTeams'); 82556 self.form.finishProcessing(); 82557 }, function (error) { 82558 self.form.setErrors(error.response.data.errors); 82559 }); 82560 }, 82561 /** 82562 * Gather the form data for the photo upload. 82563 */ 82564 gatherFormData: function gatherFormData() { 82565 var data = new FormData(); 82566 data.append('photo', this.$refs.photo.files[0]); 82567 return data; 82568 } 82569 }, 82570 computed: { 82571 /** 82572 * Get the URL for updating the team photo. 82573 */ 82574 urlForUpdate: function urlForUpdate() { 82575 return "/settings/".concat(Spark.teamsPrefix, "/").concat(this.team.id, "/photo"); 82576 }, 82577 /** 82578 * Calculate the style attribute for the photo preview. 82579 */ 82580 previewStyle: function previewStyle() { 82581 return "background-image: url(".concat(this.team.photo_url, ")"); 82582 } 82583 } 82584}; 82585 82586/***/ }), 82587
82588/***/ "./vendor/laravel/spark-aurelius/resources/assets/js/spark-bootstrap.js": 82589/*!******************************************************************************!*\ 82590 !*** ./vendor/laravel/spark-aurelius/resources/assets/js/spark-bootstrap.js ***! 82591 \******************************************************************************/ 82592/*! no static exports found */ 82593/***/ (function(module, exports, __webpack_require__) { 82594 82595/* 82596 * Load various JavaScript modules that assist Spark. 82597 */ 82598window.URI = __webpack_require__(/*! urijs */ "./node_modules/urijs/src/URI.js"); 82599window.axios = __webpack_require__(/*! axios */ "./node_modules/axios/index.js"); 82600window._ = __webpack_require__(/*! lodash */ "./node_modules/lodash/lodash.js"); 82601window.moment = __webpack_require__(/*! moment */ "./node_modules/moment/moment.js"); 82602window.Promise = __webpack_require__(/*! promise */ "./node_modules/promise/index.js"); 82603window.Popper = __webpack_require__(/*! popper.js */ "./node_modules/popper.js/dist/esm/popper.js")["default"]; 82604window.__ = function (key, replace) { 82605 var translation = Spark.translations[key] ? Spark.translations[key] : key; 82606 _.forEach(replace, function (value, key) { 82607 translation = translation.replace(':' + key, value); 82608 }); 82609 return translation; 82610}; 82611 82612/* 82613 * Define Moment locales 82614 */ 82615window.moment.defineLocale('en-short', { 82616 parentLocale: 'en', 82617 relativeTime: { 82618 future: "in %s", 82619 past: "%s", 82620 s: "1s", 82621 m: "1m", 82622 mm: "%dm", 82623 h: "1h", 82624 hh: "%dh", 82625 d: "1d", 82626 dd: "%dd", 82627 M: "1 month ago", 82628 MM: "%d months ago", 82629 y: "1y", 82630 yy: "%dy" 82631 } 82632}); 82633window.moment.locale('en'); 82634 82635/* 82636 * Load jQuery and Bootstrap jQuery, used for front-end interaction. 82637 */ 82638if (window.$ === undefined || window.jQuery === undefined) { 82639 window.$ = window.jQuery = __webpack_require__(/*! jquery */ "./node_modules/jquery/dist/jquery.js"); 82640} 82641__webpack_require__(/*! bootstrap */ "./node_modules/bootstrap/dist/js/bootstrap.js"); 82642 82643/** 82644 * Load Vue if this application is using Vue as its framework. 82645 */ 82646if ($('#spark-app').length > 0) { 82647 __webpack_require__(/*! vue-bootstrap */ "./vendor/laravel/spark-aurelius/resources/assets/js/vue-bootstrap.js"); 82648} 82649 82650/** 82651 * We'll load the axios HTTP library which allows us to easily issue requests 82652 * to our Laravel back-end. This library automatically handles sending the 82653 * CSRF token as a header based on the value of the "XSRF" token cookie. 82654 */ 82655window.axios.defaults.headers.common = { 82656 'X-Requested-With': 'XMLHttpRequest', 82657 'X-CSRF-TOKEN': Spark.csrfToken 82658}; 82659 82660/** 82661 * Intercept the incoming responses. 82662 * 82663 * Handle any unexpected HTTP errors and pop up modals, etc. 82664 */ 82665window.axios.interceptors.response.use(function (response) { 82666 return response; 82667}, function (error) { 82668 if (error.response === undefined) { 82669 return Promise.reject(error); 82670 } 82671 switch (error.response.status) { 82672 case 401: 82673 window.axios.get('/logout'); 82674 $('#modal-session-expired').modal('show'); 82675 break; 82676 case 402: 82677 window.location = '/settings#/subscription'; 82678 break; 82679 } 82680 return Promise.reject(error); 82681}); 82682 82683/***/ }), 82684
82685/***/ "./vendor/laravel/spark-aurelius/resources/assets/js/spark.js": 82686/*!********************************************************************!*\ 82687 !*** ./vendor/laravel/spark-aurelius/resources/assets/js/spark.js ***! 82688 \********************************************************************/ 82689/*! no static exports found */ 82690/***/ (function(module, exports) { 82691 82692/** 82693 * Export the root Spark application. 82694 */ 82695module.exports = { 82696 el: '#spark-app', 82697 /** 82698 * Holds the timestamp for the last time we updated the API token. 82699 */ 82700 lastRefreshedApiTokenAt: null, 82701 /** 82702 * The application's data. 82703 */ 82704 data: { 82705 user: Spark.state.user, 82706 teams: Spark.state.teams, 82707 currentTeam: Spark.state.currentTeam, 82708 loadingNotifications: false, 82709 notifications: null, 82710 supportForm: new SparkForm({ 82711 from: '', 82712 subject: '', 82713 message: '' 82714 }) 82715 }, 82716 /** 82717 * The component has been created by Vue. 82718 */ 82719 created: function created() { 82720 var self = this; 82721 if (Spark.userId) { 82722 this.loadDataForAuthenticatedUser(); 82723 } 82724 if (Spark.userId && Spark.usesApi) { 82725 this.refreshApiTokenEveryFewMinutes(); 82726 } 82727 Bus.$on('updateUser', function () { 82728 self.getUser(); 82729 }); 82730 Bus.$on('updateUserData', function () { 82731 self.loadDataForAuthenticatedUser(); 82732 }); 82733 Bus.$on('updateTeams', function () { 82734 self.getTeams(); 82735 }); 82736 Bus.$on('showNotifications', function () { 82737 $('#modal-notifications').modal('show'); 82738 self.markNotificationsAsRead(); 82739 }); 82740 Bus.$on('showSupportForm', function () { 82741 if (self.user) { 82742 self.supportForm.from = self.user.email; 82743 } 82744 $('#modal-support').modal('show'); 82745 setTimeout(function () { 82746 $('#support-subject').focus(); 82747 }, 500); 82748 }); 82749 }, 82750 /** 82751 * Prepare the application. 82752 */ 82753 mounted: function mounted() { 82754 this.whenReady(); 82755 }, 82756 methods: { 82757 /** 82758 * Finish bootstrapping the application. 82759 */ 82760 whenReady: function whenReady() { 82761 // 82762 }, 82763 /** 82764 * Load the data for an authenticated user. 82765 */ 82766 loadDataForAuthenticatedUser: function loadDataForAuthenticatedUser() { 82767 this.getNotifications(); 82768 }, 82769 /** 82770 * Refresh the current API token every few minutes. 82771 */ 82772 refreshApiTokenEveryFewMinutes: function refreshApiTokenEveryFewMinutes() { 82773 var _this = this; 82774 this.lastRefreshedApiTokenAt = moment(); 82775 setInterval(function () { 82776 _this.refreshApiToken(); 82777 }, 240000); 82778 setInterval(function () { 82779 if (moment().diff(_this.lastRefreshedApiTokenAt, 'minutes') >= 5) { 82780 _this.refreshApiToken(); 82781 } 82782 }, 5000); 82783 }, 82784 /** 82785 * Refresh the current API token. 82786 */ 82787 refreshApiToken: function refreshApiToken() { 82788 this.lastRefreshedApiTokenAt = moment(); 82789 axios.put('/spark/token'); 82790 }, 82791 /* 82792 * Get the current user of the application. 82793 */ 82794 getUser: function getUser() { 82795 var _this2 = this; 82796 axios.get('/user/current').then(function (response) { 82797 _this2.$set(_this2, 'user', response.data); 82798 }); 82799 }, 82800 /** 82801 * Get the current team list. 82802 */ 82803 getTeams: function getTeams() { 82804 var _this3 = this; 82805 axios.get('/settings/' + Spark.teamsPrefix).then(function (response) { 82806 _this3.$set(_this3, 'teams', response.data); 82807 }); 82808 }, 82809 /** 82810 * Get the current team. 82811 */ 82812 getCurrentTeam: function getCurrentTeam() { 82813 var _this4 = this; 82814 axios.get("/settings/".concat(Spark.teamsPrefix, "/current")).then(function (response) { 82815 _this4.$set(_this4, 'currentTeam', response.data); 82816 })["catch"](function (response) { 82817 // 82818 }); 82819 }, 82820 /** 82821 * Get the application notifications. 82822 */ 82823 getNotifications: function getNotifications() { 82824 var _this5 = this; 82825 this.loadingNotifications = true; 82826 axios.get('/notifications/recent').then(function (response) { 82827 _this5.$set(_this5, 'notifications', response.data); 82828 _this5.loadingNotifications = false; 82829 }); 82830 }, 82831 /** 82832 * Mark the current notifications as read. 82833 */ 82834 markNotificationsAsRead: function markNotificationsAsRead() { 82835 if (!this.hasUnreadNotifications) { 82836 return; 82837 } 82838 axios.put('/notifications/read', { 82839 notifications: _.map(this.notifications.notifications, 'id') 82840 }); 82841 _.each(this.notifications.notifications, function (notification) { 82842 notification.read = 1; 82843 }); 82844 }, 82845 /** 82846 * Send a customer support request. 82847 */
82848 sendSupportRequest: function sendSupportRequest() { 82849 var _this6 = this; 82850 Spark.post('/support/email', this.supportForm).then(function () { 82851 $('#modal-support').modal('hide'); 82852 _this6.showSupportRequestSuccessMessage(); 82853 _this6.supportForm.subject = ''; 82854 _this6.supportForm.message = ''; 82855 }); 82856 }, 82857 /** 82858 * Show an alert informing the user their support request was sent. 82859 */ 82860 showSupportRequestSuccessMessage: function showSupportRequestSuccessMessage() { 82861 Swal.fire({ 82862 title: __('Got It!'), 82863 text: __('We have received your message and will respond soon!'), 82864 icon: 'success', 82865 showConfirmButton: false, 82866 timer: 2000 82867 }); 82868 } 82869 }, 82870 computed: { 82871 /** 82872 * The number of unread announcements. 82873 */ 82874 unreadAnnouncementsCount: function unreadAnnouncementsCount() { 82875 var _this7 = this; 82876 if (this.notifications && this.user) { 82877 if (this.notifications.announcements.length && !this.user.last_read_announcements_at) { 82878 return this.notifications.announcements.length; 82879 } 82880 return _.filter(this.notifications.announcements, function (announcement) { 82881 return moment.utc(_this7.user.last_read_announcements_at).isBefore(moment.utc(announcement.created_at)); 82882 }).length; 82883 } 82884 return 0; 82885 }, 82886 /** 82887 * The number of unread notifications. 82888 */ 82889 unreadNotificationsCount: function unreadNotificationsCount() { 82890 if (this.notifications) { 82891 return _.filter(this.notifications.notifications, function (notification) { 82892 return !notification.read; 82893 }).length; 82894 } 82895 return 0; 82896 }, 82897 /** 82898 * Determine if the user has any unread notifications. 82899 */ 82900 hasUnreadAnnouncements: function hasUnreadAnnouncements() { 82901 return this.unreadAnnouncementsCount > 0; 82902 }, 82903 /** 82904 * Determine if the user has any unread notifications. 82905 */ 82906 hasUnreadNotifications: function hasUnreadNotifications() { 82907 return this.unreadNotificationsCount > 0; 82908 } 82909 } 82910}; 82911 82912/***/ }), 82913
82914/***/ "./vendor/laravel/spark-aurelius/resources/assets/js/vue-bootstrap.js": 82915/*!****************************************************************************!*\ 82916 !*** ./vendor/laravel/spark-aurelius/resources/assets/js/vue-bootstrap.js ***! 82917 \****************************************************************************/ 82918/*! no static exports found */ 82919/***/ (function(module, exports, __webpack_require__) { 82920 82921/* 82922 * Load Vue, the JavaScript framework used by Spark. 82923 */ 82924if (window.Vue === undefined) { 82925 window.Vue = __webpack_require__(/*! vue */ "./node_modules/vue/dist/vue.js"); 82926 window.Bus = new Vue(); 82927} 82928 82929/** 82930 * Load Vue Global Mixin. 82931 */ 82932Vue.mixin(__webpack_require__(/*! ./mixin */ "./vendor/laravel/spark-aurelius/resources/assets/js/mixin.js")); 82933 82934/** 82935 * Define the Vue filters. 82936 */ 82937__webpack_require__(/*! ./filters */ "./vendor/laravel/spark-aurelius/resources/assets/js/filters.js"); 82938 82939/** 82940 * Load the Spark form utilities. 82941 */ 82942__webpack_require__(/*! ./forms/bootstrap */ "./vendor/laravel/spark-aurelius/resources/assets/js/forms/bootstrap.js"); 82943 82944/***/ })
82944, 82945 82946/***/ 0: 82947/*!*******************************************************************************************!*\ 82948 !*** multi ./resources/js/app.js ./resources/sass/app.scss ./resources/sass/app-rtl.scss ***! 82949 \*******************************************************************************************/ 82950/*! no static exports found */ 82951/***/ (function(module, exports, __webpack_require__) { 82952 82953__webpack_require__(/*! /home/forge/app.sgwidget.com/resources/js/app.js */"./resources/js/app.js"); 82954__webpack_require__(/*! /home/forge/app.sgwidget.com/resources/sass/app.scss */"./resources/sass/app.scss"); 82955module.exports = __webpack_require__(/*! /home/forge/app.sgwidget.com/resources/sass/app-rtl.scss */"./resources/sass/app-rtl.scss"); 82956 82957 82958/***/ }) 82959 82960/******/ });
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.